<?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>150479</bug_id>
          
          <creation_ts>2015-10-22 16:17:15 -0700</creation_ts>
          <short_desc>Expose public APIs for content filters</short_desc>
          <delta_ts>2017-03-12 20:37:28 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=169536</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Nicholson">thebnich</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>matrixfox</cc>
    
    <cc>mitz</cc>
    
    <cc>sleroux</cc>
    
    <cc>stefan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1135893</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Nicholson">thebnich</who>
    <bug_when>2015-10-22 16:17:15 -0700</bug_when>
    <thetext>On Firefox for iOS, we&apos;re interested in integrating our tracking protection lists into WKWebView. Exposing the WKUserContentController, WKUserContentExtensionStore, and WKUserContentFilter private APIs was enough to get this working, so it would be great if these could be made public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136728</commentid>
    <comment_count>1</comment_count>
      <attachid>264108</attachid>
    <who name="Brian Nicholson">thebnich</who>
    <bug_when>2015-10-26 17:47:43 -0700</bug_when>
    <thetext>Created attachment 264108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136739</commentid>
    <comment_count>2</comment_count>
    <who name="Brian Nicholson">thebnich</who>
    <bug_when>2015-10-26 17:58:18 -0700</bug_when>
    <thetext>Here&apos;s a first attempt that simply makes the necessary APIs for content filters (WKUserContentFilter, WKUserContentExtensionStore, and the content filter methods on WKUserContentController) public.

While this builds and launches fine in Safari using the instructions at https://www.webkit.org/blog/3457/building-webkit-for-ios-simulator/, I&apos;m not sure if/how we can test these changes in a separate app.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136884</commentid>
    <comment_count>3</comment_count>
      <attachid>264149</attachid>
    <who name="Brian Nicholson">thebnich</who>
    <bug_when>2015-10-27 12:12:37 -0700</bug_when>
    <thetext>Created attachment 264149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136887</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 12:15:58 -0700</bug_when>
    <thetext>Attachment 264149 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm:116:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/ContentExtensionTester/main.m:49:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 13 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>1136929</commentid>
    <comment_count>5</comment_count>
      <attachid>264149</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-27 14:35:27 -0700</bug_when>
    <thetext>Comment on attachment 264149
Patch

Hi Brian,

Public APIs need to be discussed internally and go through API review. The private API you are exposing was never designed to be public, we may not want to expose Content Blockers with that particular API.

Did you create radar for your feature request?
The first thing will be to discuss internally with the team at Apple to know if anyone objects a public API for Content Blockers. If there are not objection, we can start discussing an API.

The reason exposing API is a PITA is the long term cost of exposing something new. Once we expose an API, we restrict the freedom we have to change the implementation. Sometimes it has hurt us badly, which is why we try to avoid mistakes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136957</commentid>
    <comment_count>6</comment_count>
    <who name="Brian Nicholson">thebnich</who>
    <bug_when>2015-10-27 15:30:39 -0700</bug_when>
    <thetext>Thanks for the response! I&apos;ve filed rdar://23284825. Hoping this starts some discussion since AFAIK, there are simply no options for filtering individual requests using WKWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137773</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-29 20:44:26 -0700</bug_when>
    <thetext>*** Bug 148632 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183324</commentid>
    <comment_count>8</comment_count>
    <who name="Joel">matrixfox</who>
    <bug_when>2016-04-12 19:47:21 -0700</bug_when>
    <thetext>I totally agree, this needs further discussion. When blocking analytic trackers, it would cause applications to act funny. Some result in a crash. Future collaboration is gonna to take some work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285111</commentid>
    <comment_count>9</comment_count>
      <attachid>303869</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-08 17:08:25 -0800</bug_when>
    <thetext>Created attachment 303869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285116</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-08 17:11:49 -0800</bug_when>
    <thetext>Attachment 303869 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:125:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:138:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 28 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>1285117</commentid>
    <comment_count>11</comment_count>
      <attachid>303869</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-08 17:15:59 -0800</bug_when>
    <thetext>Comment on attachment 303869
Patch

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

Will look more later

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKUserContentExtension.h:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

Correct (C) date throughout would be great.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKUserContentExtension.h:31
&gt; +WK_CLASS_AVAILABLE(macosx(10.11), ios(9.0))
&gt; +@interface _WKUserContentFilter : NSObject

Why is this header called WKUserContentExtension.h but declares _WKUserContentFilter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285127</commentid>
    <comment_count>12</comment_count>
      <attachid>303869</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-08 17:25:50 -0800</bug_when>
    <thetext>Comment on attachment 303869
Patch

You are seeing the results of &quot;svn cp&quot; in the patch.  It shows green of the unmodified file it was copied from, then below it has the additional changes done on that file.  The copyright dates of 2015 are because I&apos;m copying files originally written in 2015, then below it shows I update the copyright date.  WKUserContentExtension.h.  WKUserContentExtension.h is based on _WKUserContentFilter.h, then modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285569</commentid>
    <comment_count>13</comment_count>
      <attachid>303869</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-03-09 14:01:07 -0800</bug_when>
    <thetext>Comment on attachment 303869
Patch

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

&gt; Source/WebKit2/ChangeLog:10
&gt; +        This takes _WKUserContentExtensionStore and _WKUserContentFilter and turns them into the consistently-named public API
&gt; +        WKUserContentExtensionStore and WKUserContentExtension respectively with the same design and functionaly of the original SPI.
&gt; +        We also added public functions to WKUserContentController corresponding to existing private functions.

What meaning does the word &quot;user&quot; have in this API? Maybe it should just be WKContentExtensionStore / WKContentExtension. (This would imply removing &quot;user&quot; in lots of other places.)

I guess maybe you chose to say &quot;user&quot; because of WKUserContentController. Even though it&apos;s useful for this controller to distinguish between &quot;user content&quot; vs &quot;web content&quot;, I think the value fades as we propagate the word &quot;user&quot; to other classes, which do not have a user vs web dichotomy. In the case of a content extension, there&apos;s no such thing as a content extension provided by the web author.

&gt; Source/WebKit2/ChangeLog:15
&gt; +        The peak-memory-reducing optimization of having NS_RELEASES_ARGUMENT in _compileContentExtensionForIdentifier is kept for Safari,
&gt; +        but the public API doesn&apos;t need such an optimization.  The public compileContentExtensionForIdentifier will not deallocate the input

Why doesn&apos;t the public API need this optimization?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:45
&gt; +        LookupFailed = 6, // Mirrors value of WKErrorContentExtensionStoreLookupFailed

Is this because we convert from our internal enum to the public API by static_cast? I think we should do the conversion with a switch statement instead, and not worry about making the integers equal. Speed of error reporting is not a priority.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKError.h:47
&gt; + @constant WKErrorContentExtensionStoreLookupFailed    Indicates that looking up a WKUserContentExtension failed.
&gt; + @constant WKErrorContentExtensionStoreVersionMismatch Indicates that looking up a WKUserContentExtension found an extension with an incompatible binary version.
&gt; + @constant WKErrorContentExtensionStoreCompileFailed   Indicates that compiling a WKUserContentExtension failed.
&gt; + @constant WKErrorContentExtensionStoreRemoveFailed    Indicates that removing a WKUserContentExtension failed.

These should say &quot;UserContent&quot; instead of just &quot;Content&quot;.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKUserContentExtensionStore.mm:60
&gt; +- (void)_compileContentExtensionForIdentifier:(NSString *)identifier encodedContentExtension:(NSString *)encodedContentExtension completionHandler:(void (^)(WKUserContentExtension *, NSError *))completionHandler releasesArgument:(BOOL)releasesArgument

I think a simpler way to make this distinction is for the internal callee always to release its argument, and for the caller that does not want releasing behavior to retain its argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285595</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-09 14:24:25 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Source/WebKit2/ChangeLog:15
&gt; &gt; +        The peak-memory-reducing optimization of having NS_RELEASES_ARGUMENT in _compileContentExtensionForIdentifier is kept for Safari,
&gt; &gt; +        but the public API doesn&apos;t need such an optimization.  The public compileContentExtensionForIdentifier will not deallocate the input
&gt; 
&gt; Why doesn&apos;t the public API need this optimization?
NS_RELEASES_ARGUMENT is incredibly rarely used, and a developer&apos;s app would not have the same tight memory restrictions that our compiler daemon has, so keeping a ~6MB NSString alive during compiling, which uses ~150MB of memory is no big deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285671</commentid>
    <comment_count>15</comment_count>
      <attachid>304008</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-09 16:30:54 -0800</bug_when>
    <thetext>Created attachment 304008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285673</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-09 16:32:29 -0800</bug_when>
    <thetext>Attachment 304008 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:192:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:200:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:207:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:213:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:224:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:409:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:414:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.h:81:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:125:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:138:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 10 in 45 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>1285674</commentid>
    <comment_count>17</comment_count>
      <attachid>304008</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-09 16:32:45 -0800</bug_when>
    <thetext>Comment on attachment 304008
Patch

If this is just the patch that Geoff already looked up plus the rename, then rubberstamp=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285675</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-03-09 16:34:20 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 304008 [details]
&gt; Patch
&gt; 
&gt; If this is just the patch that Geoff already looked up plus the rename, then
&gt; rubberstamp=me

Oh - And, it has to compile, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285683</commentid>
    <comment_count>19</comment_count>
      <attachid>304010</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-09 16:41:32 -0800</bug_when>
    <thetext>Created attachment 304010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285691</commentid>
    <comment_count>20</comment_count>
      <attachid>304011</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-09 16:51:10 -0800</bug_when>
    <thetext>Created attachment 304011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285695</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-09 16:53:41 -0800</bug_when>
    <thetext>Attachment 304011 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:192:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:200:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:207:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:213:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:224:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:409:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.cpp:414:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentExtensionStore.h:81:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:125:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WKUserContentExtensionStore.mm:138:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 10 in 45 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>1285713</commentid>
    <comment_count>22</comment_count>
      <attachid>304016</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-09 17:47:32 -0800</bug_when>
    <thetext>Created attachment 304016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285714</commentid>
    <comment_count>23</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-03-09 17:49:12 -0800</bug_when>
    <thetext>http://trac.webkit.org/r213696</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264108</attachid>
            <date>2015-10-26 17:47:43 -0700</date>
            <delta_ts>2015-10-27 12:12:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20151026174653.patch</filename>
            <type>text/plain</type>
            <size>94766</size>
            <attacher name="Brian Nicholson">thebnich</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDE1M2I0YjQ2YzM0M2Ew
MDNhYTBkYmYyZmRjN2UwOTJiYTdlZjY1NS4uZjkyNWRmOTdmMjBlNjBiZjkxZGNiMzNiY2EzMzAx
ZTQ1ODgxYzk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTEwLTI2ICBCcmlh
biBOaWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPgorCisgICAgICAgIE1ha2UgY29u
dGVudCBmaWx0ZXJpbmcgQVBJcyBwdWJsaWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06CisgICAgICAg
IChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgYWRkVXNlckNvbnRlbnRGaWx0ZXI6XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRl
bnRDb250cm9sbGVyIHJlbW92ZVVzZXJDb250ZW50RmlsdGVyOl0pOgorICAgICAgICAoLVtXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciByZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnNdKToKKyAgICAg
ICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlVXNlckNv
bnRlbnRGaWx0ZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9s
bGVyIF9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnNdKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVySW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
OiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVByaXZhdGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIw
MTUtMTAtMjMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgV0tWaWV3IGJlaW5nIGluc2lkZSBXS1dlYlZpZXcgbGVhZHMgdG8gd2VpcmQgQVBJIGlzc3Vl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbSBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KaW5kZXggY2IyNGQxNTg5
NzAyYjczMzVlMjYyOTM4Njg4NDhmN2UxNjQ2NDc4Ny4uYThlMDJiZjgzYTliMjgyZGZhYjA0YTQw
MTcxMTVjYjA1OWZmNDY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29h
L0FQSU9iamVjdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0
Lm1tCkBAIC01MCw2ICs1MCw4IEBACiAjaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIldLU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tVc2VyU2NyaXB0SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vz
c1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dl
YlByb2Nlc3NQbHVnSW5GcmFtZUludGVybmFsLmgiCkBAIC02NSw4ICs2Nyw2IEBACiAjaW1wb3J0
ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmgi
Ci0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Zpc2l0ZWRM
aW5rU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCA8b2JqYy9vYmpjLWF1dG8uaD4KIApAQCAtMjAw
LDExICsyMDAsMTEgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90IHNpemUsIFR5cGUg
dHlwZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFR5cGU6OlVzZXJDb250ZW50RXh0ZW5z
aW9uOgotICAgICAgICB3cmFwcGVyID0gW19XS1VzZXJDb250ZW50RmlsdGVyIGFsbG9jXTsKKyAg
ICAgICAgd3JhcHBlciA9IFtXS1VzZXJDb250ZW50RmlsdGVyIGFsbG9jXTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Ci0gICAgICAg
IHdyYXBwZXIgPSBbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxvY107CisgICAgICAg
IHdyYXBwZXIgPSBbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIFR5cGU6OlVzZXJTY3JpcHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVy
LmgKaW5kZXggNmI5NjdlZTI3NTY1MmExYTMzMjFhMWYxY2Q2MjY2OGM5N2YzNTJkMi4uMjY3YTQy
ODNiNTRhYjZkMTY3YWE5OTZmODMwNDVmZTMwZGI2YmFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIuaApAQCAtMjMsNyArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1VzZXJDb250ZW50RmlsdGVyLmg+CiAKICNpZiBXS19BUElfRU5BQkxFRAogCkBAIC03MCw2
ICs3MCwyMCBAQCBXS19DTEFTU19BVkFJTEFCTEUoMTBfMTAsIDhfMCkKICAqLwogLSAodm9pZCly
ZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3RyaW5nICopbmFtZTsKIAorLyoh
IEBhYnN0cmFjdCBBZGRzIGEgdXNlciBjb250ZW50IGZpbHRlci4KKyBAcGFyYW0gdXNlckNvbnRl
bnRGaWx0ZXIgVGhlIHVzZXIgY29udGVudCBmaWx0ZXIgdG8gYWRkLgorICovCistICh2b2lkKWFk
ZFVzZXJDb250ZW50RmlsdGVyOihXS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRGaWx0
ZXIgV0tfQVZBSUxBQkxFKDEwXzExLCA5XzApOworCisvKiEgQGFic3RyYWN0IFJlbW92ZXMgYSB1
c2VyIGNvbnRlbnQgZmlsdGVyLgorIEBwYXJhbSB1c2VyQ29udGVudEZpbHRlck5hbWUgVGhlIG5h
bWUgb2YgdGhlIHVzZXIgY29udGVudCBmaWx0ZXIgdG8gcmVtb3ZlLgorICovCistICh2b2lkKXJl
bW92ZVVzZXJDb250ZW50RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZSBX
S19BVkFJTEFCTEUoMTBfMTEsIDlfMCk7CisKKy8qISBAYWJzdHJhY3QgUmVtb3ZlcyBhbGwgYXNz
b2NpYXRlZCB1c2VyIGNvbnRlbnQgZmlsdGVycy4KKyAqLworLSAodm9pZClyZW1vdmVBbGxVc2Vy
Q29udGVudEZpbHRlcnMgV0tfQVZBSUxBQkxFKDEwXzExLCA5XzApOworCiBAZW5kCiAKIFdLX0FT
U1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0KaW5kZXggOGRiNWZkZDA2
OGNmNjFjNzIzZjE5NTBlNjMwOTY4ZjM4NmRlOWQyZi4uNDVlMWI5YmYxMWZjYjc1MDI3MjBkZWU2
MWJiYjNjNDE3NDc1NzJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCkBAIC0zMywxMSAr
MzMsMTEgQEAKICNpbXBvcnQgIldLTlNBcnJheS5oIgogI2ltcG9ydCAiV0tTY3JpcHRNZXNzYWdl
SGFuZGxlci5oIgogI2ltcG9ydCAiV0tTY3JpcHRNZXNzYWdlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tVc2VyU2NyaXB0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJTY3Jp
cHRNZXNzYWdlSGFuZGxlci5oIgogI2ltcG9ydCAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKICNpbXBvcnQg
PFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmln
aW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgpAQCAt
NzYsNiArNzYsMjcgQEAKICAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFs
bFVzZXJTY3JpcHRzKCk7CiB9CiAKKy0gKHZvaWQpYWRkVXNlckNvbnRlbnRGaWx0ZXI6KFdLVXNl
ckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEZpbHRlcgoreworI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29u
dGVudEV4dGVuc2lvbigqdXNlckNvbnRlbnRGaWx0ZXItPl91c2VyQ29udGVudEV4dGVuc2lvbik7
CisjZW5kaWYKK30KKworLSAodm9pZClyZW1vdmVVc2VyQ29udGVudEZpbHRlcjooTlNTdHJpbmcg
Kil1c2VyQ29udGVudEZpbHRlck5hbWUKK3sKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNlckNvbnRlbnRFeHRl
bnNpb24odXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKKyNlbmRpZgorfQorCistICh2b2lkKXJlbW92
ZUFsbFVzZXJDb250ZW50RmlsdGVycworeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyQ29udGVudEV4
dGVuc2lvbnMoKTsKKyNlbmRpZgorfQorCiBjbGFzcyBTY3JpcHRNZXNzYWdlSGFuZGxlckRlbGVn
YXRlIGZpbmFsIDogcHVibGljIFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgU2NyaXB0TWVzc2FnZUhhbmRsZXJEZWxlZ2F0ZShXS1VzZXJDb250
ZW50Q29udHJvbGxlciAqY29udHJvbGxlciwgaWQgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+IGhh
bmRsZXIsIE5TU3RyaW5nICpuYW1lKQpAQCAtMTIzLDMwICsxNDQsNSBAQCBwcml2YXRlOgogCiBA
ZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBXS1VzZXJDb250ZW50Q29udHJvbGxlciAoV0tQcml2YXRl
KQotCi0tICh2b2lkKV9hZGRVc2VyQ29udGVudEZpbHRlcjooX1dLVXNlckNvbnRlbnRGaWx0ZXIg
Kil1c2VyQ29udGVudEZpbHRlcgotewotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0g
ICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29udGVudEV4dGVuc2lvbigq
dXNlckNvbnRlbnRGaWx0ZXItPl91c2VyQ29udGVudEV4dGVuc2lvbik7Ci0jZW5kaWYKLX0KLQot
LSAodm9pZClfcmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXI6KE5TU3RyaW5nICopdXNlckNvbnRlbnRG
aWx0ZXJOYW1lCi17Ci0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBfdXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHVzZXJDb250
ZW50RmlsdGVyTmFtZSk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfcmVtb3ZlQWxsVXNlckNvbnRl
bnRGaWx0ZXJzCi17Ci0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBfdXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwot
I2VuZGlmCi19Ci0KLUBlbmQKLQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxl
ckludGVybmFsLmgKaW5kZXggYjc4ZTE5YzA3MDc2OTgwZDUyMDg0MDRkYjljZDY2YzAyYmUwYjRl
Ni4uYWJlNDZjZmM5MDExODA0OTRjYWU0ZjFlN2MzZjRkMDgyYzFlNWQ5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxl
ckludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlckludGVybmFsLmgKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRDb250cm9sbGVyLmgi
CiAKICNpZiBXS19BUElfRU5BQkxFRAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc5ODUxZWQ2NmU3MDFhNzFjNGM1
ZGU4NzE5NmYxYmViZjhmNTBiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRl
bnRDb250cm9sbGVyUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlci5oPgotCi0j
aWYgV0tfQVBJX0VOQUJMRUQKLQotQGNsYXNzIF9XS1VzZXJDb250ZW50RmlsdGVyOwotCi1AaW50
ZXJmYWNlIFdLVXNlckNvbnRlbnRDb250cm9sbGVyIChXS1ByaXZhdGUpCi0KLS0gKHZvaWQpX2Fk
ZFVzZXJDb250ZW50RmlsdGVyOihfV0tVc2VyQ29udGVudEZpbHRlciAqKXVzZXJDb250ZW50Rmls
dGVyIFdLX0FWQUlMQUJMRSgxMF8xMSwgOV8wKTsKLS0gKHZvaWQpX3JlbW92ZVVzZXJDb250ZW50
RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZSBXS19BVkFJTEFCTEUoMTBf
MTEsIDlfMCk7Ci0tICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMgV0tfQVZBSUxB
QkxFKDEwXzExLCA5XzApOwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTdiZGVlZmI3MWU1ODE5OTI1Y2M5YWUwYjAwNDA1YmNmMDU3
NGNiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFC
TEVECisKK0BjbGFzcyBXS1VzZXJDb250ZW50RmlsdGVyOworCisvKiEgQSBXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgaXMgYSBzdG9yZSBvZiBjb250ZW50IGZpbHRlcnMgdGhhdCBjYW4KKyBi
bG9jayBvciBoaWRlIGNvbnRlbnQgb24gd2ViIHBhZ2VzLgorICovCitXS19DTEFTU19BVkFJTEFC
TEUoMTBfMTEsIDlfMCkKK0BpbnRlcmZhY2UgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDog
TlNPYmplY3QKKworLyogQGFic3RyYWN0IFJldHVybnMgdGhlIGRlZmF1bHQgY29udGVudCBleHRl
bnNpb24gc3RvcmUuICovCisrIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlOworCisvKiEgQGFi
c3RyYWN0IENvbXBpbGVzIGEgY29udGVudCBmaWx0ZXIgdGhhdCBjYW4gYmUgYWRkZWQgdG8gYSBA
bGluayBXS1VzZXJDb250ZW50Q29udHJvbGxlciBAL2xpbmsuCisgQHBhcmFtIGlkZW50aWZpZXIg
VGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGNvbnRlbnQgZmlsdGVyLgorIEBwYXJhbSBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbiBUaGUgY29udGVudCBmaWx0ZXIgZGF0YS4KKyBAcGFyYW0g
Y29tcGxldGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugd2hlbiB0aGUgY29udGVudCBmaWx0
ZXIgaGFzIGJlZW4gY29tcGlsZWQuCisgKi8KKy0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246KE5TU3RyaW5nICopIE5TX1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS1VzZXJDb250ZW50RmlsdGVyICos
IE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CisKKy8qISBAYWJzdHJhY3QgRmV0Y2hlcyBh
IGNvbnRlbnQgZmlsdGVyIGZyb20gdGhlIHN0b3JlLgorIEBwYXJhbSBpZGVudGlmaWVyIFRoZSBp
ZGVudGlmaWVyIG9mIHRoZSBjb21waWxlZCBjb250ZW50IGZpbHRlci4KKyBAcGFyYW0gY29tcGxl
dGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugd2hlbiB0aGUgY29udGVudCBmaWx0ZXIgaGFz
IGJlZW4gZmV0Y2hlZC4KKyAqLworLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShXS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CisK
Ky8qISBAYWJzdHJhY3QgUmVtb3ZlcyBhIGNvbnRlbnQgZmlsdGVyIGZyb20gdGhlIHN0b3JlLgor
IEBwYXJhbSBpZGVudGlmaWVyIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb21waWxlZCBjb250ZW50
IGZpbHRlci4KKyBAcGFyYW0gY29tcGxldGlvbkhhbmRsZXIgQSBibG9jayB0byBpbnZva2Ugd2hl
biB0aGUgY29udGVudCBmaWx0ZXIgaGFzIGJlZW4gcmVtb3ZlZC4KKyAqLworLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwor
CitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNGJjMThlYTA4MDdlYTA4ODA2YjQ3MmI3ZTJkMDhkMzU3
ZDhiOWRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KQEAgLTAsMCArMSwxMjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUludGVybmFsLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJX
S0Vycm9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5o
IgorI2ltcG9ydCA8c3RyaW5nPgorCitAaW1wbGVtZW50YXRpb24gV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlCisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworCisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCisrIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlCit7CisgICAgcmV0dXJuIFdl
YktpdDo6d3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9y
ZSgpKTsKK30KKworLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcg
KillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAg
YXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAg
U3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRFeHRlbnNpb24pOworICAgIFtlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiByZWxlYXNlXTsKKyAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsK
KworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lv
bihpZGVudGlmaWVyLCBXVEY6Om1vdmUoanNvbiksIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9y
KSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKFdLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNo
b3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGls
YXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CisgICAgICAgICAg
ICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiQ29udGVudEV4dGVu
c2lvbnNEb21haW4iIGNvZGU6ZXJyb3IudmFsdWUoKSB1c2VySW5mbzp1c2VySW5mb10pOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKFdLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgp
OworICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5n
ZXQoKSksIG5pbCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lv
bkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5k
bGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29w
eV0pOworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRl
bnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAg
aWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisKKyAgICAgICAg
ICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3Nh
Z2UoKS5jX3N0cigpXX07CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJy
b3JXaXRoRG9tYWluOkAiQ29udGVudEV4dGVuc2lvbnNEb21haW4iIGNvZGU6ZXJyb3IudmFsdWUo
KSB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdLVXNlckNvbnRlbnRGaWx0ZXIg
KiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6
d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7CisgICAgfSk7Cit9CisKKy0g
KHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVy
IGNvcHldKTsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50
RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsK
KyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9p
ZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworCisgICAgICAgICAgICBhdXRvIHVzZXJJ
bmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJFeHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCld
fTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIoW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiQ29u
dGVudEV4dGVuc2lvbnNEb21haW4iIGNvZGU6ZXJyb3IudmFsdWUoKSB1c2VySW5mbzp1c2VySW5m
b10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByYXdI
YW5kbGVyID0gKHZvaWQgKF4pKE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3
SGFuZGxlcihuaWwpOworICAgIH0pOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9j
b2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICBy
ZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKKworLy8gRm9y
IHRlc3Rpbmcgb25seS4KKworLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMKK3sK
KyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxDb250
ZW50RXh0ZW5zaW9ucygpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAxNWIyYTgyZjZkYWYwMmI3NWRmNzMxYmMxODQ4MGNiODhhOTYzZGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUludGVybmFsLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgIldLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCIKKworI2lmIFdLX0FQSV9F
TkFCTEVECisKKyNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKyNpbXBv
cnQgIldLT2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbmxpbmUgV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgc3RvcmUpCit7CisgICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpb
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOworICAgIHJldHVybiAoV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlICopc3RvcmUud3JhcHBlcigpOworfQorCit9CisKK0BpbnRl
cmZhY2UgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICgpIDxXS09iamVjdD4geworQHBhY2th
Z2UKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
PiBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKK30KK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQ
SV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNmYzRkM2MzZjE2N2NiN2VjMmMxN2YyZDIyMjU2OTZjODZlMjkxZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgorCisjaWYg
V0tfQVBJX0VOQUJMRUQKKworQGludGVyZmFjZSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
KFdLUHJpdmF0ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKy0gKHZvaWQpX3JlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zOworCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RmlsdGVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRGaWx0ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZGM0ZjMxNjEwNWQ0MWZiYzJjNzkyOTllYjc5YzMyZmJmYTRhN2NjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50
RmlsdGVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9X
S0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKy8qISBBIFdLVXNlckNvbnRl
bnRGaWx0ZXIgYmxvY2tzIG9yIGhpZGVzIGNvbnRlbnQgb24gd2ViIHBhZ2VzLgorIEBoZWxwcyBD
YW4gYmUgY29tcGlsZWQgYnkgYSBAbGluayBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgQC9s
aW5rLgorICovCitXS19DTEFTU19BVkFJTEFCTEUoMTBfMTEsIDlfMCkKK0BpbnRlcmZhY2UgV0tV
c2VyQ29udGVudEZpbHRlciA6IE5TT2JqZWN0CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9F
TkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
VXNlckNvbnRlbnRGaWx0ZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRGaWx0ZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA4ZTRkNDVkNDMxZWIxNjFmMzMx
NGMwYTZlMmJlYTE5MjE4ZmVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEZpbHRlci5tbQpAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1VzZXJDb250ZW50
RmlsdGVySW50ZXJuYWwuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbmNsdWRlICJXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9y
Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCitAaW1wbGVtZW50YXRpb24gV0tVc2VyQ29udGVudEZp
bHRlcgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5V
c2VyQ29udGVudEV4dGVuc2lvbigpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJh
Z21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmpl
Y3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvbjsKK30K
KworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRGaWx0ZXJJ
bnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNzMwODk3ZDgxOTNlZWRiNTUxZDU0MmI0ZDQyNzlhZGI0
MDYyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJXS1VzZXJDb250ZW50RmlsdGVyLmgiCisKKyNpZiBXS19BUElfRU5B
QkxFRAorCisjaW1wb3J0ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV0tP
YmplY3QuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2lubGluZSBXS1VzZXJDb250ZW50Rmls
dGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250ZW50RXh0ZW5z
aW9uKQoreworICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpIGlzS2lu
ZE9mQ2xhc3M6W1dLVXNlckNvbnRlbnRGaWx0ZXIgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS1Vz
ZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOworfQorCit9
CisKK0BpbnRlcmZhY2UgV0tVc2VyQ29udGVudEZpbHRlciAoKSA8V0tPYmplY3Q+IHsKK0BwYWNr
YWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IF91
c2VyQ29udGVudEV4dGVuc2lvbjsKK30KK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZTY4NTM3NTBjMmE0YjIyZjQ4YTBhMzllYjdiNWZiMmQ0ZTMwZDNmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdC9XS0Zv
dW5kYXRpb24uaD4KLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLUBjbGFzcyBfV0tVc2VyQ29udGVu
dEZpbHRlcjsKLQotV0tfQ0xBU1NfQVZBSUxBQkxFKDEwXzExLCA5XzApCi1AaW50ZXJmYWNlIF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAotCi0rIChpbnN0YW5jZXR5cGUp
ZGVmYXVsdFN0b3JlOwotKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cmw7
Ci0KLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopIE5TX1JF
TEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyOwotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29u
dGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwot
Ci1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTgxOGIzYWY2MjRl
YzcwM2JmYTkyYWI5OTBhMTRkNjJkZTIzODk3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNp
bXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJ
bnRlcm5hbC5oIgotI2ltcG9ydCA8c3RyaW5nPgotCi1AaW1wbGVtZW50YXRpb24gX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBfdXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIFtz
dXBlciBkZWFsbG9jXTsKLX0KLQotKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZQotewotICAg
IHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpk
ZWZhdWx0U3RvcmUoKSk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJM
ICopdXJsCi17Ci0gICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmUg
PSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFic29s
dXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7Ci0gICAgcmV0dXJuIFdlYktpdDo6d3Jh
cHBlcihzdG9yZS5sZWFrUmVmKCkpOwotfQotCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5z
aW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyCi17Ci0gICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRs
ZXIgY29weV0pOwotCi0gICAgU3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRFeHRlbnNpb24pOwot
ICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lvbiByZWxlYXNlXTsKLSAgICBlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiA9IG5pbDsKLQotICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5jb21w
aWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEY6Om1vdmUoanNvbiksIFtoYW5kbGVy
XShSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3Rk
OjplcnJvcl9jb2RlIGVycm9yKSB7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAg
YXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJy
b3IgKikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byB1c2Vy
SW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19z
dHIoKV19OwotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpAIkNvbnRlbnRFeHRlbnNpb25zRG9tYWluIiBjb2RlOmVycm9yLnZhbHVlKCkgdXNlcklu
Zm86dXNlckluZm9dKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vy
cm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVy
KCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZCls
b29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vy
cm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhb
Y29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2Nv
ZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hh
bmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5k
bGVyLmdldCgpOwotCi0gICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JF
cnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3VwIGZh
aWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgcmF3SGFu
ZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIkNvbnRlbnRFeHRlbnNpb25zRG9t
YWluIiBjb2RlOmVycm9yLnZhbHVlKCkgdXNlckluZm86dXNlckluZm9dKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkIChe
KShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAg
ICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwg
bmlsKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAgX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKHN0
ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0K
LSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBl
cnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgcmF3SGFuZGxlcihbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46QCJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiIgY29kZTplcnJvci52
YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5k
bGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKG5pbCk7Ci0gICAgfSk7Ci19Ci0KLSNwcmFn
bWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgotCi0tIChBUEk6Ok9iamVj
dCYpX2FwaU9iamVjdAotewotICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7
Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgKFdLUHJpdmF0ZSkKLQotLy8gRm9yIHRlc3Rpbmcgb25seS4KLQotLSAodm9pZClfcmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMKLXsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+
c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwotfQotCi1AZW5kCi0KLSNl
bmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzUyNDhlNDFk
OGJhMjYxZDAzNTU1M2U1MmI3MjkxYjU1ZTVkZTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlUHJpdmF0ZS5oIgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCAiQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgotI2ltcG9ydCAiV0tPYmplY3QuaCIKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICp3cmFw
cGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgc3RvcmUpCi17Ci0gICAgQVNTRVJU
KFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
KilzdG9yZS53cmFwcGVyKCk7Ci19Ci0KLX0KLQotQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlICgpIDxXS09iamVjdD4gewotQHBhY2thZ2UKLSAgICBBUEk6Ok9iamVjdFN0
b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBfdXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTsKLX0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDVmMjgwZDViMzY5OGQ3NDUzOTdlMWE5ZTQxNzQ4Y2YyYzkzN2EyYTEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdl
YktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+Ci0KLSNpZiBXS19BUElfRU5BQkxF
RAotCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkK
LQotLy8gRm9yIHRlc3Rpbmcgb25seS4KLS0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zOwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhNDY4MmI4ZjM2ZDkxODRjYWUyM2QwZDdmOTg4NTZhYjlmODZlOTUxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQvV0tGb3Vu
ZGF0aW9uLmg+Ci0KLSNpZiBXS19BUElfRU5BQkxFRAotCi1XS19DTEFTU19BVkFJTEFCTEUoMTBf
MTEsIDlfMCkKLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgOiBOU09iamVjdAotCi1A
ZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MjNiN2M2YTc4NDg3MmNjMDczN2FiZjU5ZmZiMTc0
MjJjMmE0ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKLQotI2lm
IFdLX0FQSV9FTkFCTEVECi0KLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24u
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgot
Ci1AaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uLT5+VXNlckNvbnRlbnRFeHRlbnNpb24oKTsK
LQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3Rv
Y29sIGltcGxlbWVudGF0aW9uCi0KLS0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Ci17Ci0gICAg
cmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb247Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdL
X0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2NjExNjYwZDkyYWY3M2Q0MGYxZjY5ZDNkZWEwMWRhY2VlMDI2
MzVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5h
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
Il9XS1VzZXJDb250ZW50RmlsdGVyLmgiCi0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0
ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgotI2ltcG9ydCAiV0tPYmplY3QuaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKLXsKLSAgICBB
U1NFUlQoW3VzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tV
c2VyQ29udGVudEZpbHRlciBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1VzZXJDb250ZW50Rmls
dGVyICopdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOwotfQotCi19Ci0KLUBpbnRlcmZh
Y2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7Ci1AcGFja2FnZQotICAgIEFQ
STo6T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRF
eHRlbnNpb247Ci19Ci1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZiOTkz
ODUzZmYyODU1YWI2YjQ1ZjYxZTVjMzNjZjQwMWM1MWIzOTUuLjVlZmZhYTYwOTI2NTRlMDZiNzBm
Nzg4ZWRhYmI4NWFiYmY2NjYyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNzQsOSArMTA3NCw5IEBACiAJCTdDMTM1QUFD
MTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFF
MiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLzsgfTsKIAkJN0MxQkEzM0QxQTRBMEU2MDAw
NDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MxQkEzM0IxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25h
cnkuY3BwICovOyB9OwogCQk3QzFCQTMzRTFBNEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFy
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxQkEz
M0MxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuaCAqLzsgfTsKLQkJN0MyNDEzMDIx
QUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzI0MTMwMDFBQUNGQTc1
MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKLQkJN0My
NDEzMDMxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMjQxMzAxMUFB
Q0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJN0MyNDEzMDUxQUFDRkE5
QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyNDEzMDQxQUFDRkE5
QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovOyB9
OworCQk3QzI0MTMwMjFBQUNGQTc1MDBBNThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0My
NDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAq
LzsgfTsKKwkJN0MyNDEzMDMxQUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MyNDEzMDExQUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJN0MyNDEz
MDUxQUFDRkE5QzAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzI0MTMw
NDFBQUNGQTlDMDBBNThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwu
aCAqLzsgfTsKIAkJN0MyNDEzMDgxQUFDRkNCNDAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzI0MTMwNjFBQUNGQ0I0MDBBNThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlUmVmLmNwcCAqLzsgfTsKIAkJN0MyNDEzMDkxQUFDRkNCNDAwQTU4QzE1IC8qIFdLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MyNDEzMDcxQUFDRkNCNDAwQTU4QzE1IC8qIFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVJlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdDMzYxRDcyMTkyN0ZBMzYwMDM2QTU5RCAvKiBXZWJTY3JpcHRNZXNz
YWdlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzM2MUQ2RjE5MjdGQTM2MDAzNkE1OUQgLyogV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIu
Y3BwICovOyB9OwpAQCAtMTExNSwxNSArMTExNSwxNCBAQAogCQk3Qzg5RDJBNjFBNjc4OUVBMDAz
QTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBNTFBNjc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlw
dC5jcHAgKi87IH07CiAJCTdDODlEMkIzMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVu
dEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24u
Y3BwICovOyB9OwogCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRF
eHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICov
OyB9OwotCQk3Qzg5RDJCNjFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qzg5RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
N0M4OUQyQjkxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjcxQTZCMEYy
QzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICovOyB9OwotCQk3Qzg5RDJCQTFB
NkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkI4MUE2QjBGMkMwMDNBNUZERSAv
KiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTdDODlEMkJDMUE2QjBGNUIwMDNBNUZERSAvKiBfV0tVc2VyQ29u
dGVudEZpbHRlckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Qzg5RDJCQjFBNkIwRjVCMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oICovOyB9OworCQk3Qzg5RDJCOTFBNkIwRjJDMDAzQTVGREUgLyogV0tVc2Vy
Q29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDODlEMkI3MUE2QjBGMkMwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVyLm1t
ICovOyB9OworCQk3Qzg5RDJCQTFBNkIwRjJDMDAzQTVGREUgLyogV0tVc2VyQ29udGVudEZpbHRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQy
QjgxQTZCMEYyQzAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTdDODlEMkJDMUE2QjBGNUIwMDNB
NUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkJCMUE2QjBGNUIwMDNBNUZERSAvKiBX
S1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCAqLzsgfTsKIAkJN0M4OUQyRDcxQTZDNkJFNjAw
M0E1RkRFIC8qIF9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJENjFBNkM2QkU2MDAz
QTVGREUgLyogX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uSW50ZXJuYWwuaCAqLzsgfTsKIAkJ
N0M4RUIxMTcxOERCNkExOTAwNzkxN0MyIC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzhFQjExNjE4REI2QTE5
MDA3OTE3QzIgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzlEMTUzNzE4NDU4NERBMDA5RDM5MTggLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTggLyogV0tCcm93
c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi87IH07CiAJCTdDQTI1NEVCMTgyOTkzQ0UwMEZD
OEE0MSAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0EyNTRFQTE4Mjk5M0NFMDBGQzhBNDEg
LyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTdDQTM3OTNFMUFDMzc4QjMwMDc5REMzNyAv
KiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMzc5M0QxQUMzNzhCMzAwNzlEQzM3IC8q
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0NBMzc5M0UxQUMzNzhCMzAwNzlEQzM3
IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAv
KiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NCMTZGRUYxNzI0QkEyMzAwN0EwQTk1
IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYiBpbiBDb3B5IFBs
dWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5l
Y3Qud2VicGx1Z2luLnNiICovOyB9OwogCQk3Q0IxNkZGMDE3MjRCQTI0MDA3QTBBOTUgLyogY29t
LmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94
IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkUzMTcy
NEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IgKi87
IH07CiAJCTdDQjE2RkYxMTcyNEJBMjYwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0LnBsdWdp
bi1jb21tb24uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5h
cHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLzsgfTsKQEAgLTMyODEsOSArMzI4MCw5IEBA
CiAJCTdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9u
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzFCQTMzQjFBNEEwRTYwMDA0
M0UyNDkgLyogQVBJRGljdGlvbmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBBUElEaWN0aW9uYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MxQkEzM0MxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJRGljdGlvbmFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk3QzI0MTMwMDFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MyNDEzMDQxQUFD
RkE5QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MyNDEzMDAxQUFD
RkE3NTAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MyNDEzMDExQUFDRkE3NTAwQTU4
QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0MyNDEzMDQxQUFDRkE5QzAwQTU4QzE1IC8qIFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMjQxMzA2MUFBQ0ZDQjQwMEE1OEMxNSAvKiBXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MyNDEzMDcxQUFDRkNCNDAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzNjFENkYxOTI3RkEzNjAwMzZBNTlEIC8qIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzMjUsMTUgKzMzMjQsMTQg
QEAKIAkJN0M4OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNlclNjcmlwdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElV
c2VyQ29udGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVu
c2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Qzg5RDJCNTFBNkIwREQ5MDAz
QTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Qzg5RDJCNzFBNkIwRjJDMDAzQTVGREUgLyogX1dL
VXNlckNvbnRlbnRGaWx0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RmlsdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkJCMUE2QjBGNUIwMDNBNUZERSAvKiBf
V0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1VzZXJDb250
ZW50RmlsdGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg5RDJCODFBNkIw
RjJDMDAzQTVGREUgLyogV0tVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1VzZXJDb250ZW50RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDODlEMkJCMUE2QjBGNUIwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVy
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVu
dEZpbHRlckludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkQ2
MUE2QzZCRTYwMDNBNUZERSAvKiBfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFQjExNjE4
REI2QTE5MDA3OTE3QzIgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJlbmNlc1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0M5RDE1MzYxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250
ZXh0R3JvdXBJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jy
b3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVs
ZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRl
eHRQb2xpY3lEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Q0EzNzkz
RDFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NBMzc5M0Qx
QUMzNzhCMzAwNzlEQzM3IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3MjRC
OUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNi
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0Lndl
YnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0QjlC
NTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8q
IGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUzNTQsMTMgKzUzNTIsNiBAQAogCQkJCTJENkIzNzE5MThBOTY3QUQwMDQy
QUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8sCiAJCQkJMkQ2QjM3MUExOEE5NjdBRDAwNDJB
RTgwIC8qIF9XS1RodW1ibmFpbFZpZXcubW0gKi8sCiAJCQkJMkRBQ0U2NEQxOEFEQkZGMDAwRTRD
QTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oICovLAotCQkJCTdDMjQxMzAxMUFBQ0ZB
NzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCi0JCQkJN0My
NDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0g
Ki8sCi0JCQkJN0MyNDEzMDQxQUFDRkE5QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVJbnRlcm5hbC5oICovLAotCQkJCTdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAotCQkJCTdDODlEMkI4MUE2
QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovLAotCQkJCTdDODlEMkI3
MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLywKLQkJCQk3Qzg5
RDJCQjFBNkIwRjVCMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oICov
LAogCQkJCTFBODFCMzdGMThCRDY2QUQwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlLmgg
Ki8sCiAJCQkJMUE4MUIzN0UxOEJENjZBRDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUu
bW0gKi8sCiAJCQkJMUE4MUIzODQxOEJENjczQTAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3Rv
cmVJbnRlcm5hbC5oICovLApAQCAtNTM4MSw4ICs1MzcyLDggQEAKIAkJCQkzN0I1MDQ1MTE5RUVG
MzEzMDBDRTJDRjggLyogV0tFcnJvclByaXZhdGUuaCAqLywKIAkJCQkxQTRENjY0QTE4QTMwMzBF
MDBEODJFMjEgLyogV0tGcmFtZUluZm8uaCAqLywKIAkJCQkxQTRENjY0OTE4QTMwMzBFMDBEODJF
MjEgLyogV0tGcmFtZUluZm8ubW0gKi8sCi0JCQkJMUE2RkEyMUQxQkQwNDM1QjAwQUFBNjUwIC8q
IFdLRnJhbWVJbmZvUHJpdmF0ZS5oICovLAogCQkJCTJERjlFRUU3MUE3ODI0NTUwMEI2Q0ZCRSAv
KiBXS0ZyYW1lSW5mb0ludGVybmFsLmggKi8sCisJCQkJMUE2RkEyMUQxQkQwNDM1QjAwQUFBNjUw
IC8qIFdLRnJhbWVJbmZvUHJpdmF0ZS5oICovLAogCQkJCTFBNDIyRjhBMThCMjlCNTQwMEQ4Q0Q5
NiAvKiBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGUuaCAqLywKIAkJCQkxQTVCMUM0RjE4OTg2MDZG
MDA0RkNGOUIgLyogV0tOYXZpZ2F0aW9uLmggKi8sCiAJCQkJMUE1QjFDNEUxODk4NjA2RjAwNEZD
RjlCIC8qIFdLTmF2aWdhdGlvbi5tbSAqLywKQEAgLTU0MTgsNyArNTQwOSwxMyBAQAogCQkJCTFB
RkEzQUM3MThFNjFDNjEwMDNDQ0JBRSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlci5oICovLAog
CQkJCTFBRkEzQUM2MThFNjFDNjEwMDNDQ0JBRSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlci5t
bSAqLywKIAkJCQkxQUFGMDhBMzE5MjY4MkRBMDBCNjM5MEMgLyogV0tVc2VyQ29udGVudENvbnRy
b2xsZXJJbnRlcm5hbC5oICovLAotCQkJCTdDODlEMkI1MUE2QjBERDkwMDNBNUZERSAvKiBXS1Vz
ZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaCAqLywKKwkJCQk3QzI0MTMwMTFBQUNGQTc1MDBB
NThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCisJCQkJN0MyNDEzMDAx
QUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLywKKwkJ
CQk3QzI0MTMwNDFBQUNGQTlDMDBBNThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
SW50ZXJuYWwuaCAqLywKKwkJCQk3Q0EzNzkzRDFBQzM3OEIzMDA3OURDMzcgLyogV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAorCQkJCTdDODlEMkI4MUE2QjBGMkMwMDNB
NUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVyLmggKi8sCisJCQkJN0M4OUQyQjcxQTZCMEYyQzAw
M0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8sCisJCQkJN0M4OUQyQkIxQTZCMEY1
QjAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oICovLAogCQkJCTFBQUYw
ODk5MTkyNjdFRTUwMEI2MzkwQyAvKiBXS1VzZXJTY3JpcHQuaCAqLywKIAkJCQkxQUFGMDg5ODE5
MjY3RUU1MDBCNjM5MEMgLyogV0tVc2VyU2NyaXB0Lm1tICovLAogCQkJCTFBQUYwODlDMTkyNjdG
QzgwMEI2MzkwQyAvKiBXS1VzZXJTY3JpcHRJbnRlcm5hbC5oICovLApAQCAtNzU4NSwxMSArNzU4
MiwxMSBAQAogCQkJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgwIC8q
IF9XS1RodW1ibmFpbFZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUNFNjRFMThBREJGRjAw
MEU0Q0E3NiAvKiBfV0tUaHVtYm5haWxWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTdDMjQxMzAzMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzI0MTMwNTFBQUNGQTlDMDBBNThDMTUgLyogX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk3Q0Ez
NzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDODlEMkJBMUE2QjBGMkMwMDNBNUZERSAvKiBfV0tV
c2VyQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0M4OUQyQkMxQTZCMEY1QjAw
M0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdDMjQxMzAzMUFBQ0ZBNzUwMEE1OEMxNSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMjQxMzA1MUFBQ0ZBOUMwMEE1OEMxNSAvKiBXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NB
Mzc5M0UxQUMzNzhCMzAwNzlEQzM3IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDODlEMkJBMUE2QjBGMkMwMDNBNUZERSAvKiBXS1Vz
ZXJDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Qzg5RDJCQzFBNkIwRjVCMDAz
QTVGREUgLyogV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTIwNjc5MzFCOEI5MDY2MDBDMTNDMzYgLyogX1dLVmlzaXRlZExpbmtQcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE4MUIzODExOEJENjZBRDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRM
aW5rU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBODFCMzg1MThCRDY3M0EwMDA3RkRBQyAv
KiBfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtODM4Nyw3
ICs4Mzg0LDYgQEAKIAkJCQlCQzQwNzYyQjEyNEZGMDQwMDA2OEYyMEEgLyogV0tVUkxSZXNwb25z
ZU5TLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZBM0FDOTE4RTYxQzYxMDAzQ0NCQUUgLyogV0tV
c2VyQ29udGVudENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUYwOEE0MTkyNjgy
REEwMEI2MzkwQyAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk3Qzg5RDJCNjFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRy
b2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzg5RDJBMDFBNjc4NTU0MDAzQTVG
REUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
MjQxMzA5MUFBQ0ZDQjQwMEE1OEMxNSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3N0VBRDQ4MTdFMkM3N0IwMDJEMTkzRCAvKiBXS1VzZXJD
b250ZW50SW5qZWN0ZWRGcmFtZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTQxNCw4ICs5NDEwLDgg
QEAKIAkJCQkxQTlFMzI4QTE4MjE2MzY5MDBGNUQwNEMgLyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0
cnkubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTAwMkQ0NTE5NkIzMzhFMDBCOUFENDQgLyogX1dL
U2Vzc2lvblN0YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ2QjM3MUMxOEE5NjdBRDAwNDJB
RTgwIC8qIF9XS1RodW1ibmFpbFZpZXcubW0gaW4gU291cmNlcyAqLywKLQkJCQk3QzI0MTMwMjFB
QUNGQTc1MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTdDODlEMkI5MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZp
bHRlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDMjQxMzAyMUFBQ0ZBNzUwMEE1OEMxNSAvKiBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Qzg5RDJC
OTFBNkIwRjJDMDAzQTVGREUgLyogV0tVc2VyQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBMjA2NzkyMUI4QjkwNjYwMEMxM0MzNiAvKiBfV0tWaXNpdGVkTGlua1Byb3ZpZGVy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4MUIzODAxOEJENjZBRDAwMDdGREFDIC8qIF9XS1Zp
c2l0ZWRMaW5rU3RvcmUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUZCNEM3MTFBREYxNTVEMDBC
MzMzMzkgLyogX1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU5YjdiOTA1ZDAwODhh
MGM3M2U1ZjVkODc2YjA0ZThmNmQ5NGI0ZjYuLjNmZDcwY2VjOTk0MDY3NmEwZGU4OWI4NDhiMjdi
MTkxYzNlYjhjNzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNS0xMC0yNiAgQnJpYW4gTmljaG9sc29uICA8Ym5p
Y2hvbHNvbkBtb3ppbGxhLmNvbT4KKworICAgICAgICBVcGRhdGUgdGVzdHMgdG8gdXNlIHB1Ymxp
YyBjb250ZW50IGZpbHRlcmluZyBBUElzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBDb250ZW50RXh0ZW5zaW9uVGVzdGVyL21haW4ubToKKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tOgorICAg
ICAgICAqIE1pbmlCcm93c2VyL21hYy9FeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5t
OgorICAgICAgICAoLVtFeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlciBpbml0XSk6Cisg
ICAgICAgICgtW0V4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyIGFkZDpdKToKKyAgICAg
ICAgKC1bRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIgcmVtb3ZlOl0pOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6Y29jb2FSZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QpOgorCiAyMDE1LTEwLTIzICBQ
ZXIgQXJuZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9d
IEltcHJvdmUgdGVzdCByZXN1bHRzIGZvciBmYXN0IGxheW91dHRlc3RzLgpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ29udGVudEV4dGVuc2lvblRlc3Rlci9tYWluLm0gYi9Ub29scy9Db250ZW50RXh0ZW5z
aW9uVGVzdGVyL21haW4ubQppbmRleCAwYjIyMTE5ZjAzYzQ4NmIwMWQ1MDEwYjI4N2Y5Zjk3NjZl
OWM5NDNlLi5lNmRmYjgzODRiZGRhNDU3ZTAwYjhiNjdiZTQzMzNhN2NlNjUyMjUzIDEwMDY0NAot
LS0gYS9Ub29scy9Db250ZW50RXh0ZW5zaW9uVGVzdGVyL21haW4ubQorKysgYi9Ub29scy9Db250
ZW50RXh0ZW5zaW9uVGVzdGVyL21haW4ubQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgogCiBzdGF0aWMgdm9pZCBydW4oYm9vbCogZG9uZSkK
IHsKQEAgLTQwLDEzICs0MCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogYXJn
dltdKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKLSAgICAgICAgW1tfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRF
eHRlbnNpb25zXTsKKyAgICAgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVs
dFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwogCiAgICAgICAgIE5TU3RyaW5n
ICpwYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFyZ3ZbMV1dOwogICAgICAg
ICBOU1N0cmluZyAqanNvblN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ29udGVu
dHNPZkZpbGU6cGF0aCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpuaWxdOwog
CiAgICAgICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmpzb25TdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRl
ciAqZmlsdGVyIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCBOU0Vycm9yICplcnJvcikgeworICAg
ICAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmpzb25TdHJpbmcgY29tcGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50
RmlsdGVyICpmaWx0ZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSksIE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQg
dG8gY29tcGlsZSBleHRlbnNpb24gYXQgJXMgd2l0aCBlcnJvciAlcyIsIHBhdGguVVRGOFN0cmlu
ZyAsIGVycm9yLmRlc2NyaXB0aW9uLlVURjhTdHJpbmcpOwogICAgICAgICAgICAgZWxzZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVnYXRlLm0gYi9Ub29scy9NaW5p
QnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQppbmRleCA0NTFiOWI4ODE3ZjdkNjNkOGY4YTM5NjE1
MjU3NjkyYzNiYWY0MzBiLi4wMjEyY2Y4MjZjMzA3YzdhOTRjNmQ2YTUwMDMxZmFmMjEwODc2NDE2
IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQorKysgYi9U
b29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubQpAQCAtMzEsMTEgKzMxLDEwIEBACiAj
aW1wb3J0ICJXSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCA8V2ViS2l0L1dL
UHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZh
dGUuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dlYktpdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
PgotI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KIAogZW51
bSB7CiAgICAgV2ViS2l0MU5ld1dpbmRvd1RhZyA9IDEsCmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9tYWMvRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIubSBiL1Rvb2xzL01p
bmlCcm93c2VyL21hYy9FeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5tCmluZGV4IGZl
OWE2MjZkNWViZThhZDQyZDdkNjI0MTUyZWVhNWZmZGE5NzA0MzMuLjllYWI5MTQ0OGY1NTlkNmQ3
ZTcwYTMzNTY4OTg2YzA5ODA3Njc1NDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL21h
Yy9FeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5tCisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL21hYy9FeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5tCkBAIC0yOCw4ICsyOCw3
IEBACiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQXBwRGVsZWdhdGUuaCIKLSNpbXBv
cnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KLSNpbXBvcnQgPFdl
YktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBFeHRlbnNpb25N
YW5hZ2VyV2luZG93Q29udHJvbGxlcgogCkBAIC00MCw3ICszOSw3IEBAIC0gKGluc3RhbmNldHlw
ZSlpbml0CiAgICAgICAgIE5TQXJyYXkqIGluc3RhbGxlZENvbnRlbnRFeHRlbnNpb25zID0gW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYXJyYXlGb3JLZXk6QCJJbnN0YWxs
ZWRDb250ZW50RXh0ZW5zaW9ucyJdOwogICAgICAgICBpZiAoaW5zdGFsbGVkQ29udGVudEV4dGVu
c2lvbnMpIHsKICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmlkZW50aWZpZXIgaW4gaW5zdGFs
bGVkQ29udGVudEV4dGVuc2lvbnMpIHsKLSAgICAgICAgICAgICAgICBbW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmV4dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpCisgICAgICAgICAgICAgICAgW1tXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVu
dEZpbHRlciAqZXh0ZW5zaW9uLCBOU0Vycm9yICplcnJvcikKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJFeHRlbnNpb24gc3RvcmUgZ290IG91dCBvZiBzeW5jIHdpdGggc3lzdGVtIGRlZmF1
bHRzLiIpOwpAQCAtNDgsNyArNDcsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgQnJvd3NlckFwcERlbGVnYXRlKiBh
cHBEZWxlZ2F0ZSA9IChCcm93c2VyQXBwRGVsZWdhdGUgKilbW05TQXBwbGljYXRpb24gc2hhcmVk
QXBwbGljYXRpb25dIGRlbGVnYXRlXTsKLSAgICAgICAgICAgICAgICAgICAgW2FwcERlbGVnYXRl
LnVzZXJDb250ZW50Q29udG9sbGVyIF9hZGRVc2VyQ29udGVudEZpbHRlcjpleHRlbnNpb25dOwor
ICAgICAgICAgICAgICAgICAgICBbYXBwRGVsZWdhdGUudXNlckNvbnRlbnRDb250b2xsZXIgYWRk
VXNlckNvbnRlbnRGaWx0ZXI6ZXh0ZW5zaW9uXTsKICAgICAgICAgICAgICAgICB9XTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTgyLDcgKzgxLDcgQEAgLSAoSUJBY3Rpb24p
YWRkOihpZClzZW5kZXIKICAgICAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSB1cmwubGFzdFBh
dGhDb21wb25lbnQ7CiAgICAgICAgIE5TU3RyaW5nICpqc29uU3RyaW5nID0gW1tOU1N0cmluZyBh
bGxvY10gaW5pdFdpdGhDb250ZW50c09mVVJMOnVybCBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZyBlcnJvcjpuaWxdOwogCi0gICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjppZGVu
dGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmpzb25TdHJpbmcgY29tcGxldGlvbkhhbmRs
ZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZXh0ZW5zaW9uLCBOU0Vycm9yICplcnJvcikKKyAg
ICAgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4
dGVuc2lvbjpqc29uU3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVudEZpbHRl
ciAqZXh0ZW5zaW9uLCBOU0Vycm9yICplcnJvcikKICAgICAgICAgewogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoZXJyb3IpIHsKQEAgLTEwNiw3ICsxMDUsNyBAQCAtIChJQkFjdGlvbilh
ZGQ6KGlkKXNlbmRlcgogICAgICAgICAgICAgW2FycmF5Q29udHJvbGxlciBhZGRPYmplY3Q6aWRl
bnRpZmllcl07CiAKICAgICAgICAgICAgIEJyb3dzZXJBcHBEZWxlZ2F0ZSogYXBwRGVsZWdhdGUg
PSAoQnJvd3NlckFwcERlbGVnYXRlICopW1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9u
XSBkZWxlZ2F0ZV07Ci0gICAgICAgICAgICBbYXBwRGVsZWdhdGUudXNlckNvbnRlbnRDb250b2xs
ZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOmV4dGVuc2lvbl07CisgICAgICAgICAgICBbYXBwRGVs
ZWdhdGUudXNlckNvbnRlbnRDb250b2xsZXIgYWRkVXNlckNvbnRlbnRGaWx0ZXI6ZXh0ZW5zaW9u
XTsKICAgICAgICAgfV07CiAgICAgfV07CiAKQEAgLTExOCw3ICsxMTcsNyBAQCAtIChJQkFjdGlv
bilyZW1vdmU6KGlkKXNlbmRlcgogCiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXJUb1JlbW92ZSA9
IGFycmF5Q29udHJvbGxlci5hcnJhbmdlZE9iamVjdHNbaW5kZXhdOwogCi0gICAgW1tfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lv
bkZvcklkZW50aWZpZXI6aWRlbnRpZmllclRvUmVtb3ZlIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNF
cnJvciAqZXJyb3IpCisgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0
b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjppZGVudGlmaWVyVG9SZW1v
dmUgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikKICAgICB7CiAgICAgICAgIGlm
IChlcnJvcikgewogICAgICAgICAgICAgTlNBbGVydCAqYWxlcnQgPSBbTlNBbGVydCBhbGVydFdp
dGhFcnJvcjplcnJvcl07CkBAIC0xMzQsNyArMTMzLDcgQEAgLSAoSUJBY3Rpb24pcmVtb3ZlOihp
ZClzZW5kZXIKIAogICAgICAgICBbYXJyYXlDb250cm9sbGVyIHJlbW92ZU9iamVjdEF0QXJyYW5n
ZWRPYmplY3RJbmRleDppbmRleF07CiAgICAgICAgIEJyb3dzZXJBcHBEZWxlZ2F0ZSogYXBwRGVs
ZWdhdGUgPSAoQnJvd3NlckFwcERlbGVnYXRlICopW1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxp
Y2F0aW9uXSBkZWxlZ2F0ZV07Ci0gICAgICAgIFthcHBEZWxlZ2F0ZS51c2VyQ29udGVudENvbnRv
bGxlciBfcmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXI6aWRlbnRpZmllclRvUmVtb3ZlXTsKKyAgICAg
ICAgW2FwcERlbGVnYXRlLnVzZXJDb250ZW50Q29udG9sbGVyIHJlbW92ZVVzZXJDb250ZW50Rmls
dGVyOmlkZW50aWZpZXJUb1JlbW92ZV07CiAgICAgfV07CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNThiMzJjOWJkNmVmOWRiNjVmYjhmMWZjZTRiNTFiMGY0ZmVkODdjZi4uYmRiNGVi
MjcyNDk0NTViOTE4N2UzYzEyNTE5NTQ0ZTljZTIyNjZmNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTI1NCw3ICsyNTQsNyBAQAogCQk3Q0NFN0Y0RDFBNDExQjlGMDA0NDdDNEMgLyogUmV0
YWluUHRyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMwMjlCMUIxNDg2QjI1OTAwODE3REE5IC8qIFJldGFpblB0ci5tbSAqLzsgfTsKIAkJN0NDRTdG
NEUxQTQxMUJBNDAwNDQ3QzRDIC8qIFJldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyOUIxNjE0ODZBRDY0MDA4MTdEQTkgLyogUmV0
YWluUHRyLmNwcCAqLzsgfTsKIAkJN0NDRTdGNEYxQTQxMUJBNDAwNDQ3QzRDIC8qIFJldGFpblB0
ckhhc2hpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzA5OTFDNTAxNDNDN0Q2ODAwNzk5OEYyIC8qIFJldGFpblB0ckhhc2hpbmcuY3BwICovOyB9
OwotCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
RUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1t
ICovOyB9OworCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyogV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbSAqLzsgfTsKIAkJN0NGQkNBRTUxNzQzMjM4RjAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1bmRs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZC
Q0FFMzE3NDMyMzhFMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCAqLzsgfTsKIAkJOTMw
QUQ0MDIxNTA2OThEMDAwNjc5NzBGIC8qIGxvdHMtb2YtdGV4dC5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMEFENDAxMTUwNjk4QjMw
MDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRtbCAqLzsgfTsKIAkJOTM2MTAwMjkxNERDOTVBNzAw
NjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNjEwMDI4MTREQzk1N0IwMDYxMzc5RCAvKiBs
b3RzLW9mLWlmcmFtZXMuaHRtbCAqLzsgfTsKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQk3Q0MzRTFG
QTE5N0UyMzQxMDBCRTYyNTIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNlckNvbnRlbnRDb250cm9sbGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0NFN0U4QzFBNDExNDRFMDA0NDdDNEMgLyog
bGliVGVzdFdlYktpdEFQSS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJUZXN0
V2ViS2l0QVBJLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdDQ0U3
RUEzMUE0MTE1Q0IwMDQ0N0M0QyAvKiBUZXN0V2ViS2l0QVBJTGlicmFyeS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25m
aWc7IHBhdGggPSBUZXN0V2ViS2l0QVBJTGlicmFyeS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Q0ZCQ0FERDE3NDMyMzRGMDBCMkJGQ0YgLyogV2lsbExvYWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbExvYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Q0ZCQ0FFMzE3NDMyMzhFMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxMb2FkX0J1bmRsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQjUwMTkyMTQwRjIzMjMwMEQ5RUI1OCAv
KiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTAzLDcg
KzkwMyw2IEBACiAJCTFBQkMzREVDMTg5OUJFNTUwMDRGMDYyNiAvKiBXZWJLaXQyIENvY29hICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3Q0VGQTk2NDFB
QzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLywKIAkJ
CQkyREQzNTUzNTFCRDA4Mzc4MDA1REY0QTcgLyogQXV0b0xheW91dEludGVncmF0aW9uLm1tICov
LAogCQkJCUExM0VCQkFDMUI4NzQzNkYwMDA5NzExMCAvKiBCdW5kbGVQYXJhbWV0ZXJzLm1tICov
LAogCQkJCUExM0VCQkFFMUI4NzQzNkYwMDA5NzExMCAvKiBCdW5kbGVQYXJhbWV0ZXJzUGx1Z0lu
Lm1tICovLApAQCAtOTIxLDYgKzkyMCw3IEBACiAJCQkJMzdCQ0E2MUIxQjU5NkJBOTAwMjAxMkNB
IC8qIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNJbk5ld1dpbmRvd0FjdGlvbnMubW0gKi8sCiAJCQkJ
MkQ5QTUzQUUxQjMxRkE4RDAwNzRENUFBIC8qIFNocmlua1RvRml0Lm1tICovLAogCQkJCTdDQzNF
MUZBMTk3RTIzNDEwMEJFNjI1MiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIubW0gKi8sCisJCQkJ
N0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5t
bSAqLywKIAkJCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSAiV2ViS2l0MiBDb2NvYSI7CkBAIC0x
NTc5LDcgKzE1NzksNyBAQAogCQkJCTdDQ0U3RUVFMUE0MTFBRTYwMDQ0N0M0QyAvKiBEb3dubG9h
ZERlY2lkZURlc3RpbmF0aW9uQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQkUx
QTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNEZXZpY2VTY2FsZUZhY3Rvci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTM3QkNBNjFDMUI1OTZCQTkwMDIwMTJDQSAvKiBTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzSW5OZXdXaW5kb3dBY3Rpb25zLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJN0NFRkE5NjYxQUMw
QjlFMjAwQjkxMEZEIC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNl
cyAqLywKKwkJCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyogV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRTAxQTQxMUE5QTAwNDQ3QzRD
IC8qIEVkaXRvckNvbW1hbmRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQkYxQTQxMUE3
RTAwNDQ3QzRDIC8qIEVsZW1lbnRBdFBvaW50SW5XZWJGcmFtZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RUVGMUE0MTFBRTYwMDQ0N0M0QyAvKiBFcGhlbWVyYWxTZXNzaW9uUHVzaFN0YXRl
Tm9IaXN0b3J5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNiM2ZkN2RkNTA1ZTM4NGNjZGY1Yzg0
NzNhOTFmZGZlYjU1NDljZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQpAQCAtMCww
ICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCA8V2Vi
S2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK2NsYXNzIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVz
dGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7Cisg
ICAgICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92
ZUFsbENvbnRlbnRFeHRlbnNpb25zXTsKKyAgICB9Cit9OworCitzdGF0aWMgTlNTdHJpbmcgKmJh
c2ljRmlsdGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOworCitURVNUX0YoV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgQ29tcGlsZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wg
ZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVz
dEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlv
bkhhbmRsZXI6XihXS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7
CisgICAgCisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKK30KKworc3RhdGlj
IE5TU3RyaW5nICppbnZhbGlkRmlsdGVyID0gQCJbIjsKKworVEVTVF9GKFdLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNpb24pCit7CisgICAgX19ibG9jayBib29s
IGRvbmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRl
c3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxl
dGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9O
T1RfTlVMTChlcnJvcik7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGNvbXBpbGF0
aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmluZy4iLCBbW2Vycm9yIGhl
bHBBbmNob3JdIFVURjhTdHJpbmddKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwor
fQorCitURVNUX0YoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQorewor
ICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNp
Y0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7
CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0g
dHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxp
bmcpOworCisgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKKyAgICBbW1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihX
S1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgCisgICAg
ICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7
CisKKyAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsKK30KKworVEVTVF9GKFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKK3sKKyAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklk
ZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVu
dEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1Rf
TlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAgICBF
WFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBk
dXJpbmcgbG9va3VwLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworCisgICAg
ICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisKK1RFU1RfRihXS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVUZXN0LCBSZW1vdmFsKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5n
ID0gZmFsc2U7CisgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdL
VXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAg
ICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsK
KworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworCisgICAgX19ibG9jayBib29sIGRvbmVS
ZW1vdmluZyA9IGZhbHNlOworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworVEVTVF9G
KFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllclJl
bW92ZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7CisgICAgW1tX
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkRvZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihO
U0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAg
ICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJy
b3IgZHVyaW5nIHJlbW92ZS4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKwor
ICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGVhMGZlMmJlZWY3YWI0Y2ViZGI5ZjNmYzk3MWZkOThjNTQ4MWVkZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJUZXN0LmgiCi0jaW1wb3J0IDxX
ZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KLSNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KLQotY2xhc3MgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3Qg
OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIFNldFVw
KCkKLSAgICB7Ci0gICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107Ci0gICAgfQotfTsKLQotc3RhdGlj
IE5TU3RyaW5nICpiYXNpY0ZpbHRlciA9IEAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifX1dIjsKLQot
VEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBDb21waWxlKQotewotICAg
IF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNG
aWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBO
U0Vycm9yICplcnJvcikgewotICAgIAotICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsK
LSAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwotCi0gICAgICAgIGRvbmVDb21waWxpbmcgPSB0
cnVlOwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGlu
Zyk7Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqaW52YWxpZEZpbHRlciA9IEAiWyI7Ci0KLVRFU1Rf
RihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikKLXsK
LSAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmlu
dmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmls
dGVyLCBOU0Vycm9yICplcnJvcikgewotICAgIAotICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIp
OwotICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwotICAgICAgICBFWFBFQ1RfU1RSRVEo
IkV4dGVuc2lvbiBjb21waWxhdGlvbiBmYWlsZWQ6IEZhaWxlZCB0byBwYXJzZSB0aGUgSlNPTiBT
dHJpbmcuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7Ci0KLSAgICAgICAgZG9u
ZUNvbXBpbGluZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lQ29tcGlsaW5nKTsKLX0KLQotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVUZXN0LCBMb29rdXApCi17Ci0gICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxz
ZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21w
aWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJD
b250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgCi0gICAgICAgIEVY
UEVDVF9OT1RfTlVMTChmaWx0ZXIpOwotICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7Ci0KLSAg
ICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKLQotICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2lu
Z1VwID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRT
dG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9u
IiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJy
b3IgKmVycm9yKSB7Ci0gICAgCi0gICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwotICAg
ICAgICBFWFBFQ1RfTlVMTChlcnJvcik7Ci0KLSAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7
Ci0gICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsK
LX0KLQotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGlu
Z0lkZW50aWZpZXJMb29rdXApCi17Ci0gICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBm
YWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBs
b29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkRvZXNOb3RFeGlzdCIgY29tcGxl
dGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJv
cikgewotICAgIAotICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOwotICAgICAgICBFWFBFQ1Rf
Tk9UX05VTEwoZXJyb3IpOwotICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBsb29rdXAg
ZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgbG9va3VwLiIsIFtbZXJyb3IgaGVscEFu
Y2hvcl0gVVRGOFN0cmluZ10pOwotCi0gICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOwotICAg
IH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Ci19Ci0K
LVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVtb3ZhbCkKLXsKLSAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2lj
RmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKLSAgICAKLSAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7
Ci0gICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKLQotICAgICAgICBkb25lQ29tcGlsaW5nID0g
dHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxp
bmcpOwotCi0gICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwotICAgIFtbX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihO
U0Vycm9yICplcnJvcikgewotICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7Ci0KLSAgICAgICAg
ZG9uZVJlbW92aW5nID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmVSZW1vdmluZyk7Ci19Ci0KLVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQotewotICAgIF9fYmxvY2sgYm9v
bCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkRv
ZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgewotICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwotICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lv
biByZW1vdmFsIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iLCBbW2Vy
cm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKLQotICAgICAgICBkb25lUmVtb3ZpbmcgPSB0
cnVlOwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5n
KTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1Rlc3RDb250cm9sbGVyQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rl
c3RDb250cm9sbGVyQ29jb2EubW0KaW5kZXggZDIzMWI1ZTIzODZhZWI3ZGRjNmI3MGM2ZTg3ZDQ4
YmFhNGJkMzY5MS4uMjI1Y2U2Njc3NzM4NGM2ZDU0ZWNjZGExNzYwNDY4ODY4ODY0OTgxMCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29h
Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2Nv
YS5tbQpAQCAtMzUsMTQgKzM1LDEzIEBACiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1Jl
ZlByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLU3RyaW5nQ0YuaD4KLSNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50
Q29udHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgotI2ltcG9ydCA8
V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KLSNpbXBvcnQgPFdlYktpdC9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL01haW5U
aHJlYWQuaD4KIAogbmFtZXNwYWNlIFdUUiB7CkBAIC0xMTQsMTQgKzExMywxNCBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKQogewogI2lm
IFdLX0FQSV9FTkFCTEVECiAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwot
ICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdENvbnRlbnRFeHRlbnNpb25zIiBjb21w
bGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjpAIlRlc3RDb250ZW50RXh0ZW5zaW9ucyIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9y
ICplcnJvcikgewogICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOwogICAgIH1dOwogICAgIHBs
YXRmb3JtUnVuVW50aWwoZG9uZVJlbW92aW5nLCAwKTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwor
ICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zXTsKIAogICAgIGlmIChQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcg
PSBtYWluV2ViVmlldygpKQotICAgICAgICBbd2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuY29uZmln
dXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVy
c107CisgICAgICAgIFt3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5jb25maWd1cmF0aW9uLnVzZXJD
b250ZW50Q29udHJvbGxlciByZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnNdOwogI2VuZGlmCiB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVy
SU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0K
aW5kZXggMmY5OGQ5ZDMwOGZkNWU1N2U3MWNiMWNjODU5MDM5MmE3NDQ2NWIzZi4uNjQwYmJhZmM1
YmYwZTFkNDU3Mzg5ZDNlYjlmNmYzMmU2MDViYmNjNiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KQEAgLTMyLDcgKzMyLDYgQEAKICNpbXBv
cnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
UHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tTdHJpbmdDRi5oPgotI2lt
cG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRp
b24uaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQppbmRl
eCBjZWZkYWNmYTYzODc2ZGM4YzZmMTgzMWYyNWJjMDVkYWVlOWU3MzY1Li4xYTI2ZjI2ODhjZTM5
NzI1ZDVjN2JhZTU5MzYxMTg3ZmY4YjFmZjZkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQpAQCAtMzYsMTMgKzM2LDEyIEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1N0cmlu
Z0NGLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxDRi5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgot
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg+CiAj
aW1wb3J0IDxtYWNoLW8vZHlsZC5oPgogCiBAaW50ZXJmYWNlIE5TU291bmQgKCkKQEAgLTExNCwx
MCArMTEzLDEwIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0Zv
clRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIlRlc3RDb250ZW50RXh0ZW5zaW9ucyIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246Y29udGVudEV4dGVuc2lvblN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJD
b250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKQorICAgIFtbV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdENvbnRlbnRFeHRlbnNpb25zIiBlbmNvZGVkQ29udGVudEV4dGVuc2lv
bjpjb250ZW50RXh0ZW5zaW9uU3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVu
dEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKICAgICB7CiAgICAgICAgIGlmICghZXJy
b3IpCi0gICAgICAgICAgICBbbWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkuY29uZmlndXJh
dGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOmZpbHRlcl07
CisgICAgICAgICAgICBbbWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkuY29uZmlndXJhdGlv
bi51c2VyQ29udGVudENvbnRyb2xsZXIgYWRkVXNlckNvbnRlbnRGaWx0ZXI6ZmlsdGVyXTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciBoZWxwQW5jaG9yXSk7
CiAgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264149</attachid>
            <date>2015-10-27 12:12:37 -0700</date>
            <delta_ts>2017-03-08 17:08:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20151027121148.patch</filename>
            <type>text/plain</type>
            <size>68299</size>
            <attacher name="Brian Nicholson">thebnich</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjQyNjhmNWJmODRkMmRj
NTcxNzg0YjQzOTdjZDE1ODlkZmNhMWZiNi4uODY5MTU4Mzc5MTczNTU1MzE0ZTYxMTY5NzExZmFi
ZGFjODc1N2FjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDE1LTEwLTI3ICBCcmlh
biBOaWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPgorCisgICAgICAgIE1ha2UgY29u
dGVudCBmaWx0ZXJpbmcgQVBJcyBwdWJsaWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06CisgICAgICAg
IChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgYWRkVXNlckNvbnRlbnRGaWx0ZXI6XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRl
bnRDb250cm9sbGVyIHJlbW92ZVVzZXJDb250ZW50RmlsdGVyOl0pOgorICAgICAgICAoLVtXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciByZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnNdKToKKyAgICAg
ICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOl0pOiBE
ZWxldGVkLgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlVXNlckNv
bnRlbnRGaWx0ZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9s
bGVyIF9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnNdKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVySW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbS4KKyAgICAgICAgKC1bV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlYWxsb2NdKToK
KyAgICAgICAgKCtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0pOgor
ICAgICAgICAoLVtXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgbG9va3VwQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmguCisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEZpbHRlci5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5oLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEZpbHRlci5tbTogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRGaWx0ZXIubW0uCisgICAgICAgICgtW1dLVXNlckNvbnRlbnRGaWx0ZXIgZGVhbGxvY10pOgor
ICAgICAgICAoLVtXS1VzZXJDb250ZW50RmlsdGVyIF9hcGlPYmplY3RdKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZp
bHRlckludGVybmFsLmguCisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOgorICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNS0xMC0yNyAgWmh1byBMaSAg
PHphY2hsaUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdlYktpdCBBUEkgdG8gY2xlYXIgZGF0
YSB0eXBlIFNlYXJjaCBGaWVsZCBSZWNlbnQgU2VhcmNoZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L0NvY29hL0FQSU9iamVjdC5tbQppbmRleCA2Yzk5NzI5NDRiOTI4NTY4MGE4MDhiZWY4MmRkNGRh
M2U3MDhiNGFiLi5jY2EwOGEyZWQ0ZTkwZGIxZjEwMzAxYmNhYWMyYWQ0ZThmN2JiY2NjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KQEAgLTUwLDYgKzUwLDggQEAK
ICNpbXBvcnQgIldLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tTZWN1cml0eU9y
aWdpbkludGVybmFsLmgiCiAjaW1wb3J0ICJXS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFs
LmgiCisjaW1wb3J0ICJXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgorI2lt
cG9ydCAiV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCiAjaW1wb3J0ICJXS1VzZXJTY3Jp
cHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lSW50
ZXJuYWwuaCIKQEAgLTY1LDggKzY3LDYgQEAKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0IDxvYmpjL29iamMt
YXV0by5oPgpAQCAtMjAxLDExICsyMDEsMTEgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6
ZV90IHNpemUsIFR5cGUgdHlwZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFR5cGU6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uOgotICAgICAgICB3cmFwcGVyID0gW19XS1VzZXJDb250ZW50Rmls
dGVyIGFsbG9jXTsKKyAgICAgICAgd3JhcHBlciA9IFtXS1VzZXJDb250ZW50RmlsdGVyIGFsbG9j
XTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6Ci0gICAgICAgIHdyYXBwZXIgPSBbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBh
bGxvY107CisgICAgICAgIHdyYXBwZXIgPSBbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFs
bG9jXTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFR5cGU6OlVzZXJTY3JpcHQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNv
bnRlbnRDb250cm9sbGVyLmgKaW5kZXggNmI5NjdlZTI3NTY1MmExYTMzMjFhMWYxY2Q2MjY2OGM5
N2YzNTJkMi4uMjY3YTQyODNiNTRhYjZkMTY3YWE5OTZmODMwNDVmZTMwZGI2YmFjNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29u
dHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIuaApAQCAtMjMsNyArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4K
KyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RmlsdGVyLmg+CiAKICNpZiBXS19BUElfRU5B
QkxFRAogCkBAIC03MCw2ICs3MCwyMCBAQCBXS19DTEFTU19BVkFJTEFCTEUoMTBfMTAsIDhfMCkK
ICAqLwogLSAodm9pZClyZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3RyaW5n
ICopbmFtZTsKIAorLyohIEBhYnN0cmFjdCBBZGRzIGEgdXNlciBjb250ZW50IGZpbHRlci4KKyBA
cGFyYW0gdXNlckNvbnRlbnRGaWx0ZXIgVGhlIHVzZXIgY29udGVudCBmaWx0ZXIgdG8gYWRkLgor
ICovCistICh2b2lkKWFkZFVzZXJDb250ZW50RmlsdGVyOihXS1VzZXJDb250ZW50RmlsdGVyICop
dXNlckNvbnRlbnRGaWx0ZXIgV0tfQVZBSUxBQkxFKDEwXzExLCA5XzApOworCisvKiEgQGFic3Ry
YWN0IFJlbW92ZXMgYSB1c2VyIGNvbnRlbnQgZmlsdGVyLgorIEBwYXJhbSB1c2VyQ29udGVudEZp
bHRlck5hbWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgY29udGVudCBmaWx0ZXIgdG8gcmVtb3ZlLgor
ICovCistICh2b2lkKXJlbW92ZVVzZXJDb250ZW50RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250
ZW50RmlsdGVyTmFtZSBXS19BVkFJTEFCTEUoMTBfMTEsIDlfMCk7CisKKy8qISBAYWJzdHJhY3Qg
UmVtb3ZlcyBhbGwgYXNzb2NpYXRlZCB1c2VyIGNvbnRlbnQgZmlsdGVycy4KKyAqLworLSAodm9p
ZClyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMgV0tfQVZBSUxBQkxFKDEwXzExLCA5XzApOwor
CiBAZW5kCiAKIFdLX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0K
aW5kZXggZmU2ZDYwY2M1MmM1MDQ2YTBiZGE1NTg5YWFiZmUyNGIzZGE1NjZlMC4uNzhiNDhmZjUx
YWYyMjNkYThiZWJlZDI5MWI1ZWQwY2FiYjg3MTQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVy
Lm1tCkBAIC0zMywxMSArMzMsMTEgQEAKICNpbXBvcnQgIldLTlNBcnJheS5oIgogI2ltcG9ydCAi
V0tTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgogI2ltcG9ydCAiV0tTY3JpcHRNZXNzYWdlSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V0tVc2VyU2NyaXB0SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCiAj
aW1wb3J0ICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgogI2ltcG9ydCAiV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHkuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS1VzZXJTdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5E
YXRhLmg+CkBAIC03Nyw2ICs3NywyNyBAQAogICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94
eS0+cmVtb3ZlQWxsVXNlclNjcmlwdHMoKTsKIH0KIAorLSAodm9pZClhZGRVc2VyQ29udGVudEZp
bHRlcjooV0tVc2VyQ29udGVudEZpbHRlciAqKXVzZXJDb250ZW50RmlsdGVyCit7CisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkt
PmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKCp1c2VyQ29udGVudEZpbHRlci0+X3VzZXJDb250ZW50
RXh0ZW5zaW9uKTsKKyNlbmRpZgorfQorCistICh2b2lkKXJlbW92ZVVzZXJDb250ZW50RmlsdGVy
OihOU1N0cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZQoreworI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVVc2Vy
Q29udGVudEV4dGVuc2lvbih1c2VyQ29udGVudEZpbHRlck5hbWUpOworI2VuZGlmCit9CisKKy0g
KHZvaWQpcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzCit7CisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbFVz
ZXJDb250ZW50RXh0ZW5zaW9ucygpOworI2VuZGlmCit9CisKIGNsYXNzIFNjcmlwdE1lc3NhZ2VI
YW5kbGVyRGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFu
ZGxlcjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBTY3JpcHRNZXNzYWdlSGFuZGxlckRlbGVnYXRl
KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICpjb250cm9sbGVyLCBpZCA8V0tTY3JpcHRNZXNzYWdl
SGFuZGxlcj4gaGFuZGxlciwgTlNTdHJpbmcgKm5hbWUpCkBAIC0xMjYsMjcgKzE0Nyw2IEBAIHBy
aXZhdGU6CiAKIEBpbXBsZW1lbnRhdGlvbiBXS1VzZXJDb250ZW50Q29udHJvbGxlciAoV0tQcml2
YXRlKQogCi0tICh2b2lkKV9hZGRVc2VyQ29udGVudEZpbHRlcjooX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKil1c2VyQ29udGVudEZpbHRlcgotewotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29udGVudEV4dGVuc2lv
bigqdXNlckNvbnRlbnRGaWx0ZXItPl91c2VyQ29udGVudEV4dGVuc2lvbik7Ci0jZW5kaWYKLX0K
LQotLSAodm9pZClfcmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXI6KE5TU3RyaW5nICopdXNlckNvbnRl
bnRGaWx0ZXJOYW1lCi17Ci0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBfdXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHVzZXJD
b250ZW50RmlsdGVyTmFtZSk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfcmVtb3ZlQWxsVXNlckNv
bnRlbnRGaWx0ZXJzCi17Ci0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBfdXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygp
OwotI2VuZGlmCi19Ci0KIC0gKHZvaWQpX2FkZFVzZXJTdHlsZVNoZWV0OihfV0tVc2VyU3R5bGVT
aGVldCAqKXVzZXJTdHlsZVNoZWV0CiB7CiAgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LT5hZGRVc2VyU3R5bGVTaGVldCh1c2VyU3R5bGVTaGVldC0+X3VzZXJTdHlsZVNoZWV0LT51c2Vy
U3R5bGVTaGVldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFsLmgKaW5k
ZXggYjc4ZTE5YzA3MDc2OTgwZDUyMDg0MDRkYjljZDY2YzAyYmUwYjRlNi4uYWJlNDZjZmM5MDEx
ODA0OTRjYWU0ZjFlN2MzZjRkMDgyYzFlNWQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlckludGVybmFsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJv
bGxlckludGVybmFsLmgKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAKICNpZiBXS19BUElf
RU5BQkxFRAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaAppbmRleCAzZGY1
YTY1ODJkMjg2YTNiMjAxZTlmZmVjMjBlYTZkYTBhMDAwOWI4Li5mOTAwYjk1NjMwYjMzODU3ODBm
OTk4ZDZhNzQxNmJlZjdhZDliNmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmgKQEAgLTI3LDE1ICsyNywxMCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotQGNsYXNz
IF9XS1VzZXJDb250ZW50RmlsdGVyOwogQGNsYXNzIF9XS1VzZXJTdHlsZVNoZWV0OwogCiBAaW50
ZXJmYWNlIFdLVXNlckNvbnRlbnRDb250cm9sbGVyIChXS1ByaXZhdGUpCiAKLS0gKHZvaWQpX2Fk
ZFVzZXJDb250ZW50RmlsdGVyOihfV0tVc2VyQ29udGVudEZpbHRlciAqKXVzZXJDb250ZW50Rmls
dGVyIFdLX0FWQUlMQUJMRSgxMF8xMSwgOV8wKTsKLS0gKHZvaWQpX3JlbW92ZVVzZXJDb250ZW50
RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZSBXS19BVkFJTEFCTEUoMTBf
MTEsIDlfMCk7Ci0tICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMgV0tfQVZBSUxB
QkxFKDEwXzExLCA5XzApOwotCiAtICh2b2lkKV9hZGRVc2VyU3R5bGVTaGVldDooX1dLVXNlclN0
eWxlU2hlZXQgKil1c2VyU3R5bGVTaGVldCBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9T
X1RCQSk7CiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMgV0tfQVZBSUxBQkxFKFdL
X01BQ19UQkEsIFdLX0lPU19UQkEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTY4NTM3NTBjMmE0YjIyZjQ4YTBhMzll
YjdiNWZiMmQ0ZTMwZDNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLQotI2lmIFdLX0FQSV9FTkFCTEVE
Ci0KLUBjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKLQotV0tfQ0xBU1NfQVZBSUxBQkxFKDEw
XzExLCA5XzApCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09i
amVjdAotCi0rIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlOwotKyAoaW5zdGFuY2V0eXBlKXN0
b3JlV2l0aFVSTDooTlNVUkwgKil1cmw7Ci0KLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246KE5TU3RyaW5nICopIE5TX1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClsb29rdXBDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyOwotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyOwotCi1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxF
RApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzOTgxOGIzYWY2MjRlYzcwM2JmYTkyYWI5OTBhMTRkNjJkZTIzODk3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKLQot
I2lmIFdLX0FQSV9FTkFCTEVECi0KLSNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgotI2ltcG9y
dCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgotI2ltcG9ydCA8c3RyaW5nPgotCi1A
aW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotKyAoaW5zdGFuY2V0
eXBlKWRlZmF1bHRTdG9yZQotewotICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7Ci19Ci0KLSsgKGluc3RhbmNl
dHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsCi17Ci0gICAgUmVmPEFQSTo6VXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZT4gc3RvcmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OnN0b3JlV2l0aFBhdGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7
Ci0gICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOwotfQotCi0tICh2
b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVu
dGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAgU3RyaW5nIGpzb24oZW5j
b2RlZENvbnRlbnRFeHRlbnNpb24pOwotICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lvbiByZWxl
YXNlXTsKLSAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsKLQotICAgIF91c2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBX
VEY6Om1vdmUoanNvbiksIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lv
bj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7Ci0gICAgICAgIGlm
IChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1Vz
ZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDog
JXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgcmF3SGFuZGxlcihu
aWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIkNvbnRlbnRFeHRlbnNpb25zRG9tYWluIiBj
b2RlOmVycm9yLnZhbHVlKCkgdXNlckluZm86dXNlckluZm9dKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIHJh
d0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsK
LSAgICB9KTsKLX0KLQotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAg
YXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAg
X3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRp
ZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50
RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotCi0gICAgICAgICAgICBhdXRvIHVz
ZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIo
KV19OwotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFp
bjpAIkNvbnRlbnRFeHRlbnNpb25zRG9tYWluIiBjb2RlOmVycm9yLnZhbHVlKCkgdXNlckluZm86
dXNlckluZm9dKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1
dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9y
ICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpj
b250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17
Ci0gICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwot
Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24o
aWRlbnRpZmllciwgW2hhbmRsZXJdKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vy
cm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05T
SGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lv
biByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAg
ICAgICAgcmF3SGFuZGxlcihbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJDb250ZW50RXh0ZW5z
aW9uc0RvbWFpbiIgY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAo
dm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKG5p
bCk7Ci0gICAgfSk7Ci19Ci0KLSNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1l
bnRhdGlvbgotCi0tIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAotewotICAgIHJldHVybiAqX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKLQotLy8gRm9yIHRlc3Rpbmcg
b25seS4KLQotLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMKLXsKLSAgICBfdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5z
aW9ucygpOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU3MzUyNDhlNDFkOGJhMjYxZDAzNTU1M2U1MmI3MjkxYjU1ZTVkZTIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJu
YWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgotCi0jaWYgV0tfQVBJX0VO
QUJMRUQKLQotI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgotI2ltcG9y
dCAiV0tPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgc3RvcmUpCi17Ci0gICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Ci19Ci0KLX0KLQotQGlu
dGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICgpIDxXS09iamVjdD4gewotQHBh
Y2thZ2UKLSAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlPiBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKLX0KLUBlbmQKLQotI2VuZGlmIC8vIFdL
X0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMjgwZDViMzY5OGQ3NDUzOTdlMWE5
ZTQxNzQ4Y2YyYzkzN2EyYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lmg+Ci0KLSNpZiBXS19BUElfRU5BQkxFRAotCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKLQotLy8gRm9yIHRlc3Rpbmcgb25seS4KLS0gKHZvaWQp
X3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRl
ci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZp
bHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDY4MmI4ZjM2ZDkxODRjYWUy
M2QwZDdmOTg4NTZhYjlmODZlOTUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRGaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+Ci0KLSNpZiBXS19BUElfRU5BQkxFRAot
Ci1XS19DTEFTU19BVkFJTEFCTEUoMTBfMTEsIDlfMCkKLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRl
bnRGaWx0ZXIgOiBOU09iamVjdAotCi1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29u
dGVudEZpbHRlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
ckNvbnRlbnRGaWx0ZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MjNiN2M2
YTc4NDg3MmNjMDczN2FiZjU5ZmZiMTc0MjJjMmE0ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50
RmlsdGVySW50ZXJuYWwuaCIKLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLSNpbmNsdWRlICJXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9y
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi1AaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRG
aWx0ZXIKLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uLT5+
VXNlckNvbnRlbnRFeHRlbnNpb24oKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotI3By
YWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCi0KLS0gKEFQSTo6T2Jq
ZWN0JilfYXBpT2JqZWN0Ci17Ci0gICAgcmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb247Ci19
Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjExNjYwZDkyYWY3
M2Q0MGYxZjY5ZDNkZWEwMWRhY2VlMDI2MzVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVyLmgiCi0KLSNpZiBX
S19BUElfRU5BQkxFRAotCi0jaW1wb3J0ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgotI2lt
cG9ydCAiV0tPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2Vy
Q29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29u
dGVudEV4dGVuc2lvbikKLXsKLSAgICBBU1NFUlQoW3VzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBw
ZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEZpbHRlciBjbGFzc11dKTsKLSAgICBy
ZXR1cm4gKF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBl
cigpOwotfQotCi19Ci0KLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2Jq
ZWN0PiB7Ci1AcGFja2FnZQotICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRlbnNpb247Ci19Ci1AZW5kCi0KLSNlbmRpZiAvLyBX
S19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGUzYjg2MTQ0OTM0MDg0NzVjYTdjYjY0OGMzNThiNzkxNWNlNWU3
ZWYuLmU4ZWJjZWNkYjlhZjVlNjBmOGFkNTk0MGY0ODU5MGUyZjljOWY3MzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNzks
OSArMTA3OSw5IEBACiAJCTdDMTM1QUFDMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1h
dGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMTM1QUFBMTczQjBDRkYwMDU4NkFFMiAvKiBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbSAqLzsg
fTsKIAkJN0MxQkEzM0QxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MxQkEzM0IxQTRBMEU2
MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwICovOyB9OwogCQk3QzFCQTMzRTFBNEEwRTYw
MDA0M0UyNDkgLyogQVBJRGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MxQkEzM0MxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25h
cnkuaCAqLzsgfTsKLQkJN0MyNDEzMDIxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzI0MTMwMDFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbSAqLzsgfTsKLQkJN0MyNDEzMDMxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJN0MyNDEzMDUxQUFDRkE5QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0MyNDEzMDQxQUFDRkE5QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVJbnRlcm5hbC5oICovOyB9OworCQk3QzI0MTMwMjFBQUNGQTc1MDBBNThDMTUgLyog
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyNDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKKwkJN0MyNDEzMDMxQUFDRkE3NTAwQTU4QzE1
IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyNDEzMDExQUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1
YmxpYywgKTsgfTsgfTsKKwkJN0MyNDEzMDUxQUFDRkE5QzAwQTU4QzE1IC8qIFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzI0MTMwNDFBQUNGQTlDMDBBNThDMTUgLyogV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKIAkJN0MyNDEzMDgxQUFDRkNCNDAwQTU4
QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzI0MTMwNjFBQUNGQ0I0MDBBNThDMTUg
LyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcCAqLzsgfTsKIAkJN0MyNDEzMDkx
QUFDRkNCNDAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyNDEzMDcxQUFDRkNC
NDAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzYxRDcyMTkyN0ZBMzYw
MDM2QTU5RCAvKiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM2MUQ2RjE5MjdGQTM2MDAzNkE1OUQgLyog
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwICovOyB9OwpAQCAtMTEyMSwxNCArMTEyMSwxNCBA
QAogCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQy
QjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsK
IAkJN0M4OUQyQjQxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMjFB
NkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLzsgfTsKIAkJN0M4
OUQyQjYxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjUx
QTZCMEREOTAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTdDODlEMkI5MUE2
QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkI3MUE2QjBGMkMwMDNBNUZERSAv
KiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLzsgfTsKLQkJN0M4OUQyQkExQTZCMEYyQzAwM0E1
RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCODFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNv
bnRlbnRGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk3Qzg5RDJCQzFBNkIwRjVCMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M4OUQyQkIxQTZCMEY1QjAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwu
aCAqLzsgfTsKKwkJN0M4OUQyQjkxQTZCMEYyQzAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0
ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5
RDJCNzFBNkIwRjJDMDAzQTVGREUgLyogV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLzsgfTsKKwkJ
N0M4OUQyQkExQTZCMEYyQzAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkI4MUE2QjBGMkMw
MDNBNUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHVibGljLCApOyB9OyB9OworCQk3Qzg5RDJCQzFBNkIwRjVCMDAzQTVGREUgLyogV0tV
c2VyQ29udGVudEZpbHRlckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCQjFBNkIwRjVCMDAzQTVGREUgLyogV0tVc2VyQ29udGVu
dEZpbHRlckludGVybmFsLmggKi87IH07CiAJCTdDODlEMkQ3MUE2QzZCRTYwMDNBNUZERSAvKiBf
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyRDYxQTZDNkJFNjAwM0E1RkRFIC8qIF9X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmggKi87IH07CiAJCTdDOEVCMTE3MThE
QjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4RUIxMTYxOERCNkExOTAwNzkxN0MyIC8q
IFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0M5RDE1MzcxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdD
b250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M5RDE1MzYxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oICovOyB9OwogCQk3Q0EyNTRFQjE4Mjk5M0NFMDBGQzhBNDEgLyogV0tC
cm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3Np
bmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTdDQTM3OTNFMUFDMzc4QjMwMDc5REMzNyAvKiBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0EzNzkzRDFBQzM3OEIzMDA3OURDMzcgLyogV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdDQjE2RkVGMTcyNEJBMjMwMDdBMEE5NSAvKiBjb20uYXBw
bGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRi
b3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTIx
NzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdp
bi5zYiAqLzsgfTsKIAkJN0NCMTZGRjAxNzI0QkEyNDAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFMzE3MjRCOUI1MDA3QTBB
OTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiICovOyB9OwogCQk3Q0Ix
NkZGMTE3MjRCQTI2MDA3QTBBOTUgLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNi
IGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQjE2RkU0MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0
LnBsdWdpbi1jb21tb24uc2IgKi87IH07CkBAIC0zMjkxLDkgKzMyOTEsOSBAQAogCQk3QzEzNUFB
QTE3M0IwQ0ZGMDA1ODZBRTIgLyogUGx1Z2luSW5mb3JtYXRpb25NYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbk1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxQkEzM0IxQTRBMEU2MDAwNDNFMjQ5IC8qIEFQ
SURpY3Rpb25hcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJ
RGljdGlvbmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMUJBMzNDMUE0
QTBFNjAwMDQzRTI0OSAvKiBBUElEaWN0aW9uYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSURpY3Rpb25hcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0MyNDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzI0MTMw
MTFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMjQxMzA0MUFBQ0ZBOUMwMEE1OEMx
NSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMjQxMzAwMUFBQ0ZBNzUwMEE1OEMx
NSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMxNSAvKiBXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdDMjQxMzA0MUFBQ0ZBOUMwMEE1OEMxNSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzI0MTMwNjFBQUNGQ0I0MDBBNThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMjQxMzA3MUFBQ0ZDQjQwMEE1OEMxNSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVS
ZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzYxRDZGMTky
N0ZBMzYwMDM2QTU5RCAvKiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzM2LDE0ICszMzM2LDE0IEBACiAJCTdDODlE
MkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZE
RSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Qzg5RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlckNvbnRl
bnRDb250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Qzg5
RDJCNzFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8q
IF9XS1VzZXJDb250ZW50RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IF9XS1VzZXJDb250ZW50RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdD
ODlEMkJCMUE2QjBGNUIwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RmlsdGVySW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4OUQyQjcxQTZCMEYyQzAw
M0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1VzZXJDb250ZW50RmlsdGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3Qzg5RDJCODFBNkIwRjJDMDAzQTVGREUgLyogV0tVc2VyQ29udGVudEZp
bHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJDb250ZW50Rmls
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDODlEMkJCMUE2QjBGNUIwMDNB
NUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkQ2MUE2QzZCRTYwMDNBNUZERSAvKiBfV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzhFQjExNjE4REI2QTE5MDA3OTE3QzIgLyogV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M5RDE1MzYxODQ1ODRE
QTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8q
IFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk3Q0EzNzkzRDFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0NBMzc5M0QxQUMzNzhCMzAwNzlEQzM3IC8qIFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5k
cy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5h
cHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlja1Rp
bWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLlF1
aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1v
bi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29t
bW9uLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzNjQsMTMgKzUzNjQsNiBA
QAogCQkJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8s
CiAJCQkJMkQ2QjM3MUExOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcubW0gKi8s
CiAJCQkJMkRBQ0U2NEQxOEFEQkZGMDAwRTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5h
bC5oICovLAotCQkJCTdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmggKi8sCi0JCQkJN0MyNDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8sCi0JCQkJN0MyNDEzMDQxQUFDRkE5QzAwQTU4
QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovLAotCQkJCTdD
QTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJp
dmF0ZS5oICovLAotCQkJCTdDODlEMkI4MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVu
dEZpbHRlci5oICovLAotCQkJCTdDODlEMkI3MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29u
dGVudEZpbHRlci5tbSAqLywKLQkJCQk3Qzg5RDJCQjFBNkIwRjVCMDAzQTVGREUgLyogX1dLVXNl
ckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oICovLAogCQkJCTJEODc4NjFCMUJEQjU0QkYwMEQwMkFC
QiAvKiBfV0tVc2VyU3R5bGVTaGVldC5oICovLAogCQkJCTJEODc4NjFDMUJEQjU0QkYwMEQwMkFC
QiAvKiBfV0tVc2VyU3R5bGVTaGVldC5tbSAqLywKIAkJCQkyRDg3ODYxRjFCREI1N0Y1MDBEMDJB
QkIgLyogX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oICovLApAQCAtNTM5NCw4ICs1Mzg3LDgg
QEAKIAkJCQkzN0I1MDQ1MTE5RUVGMzEzMDBDRTJDRjggLyogV0tFcnJvclByaXZhdGUuaCAqLywK
IAkJCQkxQTRENjY0QTE4QTMwMzBFMDBEODJFMjEgLyogV0tGcmFtZUluZm8uaCAqLywKIAkJCQkx
QTRENjY0OTE4QTMwMzBFMDBEODJFMjEgLyogV0tGcmFtZUluZm8ubW0gKi8sCi0JCQkJMUE2RkEy
MUQxQkQwNDM1QjAwQUFBNjUwIC8qIFdLRnJhbWVJbmZvUHJpdmF0ZS5oICovLAogCQkJCTJERjlF
RUU3MUE3ODI0NTUwMEI2Q0ZCRSAvKiBXS0ZyYW1lSW5mb0ludGVybmFsLmggKi8sCisJCQkJMUE2
RkEyMUQxQkQwNDM1QjAwQUFBNjUwIC8qIFdLRnJhbWVJbmZvUHJpdmF0ZS5oICovLAogCQkJCTFB
NDIyRjhBMThCMjlCNTQwMEQ4Q0Q5NiAvKiBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGUuaCAqLywK
IAkJCQkxQTVCMUM0RjE4OTg2MDZGMDA0RkNGOUIgLyogV0tOYXZpZ2F0aW9uLmggKi8sCiAJCQkJ
MUE1QjFDNEUxODk4NjA2RjAwNEZDRjlCIC8qIFdLTmF2aWdhdGlvbi5tbSAqLywKQEAgLTU0MzIs
NiArNTQyNSwxMyBAQAogCQkJCTFBRkEzQUM2MThFNjFDNjEwMDNDQ0JBRSAvKiBXS1VzZXJDb250
ZW50Q29udHJvbGxlci5tbSAqLywKIAkJCQkxQUFGMDhBMzE5MjY4MkRBMDBCNjM5MEMgLyogV0tV
c2VyQ29udGVudENvbnRyb2xsZXJJbnRlcm5hbC5oICovLAogCQkJCTdDODlEMkI1MUE2QjBERDkw
MDNBNUZERSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaCAqLywKKwkJCQk3QzI0
MTMwMTFBQUNGQTc1MDBBNThDMTUgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8s
CisJCQkJN0MyNDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbSAqLywKKwkJCQk3QzI0MTMwNDFBQUNGQTlDMDBBNThDMTUgLyogV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAqLywKKwkJCQk3Q0EzNzkzRDFBQzM3OEIzMDA3OURD
MzcgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAorCQkJCTdDODlE
MkI4MUE2QjBGMkMwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVyLmggKi8sCisJCQkJN0M4
OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8sCisJCQkJ
N0M4OUQyQkIxQTZCMEY1QjAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5o
ICovLAogCQkJCTFBQUYwODk5MTkyNjdFRTUwMEI2MzkwQyAvKiBXS1VzZXJTY3JpcHQuaCAqLywK
IAkJCQkxQUFGMDg5ODE5MjY3RUU1MDBCNjM5MEMgLyogV0tVc2VyU2NyaXB0Lm1tICovLAogCQkJ
CTFBQUYwODlDMTkyNjdGQzgwMEI2MzkwQyAvKiBXS1VzZXJTY3JpcHRJbnRlcm5hbC5oICovLApA
QCAtNzYwMCwxMSArNzYwMCwxMSBAQAogCQkJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBf
V0tTZXNzaW9uU3RhdGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ2QjM3MUIxOEE5
NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
QUNFNjRFMThBREJGRjAwMEU0Q0E3NiAvKiBfV0tUaHVtYm5haWxWaWV3SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTdDMjQxMzAzMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzI0MTMwNTFBQUNGQTlDMDBB
NThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDODlEMkJBMUE2QjBGMkMw
MDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0M4
OUQyQkMxQTZCMEY1QjAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDMjQxMzAzMUFBQ0ZBNzUwMEE1OEMxNSAvKiBXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMjQxMzA1MUFBQ0ZBOUMw
MEE1OEMxNSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJN0NBMzc5M0UxQUMzNzhCMzAwNzlEQzM3IC8qIFdLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDODlEMkJBMUE2QjBGMkMw
MDNBNUZERSAvKiBXS1VzZXJDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Qzg5
RDJCQzFBNkIwRjVCMDAzQTVGREUgLyogV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTIwNjc5MzFCOEI5MDY2MDBDMTNDMzYgLyogX1dLVmlzaXRlZExp
bmtQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4MUIzODExOEJENjZBRDAwMDdGREFD
IC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBODFCMzg1MThC
RDY3M0EwMDA3RkRBQyAvKiBfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTQzMiw4ICs5NDMyLDggQEAKIAkJCQkxQTlFMzI4QTE4MjE2MzY5MDBGNUQwNEMg
LyogX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTAwMkQ0
NTE5NkIzMzhFMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkQ2QjM3MUMxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcubW0gaW4gU291
cmNlcyAqLywKLQkJCQk3QzI0MTMwMjFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTdDODlEMkI5MUE2QjBGMkMwMDNB
NUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDMjQx
MzAyMUFBQ0ZBNzUwMEE1OEMxNSAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4g
U291cmNlcyAqLywKKwkJCQk3Qzg5RDJCOTFBNkIwRjJDMDAzQTVGREUgLyogV0tVc2VyQ29udGVu
dEZpbHRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMjA2NzkyMUI4QjkwNjYwMEMxM0MzNiAv
KiBfV0tWaXNpdGVkTGlua1Byb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4MUIzODAx
OEJENjZBRDAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3RvcmUubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxQUZCNEM3MTFBREYxNTVEMDBCMzMzMzkgLyogX1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDAwOGZkNTU5MmQ5M2NjYzYxMGIyOTNkNTk5NTcyNzY2ZTZiYzc4ZDIuLjAzMzU1
NjI1NzgxMjI2ZGE5ZjQ0OGFiNjExYWExNTIwNDA5NGQwNGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxNS0xMC0y
NyAgQnJpYW4gTmljaG9sc29uICA8Ym5pY2hvbHNvbkBtb3ppbGxhLmNvbT4KKworICAgICAgICBV
cGRhdGUgdGVzdHMgdG8gdXNlIHB1YmxpYyBjb250ZW50IGZpbHRlcmluZyBBUElzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDb250ZW50RXh0ZW5z
aW9uVGVzdGVyL21haW4ubToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIE1pbmlCcm93c2Vy
L21hYy9BcHBEZWxlZ2F0ZS5tOgorICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9FeHRlbnNpb25N
YW5hZ2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoLVtFeHRlbnNpb25NYW5hZ2VyV2lu
ZG93Q29udHJvbGxlciBpbml0XSk6CisgICAgICAgICgtW0V4dGVuc2lvbk1hbmFnZXJXaW5kb3dD
b250cm9sbGVyIGFkZDpdKToKKyAgICAgICAgKC1bRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRy
b2xsZXIgcmVtb3ZlOl0pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTogUmVuYW1lZCBmcm9t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0uCisgICAgICAgIChXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0
OjpTZXRVcCk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
Y29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmNvY29hUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKwogMjAxNS0xMC0yNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIEFkZCBt
eXNlbGYgdG8gdGhlIHJldmlld2VycyBsaXN0CmRpZmYgLS1naXQgYS9Ub29scy9Db250ZW50RXh0
ZW5zaW9uVGVzdGVyL21haW4ubSBiL1Rvb2xzL0NvbnRlbnRFeHRlbnNpb25UZXN0ZXIvbWFpbi5t
CmluZGV4IDBiMjIxMTlmMDNjNDg2YjAxZDUwMTBiMjg3ZjlmOTc2NmU5Yzk0M2UuLmU2ZGZiODM4
NGJkZGE0NTdlMDBiOGI2N2JlNDMzM2E3Y2U2NTIyNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NvbnRl
bnRFeHRlbnNpb25UZXN0ZXIvbWFpbi5tCisrKyBiL1Rvb2xzL0NvbnRlbnRFeHRlbnNpb25UZXN0
ZXIvbWFpbi5tCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmg+CiAKIHN0YXRpYyB2b2lkIHJ1bihib29sKiBkb25lKQogewpAQCAtNDAsMTMgKzQw
LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAg
ICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAotICAgICAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOworICAg
ICAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVB
bGxDb250ZW50RXh0ZW5zaW9uc107CiAKICAgICAgICAgTlNTdHJpbmcgKnBhdGggPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YXJndlsxXV07CiAgICAgICAgIE5TU3RyaW5nICpqc29u
U3RyaW5nID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDb250ZW50c09mRmlsZTpwYXRoIGVu
Y29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07CiAKICAgICAgICAgX19ibG9j
ayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICAgICAgW1tfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246anNvblN0cmlu
ZyBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIgX19hdHRy
aWJ1dGVfXygodW51c2VkKSksIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIFtbV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246anNv
blN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjpeKFdLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciBf
X2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgICAgIGlm
IChlcnJvcikKICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBjb21waWxlIGV4dGVu
c2lvbiBhdCAlcyB3aXRoIGVycm9yICVzIiwgcGF0aC5VVEY4U3RyaW5nICwgZXJyb3IuZGVzY3Jp
cHRpb24uVVRGOFN0cmluZyk7CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdhdGUubSBiL1Rvb2xzL01pbmlCcm93c2VyL21hYy9BcHBE
ZWxlZ2F0ZS5tCmluZGV4IDQ1MWI5Yjg4MTdmN2Q2M2Q4ZjhhMzk2MTUyNTc2OTJjM2JhZjQzMGIu
LjAyMTJjZjgyNmMzMDdjN2E5NGM2ZDZhNTAwMzFmYWYyMTA4NzY0MTYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL21hYy9BcHBEZWxlZ2F0ZS5tCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L21hYy9BcHBEZWxlZ2F0ZS5tCkBAIC0zMSwxMSArMzEsMTAgQEAKICNpbXBvcnQgIldLMkJyb3dz
ZXJXaW5kb3dDb250cm9sbGVyLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZh
dGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgotI2ltcG9ydCA8
V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJL
aXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgogCiBlbnVtIHsKICAgICBXZWJLaXQx
TmV3V2luZG93VGFnID0gMSwKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL21hYy9FeHRl
bnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5tIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL0V4
dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLm0KaW5kZXggZmU5YTYyNmQ1ZWJlOGFkNDJk
N2Q2MjQxNTJlZWE1ZmZkYTk3MDQzMy4uOWVhYjkxNDQ4ZjU1OWQ2ZDdlNzBhMzM1Njg5ODZjMDk4
MDc2NzU0NyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvbWFjL0V4dGVuc2lvbk1hbmFn
ZXJXaW5kb3dDb250cm9sbGVyLm0KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL0V4dGVuc2lv
bk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLm0KQEAgLTI4LDggKzI4LDcgQEAKICNpZiBXS19BUElf
RU5BQkxFRAogCiAjaW1wb3J0ICJBcHBEZWxlZ2F0ZS5oIgotI2ltcG9ydCA8V2ViS2l0L1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaD4KIAogQGltcGxlbWVudGF0aW9uIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250
cm9sbGVyCiAKQEAgLTQwLDcgKzM5LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICAgICAg
TlNBcnJheSogaW5zdGFsbGVkQ29udGVudEV4dGVuc2lvbnMgPSBbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBhcnJheUZvcktleTpAIkluc3RhbGxlZENvbnRlbnRFeHRlbnNp
b25zIl07CiAgICAgICAgIGlmIChpbnN0YWxsZWRDb250ZW50RXh0ZW5zaW9ucykgewogICAgICAg
ICAgICAgZm9yIChOU1N0cmluZyAqaWRlbnRpZmllciBpbiBpbnN0YWxsZWRDb250ZW50RXh0ZW5z
aW9ucykgewotICAgICAgICAgICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZp
ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZXh0ZW5zaW9uLCBO
U0Vycm9yICplcnJvcikKKyAgICAgICAgICAgICAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlk
ZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50RmlsdGVyICpleHRlbnNp
b24sIE5TRXJyb3IgKmVycm9yKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIkV4dGVuc2lv
biBzdG9yZSBnb3Qgb3V0IG9mIHN5bmMgd2l0aCBzeXN0ZW0gZGVmYXVsdHMuIik7CkBAIC00OCw3
ICs0Nyw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAgICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgICAgICBCcm93c2VyQXBwRGVsZWdhdGUqIGFwcERlbGVnYXRlID0gKEJy
b3dzZXJBcHBEZWxlZ2F0ZSAqKVtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gZGVs
ZWdhdGVdOwotICAgICAgICAgICAgICAgICAgICBbYXBwRGVsZWdhdGUudXNlckNvbnRlbnRDb250
b2xsZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOmV4dGVuc2lvbl07CisgICAgICAgICAgICAgICAg
ICAgIFthcHBEZWxlZ2F0ZS51c2VyQ29udGVudENvbnRvbGxlciBhZGRVc2VyQ29udGVudEZpbHRl
cjpleHRlbnNpb25dOwogICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIApAQCAtODIsNyArODEsNyBAQCAtIChJQkFjdGlvbilhZGQ6KGlkKXNlbmRlcgog
ICAgICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IHVybC5sYXN0UGF0aENvbXBvbmVudDsKICAg
ICAgICAgTlNTdHJpbmcgKmpzb25TdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENv
bnRlbnRzT2ZVUkw6dXJsIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOm5pbF07
CiAKLSAgICAgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0g
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENv
bnRlbnRFeHRlbnNpb246anNvblN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250
ZW50RmlsdGVyICpleHRlbnNpb24sIE5TRXJyb3IgKmVycm9yKQorICAgICAgICBbW1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmpzb25TdHJp
bmcgY29tcGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50RmlsdGVyICpleHRlbnNpb24sIE5T
RXJyb3IgKmVycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChl
cnJvcikgewpAQCAtMTA2LDcgKzEwNSw3IEBAIC0gKElCQWN0aW9uKWFkZDooaWQpc2VuZGVyCiAg
ICAgICAgICAgICBbYXJyYXlDb250cm9sbGVyIGFkZE9iamVjdDppZGVudGlmaWVyXTsKIAogICAg
ICAgICAgICAgQnJvd3NlckFwcERlbGVnYXRlKiBhcHBEZWxlZ2F0ZSA9IChCcm93c2VyQXBwRGVs
ZWdhdGUgKilbW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIGRlbGVnYXRlXTsKLSAg
ICAgICAgICAgIFthcHBEZWxlZ2F0ZS51c2VyQ29udGVudENvbnRvbGxlciBfYWRkVXNlckNvbnRl
bnRGaWx0ZXI6ZXh0ZW5zaW9uXTsKKyAgICAgICAgICAgIFthcHBEZWxlZ2F0ZS51c2VyQ29udGVu
dENvbnRvbGxlciBhZGRVc2VyQ29udGVudEZpbHRlcjpleHRlbnNpb25dOwogICAgICAgICB9XTsK
ICAgICB9XTsKIApAQCAtMTE4LDcgKzExNyw3IEBAIC0gKElCQWN0aW9uKXJlbW92ZTooaWQpc2Vu
ZGVyCiAKICAgICBOU1N0cmluZyAqaWRlbnRpZmllclRvUmVtb3ZlID0gYXJyYXlDb250cm9sbGVy
LmFycmFuZ2VkT2JqZWN0c1tpbmRleF07CiAKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpp
ZGVudGlmaWVyVG9SZW1vdmUgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikKKyAg
ICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJUb1JlbW92ZSBjb21wbGV0aW9uSGFu
ZGxlcjpeKE5TRXJyb3IgKmVycm9yKQogICAgIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAg
ICAgICAgICBOU0FsZXJ0ICphbGVydCA9IFtOU0FsZXJ0IGFsZXJ0V2l0aEVycm9yOmVycm9yXTsK
QEAgLTEzNCw3ICsxMzMsNyBAQCAtIChJQkFjdGlvbilyZW1vdmU6KGlkKXNlbmRlcgogCiAgICAg
ICAgIFthcnJheUNvbnRyb2xsZXIgcmVtb3ZlT2JqZWN0QXRBcnJhbmdlZE9iamVjdEluZGV4Omlu
ZGV4XTsKICAgICAgICAgQnJvd3NlckFwcERlbGVnYXRlKiBhcHBEZWxlZ2F0ZSA9IChCcm93c2Vy
QXBwRGVsZWdhdGUgKilbW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIGRlbGVnYXRl
XTsKLSAgICAgICAgW2FwcERlbGVnYXRlLnVzZXJDb250ZW50Q29udG9sbGVyIF9yZW1vdmVVc2Vy
Q29udGVudEZpbHRlcjppZGVudGlmaWVyVG9SZW1vdmVdOworICAgICAgICBbYXBwRGVsZWdhdGUu
dXNlckNvbnRlbnRDb250b2xsZXIgcmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXI6aWRlbnRpZmllclRv
UmVtb3ZlXTsKICAgICB9XTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1OGIzMmM5
YmQ2ZWY5ZGI2NWZiOGYxZmNlNGI1MWIwZjRmZWQ4N2NmLi5iZGI0ZWIyNzI0OTQ1NWI5MTg3ZTNj
MTI1MTk1NDRlOWNlMjI2NmY0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjU0LDcgKzI1
NCw3IEBACiAJCTdDQ0U3RjREMUE0MTFCOUYwMDQ0N0M0QyAvKiBSZXRhaW5QdHIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyOUIxQjE0ODZCMjU5
MDA4MTdEQTkgLyogUmV0YWluUHRyLm1tICovOyB9OwogCQk3Q0NFN0Y0RTFBNDExQkE0MDA0NDdD
NEMgLyogUmV0YWluUHRyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMDI5QjE2MTQ4NkFENjQwMDgxN0RBOSAvKiBSZXRhaW5QdHIuY3BwICovOyB9
OwogCQk3Q0NFN0Y0RjFBNDExQkE0MDA0NDdDNEMgLyogUmV0YWluUHRySGFzaGluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDk5MUM1MDE0M0M3
RDY4MDA3OTk4RjIgLyogUmV0YWluUHRySGFzaGluZy5jcHAgKi87IH07Ci0JCTdDRUZBOTY2MUFD
MEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFRkE5NjQxQUMwQjlFMjAw
QjkxMEZEIC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi87IH07CisJCTdDRUZB
OTY2MUFDMEI5RTIwMEI5MTBGRCAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VGQTk2NDFBQzBC
OUUyMDBCOTEwRkQgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk3
Q0ZCQ0FFNTE3NDMyMzhGMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkJDQUUzMTc0MzIzOEUwMEIy
QkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2
Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMt
b2YtdGV4dC5odG1sICovOyB9OwogCQk5MzYxMDAyOTE0REM5NUE3MDA2MTM3OUQgLyogbG90cy1v
Zi1pZnJhbWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM2MTAwMjgxNERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5o
dG1sICovOyB9OwpAQCAtNjAzLDcgKzYwMyw3IEBACiAJCTdDQzNFMUZBMTk3RTIzNDEwMEJFNjI1
MiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBVc2VyQ29udGVudENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDQ0U3RThDMUE0MTE0NEUwMDQ0N0M0QyAvKiBsaWJUZXN0V2ViS2l0QVBJ
LmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hp
dmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYlRlc3RXZWJLaXRBUEkuYTsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0NDRTdFQTMxQTQxMTVDQjAwNDQ3
QzRDIC8qIFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRlc3RX
ZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRUZBOTY0
MUFDMEI5RTIwMEI5MTBGRCAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUREMTc0MzIzNEYw
MEIyQkZDRiAvKiBXaWxsTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXaWxsTG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUUz
MTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbExvYWRfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODFCNTAxOTIxNDBGMjMyMzAwRDlFQjU4IC8qIFN0cmluZ0J1aWxkZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQnVpbGRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MDMsNyArOTAzLDYgQEAKIAkJMUFC
QzNERUMxODk5QkU1NTAwNEYwNjI2IC8qIFdlYktpdDIgQ29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAv
KiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovLAogCQkJCTJERDM1NTM1MUJEMDgz
NzgwMDVERjRBNyAvKiBBdXRvTGF5b3V0SW50ZWdyYXRpb24ubW0gKi8sCiAJCQkJQTEzRUJCQUMx
Qjg3NDM2RjAwMDk3MTEwIC8qIEJ1bmRsZVBhcmFtZXRlcnMubW0gKi8sCiAJCQkJQTEzRUJCQUUx
Qjg3NDM2RjAwMDk3MTEwIC8qIEJ1bmRsZVBhcmFtZXRlcnNQbHVnSW4ubW0gKi8sCkBAIC05MjEs
NiArOTIwLDcgQEAKIAkJCQkzN0JDQTYxQjFCNTk2QkE5MDAyMDEyQ0EgLyogU2hvdWxkT3BlbkV4
dGVybmFsVVJMc0luTmV3V2luZG93QWN0aW9ucy5tbSAqLywKIAkJCQkyRDlBNTNBRTFCMzFGQThE
MDA3NEQ1QUEgLyogU2hyaW5rVG9GaXQubW0gKi8sCiAJCQkJN0NDM0UxRkExOTdFMjM0MTAwQkU2
MjUyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5tbSAqLywKKwkJCQk3Q0VGQTk2NDFBQzBCOUUy
MDBCOTEwRkQgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovLAogCQkJCTBGM0I5
NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8s
CiAJCQkpOwogCQkJbmFtZSA9ICJXZWJLaXQyIENvY29hIjsKQEAgLTE1NzksNyArMTU3OSw3IEBA
CiAJCQkJN0NDRTdFRUUxQTQxMUFFNjAwNDQ3QzRDIC8qIERvd25sb2FkRGVjaWRlRGVzdGluYXRp
b25DcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VCRTFBNDExQTdFMDA0NDdDNEMg
LyogRHluYW1pY0RldmljZVNjYWxlRmFjdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdCQ0E2
MUMxQjU5NkJBOTAwMjAxMkNBIC8qIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNJbk5ld1dpbmRvd0Fj
dGlvbnMubW0gaW4gU291cmNlcyAqLywKLQkJCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyog
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDRUZB
OTY2MUFDMEI5RTIwMEI5MTBGRCAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4g
U291cmNlcyAqLywKIAkJCQk3Q0NFN0VFMDFBNDExQTlBMDA0NDdDNEMgLyogRWRpdG9yQ29tbWFu
ZHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VCRjFBNDExQTdFMDA0NDdDNEMgLyogRWxl
bWVudEF0UG9pbnRJbldlYkZyYW1lLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRUYxQTQx
MUFFNjAwNDQ3QzRDIC8qIEVwaGVtZXJhbFNlc3Npb25QdXNoU3RhdGVOb0hpc3RvcnlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWEwZmUyYmVlZjdhYjRjZWJk
YjlmM2ZjOTcxZmQ5OGM1NDgxZWRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCA8V2ViS2l0L1dLRm91
bmRhdGlvbi5oPgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCAiUGxhdGZvcm1VdGls
aXRpZXMuaCIKLSNpbXBvcnQgIlRlc3QuaCIKLSNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1j
bGFzcyBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpU
ZXN0IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQotICAgIHsKLSAgICAgICAg
W1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zXTsKLSAgICB9Ci19OwotCi1zdGF0aWMgTlNTdHJpbmcgKmJhc2ljRmls
dGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwotCi1URVNUX0YoX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCi17Ci0gICAgX19ibG9jayBib29sIGRvbmVD
b21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVm
YXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0
ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFu
ZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7Ci0g
ICAgCi0gICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwotICAgICAgICBFWFBFQ1RfTlVM
TChlcnJvcik7Ci0KLSAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7Ci0gICAgfV07Ci0gICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKLX0KLQotc3RhdGljIE5T
U3RyaW5nICppbnZhbGlkRmlsdGVyID0gQCJbIjsKLQotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVUZXN0LCBJbnZhbGlkRXh0ZW5zaW9uKQotewotICAgIF9fYmxvY2sgYm9vbCBk
b25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVz
dEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246aW52YWxpZEZpbHRlciBjb21wbGV0
aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9y
KSB7Ci0gICAgCi0gICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7Ci0gICAgICAgIEVYUEVDVF9O
T1RfTlVMTChlcnJvcik7Ci0gICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGNvbXBpbGF0
aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmluZy4iLCBbW2Vycm9yIGhl
bHBBbmNob3JdIFVURjhTdHJpbmddKTsKLQotICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsK
LSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwot
fQotCi1URVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIExvb2t1cCkKLXsK
LSAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJh
c2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRl
ciwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAKLSAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRl
cik7Ci0gICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKLQotICAgICAgICBkb25lQ29tcGlsaW5n
ID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21w
aWxpbmcpOwotCi0gICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKLSAgICBb
W19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVy
Ol4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAK
LSAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7Ci0gICAgICAgIEVYUEVDVF9OVUxMKGVy
cm9yKTsKLQotICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOwotfQotCi1URVNUX0YoX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkK
LXsKLSAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOwotICAgIFtbX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1Vz
ZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgCi0gICAgICAg
IEVYUEVDVF9OVUxMKGZpbHRlcik7Ci0gICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7Ci0g
ICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFVuc3BlY2lmaWVk
IGVycm9yIGR1cmluZyBsb29rdXAuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7
Ci0KLSAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsKLX0KLQotVEVTVF9GKF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1vdmFsKQotewotICAgIF9fYmxvY2sgYm9vbCBkb25l
Q29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRl
ZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhh
bmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewot
ICAgIAotICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKLSAgICAgICAgRVhQRUNUX05V
TEwoZXJyb3IpOwotCi0gICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOwotICAgIH1dOwotICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Ci0KLSAgICBfX2Jsb2Nr
IGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7Ci0g
ICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKLQotICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVl
OwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsK
LX0KLQotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGlu
Z0lkZW50aWZpZXJSZW1vdmUpCi17Ci0gICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZh
bHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJl
bW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0
aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgICAgIEVYUEVDVF9OT1RfTlVMTChl
cnJvcik7Ci0gICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiBV
bnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRG
OFN0cmluZ10pOwotCi0gICAgICAgIGRvbmVSZW1vdmluZyA9IHRydWU7Ci0gICAgfV07Ci0gICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lUmVtb3ZpbmcpOwotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2Nv
YS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5t
bQppbmRleCBkMjMxYjVlMjM4NmFlYjdkZGM2YjcwYzZlODdkNDhiYWE0YmQzNjkxLi4yMjVjZTY2
Nzc3Mzg0YzZkNTRlY2NkYTE3NjA0Njg4Njg4NjQ5ODEwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCkBAIC0zNSwxNCArMzUs
MTMgQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tTdHJp
bmdDRi5oPgotI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgorI2ltcG9y
dCA8V2ViS2l0L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0
aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oPgotI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3Bh
Y2UgV1RSIHsKQEAgLTExNCwxNCArMTEzLDE0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29h
UmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKICAg
ICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklk
ZW50aWZpZXI6QCJUZXN0Q29udGVudEV4dGVuc2lvbnMiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNF
cnJvciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdENvbnRlbnRF
eHRlbnNpb25zIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAg
IGRvbmVSZW1vdmluZyA9IHRydWU7CiAgICAgfV07CiAgICAgcGxhdGZvcm1SdW5VbnRpbChkb25l
UmVtb3ZpbmcsIDApOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAgW1tXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNd
OwogCiAgICAgaWYgKFBsYXRmb3JtV2ViVmlldyogd2ViVmlldyA9IG1haW5XZWJWaWV3KCkpCi0g
ICAgICAgIFt3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5jb25maWd1cmF0aW9uLnVzZXJDb250ZW50
Q29udHJvbGxlciBfcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzXTsKKyAgICAgICAgW3dlYlZp
ZXctPnBsYXRmb3JtVmlldygpLmNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyIHJl
bW92ZUFsbFVzZXJDb250ZW50RmlsdGVyc107CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0gYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQppbmRleCAyZjk4ZDlkMzA4ZmQ1
ZTU3ZTcxY2IxY2M4NTkwMzkyYTc0NDY1YjNmLi42NDBiYmFmYzViZjBlMWQ0NTczODlkM2ViOWY2
ZjMyZTYwNWJiY2M2IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0
Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29u
dHJvbGxlcklPUy5tbQpAQCAtMzIsNyArMzIsNiBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVy
ZW5jZXNSZWZQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCmluZGV4IGNlZmRhY2ZhNjM4NzZkYzhj
NmYxODMxZjI1YmMwNWRhZWU5ZTczNjUuLjFhMjZmMjY4OGNlMzk3MjVkNWM3YmFlNTkzNjExODdm
ZjhiMWZmNmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250
cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9s
bGVyTWFjLm1tCkBAIC0zNiwxMyArMzYsMTIgQEAKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLU3RyaW5nQ0YuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VSTENGLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KLSNpbXBvcnQgPFdl
YktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+Ci0jaW1wb3J0IDxXZWJLaXQvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPG1hY2gtby9keWxk
Lmg+CiAKIEBpbnRlcmZhY2UgTlNTb3VuZCAoKQpAQCAtMTE0LDEwICsxMTMsMTAgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYgdGVzdCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIF9fYmxvY2sgYm9vbCBk
b25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVz
dENvbnRlbnRFeHRlbnNpb25zIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb250ZW50RXh0ZW5z
aW9uU3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRl
ciwgTlNFcnJvciAqZXJyb3IpCisgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVm
YXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0Q29u
dGVudEV4dGVuc2lvbnMiIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbnRlbnRFeHRlbnNpb25T
dHJpbmcgY29tcGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5T
RXJyb3IgKmVycm9yKQogICAgIHsKICAgICAgICAgaWYgKCFlcnJvcikKLSAgICAgICAgICAgIFtt
YWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKS5jb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29u
dHJvbGxlciBfYWRkVXNlckNvbnRlbnRGaWx0ZXI6ZmlsdGVyXTsKKyAgICAgICAgICAgIFttYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKS5jb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJv
bGxlciBhZGRVc2VyQ29udGVudEZpbHRlcjpmaWx0ZXJdOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBOU0xvZyhAIiVAIiwgW2Vycm9yIGhlbHBBbmNob3JdKTsKICAgICAgICAgZG9uZUNvbXBp
bGluZyA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303869</attachid>
            <date>2017-03-08 17:08:25 -0800</date>
            <delta_ts>2017-03-09 16:30:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20170308170824.patch</filename>
            <type>text/plain</type>
            <size>101997</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTAzLTA4ICBCcmlhbiBO
aWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBm
b3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEVuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNy0w
My0wOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBv
dXRkYXRlZCBjb21tZW50IGFib3V0IEhUTUxFbGVtZW50LmRyb3B6b25lCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCShyZXZpc2lv
biAyMTM1ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0
cmluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsOSBAQAogLyogU3VidGl0bGUgb2Yg
dGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWluICovCiAiQ2xpY2sgdG8g
cmVzdGFydCIgPSAiQ2xpY2sgdG8gcmVzdGFydCI7CiAKKy8qIFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb21waWxlRmFpbGVkIGRlc2NyaXB0aW9uICovCisiQ29tcGlsaW5nIGEgV0tVc2Vy
Q29udGVudEV4dGVuc2lvbiBmYWlsZWQiID0gIkNvbXBpbGluZyBhIFdLVXNlckNvbnRlbnRFeHRl
bnNpb24gZmFpbGVkIjsKKwogLyogV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgZGVzY3Jp
cHRpb24gKi8KICJDb250ZW50IHdpdGggc3BlY2lmaWVkIE1JTUUgdHlwZSBjYW7igJl0IGJlIHNo
b3duIiA9ICJDb250ZW50IHdpdGggc3BlY2lmaWVkIE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3du
IjsKIApAQCAtMzU4LDYgKzM2MSwxMiBAQAogLyogTG9vayBVcCBjb250ZXh0IG1lbnUgaXRlbSB3
aXRoIHNlbGVjdGVkIHdvcmQgKi8KICJMb29rIFVwIOKAnDxzZWxlY3Rpb24+4oCdIiA9ICJMb29r
IFVwIOKAnDxzZWxlY3Rpb24+4oCdIjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLworIkxvb2tpbmcgdXAgYSBXS1VzZXJDb250ZW50
RXh0ZW5zaW9uIGZhaWxlZCIgPSAiTG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24g
ZmFpbGVkIjsKKworLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRj
aCBkZXNjcmlwdGlvbiAqLworIkxvb2tpbmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZv
dW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIiA9ICJMb29raW5nIHVwIGEgV0tVc2Vy
Q29udGVudEV4dGVuc2lvbiBmb3VuZCBhIGJpbmFyeSB0aGF0IGlzIGluY29tcGF0aWJsZSI7CisK
IC8qIE1lZGlhIExvb3AgY29udGV4dCBtZW51IGl0ZW0gKi8KICJMb29wIiA9ICJMb29wIjsKIApA
QCAtNDk2LDYgKzUwNSw5IEBACiAvKiBSZWxvYWQgY29udGV4dCBtZW51IGl0ZW0gKi8KICJSZWxv
YWQiID0gIlJlbG9hZCI7CiAKKy8qIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVG
YWlsZWQgZGVzY3JpcHRpb24gKi8KKyJSZW1vdmluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24g
ZmFpbGVkIiA9ICJSZW1vdmluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKwog
LyogZGVmYXVsdCBsYWJlbCBmb3IgUmVzZXQgYnV0dG9ucyBpbiBmb3JtcyBvbiB3ZWIgcGFnZXMg
Ki8KICJSZXNldCIgPSAiUmVzZXQiOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTM1ODgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4
NyBAQAorMjAxNy0wMy0wOCAgQnJpYW4gTmljaG9sc29uICA8Ym5pY2hvbHNvbkBtb3ppbGxhLmNv
bT4gYW5kIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBFeHBvc2UgcHVibGljIEFQSXMgZm9yIGNvbnRlbnQgZmlsdGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB0YWtlcyBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGFuZCBfV0tVc2VyQ29udGVudEZpbHRlciBhbmQgdHVybnMgdGhl
bSBpbnRvIHRoZSBjb25zaXN0ZW50bHktbmFtZWQgcHVibGljIEFQSQorICAgICAgICBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgYW5kIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gcmVzcGVjdGl2
ZWx5IHdpdGggdGhlIHNhbWUgZGVzaWduIGFuZCBmdW5jdGlvbmFseSBvZiB0aGUgb3JpZ2luYWwg
U1BJLgorICAgICAgICBXZSBhbHNvIGFkZGVkIHB1YmxpYyBmdW5jdGlvbnMgdG8gV0tVc2VyQ29u
dGVudENvbnRyb2xsZXIgY29ycmVzcG9uZGluZyB0byBleGlzdGluZyBwcml2YXRlIGZ1bmN0aW9u
cy4KKworICAgICAgICBUaGUgb2xkIFNQSSBPYmpDIGNsYXNzZXMgYXJlIG5vdyBqdXN0IHdyYXBw
ZXJzIGFyb3VuZCB0aGUgbmV3IE9iakMgY2xhc3Nlcywgd2hpY2ggYXJlIHdyYXBwZXJzIGFyb3Vu
ZCBDKysgb2JqZWN0cyBpbiB0aGUgQVBJIG5hbWVzcGFjZS4KKyAgICAgICAgCisgICAgICAgIFRo
ZSBwZWFrLW1lbW9yeS1yZWR1Y2luZyBvcHRpbWl6YXRpb24gb2YgaGF2aW5nIE5TX1JFTEVBU0VT
X0FSR1VNRU5UIGluIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXIgaXMga2Vw
dCBmb3IgU2FmYXJpLAorICAgICAgICBidXQgdGhlIHB1YmxpYyBBUEkgZG9lc24ndCBuZWVkIHN1
Y2ggYW4gb3B0aW1pemF0aW9uLiAgVGhlIHB1YmxpYyBjb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXIgd2lsbCBub3QgZGVhbGxvY2F0ZSB0aGUgaW5wdXQKKyAgICAgICAgTlNTdHJp
bmcgZHVyaW5nIGNvbXBpbGluZy4KKyAgICAgICAgCisgICAgICAgIFdlIG1vdmVkIHRoZSBlcnJv
ciBjb2RlcyBpbnRvIHRoZSBXS0Vycm9yRG9tYWluLCB3aGljaCByZXF1aXJlcyBjaGFuZ2luZyB0
aGUgdmFsdWVzIG9mIHRoZSBlcnJvciBjb2RlcyBhbmQgZG9tYWluLCBidXQgc291cmNlCisgICAg
ICAgIGNvbXBpbGVkIHRoYXQgdXNlcyB0aGUgU1BJIGJlZm9yZSBhbmQgYWZ0ZXIgc2hvdWxkIHN0
aWxsIHdvcmsuICBVc2luZyBuZXcgYXBwbGljYXRpb25zIHdpdGggb2xkIGZyYW1ld29ya3Mgb3Ig
dmljZSB2ZXJzYSB3aWxsCisgICAgICAgIGhhdmUgdW5leHBlY3RlZCBlcnJvciBjb2RlcywgdGhv
dWdoLgorCisgICAgICAgICogU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbToKKyAgICAgICAgKEFQ
STo6T2JqZWN0OjpuZXdPYmplY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tF
cnJvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbToKKyAgICAg
ICAgKGxvY2FsaXplZERlc2NyaXB0aW9uRm9yRXJyb3JDb2RlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tV
c2VyQ29udGVudENvbnRyb2xsZXIgYWRkVXNlckNvbnRlbnRFeHRlbnNpb246XSk6CisgICAgICAg
ICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uOl0p
OgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciByZW1vdmVBbGxVc2VyQ29udGVu
dEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVz
ZXJDb250ZW50RmlsdGVyOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudEV4dGVuc2lvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tLgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEZpbHRlciBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W19XS1VzZXJDb250ZW50RmlsdGVyIF9hcGlPYmplY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RmlsdGVySW50ZXJuYWwuaC4KKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbS4KKyAgICAgICAgKC1b
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjplbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRs
ZXI6cmVsZWFzZXNBcmd1bWVudDpdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgcmVtb3ZlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlYWxsb2NdKTogRGVs
ZXRlZC4KKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdKTogRGVsZXRlZC4KKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBz
dG9yZVdpdGhVUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIF9hcGlPYmplY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0
ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVy
bmFsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmguCisgICAgICAgIChXZWJLaXQ6Ondy
YXBwZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlUHJpdmF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmguCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tOgorICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9y
ZV0pOgorICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0aFVS
TDpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjb21waWxlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
bG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgcmVtb3ZlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVjdF0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbnZhbGlkYXRlQ29udGVu
dEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIF9pbml0V2l0aFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTpd
KToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWFsbG9jXSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRGaWx0ZXIubW06CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RmlsdGVyIF9hcGlPYmplY3Rd
KToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgX2luaXRXaXRoV0tVc2VyQ29udGVu
dEV4dGVuc2lvbjpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgZGVhbGxvY10p
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRG
aWx0ZXJJbnRlcm5hbC5oOgorICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRXJyb3JzTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpibG9ja2VkQnlDb250ZW50RmlsdGVyRXJyb3IpOgorCiAyMDE3LTAz
LTA4ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgdXBkYXRpbmcgYXV0b3BsYXkgcG9saWNpZXMgYWZ0ZXIgYSBwYWdlIGhhcyBiZWVuIGxv
YWRlZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2
aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQAogI2ltcG9ydCAiV0tQcm9jZXNzUG9v
bEludGVybmFsLmgiCiAjaW1wb3J0ICJXS1NlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCIKICNpbXBv
cnQgIldLVXNlckNvbnRlbnRDb250cm9sbGVySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLVXNlckNv
bnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLVXNlclNjcmlwdEludGVybmFsLmgiCiAjaW1w
b3J0ICJXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWVJbnRlcm5hbC5oIgpAQCAtNzAsOCAr
NzIsNiBAQAogI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dL
SGl0VGVzdFJlc3VsdEludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb25JbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUlu
dGVybmFsLmgiCi0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCiAjaW1w
b3J0ICJfV0tVc2VyQ29udGVudFdvcmxkSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJJbml0
aWF0ZWRBY3Rpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5h
bC5oIgpAQCAtMjMwLDExICsyMzAsMTEgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90
IHNpemUsIFR5cAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRF
eHRlbnNpb246Ci0gICAgICAgIHdyYXBwZXIgPSBbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2Nd
OworICAgICAgICB3cmFwcGVyID0gW1dLVXNlckNvbnRlbnRFeHRlbnNpb24gYWxsb2NdOwogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZToK
LSAgICAgICAgd3JhcHBlciA9IFtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXTsK
KyAgICAgICAgd3JhcHBlciA9IFtXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRXb3JsZDoKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM1ODgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbjsKIGNsYXNz
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmpl
Y3Q6OlR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKIHB1YmxpYzoKICAgICBlbnVt
IGNsYXNzIEVycm9yIHsKLSAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKKyAgICAgICAgTG9va3Vw
RmFpbGVkID0gNiwgLy8gTWlycm9ycyB2YWx1ZSBvZiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0
b3JlTG9va3VwRmFpbGVkCiAgICAgICAgIFZlcnNpb25NaXNtYXRjaCwKICAgICAgICAgQ29tcGls
ZUZhaWxlZCwKICAgICAgICAgUmVtb3ZlRmFpbGVkCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDExICszNiwxNSBAQCBXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBXS0Vycm9yRG9tYWlu
CiAKIC8qISBAZW51bSBXS0Vycm9yQ29kZQogIEBhYnN0cmFjdCBDb25zdGFudHMgdXNlZCBieSBO
U0Vycm9yIHRvIGluZGljYXRlIGVycm9ycyBpbiB0aGUgV2ViS2l0IGRvbWFpbi4KLSBAY29uc3Rh
bnQgV0tFcnJvclVua25vd24gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhh
dCBhbiB1bmtub3duIGVycm9yIG9jY3VycmVkLgotIEBjb25zdGFudCBXS0Vycm9yV2ViQ29udGVu
dFByb2Nlc3NUZXJtaW5hdGVkICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBXZWIgQ29udGVudCBw
cm9jZXNzIHdhcyB0ZXJtaW5hdGVkLgotIEBjb25zdGFudCBXS0Vycm9yV2ViVmlld0ludmFsaWRh
dGVkICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBXS1dlYlZpZXcgd2FzIGludmFs
aWRhdGVkLgotIEBjb25zdGFudCBXS0Vycm9ySmF2YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkICAg
ICAgIEluZGljYXRlcyB0aGF0IGEgSmF2YVNjcmlwdCBleGNlcHRpb24gb2NjdXJyZWQuCi0gQGNv
bnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgSW5kaWNhdGVz
IHRoYXQgdGhlIHJlc3VsdCBvZiBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0
dXJuZWQuCisgQGNvbnN0YW50IFdLRXJyb3JVbmtub3duICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5kaWNhdGVzIHRoYXQgYW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4KKyBAY29uc3Rh
bnQgV0tFcnJvcldlYkNvbnRlbnRQcm9jZXNzVGVybWluYXRlZCAgICAgICAgICBJbmRpY2F0ZXMg
dGhhdCB0aGUgV2ViIENvbnRlbnQgcHJvY2VzcyB3YXMgdGVybWluYXRlZC4KKyBAY29uc3RhbnQg
V0tFcnJvcldlYlZpZXdJbnZhbGlkYXRlZCAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhh
dCB0aGUgV0tXZWJWaWV3IHdhcyBpbnZhbGlkYXRlZC4KKyBAY29uc3RhbnQgV0tFcnJvckphdmFT
Y3JpcHRFeGNlcHRpb25PY2N1cnJlZCAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCBhIEphdmFTY3Jp
cHQgZXhjZXB0aW9uIG9jY3VycmVkLgorIEBjb25zdGFudCBXS0Vycm9ySmF2YVNjcmlwdFJlc3Vs
dFR5cGVJc1Vuc3VwcG9ydGVkICAgIEluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgb2YgSmF2YVNj
cmlwdCBleGVjdXRpb24gY291bGQgbm90IGJlIHJldHVybmVkLgorIEBjb25zdGFudCBXS0Vycm9y
Q29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkICAgIEluZGljYXRlcyB0aGF0IGxvb2tp
bmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KKyBAY29uc3RhbnQgV0tFcnJv
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCBJbmRpY2F0ZXMgdGhhdCBsb29r
aW5nIHVwIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmb3VuZCBhbiBleHRlbnNpb24gd2l0aCBh
biBpbmNvbXBhdGlibGUgYmluYXJ5IHZlcnNpb24uCisgQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkICAgSW5kaWNhdGVzIHRoYXQgY29tcGlsaW5nIGEg
V0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQuCisgQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgICAgSW5kaWNhdGVzIHRoYXQgcmVtb3ZpbmcgYSBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KICAqLwogdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgV0tFcnJvckNvZGUpIHsKICAgICBXS0Vycm9yVW5rbm93biA9IDEsCkBAIC00OCw2ICs1
MiwxMCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBXS0Vycm9yQ29kZSkgCiAgICAgV0tF
cnJvcldlYlZpZXdJbnZhbGlkYXRlZCwKICAgICBXS0Vycm9ySmF2YVNjcmlwdEV4Y2VwdGlvbk9j
Y3VycmVkLAogICAgIFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTEpLCBpb3MoOS4wKSksCisgICAgV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKKyAgICBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0
b3JlVmVyc2lvbk1pc21hdGNoIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxl
RmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSksCiB9IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkpOwogCiBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJy
b3IubW0JKHJldmlzaW9uIDIxMzU4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tFcnJvci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTggQEAgTlNTdHJp
bmcgKmxvY2FsaXplZERlc2NyaXB0aW9uRm9yRXJyb3JDbwogCiAgICAgY2FzZSBXS0Vycm9ySmF2
YVNjcmlwdFJlc3VsdFR5cGVJc1Vuc3VwcG9ydGVkOgogICAgICAgICByZXR1cm4gV0VCX1VJX1NU
UklORygiSmF2YVNjcmlwdCBleGVjdXRpb24gcmV0dXJuZWQgYSByZXN1bHQgb2YgYW4gdW5zdXBw
b3J0ZWQgdHlwZSIsICJXS0Vycm9ySmF2YVNjcmlwdFJlc3VsdFR5cGVJc1Vuc3VwcG9ydGVkIGRl
c2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29r
dXBGYWlsZWQ6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJMb29raW5nIHVwIGEgV0tV
c2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiIpOworCisgICAgY2FzZSBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklO
RygiTG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZm91bmQgYSBiaW5hcnkgdGhh
dCBpcyBpbmNvbXBhdGlibGUiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25N
aXNtYXRjaCBkZXNjcmlwdGlvbiIpOworCisgICAgY2FzZSBXS0Vycm9yQ29udGVudEV4dGVuc2lv
blN0b3JlQ29tcGlsZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkNvbXBp
bGluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiwgIldLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQ6CisgICAgICAgIHJldHVybiBXRUJf
VUlfU1RSSU5HKCJSZW1vdmluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiwgIldL
RXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgZGVzY3JpcHRpb24iKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMzU4OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiBOU19BU1NVTUVfTk9O
TlVMTF9CRUdJTgogCitAY2xhc3MgV0tVc2VyQ29udGVudEV4dGVuc2lvbjsKIEBjbGFzcyBXS1Vz
ZXJTY3JpcHQ7CiBAcHJvdG9jb2wgV0tTY3JpcHRNZXNzYWdlSGFuZGxlcjsKIApAQCAtNzAsNiAr
NzEsMjAgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMCksIGlvcyg4LgogICovCiAt
ICh2b2lkKXJlbW92ZVNjcmlwdE1lc3NhZ2VIYW5kbGVyRm9yTmFtZTooTlNTdHJpbmcgKiluYW1l
OwogCisvKiEgQGFic3RyYWN0IEFkZHMgYSB1c2VyIGNvbnRlbnQgZXh0ZW5zaW9uLgorIEBwYXJh
bSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGNvbnRlbnQgZXh0ZW5zaW9uIHRvIGFkZC4KKyAq
LworLSAodm9pZClhZGRVc2VyQ29udGVudEV4dGVuc2lvbjooV0tVc2VyQ29udGVudEV4dGVuc2lv
biAqKXVzZXJDb250ZW50RXh0ZW5zaW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX0lPU19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCisvKiEgQGFic3RyYWN0IFJlbW92ZXMgYSB1c2VyIGNv
bnRlbnQgZXh0ZW5zaW9uLgorIEBwYXJhbSBuYW1lIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB1c2Vy
IGNvbnRlbnQgZXh0ZW5zaW9uIHRvIHJlbW92ZS4KKyAqLworLSAodm9pZClyZW1vdmVVc2VyQ29u
dGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KFdLX0lPU19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCisvKiEgQGFic3RyYWN0IFJlbW92
ZXMgYWxsIGFzc29jaWF0ZWQgdXNlciBjb250ZW50IGV4dGVuc2lvbnMuCisgKi8KKy0gKHZvaWQp
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X0lPU19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxM
X0VORApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250
ZW50Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCShyZXZpc2lvbiAyMTM1ODgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9s
bGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJXS05TQXJy
YXkuaCIKICNpbXBvcnQgIldLU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKICNpbXBvcnQgIldLU2Ny
aXB0TWVzc2FnZUludGVybmFsLmgiCisjaW1wb3J0ICJXS1VzZXJDb250ZW50RXh0ZW5zaW9uSW50
ZXJuYWwuaCIKICNpbXBvcnQgIldLVXNlclNjcmlwdEludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dl
YlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKQEAg
LTkxLDYgKzkyLDI3IEBAIC0gKHZvaWQpcmVtb3ZlQWxsVXNlclNjcmlwdHMKICAgICBfdXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbFVzZXJTY3JpcHRzKCk7CiB9CiAKKy0gKHZv
aWQpYWRkVXNlckNvbnRlbnRFeHRlbnNpb246KFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKil1c2Vy
Q29udGVudEV4dGVuc2lvbgoreworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAg
X3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29udGVudEV4dGVuc2lvbigqdXNl
ckNvbnRlbnRFeHRlbnNpb24tPl91c2VyQ29udGVudEV4dGVuc2lvbik7CisjZW5kaWYKK30KKwor
LSAodm9pZClyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKilpZGVudGlmaWVy
Cit7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHktPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIpOworI2Vu
ZGlmCit9CisKKy0gKHZvaWQpcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zCit7CisjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHktPnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOworI2VuZGlmCit9CisKIGNsYXNz
IFNjcmlwdE1lc3NhZ2VIYW5kbGVyRGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgV2ViS2l0OjpXZWJT
Y3JpcHRNZXNzYWdlSGFuZGxlcjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBTY3JpcHRNZXNzYWdl
SGFuZGxlckRlbGVnYXRlKFdLVXNlckNvbnRlbnRDb250cm9sbGVyICpjb250cm9sbGVyLCBpZCA8
V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciwgTlNTdHJpbmcgKm5hbWUpCkBAIC0xNTMs
NyArMTc1LDcgQEAgLSAodm9pZClfcmVtb3ZlQWxsVXNlclNjcmlwdHNBc3NvY2lhdGVkVwogLSAo
dm9pZClfYWRkVXNlckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNv
bnRlbnRGaWx0ZXIKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnVzZXJDb250
ZW50RmlsdGVyLT5fdXNlckNvbnRlbnRFeHRlbnNpb24pOworICAgIF91c2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnVzZXJDb250ZW50RmlsdGVyLT5f
dXNlckNvbnRlbnRFeHRlbnNpb24tPl91c2VyQ29udGVudEV4dGVuc2lvbik7CiAjZW5kaWYKIH0K
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxMzU4OCkJKGZyb20gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5oOjIx
MzU4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVu
dEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAor
CitXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KDEwLjExKSwgaW9zKDkuMCkpCitAaW50ZXJmYWNl
IF9XS1VzZXJDb250ZW50RmlsdGVyIDogTlNPYmplY3QKKworQGVuZAorCisjZW5kaWYgLy8gV0tf
QVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tV
c2VyQ29udGVudEV4dGVuc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsOCArMjcsOCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQotQGludGVyZmFjZSBfV0tV
c2VyQ29udGVudEZpbHRlciA6IE5TT2JqZWN0CitXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIFdLVXNlckNvbnRlbnRFeHRl
bnNpb24gOiBOU09iamVjdAogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb24ubW0J
KHJldmlzaW9uIDIxMzU4OCkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyQ29udGVudEZpbHRlci5tbToyMTM1ODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQK
KworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250
ZW50RXh0ZW5zaW9uRXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK0BpbXBsZW1lbnRhdGlv
biBfV0tVc2VyQ29udGVudEZpbHRlcgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfdXNlckNv
bnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4dGVuc2lvbigpOworCisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRp
b24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gKl91c2VyQ29u
dGVudEV4dGVuc2lvbjsKK30KKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVu
c2lvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRFeHRlbnNpb24ubW0JKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsMTYgKzI0LDEzIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJf
V0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0ICJXS1VzZXJDb250ZW50RXh0
ZW5zaW9uSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbmNsdWRlICJXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9y
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgogCi1AaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRG
aWx0ZXIKK0BpbXBsZW1lbnRhdGlvbiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uCiAKIC0gKHZvaWQp
ZGVhbGxvYwogewpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShy
ZXZpc2lvbiAyMTM1ODgpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oOjIxMzU4OCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS1Vz
ZXJDb250ZW50RmlsdGVyLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElV
c2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiV0tPYmplY3QuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2lubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKK3sKKyAgICBBU1NFUlQo
W3VzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29u
dGVudEZpbHRlciBjbGFzc11dKTsKKyAgICByZXR1cm4gKF9XS1VzZXJDb250ZW50RmlsdGVyICop
dXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2UgX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CitAcGFja2FnZQorICAgIEFQSTo6T2Jq
ZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRlbnNp
b247Cit9CitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCIKKyNpbXBvcnQgIldL
VXNlckNvbnRlbnRFeHRlbnNpb24uaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKQEAgLTMyLDE1
ICszMiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50
RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250ZW50RXh0
ZW5zaW9uKQoraW5saW5lIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKndyYXBwZXIoQVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvbiYgdXNlckNvbnRlbnRFeHRlbnNpb24pCiB7Ci0gICAgQVNTRVJUKFt1
c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLVXNlckNvbnRl
bnRGaWx0ZXIgY2xhc3NdXSk7Ci0gICAgcmV0dXJuIChfV0tVc2VyQ29udGVudEZpbHRlciAqKXVz
ZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKTsKKyAgICBBU1NFUlQoW3VzZXJDb250ZW50RXh0
ZW5zaW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGNs
YXNzXV0pOworICAgIHJldHVybiAoV0tVc2VyQ29udGVudEV4dGVuc2lvbiAqKXVzZXJDb250ZW50
RXh0ZW5zaW9uLndyYXBwZXIoKTsKIH0KIAogfQogCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50
RmlsdGVyICgpIDxXS09iamVjdD4geworQGludGVyZmFjZSBXS1VzZXJDb250ZW50RXh0ZW5zaW9u
ICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKICAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvbj4gX3VzZXJDb250ZW50RXh0ZW5zaW9uOwogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM1ODgpCShmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oOjIxMzU4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQ
SV9FTkFCTEVECisKK0BjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKKworV0tfQ0xBU1NfQVZB
SUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9y
ZTsKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsOworCistICh2b2lk
KWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlm
aWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBOU19SRUxFQVNFU19BUkdV
TUVOVCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0g
KHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKworQGVuZAorCitX
S19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4g
V0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb2RlKSB7
CisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkID0gMSwK
KyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gsCisg
ICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCwKKyAgICBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQsCit9IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKKworI2VuZGlmIC8vIFdLX0FQSV9F
TkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI3ICsyNywxOCBAQAogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotQGNsYXNzIF9XS1VzZXJDb250ZW50RmlsdGVyOworQGNsYXNzIFdLVXNlckNvbnRl
bnRFeHRlbnNpb247CiAKLVdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTEpLCBpb3MoOS4w
KSkKLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSA6IE5TT2JqZWN0CitX
S19DTEFTU19BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitA
aW50ZXJmYWNlIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSA6IE5TT2JqZWN0CiAKICsgKGlu
c3RhbmNldHlwZSlkZWZhdWx0U3RvcmU7CiArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihO
U1VSTCAqKXVybDsKIAotLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJp
bmcgKikgTlNfUkVMRUFTRVNfQVJHVU1FTlQgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7Cist
ICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBlbmNvZGVkQ29u
dGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tVc2VyQ29udGVudEV4
dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClsb29rdXBD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShXS1VzZXJDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3Ig
KikpY29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CiAKIEBlbmQKIAotV0tfRVhURVJOIE5T
U3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29kZSkgewotICAgIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCA9IDEsCi0gICAgX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVyc2lvbk1pc21hdGNoLAotICAgIF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQsCi0gICAgX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkLAotfSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zeCgxMC4xMiksIGlvcygxMC4wKSk7Ci0KICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxMzU4OCkJKGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tOjIxMzU4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVE
CisKKyNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRG
aWx0ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCA8c3RyaW5nPgorCitOU1N0cmluZyAqIGNvbnN0IF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25z
RG9tYWluIjsKKworQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUK
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5V
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
KysgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp3cmFw
cGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworfQor
CisrIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVybAoreworICAgIFJlZjxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlID0gQVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVw
cmVzZW50YXRpb24pOworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVha1JlZigp
KTsKK30KKworLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKill
bmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1
dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKworICAgIFN0
cmluZyBqc29uKGVuY29kZWRDb250ZW50RXh0ZW5zaW9uKTsKKyAgICBbZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24gcmVsZWFzZV07CisgICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7CisK
KyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24o
aWRlbnRpZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250
ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsK
KyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9p
ZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JF
cnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRp
b24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CisKKyAgICAgICAgICAg
IC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRo
YXQgaXMgbm90IGVxdWFsIHRvIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBp
bGVGYWlsZWQuCisgICAgICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBi
dXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgorICAgICAgICAg
ICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVu
dEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JD
b21waWxlRmFpbGVkIHVzZXJJbmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICByYXdIYW5k
bGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7CisgICAg
fSk7Cit9CisKKy0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8g
aGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKworICAgIF91c2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLT5sb29rdXBDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIs
IFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVu
c2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAg
ICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVy
ICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKworICAgICAgICAgICAgYXV0byB1c2VySW5m
byA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
RXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCldfTsK
KyAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCB8fCBlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgICAgICByYXdI
YW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uc0RvbWFpbiBjb2RlOmVycm9yLnZhbHVlKCkgdXNlckluZm86dXNlckluZm9dKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2
b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7
CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdl
dCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVy
ID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRs
ZXJdKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0
KCk7CisKKyAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5
OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDog
JXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgQVNTRVJUKGVycm9y
LnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVk
KTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIoW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvclJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5T
RXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3SGFuZGxlcihuaWwpOworICAgIH0p
OworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKwor
LSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gKl91c2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCisKKy8vIEZvciB0ZXN0aW5nIG9ubHkuCisKKy0g
KHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zCit7CisgICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKK30K
KworLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPmludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVyKTsKK30KKwor
QGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQs
MTcgKzI0LDE1IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUludGVybmFsLmgiCiAKICNpZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0
ICJXS0Vycm9ySW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgogI2ltcG9y
dCA8c3RyaW5nPgogCi1OU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0Rv
bWFpbiA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIjsKLQotQGltcGxlbWVudGF0
aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKK0BpbXBsZW1lbnRhdGlvbiBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUKIAogLSAodm9pZClkZWFsbG9jCiB7CkBAIC01NCw0NiArNTIs
NTMgQEAgKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cgogICAgIHJldHVy
biBXZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVha1JlZigpKTsKIH0KIAotLSAodm9pZCljb21waWxl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lv
bjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoV0tVc2VyQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyCit7CisgICAgW3NlbGYgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmVuY29kZWRDb250ZW50RXh0ZW5z
aW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6
Tk9dOworfQorCistICh2b2lkKV9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcg
KillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tV
c2VyQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyIHJlbGVh
c2VzQXJndW1lbnQ6KEJPT0wpcmVsZWFzZXNBcmd1bWVudAogewogICAgIGF1dG8gaGFuZGxlciA9
IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKIAogICAgIFN0cmluZyBqc29uKGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gcmVs
ZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7CisgICAgaWYgKHJlbGVh
c2VzQXJndW1lbnQpIHsKKyAgICAgICAgW2VuY29kZWRDb250ZW50RXh0ZW5zaW9uIHJlbGVhc2Vd
OworICAgICAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsKKyAgICB9CiAKICAgICBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRp
ZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAg
ICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdLVXNlckNvbnRlbnRFeHRlbnNpb24g
KiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBh
dXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3Nh
Z2UoKS5jX3N0cigpXX07CiAKICAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2
ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCiAgICAgICAgICAgICAvLyBX
ZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkgcGFz
cyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9y
IGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkIHVzZXJJbmZvOnVzZXJJ
bmZvXSk7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGls
ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50
RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgYXV0byByYXdIYW5k
bGVyID0gKHZvaWQgKF4pKFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSloYW5k
bGVyLmdldCgpOwogICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4
dGVuc2lvbi5nZXQoKSksIG5pbCk7CiAgICAgfSk7CiB9CiAKLS0gKHZvaWQpbG9va3VwQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcgorLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKICAg
ICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CiAKICAg
ICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4dGVuc2lvbihpZGVu
dGlmaWVyLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IGNvbnRl
bnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3Ip
IHsKLSAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVu
dEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgICAgICBhdXRvIHJh
d0hhbmRsZXIgPSAodm9pZCAoXikoV0tVc2VyQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICop
KWhhbmRsZXIuZ2V0KCk7CiAKICAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFu
Y2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBsb29r
dXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0gICAgICAgICAgICBB
U1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JM
b29rdXBGYWlsZWQgfHwgZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOwotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtO
U0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29k
ZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICBBU1NFUlQo
ZXJyb3IudmFsdWUoKSA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVk
IHx8IGVycm9yLnZhbHVlKCkgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25N
aXNtYXRjaCk7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRo
RG9tYWluOldLRXJyb3JEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZv
XSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJhd0hh
bmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5k
bGVyLmdldCgpOworICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoV0tVc2VyQ29u
dGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIHJhd0hh
bmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKICAg
ICB9KTsKIH0KQEAgLTEwNyw4ICsxMTIsOCBAQCAtICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmCiAgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNF
cnJvciAqKSloYW5kbGVyLmdldCgpOwogCiAgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtO
U0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNp
b24gcmVtb3ZhbCBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCldfTsKLSAgICAg
ICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvclJlbW92ZUZhaWxlZCk7Ci0gICAgICAgICAgICByYXdIYW5kbGVyKFtOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9d
KTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IFdLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxlcihbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVSZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0xMjYsNyArMTMxLDcgQEAgLSAoQVBJOjpPYmplY3QmKV9h
cGlPYmplY3QKIAogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSAoV0tQcml2YXRlKQorQGltcGxlbWVudGF0aW9uIFdLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBvbmx5LgogCkBAIC0xNDAsNiAr
MTQ1LDEzIEBAIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2kKICAgICBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uKGlkZW50aWZpZXIpOwogfQogCisvLyBOU19SRUxFQVNFU19BUkdVTUVOVCB0byBrZWVwIHBl
YWsgbWVtb3J5IHVzYWdlIGxvdy4KKworLSAodm9pZClfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNp
b246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNvZGVkQ29udGVudEV4dGVu
c2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50
OllFU107Cit9CisKIEBlbmQKIAogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM1
ODgpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg6MjEzNTg4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQK
KworI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiV0tP
YmplY3QuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2lubGluZSBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgc3Rv
cmUpCit7CisgICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKKyAgICByZXR1cm4gKF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Cit9CisKK30KKworQGludGVyZmFj
ZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICgpIDxXS09iamVjdD4geworQHBhY2thZ2UK
KyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKK30KK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9F
TkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDcgKzIz
LDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0
ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIApA
QCAtMzIsMTUgKzMyLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1pbmxpbmUgX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUmIHN0b3JlKQoraW5saW5lIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBl
cihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIHN0b3JlKQogewotICAgIEFTU0VSVChb
c3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgY2xhc3NdXSk7Ci0gICAgcmV0dXJuIChfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICop
c3RvcmUud3JhcHBlcigpOworICAgIEFTU0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xh
c3M6W1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKKyAgICByZXR1cm4gKFdL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3JlLndyYXBwZXIoKTsKIH0KIAogfQogCi1A
aW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CitA
aW50ZXJmYWNlIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoKSA8V0tPYmplY3Q+IHsKIEBw
YWNrYWdlCiAgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4gX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNTg4KQkoZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVQcml2YXRlLmg6MjEzNTg4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNl
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKKworLy8gRm9yIHRlc3Rp
bmcgb25seS4KKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOworLSAodm9pZClf
aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcg
KilpZGVudGlmaWVyOworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMywxNiArMjMsMTkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgog
CiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIChXS1ByaXZhdGUpCitAaW50ZXJmYWNlIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBvbmx5LgogLSAodm9pZClfcmVtb3ZlQWxs
Q29udGVudEV4dGVuc2lvbnM7CiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZl
cnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CiAKKy8vIE5TX1JFTEVB
U0VTX0FSR1VNRU5UIHRvIGtlZXAgcGVhayBtZW1vcnkgdXNhZ2UgbG93LgorLSAodm9pZClfY29t
cGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopIE5TX1JFTEVBU0VTX0FSR1VNRU5U
IGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CisKIEBl
bmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2
aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LgogV0tfRVhURVJOIE5T
U3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKIAogdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29kZSkgewotICAgIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCA9IDEsCisgICAgX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkID0gNiwgLy8gTWlycm9ycyB2
YWx1ZSBvZiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkCiAgICAgX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVyc2lvbk1pc21hdGNoLAogICAgIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQsCiAgICAgX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkLApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw5OSArMjksNTIgQEAKICNpZiBXS19BUElfRU5BQkxFRAogCiAj
aW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUludGVybmFsLmgiCisjaW1wb3J0ICJXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1w
b3J0ICJfV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaCIKICNpbXBvcnQgPHN0cmluZz4KIAot
TlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gPSBAIl9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiI7CitOU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uc0RvbWFpbiA9IEAiV0tFcnJvckRvbWFpbiI7CiAKIEBpbXBsZW1lbnRhdGlv
biBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgp
OwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCiArIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0
b3JlCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKKyAgICByZXR1cm4gW1tbX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBhbGxvY10gX2luaXRXaXRoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OltXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXV0gYXV0b3JlbGVhc2Vd
OwogfQogCiArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVybAogewotICAg
IFJlZjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlID0gQVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lz
dGVtUmVwcmVzZW50YXRpb24pOwotICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVh
a1JlZigpKTsKKyAgICByZXR1cm4gW1tbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxv
Y10gX2luaXRXaXRoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOltXS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOnVybF1dIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAodm9p
ZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4
dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8gaGFuZGxlciA9IGFk
b3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLQotICAgIFN0cmluZyBqc29uKGVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gcmVsZWFz
ZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7Ci0KLSAgICBfdXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgV1RG
TW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBj
b250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIs
IGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0KLSAgICAgICAgICAgIC8vIGVycm9yLnZhbHVl
KCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFs
IHRvIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCi0gICAg
ICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50
IHRvIG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3SGFuZGxlcihu
aWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21h
aW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkIHVz
ZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwg
TlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3Jh
cHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7CisgICAgW191c2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmVuY29kZWRDb250ZW50RXh0ZW5z
aW9uIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVudEV4dGVuc2lvbiAqY29udGVudEV4
dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KmNvbnRlbnRGaWx0ZXIgPSBjb250ZW50RXh0ZW5zaW9uID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0
ZXIgYWxsb2NdIF9pbml0V2l0aFdLVXNlckNvbnRlbnRFeHRlbnNpb246Y29udGVudEV4dGVuc2lv
bl0gYXV0b3JlbGVhc2VdIDogbmlsOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50
RmlsdGVyLCBlcnJvcik7CisgICAgfV07CiB9CiAKIC0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVy
IGNvcHldKTsKLQotICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5sb29rdXBDb250ZW50
RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7Ci0gICAg
ICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4p
KF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKLQotICAg
ICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6ICVzIiwgZXJyb3Iu
bWVzc2FnZSgpLmNfc3RyKCldfTsKLSAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCB8fCBlcnJvci52
YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclZlcnNpb25NaXNtYXRj
aCk7Ci0gICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
Ol9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOmVycm9yLnZhbHVlKCkgdXNlcklu
Zm86dXNlckluZm9dKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vy
cm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVy
KCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKLSAgICB9KTsKKyAgICBbX3VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKmNvbnRl
bnRFeHRlbnNpb24sIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIF9XS1VzZXJDb250ZW50Rmls
dGVyICpjb250ZW50RmlsdGVyID0gY29udGVudEV4dGVuc2lvbiA/IFtbW19XS1VzZXJDb250ZW50
RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS1VzZXJDb250ZW50RXh0ZW5zaW9uOmNvbnRlbnRFeHRl
bnNpb25dIGF1dG9yZWxlYXNlXSA6IG5pbDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29u
dGVudEZpbHRlciwgZXJyb3IpOworICAgIH1dOwogfQogCiAtICh2b2lkKXJlbW92ZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBhdXRv
IGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7Ci0KLSAgICBfdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVtb3ZlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVy
LCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7Ci0gICAgICAgIGlmIChlcnJvcikg
ewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TRXJyb3IgKikpaGFu
ZGxlci5nZXQoKTsKLQotICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9y
RXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIHJlbW92YWwg
ZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0gICAgICAgICAgICBBU1NF
UlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1v
dmVGYWlsZWQpOwotICAgICAgICAgICAgcmF3SGFuZGxlcihbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6X1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkIHVzZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9p
ZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKG5pbCk7
Ci0gICAgfSk7CisgICAgW191c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxl
dGlvbkhhbmRsZXJdOwogfQogCiAjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVt
ZW50YXRpb24KIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworICAgIHJldHVybiBbX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgX2FwaU9iamVjdF07CiB9CiAKIEBlbmQKQEAgLTEzMiwxMiArODUsMjMgQEAgLSAo
QVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVu
c2lvbnMKIHsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1v
dmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworICAgIFtfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwogfQogCiAtICh2b2lkKV9pbnZhbGlkYXRl
Q29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIKIHsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRF
eHRlbnNpb25WZXJzaW9uKGlkZW50aWZpZXIpOworICAgIFtfdXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjppZGVu
dGlmaWVyXTsKK30KKworLSAoaWQpX2luaXRXaXRoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OihXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUqKWNvbnRlbnRFeHRlbnNpb25TdG9yZQorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIAorICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlID0gY29udGVudEV4dGVu
c2lvblN0b3JlOworICAgIAorICAgIHJldHVybiBzZWxmOwogfQogCiBAZW5kCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHJldmlzaW9uIDIx
MzU4OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE5ICszMCwx
MSBAQAogI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgogI2ltcG9ydCAi
V0tPYmplY3QuaCIKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYg
c3RvcmUpCi17Ci0gICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Ci19Ci0KLX0KK0BjbGFzcyBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7CiAKIEBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RT
dG9yYWdlPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU7CisgICAgUmV0YWluUHRyPFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDIxMzU4OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDE2IEBACiAKICNpZiBX
S19BUElfRU5BQkxFRAogCitAY2xhc3MgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworCiBA
aW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKIAogLy8g
Rm9yIHRlc3Rpbmcgb25seS4KIC0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOwog
LSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyOwogCistIChpZClfaW5pdFdpdGhXS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6KFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSopY29udGVudEV4dGVuc2lv
blN0b3JlOworCiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCShyZXZp
c2lvbiAyMTM1ODgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Vz
ZXJDb250ZW50RmlsdGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxOCArMzUsMjYgQEAKIAog
QGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RmlsdGVyCiAKLS0gKHZvaWQpZGVhbGxvYwot
ewotICAgIF91c2VyQ29udGVudEV4dGVuc2lvbi0+flVzZXJDb250ZW50RXh0ZW5zaW9uKCk7Cisj
cHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAotICAgIFtzdXBl
ciBkZWFsbG9jXTsKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuIFtf
dXNlckNvbnRlbnRFeHRlbnNpb24gX2FwaU9iamVjdF07CiB9CiAKLSNwcmFnbWEgbWFyayBXS09i
amVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorQGVuZAogCi0tIChBUEk6Ok9iamVjdCYpX2Fw
aU9iamVjdAorQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUp
CisKKy0gKGlkKV9pbml0V2l0aFdLVXNlckNvbnRlbnRFeHRlbnNpb246KFdLVXNlckNvbnRlbnRF
eHRlbnNpb24qKXVzZXJDb250ZW50RXh0ZW5zaW9uCiB7Ci0gICAgcmV0dXJuICpfdXNlckNvbnRl
bnRFeHRlbnNpb247CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uID0gdXNl
ckNvbnRlbnRFeHRlbnNpb247CisgICAgCisgICAgcmV0dXJuIHNlbGY7CiB9CiAKIEBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM1ODgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVy
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDExIEBACiAjaW1wb3J0ICJB
UElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKLXsKLSAgICBBU1NF
UlQoW3VzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2Vy
Q29udGVudEZpbHRlciBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1VzZXJDb250ZW50RmlsdGVy
ICopdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOwotfQotCi19CitAY2xhc3MgV0tVc2Vy
Q29udGVudEV4dGVuc2lvbjsKIAogQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoKSA8
V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNv
bnRlbnRFeHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKKyAgICBSZXRhaW5QdHI8V0tV
c2VyQ29udGVudEV4dGVuc2lvbj4gX3VzZXJDb250ZW50RXh0ZW5zaW9uOwogfQogQGVuZAogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50Rmls
dGVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisK
K0BjbGFzcyBXS1VzZXJDb250ZW50RXh0ZW5zaW9uOworCitAaW50ZXJmYWNlIF9XS1VzZXJDb250
ZW50RmlsdGVyIChXS1ByaXZhdGUpCisKKy0gKGlkKV9pbml0V2l0aFdLVXNlckNvbnRlbnRFeHRl
bnNpb246KFdLVXNlckNvbnRlbnRFeHRlbnNpb24qKXVzZXJDb250ZW50RXh0ZW5zaW9uOworCitA
ZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1
LDYgKzExNDUsMTMgQEAKIAkJNUNCMjM3OTIxREYwRTJFRTAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQ
b2xpY2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNCMjM3OEYxREYwRTFCODAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5oICovOyB9Owog
CQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUy
NTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07CiAJCTVDQkM5QjhF
MUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBO
ZXR3b3JrRGF0YVRhc2suaCAqLzsgfTsKKwkJNUNFMzU0Q0IxRTcwOUZBODAwQkVGRTNCIC8qIFdL
VXNlckNvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDRTM1NEM5MUU3MDlGQTAwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0
ZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9Owor
CQk1Q0UzNTRDQzFFNzBBMDQyMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvbi5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1NENBMUU3
MDlGQTAwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uLm1tICovOyB9OworCQk1Q0Uz
NTRDRTFFNzBBMDk5MDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTRDRDFF
NzBBMDk0MDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggKi87IH07
CisJCTVDRTM1NEQzMUU3MEEyQUUwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1
NENGMUU3MEExQkYwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTVDRTM1NEQ0MUU3
MEEyQjMwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTREMDFFNzBBMUJGMDBC
RUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OworCQk1Q0UzNTRE
NTFFNzBBMkI4MDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1NEQx
MUU3MEExQkYwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
ICovOyB9OworCQk1Q0UzNTRENjFFNzBBMkJDMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNFMzU0RDIxRTcwQTFCRjAwQkVGRTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1Q0U4NUIyMDFDODhFNjRCMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTg1QjFGMUM4OEU2NDMw
MDcwQkZDRSAvKiBQaW5nTG9hZC5oICovOyB9OwogCQk1Q0ZFQ0IwNDFFMUVEMUNDMDBGODg1MDQg
LyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkVDQjAzMUUxRUQxQzgwMEY4ODUwNCAvKiBMZWdh
Y3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwICovOyB9OwogCQk2NTAxQkQxQTEyRjEyNDM0MDBF
OUYyNDggLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxl
SW5zcGVjdG9yLmNwcCAqLzsgfTsKQEAgLTMzNTIsNiArMzM1OSwxNCBAQAogCQk1Q0IyMzc5MDFE
RjBFMUREMDAxMTdBQTMgLyogQVBJV2Vic2l0ZVBvbGljaWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSVdlYnNpdGVQb2xpY2llcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0
YVRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0RhdGFUYXNr
Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5ldHdvcmtEYXRh
VGFza0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0
d29ya0RhdGFUYXNrQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
RGF0YVRhc2tDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNFMzU0Qzkx
RTcwOUZBMDAwQkVGRTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Q0UzNTRDQTFFNzA5RkEwMDBCRUZFM0IgLyogV0tVc2VyQ29u
dGVudEV4dGVuc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdLVXNlckNvbnRlbnRFeHRlbnNpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDRTM1NENEMUU3MEEwOTQwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uSW50ZXJu
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVu
c2lvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NENGMUU3
MEExQkYwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NEQwMUU3MEExQkYwMEJFRkUzQiAvKiBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NEQxMUU3MEExQkYwMEJFRkUzQiAvKiBXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0UzNTREMjFFNzBBMUJGMDBCRUZFM0IgLyogV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDRTM1NEQ3MUU3MEMzQUQwMEJFRkUzQiAvKiBfV0tVc2VyQ29udGVudEZp
bHRlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVXNlckNv
bnRlbnRGaWx0ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDRTg1
QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBQaW5nTG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGRUNCMDMxRTFFRDFDODAwRjg4NTA0IC8q
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZENTg1NjcwMEFDMzMz
MSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1Z2luU2VydmljZS5l
bnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mzk4LDYgKzU0MTMs
MTMgQEAKIAkJMzdDNEMwODMxODE0OUMyQTAwMzY4OEI5IC8qIENvY29hICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1Q0UzNTRDRjFFNzBBMUJGMDBCRUZF
M0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCisJCQkJNUNFMzU0RDAxRTcw
QTFCRjAwQkVGRTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLywKKwkJCQk1
Q0UzNTREMTFFNzBBMUJGMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50
ZXJuYWwuaCAqLywKKwkJCQk1Q0UzNTREMjFFNzBBMUJGMDBCRUZFM0IgLyogV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAorCQkJCTVDRTM1NENEMUU3MEEwOTQwMEJFRkUz
QiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCAqLywKKwkJCQk1Q0UzNTRDOTFF
NzA5RkEwMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvbi5oICovLAorCQkJCTVDRTM1
NENBMUU3MDlGQTAwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uLm1tICovLAogCQkJ
CTFBNDNFODI2MTg4RjM4RTIwMDlFNEQzMCAvKiBEZXByZWNhdGVkICovLAogCQkJCTM3QTVFMDEy
MThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5oICovLAogCQkJCTM3
QTVFMDExMThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5tbSAqLywK
QEAgLTU0NTMsNiArNTQ3NSw3IEBACiAJCQkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9X
S1VzZXJDb250ZW50RmlsdGVyLmggKi8sCiAJCQkJN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8q
IF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICovLAogCQkJCTdDODlEMkJCMUE2QjBGNUIwMDNBNUZE
RSAvKiBfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmggKi8sCisJCQkJNUNFMzU0RDcxRTcw
QzNBRDAwQkVGRTNCIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oICovLAogCQkJCTdD
ODgyREYzMUM3RTk5NUUwMDZCRjczMSAvKiBfV0tVc2VyQ29udGVudFdvcmxkLmggKi8sCiAJCQkJ
N0M4ODJERjQxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGQubW0gKi8sCiAJ
CQkJN0M4ODJERjUxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGRJbnRlcm5h
bC5oICovLApAQCAtODMwMCw2ICs4MzIzLDcgQEAKIAkJCQkwRjU5NDc5QjE4N0IzQjYwMDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1OTQ3QTQxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
VHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzlEMTg3QjNCNjAwMDQzNzg1
NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0UzNTRDRTFF
NzBBMDk5MDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTVCQTgxRjFCQTI1QjI3MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUJBODI1MUJBMjVDRkIwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTVCQTgxNzFCQTIzRTEyMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFk
ZXJzICovLApAQCAtODQzNSw2ICs4NDU5LDcgQEAKIAkJCQkyRDUwMzY3NjFCQ0VEMTlGMDBFMjBC
QjMgLyogV2ViR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEIzMzFCQzZF
OUNEMDBBQkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMUIyNEFCMTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDRTM1NEQ1MUU3MEEyQjgwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4MzQ1OTMxMzQ1MzJFOTAw
OTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFE
MDJGNkExMzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTFCMjRBNzEzMkUwOTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNl
UHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtODQ0OCw2ICs4NDczLDcgQEAKIAkJCQkxQzhFMjgy
MDEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzAzMkQ4MjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViSW5zcGVjdG9yQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTVCQTgzNTFCQTNFNzBBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0UzNTREMzFFNzBBMkFFMDBC
RUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQzhFMkEzNjEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFDOEUyODM0MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8qIFdl
Ykluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODQ3OCw2ICs4NTA0
LDcgQEAKIAkJCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIwNjEyOUEwQTY3MDBEMTc0
QTQgLyogV2ViUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjI1MjEyQTQzQzk2
MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNFMzU0
RDYxRTcwQTJCQzAwQkVGRTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MjE1MTJBNDIxOUEwMEQxNzRBNCAvKiBXZWJQYWdl
R3JvdXBQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEYxQTk2Q0JGRjAwMkQyODA3
IC8qIFdlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBD
RTcyQTExMjQ3RTcxRDAwQkMwRUM0IC8qIFdlYlBhZ2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC04NzI1LDYgKzg3NTIsNyBAQAogCQkJCTJEM0E2NURGMUE3QzNBN0QwMENBQzYzNyAvKiBX
S05hdmlnYXRpb25SZXNwb25zZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4QkUxNzkxNDc0
M0U2RjAwQThGQkIyIC8qIFdLTm90aWZpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThC
RTE3MTE0NzQzREIxMDBBOEZCQjIgLyogV0tOb3RpZmljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1Q0UzNTRDQjFFNzA5RkE4MDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVu
c2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNzQxNDhENTlDQTAwODEwRDcxIC8qIFdL
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMkMw
QzRBMTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzN0M0QzA5NDE4MTRCM0FGMDAzNjg4QjkgLyogV0tOU0FycmF5LmggaW4gSGVh
ZGVycyAqLywKQEAgLTk1ODUsNiArOTYxMyw3IEBACiAJCQkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEy
RkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjg3OEI2MTYx
MzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTVDMTQyNzFEMUMyM0Y4Q0YwMEQ0MTE4MyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJD
b2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTVDRTM1NENDMUU3MEEwNDIwMEJFRkUzQiAvKiBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk4NEY1ODgxNjRC
QTA5NTAwNEJDMEM2IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOTg0RjU3QzE2NEI5MTVGMDA0QkMwQzYgLyogTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFMzUxRkYxODBGNUQwRjAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzcy5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTk5MTAsNiArOTkzOSw3IEBACiAJCQkJMUEwRjI5Q0IxMjBC
MzcxNjAwNTNEMUI5IC8qIFZpc2l0ZWRMaW5rVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFGNENFRUYxOEJDNDgxODAwQkMyRDM0IC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEU3RDNDMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1Q0UzNTRENDFFNzBBMkIzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VEQTEyRTIxNTJDRDFBRTAwRDlFMDhEIC8qIFdlYkFs
dGVybmF0aXZlVGV4dENsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTU1QTZFRDFDNzk4
MENBMDBFQjZBOTMgLyogV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUMwQTE5NTcxQzkwMDY4RjAwRkUwRUJCIC8qIFdlYkF1dG9tYXRpb25TZXNzaW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRXJyb3JzTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVycm9yc01hYy5t
bQkocmV2aXNpb24gMjEzNTg4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9tYWMvV2ViRXJyb3JzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3
IEBAIFJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2UKICNpZiBFTkFCTEUo
Q09OVEVOVF9GSUxURVJJTkcpCiBSZXNvdXJjZUVycm9yIGJsb2NrZWRCeUNvbnRlbnRGaWx0ZXJF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoQVBJOjpFcnJvcjo6d2ViS2l0RXJyb3JEb21haW4oKSwga1dLRXJyb3JDb2RlRnJh
bWVMb2FkQmxvY2tlZEJ5Q29udGVudEZpbHRlciwgcmVxdWVzdC51cmwoKSwgV0VCX1VJX1NUUklO
RygiVGhlIFVSTCB3YXMgYmxvY2tlZCBieSBhIGNvbnRlbnQgZmlsdGVyIiwgIldlYktpdEVycm9y
QmxvY2tlZEJ5Q29udGVudEZpbHRlciIpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihBUEk6
OkVycm9yOjp3ZWJLaXRFcnJvckRvbWFpbigpLCBrV0tFcnJvckNvZGVGcmFtZUxvYWRCbG9ja2Vk
QnlDb250ZW50RmlsdGVyLCByZXF1ZXN0LnVybCgpLCBXRUJfVUlfU1RSSU5HKCJUaGUgVVJMIHdh
cyBibG9ja2VkIGJ5IGEgY29udGVudCBmaWx0ZXIiLCAiV2ViS2l0RXJyb3JGcmFtZUxvYWRCbG9j
a2VkQnlDb250ZW50RmlsdGVyIGRlc2NyaXB0aW9uIikpOwogfQogI2VuZGlmCiAKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIx
MzYwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDE3LTAzLTA4ICBCcmlhbiBOaWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBh
bmQgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEV4cG9zZSBwdWJsaWMgQVBJcyBmb3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBLZWVwIHRoZSBleGlzdGluZyB0ZXN0cyB0
byB2ZXJpZnkgdGhhdCBJIG1hZGUgdGhlIHdyYXBwZXIgY2xhc3NlcyBmb3IgdGhlIG9sZCBTUEkg
d29yayBjb3JyZWN0bHkuCisgICAgICAgIEFkZCBuZXcgaWRlbnRpY2FsIHRlc3RzIGZvciB0aGUg
bmV3IEFQSSBhcmUgYWRkZWQgd2l0aCB0aGUgbmV3IG5hbWVzLgorICAgICAgICBXZSBzaG91bGQg
a2VlcCBib3RoIHVudGlsIHdlIG1pZ3JhdGUgZnJvbSBhbmQgcmVtb3ZlIHRoZSBvbGQgU1BJLgor
ICAgICAgICBFbnVtIGVycm9yIGNvZGUgdmFsdWVzIGFuZCBzdHJpbmdzIGhhdmUgY2hhbmdlZCwg
YnV0IHRoZSBBUEkgaXMgc291cmNlIGNvbXBhdGlibGUuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0uCisgICAgICAgIChXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVUZXN0OjpTZXRVcCk6CisgICAgICAgIChURVNUX0YpOgorICAgICAgICAo
Y2hlY2tEb21haW4pOgorICAgICAgICAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3Q6
OlNldFVwKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJD
b2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOgorICAgICAgICAoY2hlY2tEb21h
aW4pOgorCiAyMDE3LTAzLTA4ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgdXBkYXRpbmcgYXV0b3BsYXkgcG9saWNpZXMgYWZ0ZXIgYSBw
YWdlIGhhcyBiZWVuIGxvYWRlZC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMTM1ODgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw3IEBACiAJCTVD
OUU1OTQxMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1OTNFMUQzRUIx
REUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovOyB9OwogCQk1QzlFNTk0MjFEM0VC
NUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0gaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5M0YxRDNFQjFERTAwRTND
NjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htICovOyB9OwogCQk1QzlFNTk0MzFEM0VCNUFD
MDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5NDAxRDNFQjFERTAwRTNDNjJF
IC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsICovOyB9OworCQk1Q0UzNTREOTFFNzBEQTVDMDBC
RUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFMzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8q
IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKIAkJNUU0QjFEMkUxRDQwNEM2
MTAwMDUzNjIxIC8qIFdLU2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRCMUQyQzFENDA0QzYxMDAwNTM2MjEg
LyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSAqLzsgfTsKIAkJNkJGRDI5NEMxRDVFNkMx
RDAwOEVDOTY4IC8qIEhhc2hDb3VudGVkU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAvKiBIYXNoQ291
bnRlZFNldC5jcHAgKi87IH07CiAJCTc1NUEyMEFGMUU2RTM4NjMwMDkzQzY5RiAvKiBEYXRhYmFz
ZVRyYWNrZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1NUEyMEFFMUU2RTM4NjMwMDkzQzY5RiAvKiBEYXRhYmFzZVRyYWNrZXJUZXN0LmNw
cCAqLzsgfTsKQEAgLTEwODYsNiArMTA4Nyw3IEBACiAJCTVDOUU1OTNFMUQzRUIxREUwMEUzQzYy
RSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGUuZGI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTNGMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBs
aWNhdGlvbkNhY2hlLmRiLXNobSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi1zaG0iOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTk0MDFEM0VCMURFMDBFM0M2MkUgLyogQXBw
bGljYXRpb25DYWNoZS5kYi13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNFMzU0RDgxRTcwRDlDMzAwQkVGRTNCIC8qIFdL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUU0QjFEMkMxRDQwNEM2MTAwMDUzNjIxIC8qIFdLU2Nyb2xsVmll
d0RlbGVnYXRlQ3Jhc2gubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tOyBwYXRoID0gLi4vaW9zL1dLU2Nyb2xsVmll
d0RlbGVnYXRlQ3Jhc2gubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NUEyMEFF
MUU2RTM4NjMwMDkzQzY5RiAvKiBEYXRhYmFzZVRyYWNrZXJUZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlVHJhY2tlclRlc3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NTYwOTE3NzE5MjU5QzU5MDA5RUYwNkUgLyogTWVtb3J5
Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBNZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDMsNiArMTY0NSw3IEBACiAJCQkJMzdCNDdFMkUxRDY0RTdD
QTAwNUY0RUZGIC8qIFdLT2JqZWN0Lm1tICovLAogCQkJCTJEMDAwNjVEMUMxRjU4OTQwMDg4RTZB
NyAvKiBXS1BERlZpZXdSZXNpemVDcmFzaC5tbSAqLywKIAkJCQk1RTRCMUQyQzFENDA0QzYxMDAw
NTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSAqLywKKwkJCQk1Q0UzNTREODFF
NzBEOUMzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovLAogCQkJ
CTJFRkYwNkQ2MUQ4QUYzNEEwMDA0QkIzMCAvKiBXS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbSAq
LywKIAkJCQk3QzQxN0YzMTFEMTlFMTQ4MDBCOEVGNTMgLyogV0tXZWJWaWV3RGVmYXVsdE5hdmln
YXRpb25EZWxlZ2F0ZS5tbSAqLywKIAkJCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tX
ZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovLApAQCAtMjkwOCw2ICsyOTExLDcgQEAKIAkJ
CQk3Q0NFN0YxRTFBNDExQUU2MDA0NDdDNEMgLyogV0tTdHJpbmdKU1N0cmluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMTRGQzU4NTFCODk3MzkxMDBEMTA3RUIgLyogV0tXZWJWaWV3Q29uZmln
dXJhdGlvbkV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDNDE3RjMzMUQxOUUxNDgwMEI4
RUY1MyAvKiBXS1dlYlZpZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNFMzU0RDkxRTcwREE1QzAwQkVGRTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAv
KiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5OTg0
RkFDQzFDRkZBRjYwMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzY0MzIyRDcxQjYxQ0NDMzAwMjRGODAxIC8qIFdvcmRCb3VuZGFyeVR5cGluZ0F0
dHJpYnV0ZXMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxMzU4OCkJKGZyb20gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToy
MTM1ODgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5k
YXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCisjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworY2xh
c3MgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVz
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVBbGxDb250
ZW50RXh0ZW5zaW9uc107CisgICAgfQorfTsKKworc3RhdGljIE5TU3RyaW5nICpiYXNpY0ZpbHRl
ciA9IEAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifX1dIjsKKworVEVTVF9GKF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVUZXN0LCBDb21waWxlKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29t
cGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVu
c2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAg
IAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Cit9CisKK3N0YXRpYyBOU1N0
cmluZyAqaW52YWxpZEZpbHRlciA9IEAiWyI7CisKK3N0YXRpYyB2b2lkIGNoZWNrRG9tYWluKE5T
RXJyb3IgKmVycm9yKQoreworICAgIEVYUEVDVF9TVFJFUShbW2Vycm9yIGRvbWFpbl0gVVRGOFN0
cmluZ10sIFtfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gVVRGOFN0cmluZ10pOworfQor
CitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNp
b24pCit7CisgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVu
c2lvbjppbnZhbGlkRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwo
ZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKyAgICAgICAgY2hlY2tE
b21haW4oZXJyb3IpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9TVFJF
USgiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09O
IFN0cmluZy4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKworICAgICAgICBk
b25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmVDb21waWxpbmcpOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZVRlc3QsIExvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZh
bHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNv
bXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAg
RVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKwor
ICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworCisgICAgX19ibG9jayBib29sIGRvbmVMb29r
aW5nVXAgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVs
dFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNF
cnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7Cisg
ICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXAp
OworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0
aW5nSWRlbnRpZmllckxvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9
IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVd
IGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21w
bGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVD
VF9OT1RfTlVMTChlcnJvcik7CisgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKKyAgICAgICAg
RVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxv
b2t1cEZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWls
ZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIiwgW1tlcnJvciBoZWxwQW5jaG9y
XSBVVEY4U3RyaW5nXSk7CisgICAgICAgIAorICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOwor
fQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIFZlcnNpb25NaXNt
YXRjaCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCisgICAgeworICAgICAgICAKKyAgICAgICAgRVhQ
RUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBbW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25W
ZXJzaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iXTsKKyAgICAKKyAgICBfX2Jsb2Nr
IGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRl
ciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAgICB7CisgICAgICAgIAorICAgICAgICBFWFBF
Q1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAg
ICBjaGVja0RvbWFpbihlcnJvcik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICBF
WFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiBWZXJzaW9uIG9mIGZpbGUgZG9l
cyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iLCBbW2Vycm9yIGhlbHBBbmNob3Jd
IFVURjhTdHJpbmddKTsKKyAgICAgICAgCisgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9
CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVtb3ZhbCkKK3sK
KyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJh
c2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRl
ciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRl
cik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5n
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21w
aWxpbmcpOworCisgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOworICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6
XihOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisKKyAgICAg
ICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmVSZW1vdmluZyk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQoreworICAgIF9fYmxvY2sg
Ym9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpA
IkRvZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAg
ICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7
CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JSZW1vdmVGYWlsZWQpOworICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBy
ZW1vdmFsIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iLCBbW2Vycm9y
IGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKworICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVl
OworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsK
K30KKworI2VuZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2Nv
YS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tCSh3b3JraW5nIGNvcHkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJD
b2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDIzICszMCwy
MyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdC5oIgot
I2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi1jbGFzcyBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK2NsYXNzIFdLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIFNldFVwKCkKICAgICB7Ci0gICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAg
ICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zXTsKICAgICB9CiB9OwogCiBzdGF0aWMgTlNTdHJpbmcgKmJhc2lj
RmlsdGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwogCi1URVNUX0YoX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCitURVNUX0YoV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlVGVzdCwgQ29tcGlsZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBp
bGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVy
Ol4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBb
W1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVudEV4dGVu
c2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTk9U
X05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtNjAsMTggKzYw
LDE4IEBAIHN0YXRpYyBOU1N0cmluZyAqaW52YWxpZEZpbHRlciA9IEAiWyI7CiAKIHN0YXRpYyB2
b2lkIGNoZWNrRG9tYWluKE5TRXJyb3IgKmVycm9yKQogewotICAgIEVYUEVDVF9TVFJFUShbW2Vy
cm9yIGRvbWFpbl0gVVRGOFN0cmluZ10sIFtfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4g
VVRGOFN0cmluZ10pOworICAgIEVYUEVDVF9TVFJFUShbW2Vycm9yIGRvbWFpbl0gVVRGOFN0cmlu
Z10sIFtXS0Vycm9yRG9tYWluIFVURjhTdHJpbmddKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBJbnZhbGlkRXh0ZW5zaW9uKQorVEVTVF9GKFdLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNpb24pCiB7CiAgICAgX19ibG9j
ayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjppbnZhbGlkRmlsdGVy
IGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24i
IGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6
XihXS1VzZXJDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAg
CiAgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChl
cnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVy
cm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQp
OworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZUNvbXBpbGVGYWlsZWQpOwogICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBjb21w
aWxhdGlvbiBmYWlsZWQ6IEZhaWxlZCB0byBwYXJzZSB0aGUgSlNPTiBTdHJpbmcuIiwgW1tlcnJv
ciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAKICAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRy
dWU7CkBAIC03OSwxMCArNzksMTAgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVUZXN0LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CiB9
CiAKLVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQorVEVT
VF9GKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIExvb2t1cCkKIHsKICAgICBfX2Js
b2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVy
IGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24i
IGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4o
V0tVc2VyQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAog
ICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJy
b3IpOwpAQCAtOTIsNyArOTIsNyBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAog
ICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJD
b250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29u
dGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBF
WFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAt
MTAyLDE1ICsxMDIsMTUgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0
LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CiAKLVRF
U1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlm
aWVyTG9va3VwKQorVEVTVF9GKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4
aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdV
cCA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBj
b21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkRvZXNOb3RFeGlzdCIgY29t
cGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVY
UEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
ckxvb2t1cEZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkKTsKICAgICAgICAgRVhQRUNUX1NUUkVRKCJF
eHRlbnNpb24gbG9va3VwIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4i
LCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKICAgICAgICAgCiAgICAgICAgIGRv
bmVMb29raW5nVXAgPSB0cnVlOwpAQCAtMTE4LDEwICsxMTgsMTAgQEAgVEVTVF9GKF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZUxvb2tpbmdVcCk7CiB9CiAKLVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
VGVzdCwgVmVyc2lvbk1pc21hdGNoKQorVEVTVF9GKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsIFZlcnNpb25NaXNtYXRjaCkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGlu
ZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24i
IGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4o
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCisgICAgW1tXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lv
bjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLVXNlckNvbnRlbnRFeHRlbnNpb24g
KmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCiAgICAgewogICAgICAgICAKICAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGZpbHRlcik7CkBAIC0xMzEsMTYgKzEzMSwxNiBAQCBURVNUX0YoX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiJdOworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZv
cklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIl07CiAgICAgCiAgICAgX19ibG9jayBib29sIGRv
bmVMb29raW5nVXAgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RF
eHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRl
ciwgTlNFcnJvciAqZXJyb3IpCisgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVm
YXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRl
bnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVudEV4dGVuc2lvbiAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikKICAgICB7CiAgICAgICAgIAogICAgICAgICBFWFBFQ1RfTlVMTChm
aWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVja0Rv
bWFpbihlcnJvcik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCk7
CiAgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFZlcnNpb24g
b2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiIsIFtbZXJyb3Ig
aGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogICAgICAgICAKICAgICAgICAgZG9uZUxvb2tpbmdV
cCA9IHRydWU7CkBAIC0xNDgsMTAgKzE0OCwxMCBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2lu
Z1VwKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1v
dmFsKQorVEVTVF9GKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIFJlbW92YWwpCiB7
CiAgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lv
bkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpi
YXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0
ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0
RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9u
SGFuZGxlcjpeKFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3Ip
IHsKICAgICAKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29t
cGlsaW5nKTsKIAogICAgIF9fYmxvY2sgYm9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKLSAgICBb
W19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVy
Ol4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfTlVMTChlcnJvcik7CiAKICAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKQEAgLTE2
OSwxMyArMTY5LDEzIEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwK
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVSZW1vdmluZyk7CiB9CiAKLVRFU1Rf
RihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVy
UmVtb3ZlKQorVEVTVF9GKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0
aW5nSWRlbnRpZmllclJlbW92ZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0g
ZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0g
cmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWluKGVy
cm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2Rl
LCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkKTsKICAgICAgICAgRVhQ
RUNUX1NUUkVRKCJFeHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1
cmluZyByZW1vdmUuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAKICAgICAg
ICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304008</attachid>
            <date>2017-03-09 16:30:54 -0800</date>
            <delta_ts>2017-03-09 16:41:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20170309163053.patch</filename>
            <type>text/plain</type>
            <size>211274</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTAzLTA5ICBCcmlhbiBO
aWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBm
b3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEVuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNy0w
My0wOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb2Rl
cm4gTWVkaWEgQ29udHJvbHNdIGlPUzogbG9uZyBwcmVzcyBvbiBwbGF5IGJ1dHRvbiBzaG93cyB0
aGUgQ29weSBtZW51CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXph
YmxlLnN0cmluZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9M
b2NhbGl6YWJsZS5zdHJpbmdzCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2
ICsxNzIsOSBAQAogLyogU3VidGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hv
dHRlZCBwbHVnLWluICovCiAiQ2xpY2sgdG8gcmVzdGFydCIgPSAiQ2xpY2sgdG8gcmVzdGFydCI7
CiAKKy8qIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkIGRlc2NyaXB0
aW9uICovCisiQ29tcGlsaW5nIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCIgPSAiQ29tcGls
aW5nIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCI7CisKIC8qIFdlYktpdEVycm9yQ2Fubm90
U2hvd01JTUVUeXBlIGRlc2NyaXB0aW9uICovCiAiQ29udGVudCB3aXRoIHNwZWNpZmllZCBNSU1F
IHR5cGUgY2Fu4oCZdCBiZSBzaG93biIgPSAiQ29udGVudCB3aXRoIHNwZWNpZmllZCBNSU1FIHR5
cGUgY2Fu4oCZdCBiZSBzaG93biI7CiAKQEAgLTM1OCw2ICszNjEsMTIgQEAKIC8qIExvb2sgVXAg
Y29udGV4dCBtZW51IGl0ZW0gd2l0aCBzZWxlY3RlZCB3b3JkICovCiAiTG9vayBVcCDigJw8c2Vs
ZWN0aW9uPuKAnSIgPSAiTG9vayBVcCDigJw8c2VsZWN0aW9uPuKAnSI7CiAKKy8qIFdLRXJyb3JD
b250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQgZGVzY3JpcHRpb24gKi8KKyJMb29raW5n
IHVwIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCIgPSAiTG9va2luZyB1cCBhIFdLQ29udGVu
dEV4dGVuc2lvbiBmYWlsZWQiOworCisvKiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVy
c2lvbk1pc21hdGNoIGRlc2NyaXB0aW9uICovCisiTG9va2luZyB1cCBhIFdLQ29udGVudEV4dGVu
c2lvbiBmb3VuZCBhIGJpbmFyeSB0aGF0IGlzIGluY29tcGF0aWJsZSIgPSAiTG9va2luZyB1cCBh
IFdLQ29udGVudEV4dGVuc2lvbiBmb3VuZCBhIGJpbmFyeSB0aGF0IGlzIGluY29tcGF0aWJsZSI7
CisKIC8qIE1lZGlhIExvb3AgY29udGV4dCBtZW51IGl0ZW0gKi8KICJMb29wIiA9ICJMb29wIjsK
IApAQCAtNDk2LDYgKzUwNSw5IEBACiAvKiBSZWxvYWQgY29udGV4dCBtZW51IGl0ZW0gKi8KICJS
ZWxvYWQiID0gIlJlbG9hZCI7CiAKKy8qIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1v
dmVGYWlsZWQgZGVzY3JpcHRpb24gKi8KKyJSZW1vdmluZyBhIFdLQ29udGVudEV4dGVuc2lvbiBm
YWlsZWQiID0gIlJlbW92aW5nIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCI7CisKIC8qIGRl
ZmF1bHQgbGFiZWwgZm9yIFJlc2V0IGJ1dHRvbnMgaW4gZm9ybXMgb24gd2ViIHBhZ2VzICovCiAi
UmVzZXQiID0gIlJlc2V0IjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKIHR5cGVkZWYgdWludDhf
dCBERkFCeXRlY29kZTsKIAotLy8gSW5jcmVtZW50IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24KKy8vIEluY3JlbWVudCBDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24KIC8vIHdo
ZW4gbWFraW5nIGFueSBub24tYmFja3dhcmRzLWNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgYnl0
ZWNvZGUuCiAvLyBGSVhNRTogQ2hhbmdlcyBoZXJlIHNob3VsZCBub3QgcmVxdWlyZSBjaGFuZ2Vz
IGluIFdlYktpdDIuICBNb3ZlIGFsbCB2ZXJzaW9uaW5nIHRvIFdlYkNvcmUuCiBlbnVtIGNsYXNz
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50OF90IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIxMzY4NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2NCBAQAorMjAxNy0wMy0wOSAgQnJpYW4gTmljaG9sc29uICA8Ym5pY2hvbHNv
bkBtb3ppbGxhLmNvbT4gYW5kIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBFeHBvc2UgcHVibGljIEFQSXMgZm9yIGNvbnRlbnQgZmlsdGVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB0YWtl
cyBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFuZCBfV0tVc2VyQ29udGVudEZpbHRlciBh
bmQgdHVybnMgdGhlbSBpbnRvIHRoZSBjb25zaXN0ZW50bHktbmFtZWQgcHVibGljIEFQSQorICAg
ICAgICBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBhbmQgV0tDb250ZW50RXh0ZW5zaW9uIHJlc3Bl
Y3RpdmVseSB3aXRoIHRoZSBzYW1lIGRlc2lnbiBhbmQgZnVuY3Rpb25hbHkgb2YgdGhlIG9yaWdp
bmFsIFNQSS4KKyAgICAgICAgV2UgYWxzbyBhZGRlZCBwdWJsaWMgZnVuY3Rpb25zIHRvIFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyIGNvcnJlc3BvbmRpbmcgdG8gZXhpc3RpbmcgcHJpdmF0ZSBmdW5j
dGlvbnMuCisKKyAgICAgICAgVGhlIG9sZCBTUEkgT2JqQyBjbGFzc2VzIGFyZSBub3cganVzdCB3
cmFwcGVycyBhcm91bmQgdGhlIG5ldyBPYmpDIGNsYXNzZXMsIHdoaWNoIGFyZSB3cmFwcGVycyBh
cm91bmQgQysrIG9iamVjdHMgaW4gdGhlIEFQSSBuYW1lc3BhY2UuCisgICAgICAgIAorICAgICAg
ICBUaGUgcGVhay1tZW1vcnktcmVkdWNpbmcgb3B0aW1pemF0aW9uIG9mIGhhdmluZyBOU19SRUxF
QVNFU19BUkdVTUVOVCBpbiBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyIGlz
IGtlcHQgZm9yIFNhZmFyaSwKKyAgICAgICAgYnV0IHRoZSBwdWJsaWMgQVBJIGRvZXNuJ3QgbmVl
ZCBzdWNoIGFuIG9wdGltaXphdGlvbi4gIFRoZSBwdWJsaWMgY29tcGlsZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyIHdpbGwgbm90IGRlYWxsb2NhdGUgdGhlIGlucHV0CisgICAgICAgIE5T
U3RyaW5nIGR1cmluZyBjb21waWxpbmcuCisgICAgICAgIAorICAgICAgICBXZSBtb3ZlZCB0aGUg
ZXJyb3IgY29kZXMgaW50byB0aGUgV0tFcnJvckRvbWFpbiwgd2hpY2ggcmVxdWlyZXMgY2hhbmdp
bmcgdGhlIHZhbHVlcyBvZiB0aGUgZXJyb3IgY29kZXMgYW5kIGRvbWFpbiwgYnV0IHNvdXJjZQor
ICAgICAgICBjb21waWxlZCB0aGF0IHVzZXMgdGhlIFNQSSBiZWZvcmUgYW5kIGFmdGVyIHNob3Vs
ZCBzdGlsbCB3b3JrLiAgVXNpbmcgbmV3IGFwcGxpY2F0aW9ucyB3aXRoIG9sZCBmcmFtZXdvcmtz
IG9yIHZpY2UgdmVyc2Egd2lsbAorICAgICAgICBoYXZlIHVuZXhwZWN0ZWQgZXJyb3IgY29kZXMs
IHRob3VnaC4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQVBJT2JqZWN0Lmg6CisgICAgICAgICog
U2hhcmVkL0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXS1BhZ2VH
cm91cEFkZFVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLUGFnZUdyb3VwUmVtb3ZlVXNl
ckNvbnRlbnRGaWx0ZXIpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06Cisg
ICAgICAgIChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwOiBDb3BpZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0FQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uLmNwcC4KKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvbjo6
Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb246On5Db250
ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJD
b250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb246On5Vc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkv
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6ZGVmYXVsdFN0b3JlKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0
b3JlOjpzdG9yZVdpdGhQYXRoKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3Jl
OjpDb250ZW50RXh0ZW5zaW9uU3RvcmUpOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9u
U3RvcmU6On5Db250ZW50RXh0ZW5zaW9uU3RvcmUpOgorICAgICAgICAoQVBJOjpjb21waWxlZFRv
RmlsZSk6CisgICAgICAgIChBUEk6OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgIChBUEk6OkNv
bnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChB
UEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24pOgorICAg
ICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24p
OgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMpOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OmludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbik6CisgICAgICAgIChBUEk6OmNv
bnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkpOgorICAgICAgICAoQVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoQVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6On5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lvbik6IERlbGV0
ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVDb250
ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24pOiBEZWxldGVkLgorICAgICAg
ICAoQVBJOjp1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDogQ29w
aWVkIGZyb20gVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmguCisg
ICAgICAgIChBUEk6Om1ha2VfZXJyb3JfY29kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9B
UElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg6IFJlbW92
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRlbnRD
b250cm9sbGVyQWRkVXNlckNvbnRlbnRGaWx0ZXIpOgorICAgICAgICAoV0tVc2VyQ29udGVudENv
bnRyb2xsZXJSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwOgorICAgICAgICAoV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlwZUlEKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbToKKyAgICAgICAg
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKToKKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCk6IERlbGV0
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24uaDog
Q29waWVkIGZyb20gVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5oLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tLgorICAg
ICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb24gZGVhbGxvY10pOgorICAgICAgICAoLVtXS0NvbnRl
bnRFeHRlbnNpb24gX2FwaU9iamVjdF0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEZpbHRl
ciBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50RmlsdGVyIF9h
cGlPYmplY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudEV4dGVuc2lvbkludGVybmFsLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oLgorICAgICAgICAoV2ViS2l0Ojp3cmFwcGVy
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3Jl
Lmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUubW06IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbS4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVhbGxvY10pOgorICAgICAgICAoK1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdKToKKyAgICAgICAgKCtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOl0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBjb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlv
bkhhbmRsZXI6cmVsZWFzZXNBcmd1bWVudDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBfYXBpT2JqZWN0XSk6CisgICAgICAgICgtW1dLQ29u
dGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25W
ZXJzaW9uRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudEV4
dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICgrW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSk6IERlbGV0ZWQuCisgICAgICAgICgrW19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOl0pOiBEZWxldGVkLgorICAg
ICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0ZW5z
aW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxl
cjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBs
b29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21wbGV0aW9uSGFuZGxlcjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSByZW1vdmVD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfYXBpT2JqZWN0XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgX3JlbW92
ZUFsbENvbnRlbnRFeHRlbnNpb25zXSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklk
ZW50aWZpZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmguCisgICAgICAgIChX
ZWJLaXQ6OndyYXBwZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLRXJyb3IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
RXJyb3IubW06CisgICAgICAgIChsb2NhbGl6ZWREZXNjcmlwdGlvbkZvckVycm9yQ29kZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW06
CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIGFkZENvbnRlbnRFeHRlbnNpb246
XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb246XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIHJlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zXSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9h
ZGRVc2VyQ29udGVudEZpbHRlcjpdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIgX3JlbW92ZVVzZXJDb250ZW50RmlsdGVyOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50
Q29udHJvbGxlciBfcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzXSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOgor
ICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0pOgor
ICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0aFVSTDpdKToK
KyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjb21waWxlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgbG9va3Vw
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgcmVtb3ZlQ29udGVudEV4dGVuc2lv
bkZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVjdF0pOgorICAgICAgICAoLVtfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvblN0b3JlOl0pOgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlYWxsb2NdKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oOgorICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5t
bToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgX2FwaU9iamVjdF0pOgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEZpbHRlciBfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb246XSk6
CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RmlsdGVyIGRlYWxsb2NdKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwu
aDoKKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6YWRkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFVzZXJDb250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHA6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjphZGRDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsQ29udGVudEV4dGVu
c2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJD
b250ZW50RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFcnJvcnNNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OmJsb2NrZWRCeUNvbnRlbnRGaWx0ZXJFcnJvcik6CisKIDIwMTctMDMtMDkgIEpv
c2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IGZvbGxvdy11cCB0byByMjEzNjgyLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9B
UElPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9i
amVjdC5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQ
SU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDggQEAgcHVibGljOgogICAg
ICAgICBCYWNrRm9yd2FyZExpc3RJdGVtLAogICAgICAgICBDYWNoZU1hbmFnZXIsCiAgICAgICAg
IENvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXIsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb24sCisg
ICAgICAgIENvbnRlbnRFeHRlbnNpb25TdG9yZSwKICAgICAgICAgQ29udGV4dE1lbnVMaXN0ZW5l
ciwKICAgICAgICAgQ29va2llTWFuYWdlciwKICAgICAgICAgRG93bmxvYWQsCkBAIC0xNDUsOCAr
MTQ3LDYgQEAgcHVibGljOgogICAgICAgICBSdW5KYXZhU2NyaXB0UHJvbXB0UmVzdWx0TGlzdGVu
ZXIsCiAgICAgICAgIFRleHRDaGVja2VyLAogICAgICAgICBVc2VyQ29udGVudENvbnRyb2xsZXIs
Ci0gICAgICAgIFVzZXJDb250ZW50RXh0ZW5zaW9uLAotICAgICAgICBVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLAogICAgICAgICBVc2VyQ29udGVudFdvcmxkLAogICAgICAgICBVc2VySW5pdGlh
dGVkQWN0aW9uLAogICAgICAgICBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2ssCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25z
LmNwcAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
RGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5o
IgogI2luY2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4
dGVuc2lvbi5oIgogI2luY2x1ZGUgIldLQXJyYXkuaCIKICNpbmNsdWRlICJXS0NvbnRleHRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV0tNdXRhYmxlRGljdGlvbmFyeS5oIgpAQCAtNTYsMjIgKzU2LDIy
IEBAIFdLU3RyaW5nUmVmIFdLUGFnZUdyb3VwQ29weUlkZW50aWZpZXIoV0sKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotdm9pZCBXS1BhZ2VHcm91cEFkZFVzZXJDb250ZW50RmlsdGVyKFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tVc2VyQ29udGVudEZpbHRlclJlZiB1c2VyQ29udGVu
dEZpbHRlclJlZikKK3ZvaWQgV0tQYWdlR3JvdXBBZGRVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYgY29udGVudEZpbHRl
clJlZikKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbChwYWdl
R3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyQ29udGVudEV4dGVuc2lv
bigqdG9JbXBsKHVzZXJDb250ZW50RmlsdGVyUmVmKSk7CisgICAgdG9JbXBsKHBhZ2VHcm91cFJl
ZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZENvbnRlbnRFeHRlbnNpb24oKnRvSW1wbChj
b250ZW50RmlsdGVyUmVmKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYp
OwotICAgIFVOVVNFRF9QQVJBTSh1c2VyQ29udGVudEZpbHRlclJlZik7CisgICAgVU5VU0VEX1BB
UkFNKGNvbnRlbnRGaWx0ZXJSZWYpOwogI2VuZGlmCiB9CiAKLXZvaWQgV0tQYWdlR3JvdXBSZW1v
dmVVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5n
UmVmIHVzZXJDb250ZW50RmlsdGVyTmFtZVJlZikKK3ZvaWQgV0tQYWdlR3JvdXBSZW1vdmVVc2Vy
Q29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIGNv
bnRlbnRGaWx0ZXJOYW1lUmVmKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0g
ICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVz
ZXJDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3RyaW5nKHVzZXJDb250ZW50RmlsdGVyTmFtZVJlZikp
OworICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1v
dmVDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3RyaW5nKGNvbnRlbnRGaWx0ZXJOYW1lUmVmKSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYpOwotICAgIFVOVVNFRF9QQVJBTSh1
c2VyQ29udGVudEZpbHRlck5hbWVSZWYpOworICAgIFVOVVNFRF9QQVJBTShjb250ZW50RmlsdGVy
TmFtZVJlZik7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9B
UElPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQ
SU9iamVjdC5tbQkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
Y29hL0FQSU9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQnJv
d3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgiCisjaW1wb3J0ICJX
S0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJXS0ZyYW1lSW5mb0lu
dGVybmFsLmgiCiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldLTlNEYXRhLmgiCkBA
IC03MCw4ICs3Miw2IEBACiAjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgiCiAjaW1w
b3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbkludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwu
aCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dL
VXNlckluaXRpYXRlZEFjdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyU3R5bGVTaGVl
dEludGVybmFsLmgiCkBAIC0yMjksMTIgKzIyOSwxMiBAQCB2b2lkKiBPYmplY3Q6Om5ld09iamVj
dChzaXplX3Qgc2l6ZSwgVHlwCiAgICAgICAgIHdyYXBwZXIgPSBbV0tVc2VyQ29udGVudENvbnRy
b2xsZXIgYWxsb2NdOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVHlwZTo6VXNlckNvbnRl
bnRFeHRlbnNpb246Ci0gICAgICAgIHdyYXBwZXIgPSBbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxs
b2NdOworICAgIGNhc2UgVHlwZTo6Q29udGVudEV4dGVuc2lvbjoKKyAgICAgICAgd3JhcHBlciA9
IFtXS0NvbnRlbnRFeHRlbnNpb24gYWxsb2NdOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2Ug
VHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZToKLSAgICAgICAgd3JhcHBlciA9IFtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXTsKKyAgICBjYXNlIFR5cGU6OkNvbnRlbnRF
eHRlbnNpb25TdG9yZToKKyAgICAgICAgd3JhcHBlciA9IFtXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZSBhbGxvY107CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUeXBlOjpVc2VyQ29udGVudFdv
cmxkOgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAJKHJl
dmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCiAKICNpbmNsdWRlICJBUElBcnJheS5oIgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUg
IkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRlICJBUElVc2VyU3R5bGVTaGVldC5oIgogI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lv
biAyMTM2NzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb24uY3BwOjIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVu
dEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorCituYW1lc3BhY2UgQVBJIHsKKwor
VXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29u
dGVudEV4dGVuc2lvbikKKyAgICA6IG1fbmFtZShuYW1lKQorICAgICwgbV9jb21waWxlZEV4dGVu
c2lvbihXVEZNb3ZlKGNvbnRlbnRFeHRlbnNpb24pKQoreworfQorCitVc2VyQ29udGVudEV4dGVu
c2lvbjo6flVzZXJDb250ZW50RXh0ZW5zaW9uKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgQVBJ
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCShy
ZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgi
CisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIApAQCAtMzIsMTMgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1V
c2VyQ29udGVudEV4dGVuc2lvbjo6VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250
ZW50RXh0ZW5zaW9uKQorQ29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbihjb25zdCBX
VEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
PiYmIGNvbnRlbnRFeHRlbnNpb24pCiAgICAgOiBtX25hbWUobmFtZSkKICAgICAsIG1fY29tcGls
ZWRFeHRlbnNpb24oV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uKSkKIHsKIH0KIAotVXNlckNvbnRl
bnRFeHRlbnNpb246On5Vc2VyQ29udGVudEV4dGVuc2lvbigpCitDb250ZW50RXh0ZW5zaW9uOjp+
Q29udGVudEV4dGVuc2lvbigpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAyMTM2NzApCShm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24u
aDoyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRl
bnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCisjZGVmaW5lIEFQSVVzZXJDb250ZW50RXh0
ZW5zaW9uX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjsKK30KKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNzIFVzZXJDb250ZW50RXh0
ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVu
dEV4dGVuc2lvbj4geworcHVibGljOgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisg
ICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlKGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29u
dGVudEV4dGVuc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJD
b250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpKTsKKyAgICB9
CisKKyAgICBVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVm
PFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKKyAgICB2aXJ0dWFsIH5V
c2VyQ29udGVudEV4dGVuc2lvbigpOworCisgICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbXBp
bGVkRXh0ZW5zaW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgV1RGOjpTdHJpbmcgbV9uYW1l
OworICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gbV9jb21waWxl
ZEV4dGVuc2lvbjsKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRpZiAvLyBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRF
eHRlbnNpb24uaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEFQ
SVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKLSNkZWZpbmUgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25f
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM1LDE2ICszNCwxNiBAQCBjbGFzcyBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb247CiAKIG5hbWVzcGFjZSBBUEkgewogCi1jbGFzcyBVc2VyQ29udGVudEV4
dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRl
bnRFeHRlbnNpb24+IHsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb24gZmluYWwgOiBwdWJsaWMgT2Jq
ZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRlbnRFeHRlbnNpb24+IHsKIHB1YmxpYzoKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRl
bnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCisgICAgc3RhdGljIFJl
ZjxDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb24o
bmFtZSwgV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uKSkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lvbikp
KTsKICAgICB9CiAKLSAgICBVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYg
bmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLSAgICB2
aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvbigpOworICAgIENvbnRlbnRFeHRlbnNpb24oY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbj4mJik7CisgICAgdmlydHVhbCB+Q29udGVudEV4dGVuc2lvbigpOwogCiAgICAgY29uc3Qg
V1RGOjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBj
b25zdCB7IHJldHVybiBtX2NvbXBpbGVkRXh0ZW5zaW9uLmdldCgpOyB9CkBAIC01Niw1ICs1NSwz
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9uIDIx
MzY3MCkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmNwcDoyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKKworI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiTmV0
d29ya0NhY2hlRGF0YS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CisjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0
ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0d29ya0NhY2hlOworCituYW1lc3BhY2UgQVBJIHsK
KworVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
ZGVmYXVsdFN0b3JlKCkKK3sKKyAgICBzdGF0aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSog
ZGVmYXVsdFN0b3JlID0gYWRvcHRSZWYobmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxl
YWtSZWYoKTsKKyAgICByZXR1cm4gKmRlZmF1bHRTdG9yZTsKK30KKworUmVmPFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU+IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgo
Y29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKHN0b3JlUGF0aCkpOworfQorCitVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCkKKyAgICA6IFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgpKQoreworfQorCitVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6
U3RyaW5nJiBzdG9yZVBhdGgpCisgICAgOiBtX3N0b3JlUGF0aChzdG9yZVBhdGgpCisgICAgLCBt
X2NvbXBpbGVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1f
cmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJl
YWQgUXVldWUiKSkKKyAgICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgUmVtb3ZlIFF1ZXVlIikpCit7Cit9CisKK1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6On5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCkKK3sKK30KKworc3Rh
dGljIFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVuc2lvbi0iICsgV2ViQ29yZTo6ZW5jb2RlRm9yRmls
ZU5hbWUoaWRlbnRpZmllcikpOworfQorCisvLyBUaGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBk
ZW5zZWx5IHBhY2tlZCBieXRlcyBpbiB0aGUgZmlsZSwgbm90IHNpemVvZiBhbmQgb2Zmc2V0b2Ys
IHdoaWNoIHdvdWxkCisvLyByZXByZXNlbnQgdGhlIHNpemUgYW5kIG9mZnNldCBvZiB0aGUgc3Ry
dWN0dXJlIGluIG1lbW9yeSwgcG9zc2libHkgd2l0aCBjb21waWxlci1hZGRlZCBwYWRkaW5nLgor
Y29uc3Qgc2l6ZV90IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSA9IDIgKiBzaXplb2Yo
dWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7Citjb25zdCBzaXplX3QgQ29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluT2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KSArIDQgKiBzaXplb2Yo
dWludDY0X3QpOworCitzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIHsKKyAgICB1aW50
MzJfdCB2ZXJzaW9uIHsgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRF
eHRlbnNpb25GaWxlVmVyc2lvbiB9OworICAgIHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9Owor
ICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsK
KyAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07Cisg
ICAgdWludDY0X3QgY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVp
bnQzMl90IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiB7IGZhbHNlIH07CisgICAgCisgICAg
c2l6ZV90IGZpbGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0
ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgYWN0aW9uc1NpemUKKyAgICAgICAg
ICAgICsgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplCisgICAgICAgICAgICAr
IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZQorICAgICAgICAgICAgKyBjb25kaXRp
b25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAgfQorfTsKKworc3RhdGljIERhdGEgZW5jb2Rl
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYg
bWV0YURhdGEpCit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOworCisg
ICAgZW5jb2RlciA8PCBtZXRhRGF0YS52ZXJzaW9uOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEu
YWN0aW9uc1NpemU7CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25l
ZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25z
QXBwbHlPbmx5VG9Eb21haW47CisKKyAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0g
Q29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplKTsKKyAgICByZXR1cm4gRGF0YShlbmNvZGVy
LmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7Cit9CisKK3N0YXRpYyBib29sIGRlY29k
ZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFE
YXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
KyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICAvLyBUaGUgZmlsZSBkYXRh
IHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0
aGUgc2l6ZQorICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBl
cXVhbCB0aGUgZGF0YSBzaXplLgorICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6
RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1ldGFEYXRhLnZlcnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXpl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0pOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMgYm9vbCBvcGVuQW5k
TWFwQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIENvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZpbGVEYXRhKQoreworICAgIGZpbGVEYXRhID0gbWFw
RmlsZShXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKKyAg
ICBpZiAoZmlsZURhdGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9v
bCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgRGF0YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3Jt
RmlsZUhhbmRsZSBmZCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZpbGVEYXRh
LmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7
CisgICAgICAgIGlmIChXZWJDb3JlOjp3cml0ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRhdGEs
IHNpemUpID09IC0xKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7
CisgICAgCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBzdGQ6OmVycm9yX2NvZGUg
Y29tcGlsZWRUb0ZpbGUoU3RyaW5nJiYganNvbiwgY29uc3QgU3RyaW5nJiBmaW5hbEZpbGVQYXRo
LCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQor
eworICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczsKKworICAg
IGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50IGZpbmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25D
b21waWxhdGlvbkNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBDb21waWxhdGlvbkNsaWVu
dChXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVuc2lv
bk1ldGFEYXRhJiBtZXRhRGF0YSkKKyAgICAgICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVIYW5k
bGUpCisgICAgICAgICAgICAsIG1fbWV0YURhdGEobWV0YURhdGEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghbWV0YURhdGEuYWN0aW9uc1NpemUpOworICAgICAgICAgICAgQVNTRVJU
KCFtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAg
ICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUp
OworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29k
ZVNpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHdyaXRlRmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2Rl
KSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25k
aXRpb25CeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZp
bHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgbV9maWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOworICAgICAgICAgICAgd3Jp
dGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHdyaXRlRmlsdGVyc1dpdGhDb25kaXRpb25zQnl0
ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7Cisg
ICAgICAgICAgICBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVj
b2RlLnNpemUoKTsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgp
LCBieXRlY29kZS5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB3
cml0ZVRvcFVSTEZpbHRlcnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUp
IGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2Rl
V3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRh
KGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9u
cywgYm9vbCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pIGZpbmFsCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0
ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVX
cml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVX
cml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hY3Rpb25zV3JpdHRlbik7CisgICAgICAg
ICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFjdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgbV9j
b25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4gPSBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47
CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNp
emUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGZpbmFsaXplKCkgZmlu
YWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9tZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IG1fYWN0
aW9uc1dyaXR0ZW47CisgICAgICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSA9IG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0
dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29k
ZVNpemUgPSBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuOworICAgICAgICAg
ICAgbV9tZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgPSBtX2NvbmRpdGlv
bkZpbHRlcnNCeXRlY29kZVdyaXR0ZW47CisgICAgICAgICAgICBtX21ldGFEYXRhLmNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbiA9IG1fY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBEYXRhIGhlYWRlciA9IGVuY29kZUNvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YShtX21ldGFEYXRhKTsKKyAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYg
V2ViQ29yZTo6c2Vla0ZpbGUobV9maWxlSGFuZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVTZWVrT3Jp
Z2luOjpTZWVrRnJvbUJlZ2lubmluZykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cml0ZVRvRmlsZShoZWFkZXIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGhhZEVycm9yV2hpbGVXcml0aW5nVG9G
aWxlKCkgeyByZXR1cm4gbV9maWxlRXJyb3I7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgd3JpdGVUb0ZpbGUoY29uc3QgRGF0YSYgZGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFtX2ZpbGVFcnJvciAmJiAhd3JpdGVEYXRhVG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkp
IHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAg
ICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVI
YW5kbGU7CisgICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKKyAg
ICAgICAgc2l6ZV90IG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsg
MCB9OworICAgICAgICBzaXplX3QgbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRl
biB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRl
biB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fYWN0aW9uc1dyaXR0ZW4geyAwIH07CisgICAgICAg
IGJvb2wgbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4geyBmYWxzZSB9OworICAgICAgICBi
b29sIG1fZmlsZUVycm9yIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgYXV0byB0ZW1wb3JhcnlG
aWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBTdHJp
bmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVu
dEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgIGlmICh0ZW1wb3JhcnlGaWxl
SGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJl
dHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAg
ICAKKyAgICBjaGFyIGludmFsaWRIZWFkZXJbQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXpl
XTsKKyAgICBtZW1zZXQoaW52YWxpZEhlYWRlciwgMHhGRiwgc2l6ZW9mKGludmFsaWRIZWFkZXIp
KTsKKyAgICAvLyBUaGlzIGhlYWRlciB3aWxsIGJlIHJld3JpdHRlbiBpbiBDb21waWxhdGlvbkNs
aWVudDo6ZmluYWxpemUuCisgICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKHRlbXBvcmFyeUZp
bGVIYW5kbGUsIGludmFsaWRIZWFkZXIsIHNpemVvZihpbnZhbGlkSGVhZGVyKSkgPT0gLTEpIHsK
KyAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgICAg
ICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7
CisgICAgfQorCisgICAgQ29tcGlsYXRpb25DbGllbnQgY29tcGlsYXRpb25DbGllbnQodGVtcG9y
YXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOworICAgIAorICAgIGlmIChhdXRvIGNvbXBpbGVyRXJy
b3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQsIFdURk1vdmUoanNvbikpKSB7
CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAg
ICAgcmV0dXJuIGNvbXBpbGVyRXJyb3I7CisgICAgfQorICAgIGlmIChjb21waWxhdGlvbkNsaWVu
dC5oYWRFcnJvcldoaWxlV3JpdGluZ1RvRmlsZSgpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3Nl
RmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgIH0KKyAgICAKKyAgICBtYXBw
ZWREYXRhID0gYWRvcHRBbmRNYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRh
LmZpbGVTaXplKCkpOworICAgIGlmIChtYXBwZWREYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisKKyAg
ICBpZiAoIVdlYkNvcmU6Om1vdmVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRo
KSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21w
aWxlRmFpbGVkOworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIFJlZlB0cjxBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRh
JiBmaWxlRGF0YSkKK3sKKyAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURh
dGEuc2l6ZSgpLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwor
ICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKKyAgICAgICAgV1RGTW92ZShzaGFyZWRNZW1vcnkpLAor
ICAgICAgICBmaWxlRGF0YSwKKyAgICAgICAgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zm
c2V0LAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUsCisgICAgICAgIG1l
dGFEYXRhLmFjdGlvbnNTaXplLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNp
emUKKyAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRh
LmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgQ29udGVudEV4
dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXpl
CisgICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSwKKyAgICAgICAgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXpl
LAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsg
bWV0YURhdGEuYWN0aW9uc1NpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNX
aXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRG
aWx0ZXJzQnl0ZWNvZGVTaXplCisgICAgKTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92
ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7CisgICAgcmV0dXJuIEFQSTo6VXNlckNv
bnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbikpOworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1
cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9u
PHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUp
PiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0
ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsK
KyAgICAgICAgCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKKyAg
ICAgICAgRGF0YSBmaWxlRGF0YTsKKyAgICAgICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudEV4dGVu
c2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpKSB7CisgICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6Okxvb2t1cEZhaWxlZCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG1ldGFEYXRhLnZlcnNpb24gIT0gVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbikgeworICAgICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
eworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpWZXJz
aW9uTWlzbWF0Y2gpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlk
ZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1v
dmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSB7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNl
ckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEs
IGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0
ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgbV9jb21waWxlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBq
c29uID0ganNvbi5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0
ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgeworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQ
YXRoLCBpZGVudGlmaWVyKTsKKworICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0
YURhdGE7CisgICAgICAgIERhdGEgZmlsZURhdGE7CisgICAgICAgIGF1dG8gZXJyb3IgPSBjb21w
aWxlZFRvRmlsZShXVEZNb3ZlKGpzb24pLCBwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAg
ICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGVycm9yID0gV1RGTW92ZShl
cnJvciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsK
KyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBlcnJvcik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1v
dmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBSZWZQdHI8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVF
eHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250
ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lk
KHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcmVtb3ZlUXVl
dWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIg
PSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3Jl
UGF0aCwgaWRlbnRpZmllcik7CisKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpkZWxldGVGaWxlKHBh
dGgpKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
RXJyb3I6OlJlbW92ZUZhaWxlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQoreworICAg
IGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBh
dGgsICIqIikpCisgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCk7Cit9CisKK3ZvaWQg
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIGF1dG8gZmlsZSA9IFdl
YkNvcmU6Om9wZW5GaWxlKGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciks
IFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKGZpbGUgPT0gV2ViQ29yZTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJuOworICAgIENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyOworICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29y
ZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmludmFs
aWRIZWFkZXIpLCBzaXplb2YoaW52YWxpZEhlYWRlcikpOworICAgIEFTU0VSVF9VTlVTRUQoYnl0
ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4gPT0gc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKKyAgICBX
ZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7Cit9CisgICAgCitjb25zdCBzdGQ6OmVycm9yX2NhdGVn
b3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpCit7CisgICAgY2xh
c3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjpl
cnJvcl9jYXRlZ29yeSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2Vw
dCBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gInVzZXIgY29udGVudCBleHRl
bnNpb24gc3RvcmUiOworICAgICAgICB9CisKKyAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShp
bnQgZXJyb3JDb2RlKSBjb25zdCBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUp
KSB7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpM
b29rdXBGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBk
dXJpbmcgbG9va3VwLiI7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgcmV0dXJuICJWZXJz
aW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iOworICAg
ICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZh
aWxlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBj
b21waWxlLiI7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVy
cm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBl
cnJvciBkdXJpbmcgcmVtb3ZlLiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6OnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4
dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CisgICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNh
dGVnb3J5OworfQorCit9IC8vIG5hbWVzcGFjZSBBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM2NzAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisj
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQogCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKKyNp
bmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0
YS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKQEAgLTQ2LDMxICs0NiwzMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU7CiAKIG5hbWVzcGFjZSBBUEkgewogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlJiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKQorQ29udGVudEV4
dGVuc2lvblN0b3JlJiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCiB7Ci0g
ICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0
UmVmKG5ldyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKS5sZWFrUmVmKCk7CisgICAgc3RhdGlj
IENvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVmYXVsdFN0b3JlID0gYWRvcHRSZWYobmV3IENvbnRl
bnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigpOwogICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOwog
fQogCi1SZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQorUmVmPENv
bnRlbnRFeHRlbnNpb25TdG9yZT4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRo
KGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZShzdG9yZVBhdGgpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDb250ZW50RXh0ZW5zaW9uU3RvcmUoc3RvcmVQYXRoKSk7CiB9CiAKLVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDog
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCitDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZSgpCisgICAgOiBDb250ZW50RXh0ZW5z
aW9uU3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgpKQogewogfQogCi1Vc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9y
ZVBhdGgpCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZShjb25z
dCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQogICAgIDogbV9zdG9yZVBhdGgoc3RvcmVQYXRoKQot
ICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgQ29tcGlsZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6Q29uY3VycmVudCkpCi0g
ICAgLCBtX3JlYWRRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBSZWFkIFF1ZXVlIikpCi0gICAgLCBtX3JlbW92ZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlbW92ZSBRdWV1ZSIpKQorICAgICwgbV9jb21w
aWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxl
IFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVl
KFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQor
ICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0
b3JlIFJlbW92ZSBRdWV1ZSIpKQogewogfQogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Db250
ZW50RXh0ZW5zaW9uU3RvcmUoKQogewogfQogCkBAIC04NSw3ICs4NSw3IEBAIGNvbnN0IHNpemVf
dCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclMKIGNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBw
bHlPbmx5VG9Eb21haW5PZmZzZXQgPSBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50
NjRfdCk7CiAKIHN0cnVjdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90
IHZlcnNpb24geyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVu
c2lvbkZpbGVWZXJzaW9uIH07CisgICAgdWludDMyX3QgdmVyc2lvbiB7IENvbnRlbnRFeHRlbnNp
b25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiB9OwogICAgIHVpbnQ2
NF90IGFjdGlvbnNTaXplIHsgMCB9OwogICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKICAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aENvbmRpdGlv
bnNCeXRlY29kZVNpemUgeyAwIH07CkBAIC0yNjAsMTQgKzI2MCwxNCBAQCBzdGF0aWMgc3RkOjpl
cnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0CiAgICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxl
ID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKICAgICBTdHJpbmcgdGVtcG9y
YXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lv
biIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOwogICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09
IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0
dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAgICAgCiAg
ICAgY2hhciBpbnZhbGlkSGVhZGVyW0NvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07CiAg
ICAgbWVtc2V0KGludmFsaWRIZWFkZXIsIDB4RkYsIHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CiAg
ICAgLy8gVGhpcyBoZWFkZXIgd2lsbCBiZSByZXdyaXR0ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6
OmZpbmFsaXplLgogICAgIGlmIChXZWJDb3JlOjp3cml0ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFu
ZGxlLCBpbnZhbGlkSGVhZGVyLCBzaXplb2YoaW52YWxpZEhlYWRlcikpID09IC0xKSB7CiAgICAg
ICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0
dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsK
ICAgICB9CiAKICAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1wb3Jh
cnlGaWxlSGFuZGxlLCBtZXRhRGF0YSk7CkBAIC0yNzgsMjAgKzI3OCwyMCBAQCBzdGF0aWMgc3Rk
OjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0CiAgICAgfQogICAgIGlmIChjb21waWxhdGlv
bkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGluZ1RvRmlsZSgpKSB7CiAgICAgICAgIFdlYkNvcmU6
OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKICAgICB9CiAgICAg
CiAgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5kTWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAw
LCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFp
bGVkOworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGls
ZUZhaWxlZDsKIAogICAgIGlmICghV2ViQ29yZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgs
IGZpbmFsRmlsZVBhdGgpKQotICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1l
dGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3N0YXRpYyBSZWZQdHI8QVBJOjpDb250ZW50
RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKIHsKICAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVh
dGUoY29uc3RfY2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgp
LCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwogICAgIGF1dG8g
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YSgKQEAgLTMxNCwxMCArMzE0LDEwIEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvbj4KICAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJz
Qnl0ZWNvZGVTaXplCiAgICAgKTsKICAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9
IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7Ci0gICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZShpZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbikpOworICAgIHJldHVybiBBUEk6OkNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVudGlm
aWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwogfQogCi12b2lkIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNp
b24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3JlYWRR
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3Rv
cmVQYXRoLCBpZGVudGlmaWVyKTsKQEAgLTMzMSw3ICszMzEsNyBAQCB2b2lkIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChtZXRhRGF0YS52ZXJzaW9uICE9IFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24pIHsKKyAgICAg
ICAgaWYgKG1ldGFEYXRhLnZlcnNpb24gIT0gQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50
Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uKSB7CiAgICAgICAgICAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRjaCk7
CiAgICAgICAgICAgICB9KTsKQEAgLTMzOSwxMyArMzM5LDEzIEBAIHZvaWQgVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6bG9va3VwQ28KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRU
aGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92
ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4
dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOwotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRFeHRlbnNpb24sIHsgfSk7CisgICAgICAgICAgICBS
ZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uID0gY3JlYXRlRXh0
ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRhLCBmaWxlRGF0YSk7CisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihjb250ZW50RXh0ZW5zaW9uLCB7IH0pOwogICAgICAgICB9KTsKICAgICB9
KTsKIH0KIAotdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4
dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29u
LCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjpl
cnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIs
IFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0
ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgbV9j
b21waWxlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlk
ZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBqc29uID0ganNvbi5pc29sYXRl
ZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAg
ICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsK
QEAgLTM2MSwxMyArMzYxLDEzIEBAIHZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29t
cGlsZUMKICAgICAgICAgfQogCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3Zl
KGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdU
Rk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSB7Ci0gICAgICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4g
dXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURh
dGEsIGZpbGVEYXRhKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50
RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICAgICAgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lv
bj4gY29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0
YSwgZmlsZURhdGEpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEV4dGVu
c2lvbiwgeyB9KTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYg
aWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3ZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3Jf
Y29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNo
KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVy
Lmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKICAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRp
Zmllcik7CkBAIC0zODUsMTMgKzM4NSwxMyBAQCB2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OnJlbW92ZUNvCiAgICAgfSk7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCit2b2lkIENvbnRlbnRF
eHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCiB7
CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6bGlzdERpcmVjdG9yeShtX3N0
b3JlUGF0aCwgIioiKSkKICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKTsKIH0KIAot
dm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lv
blZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpCit2b2lkIENvbnRlbnRFeHRl
bnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIGF1dG8gZmlsZSA9IFdlYkNvcmU6Om9wZW5GaWxl
KGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciksIFdlYkNvcmU6Ok9wZW5G
b3JXcml0ZSk7CiAgICAgaWYgKGZpbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSkKQEAgLTQwMiwyNCArNDAyLDI0IEBAIHZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6aW52YWxpZGEKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7CiB9CiAgICAgCi1jb25z
dCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRl
Z29yeSgpCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVF
cnJvckNhdGVnb3J5KCkKIHsKLSAgICBjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVnb3J5IHsKKyAgICBjbGFzcyBDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3JfY2F0ZWdv
cnkgewogICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qgbm9leGNlcHQgZmluYWwKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJ1c2VyIGNvbnRlbnQgZXh0ZW5zaW9uIHN0b3Jl
IjsKKyAgICAgICAgICAgIHJldHVybiAiY29udGVudCBleHRlbnNpb24gc3RvcmUiOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2RlKSBjb25zdCBm
aW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7Ci0gICAgICAgICAgICBjYXNl
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6CisgICAgICAg
ICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+KGVy
cm9yQ29kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6TG9va3VwRmFpbGVkOgogICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJy
b3IgZHVyaW5nIGxvb2t1cC4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgorICAgICAgICAgICAgY2FzZSBDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CiAgICAgICAgICAgICAgICAg
cmV0dXJuICJWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnBy
ZXRlci4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lm
aWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7Ci0gICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICBjYXNlIENv
bnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxlZDoKICAgICAgICAgICAgICAg
ICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIjsKICAgICAgICAgICAg
IH0KIApAQCAtNDI3LDcgKzQyNyw3IEBAIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIHVzZXJD
b250ZW50RXgKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRlbnNpb25F
cnJvckNhdGVnb3J5OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250ZW50RXh0ZW5zaW9u
U3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKICAgICBy
ZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaAkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDoyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRl
IDxzeXN0ZW1fZXJyb3I+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXVEYgeworY2xhc3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgQVBJIHsKKworY2xh
c3MgVXNlckNvbnRlbnRFeHRlbnNpb247CisKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAg
TG9va3VwRmFpbGVkID0gMSwKKyAgICAgICAgVmVyc2lvbk1pc21hdGNoLAorICAgICAgICBDb21w
aWxlRmFpbGVkLAorICAgICAgICBSZW1vdmVGYWlsZWQKKyAgICB9OworICAgIAorICAgIC8vIFRo
aXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNoYW5nZSBp
cyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KKyAgICAvLyB0byBwcmV2
ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCisgICAgY29uc3Qgc3RhdGljIHVp
bnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA4OworCisgICAgc3Rh
dGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOworICAgIHN0YXRp
YyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRoUGF0aChjb25zdCBXVEY6
OlN0cmluZyYgc3RvcmVQYXRoKTsKKworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUoKTsKKyAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdU
Rjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHZpcnR1YWwgflVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUoKTsKKworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQ
dHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2
b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIs
IEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVy
cm9yX2NvZGUpPik7CisgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+KTsKKwor
ICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCisgICAgdm9pZCBzeW5jaHJvbm91c1JlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZl
cnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIFdU
Rjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKKworICAgIGNvbnN0IFdURjo6U3RyaW5nIG1f
c3RvcmVQYXRoOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7CisgICAg
UmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3JrUXVldWU+
IG1fcmVtb3ZlUXVldWU7Cit9OworCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOworCitpbmxpbmUgc3RkOjplcnJvcl9j
b2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJv
cikKK3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBBUEkK
KworbmFtZXNwYWNlIHN0ZCB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9l
bnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVibGljIHRydWVf
dHlwZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMiArMzcsMTIgQEAgY2xhc3MgV29ya1F1ZXVlOwogCiBuYW1lc3BhY2UgQVBJIHsKIAotY2xh
c3MgVXNlckNvbnRlbnRFeHRlbnNpb247CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uOwogCi1jbGFz
cyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2Jq
ZWN0OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiB7CitjbGFzcyBDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRl
bnRFeHRlbnNpb25TdG9yZT4gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgRXJyb3IgewotICAg
ICAgICBMb29rdXBGYWlsZWQgPSAxLAorICAgICAgICBMb29rdXBGYWlsZWQgPSA2LCAvLyBNaXJy
b3JzIHZhbHVlIG9mIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQKICAg
ICAgICAgVmVyc2lvbk1pc21hdGNoLAogICAgICAgICBDb21waWxlRmFpbGVkLAogICAgICAgICBS
ZW1vdmVGYWlsZWQKQEAgLTUyLDE1ICs1MiwxNSBAQCBwdWJsaWM6CiAgICAgLy8gdG8gcHJldmVu
dCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgogICAgIGNvbnN0IHN0YXRpYyB1aW50
MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gODsKIAotICAgIHN0YXRp
YyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKLSAgICBzdGF0aWMg
UmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpT
dHJpbmcmIHN0b3JlUGF0aCk7CisgICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9yZSYgZGVm
YXVsdFN0b3JlKCk7CisgICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3Jl
V2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CiAKLSAgICBleHBsaWNpdCBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7Ci0gICAgZXhwbGljaXQgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLSAgICB2aXJ0dWFsIH5V
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lv
blN0b3JlKCk7CisgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6
U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNpb25TdG9yZSgp
OwogCi0gICAgdm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYg
aWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOwotICAgIHZvaWQgbG9v
a3VwQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rp
b248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29k
ZSk+KTsKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5n
JiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQ
STo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIGxvb2t1
cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9u
PHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsK
ICAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwogCiAgICAgLy8gRm9yIHRl
c3Rpbmcgb25seS4KQEAgLTc2LDE3ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIFJlZjxXVEY6Oldv
cmtRdWV1ZT4gbV9yZW1vdmVRdWV1ZTsKIH07CiAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkm
IHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7Citjb25zdCBzdGQ6OmVy
cm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7CiAKLWlu
bGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OkVycm9yIGVycm9yKQoraW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vycm9yX2Nv
ZGUoQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJvcikKIHsKLSAgICByZXR1cm4geyBz
dGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0
ZWdvcnkoKSB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4oZXJyb3IpLCBjb250ZW50
RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQVBJ
CiAKIG5hbWVzcGFjZSBzdGQgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2NvZGVf
ZW51bTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0cnVl
X3R5cGUgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6Q29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNw
cAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50
RXh0ZW5zaW9uLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5jbHVk
ZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCi0KLW5hbWVzcGFjZSBBUEkgewotCi1V
c2VyQ29udGVudEV4dGVuc2lvbjo6VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250
ZW50RXh0ZW5zaW9uKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX2NvbXBpbGVkRXh0ZW5z
aW9uKFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpCi17Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5z
aW9uOjp+VXNlckNvbnRlbnRFeHRlbnNpb24oKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBBUEkK
LQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5o
CShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCi0jZGVmaW5lIEFQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci0KLWNsYXNzIFVz
ZXJDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBl
OjpVc2VyQ29udGVudEV4dGVuc2lvbj4gewotcHVibGljOgotI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlKGNv
bnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lv
bikpKTsKLSAgICB9Ci0KLSAgICBVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmlu
ZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLSAg
ICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvbigpOwotCi0gICAgY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBXZWJLaXQ6Oldl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBpbGVkRXh0ZW5zaW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV1RGOjpT
dHJpbmcgbV9uYW1lOwotICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bj4gbV9jb21waWxlZEV4dGVuc2lvbjsKLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBBUElVc2VyQ29udGVu
dEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9uIDIx
MzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MzYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5jbHVkZSAi
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgi
Ci0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlNoYXJlZE1l
bW9yeS5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29kZXIuaD4K
LSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OjpOZXR3b3JrQ2FjaGU7Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1Vc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlJiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKQot
ewotICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKiBkZWZhdWx0U3RvcmUgPSBh
ZG9wdFJlZihuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigpOwotICAgIHJl
dHVybiAqZGVmYXVsdFN0b3JlOwotfQotCi1SZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4g
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmlu
ZyYgc3RvcmVQYXRoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoc3RvcmVQYXRoKSk7Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDogVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCi17Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0
aCkKLSAgICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKLSAgICAsIG1fY29tcGlsZVF1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIENvbXBpbGUgUXVldWUi
LCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQotICAgICwgbV9yZWFkUXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQotICAg
ICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBSZW1vdmUgUXVldWUiKSkKLXsKLX0KLQotVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotewotfQotCi1zdGF0aWMgU3RyaW5nIGNvbnN0
cnVjdGVkUGF0aChjb25zdCBTdHJpbmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikK
LXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2UsICJD
b250ZW50RXh0ZW5zaW9uLSIgKyBXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVudGlmaWVy
KSk7Ci19Ci0KLS8vIFRoZSBzaXplIGFuZCBvZmZzZXQgb2YgdGhlIGRlbnNlbHkgcGFja2VkIGJ5
dGVzIGluIHRoZSBmaWxlLCBub3Qgc2l6ZW9mIGFuZCBvZmZzZXRvZiwgd2hpY2ggd291bGQKLS8v
IHJlcHJlc2VudCB0aGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBzdHJ1Y3R1cmUgaW4gbWVtb3J5
LCBwb3NzaWJseSB3aXRoIGNvbXBpbGVyLWFkZGVkIHBhZGRpbmcuCi1jb25zdCBzaXplX3QgQ29u
dGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplID0gMiAqIHNpemVvZih1aW50MzJfdCkgKyA0ICog
c2l6ZW9mKHVpbnQ2NF90KTsKLWNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW5PZmZzZXQgPSBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7Ci0KLXN0
cnVjdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90IHZlcnNpb24geyBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJz
aW9uIH07Ci0gICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07Ci0gICAgdWludDY0X3QgZmls
dGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVpbnQ2NF90IGZp
bHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRfdCBjb25k
aXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdWludDMyX3QgY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluIHsgZmFsc2UgfTsKLSAgICAKLSAgICBzaXplX3QgZmlsZVNpemUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVy
U2l6ZQotICAgICAgICAgICAgKyBhY3Rpb25zU2l6ZQotICAgICAgICAgICAgKyBmaWx0ZXJzV2l0
aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUKLSAgICAgICAgICAgICsgZmlsdGVyc1dpdGhDb25k
aXRpb25zQnl0ZWNvZGVTaXplCi0gICAgICAgICAgICArIGNvbmRpdGlvbmVkRmlsdGVyc0J5dGVj
b2RlU2l6ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgRGF0YSBlbmNvZGVDb250ZW50RXh0ZW5zaW9u
TWV0YURhdGEoY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKLXsKLSAg
ICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7Ci0KLSAgICBlbmNvZGVyIDw8IG1l
dGFEYXRhLnZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKLSAg
ICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6
ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2Rl
U2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bjsKLQotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50RXh0ZW5zaW9u
RmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4dGVuc2lv
bk1ldGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEm
IGZpbGVEYXRhKQotewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGZpbGVEYXRhLmFw
cGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCBzaXplKSB7Ci0gICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBl
ZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCi0gICAgICAg
IC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNp
emUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIo
ZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lv
bikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXpl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0
YSwgRGF0YSYgZmlsZURhdGEpCi17Ci0gICAgZmlsZURhdGEgPSBtYXBGaWxlKFdlYkNvcmU6OmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmIChmaWxlRGF0YS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEobWV0YURhdGEsIGZpbGVEYXRhKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlRGF0YVRvRmls
ZShjb25zdCBEYXRhJiBmaWxlRGF0YSwgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQot
ewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3Vj
Y2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKFdl
YkNvcmU6OndyaXRlVG9GaWxlKGZkLCAoY29uc3QgY2hhciopZGF0YSwgc2l6ZSkgPT0gLTEpIHsK
LSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsKLSAgICAKLSAgICByZXR1
cm4gc3VjY2VzczsKLX0KLQotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShT
dHJpbmcmJiBqc29uLCBjb25zdCBTdHJpbmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIG1hcHBlZERhdGEpCi17Ci0gICAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOwotCi0gICAgY2xhc3MgQ29tcGlsYXRp
b25DbGllbnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6OlBsYXRm
b3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFE
YXRhKQotICAgICAgICAgICAgOiBtX2ZpbGVIYW5kbGUoZmlsZUhhbmRsZSkKLSAgICAgICAgICAg
ICwgbV9tZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFt
ZXRhRGF0YS5hY3Rpb25zU2l6ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmZpbHRl
cnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1l
dGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dENvbmRpdGlv
bnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3Jp
dHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3Jp
dHRlbik7Ci0gICAgICAgICAgICBtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3Jp
dHRlbiArPSBieXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5
dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZShWZWN0b3I8REZB
Qnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAgIG1fZmls
dGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOwotICAg
ICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUo
KSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdyaXRlVG9wVVJMRmlsdGVy
c0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmluYWwKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVj
b2RlLnNpemUoKTsKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgp
LCBieXRlY29kZS5zaXplKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVBY3Rp
b25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zLCBib29sIGNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbikgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KCFtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOwotICAgICAg
ICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOwotICAgICAg
ICAgICAgQVNTRVJUKCFtX2FjdGlvbnNXcml0dGVuKTsKLSAgICAgICAgICAgIG1fYWN0aW9uc1dy
aXR0ZW4gKz0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbnNBcHBseU9u
bHlUb0RvbWFpbiA9IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKLSAgICAgICAgICAgIHdy
aXRlVG9GaWxlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6ZSgpKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmluYWxpemUoKSBmaW5hbAotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX21ldGFEYXRhLmFjdGlvbnNTaXplID0gbV9hY3Rpb25zV3JpdHRlbjsKLSAg
ICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXpl
ID0gbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW47Ci0gICAgICAgICAg
ICBtX21ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IG1fZmlsdGVy
c1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW47Ci0gICAgICAgICAgICBtX21ldGFEYXRhLmNv
bmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2Rl
V3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9t
YWluID0gbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIERhdGEgaGVhZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1fbWV0
YURhdGEpOwotICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiBXZWJDb3JlOjpzZWVrRmls
ZShtX2ZpbGVIYW5kbGUsIDBsbCwgV2ViQ29yZTo6RmlsZVNlZWtPcmlnaW46OlNlZWtGcm9tQmVn
aW5uaW5nKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2Zp
bGVIYW5kbGUpOwotICAgICAgICAgICAgICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7IHJldHVybiBt
X2ZpbGVFcnJvcjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB3cml0ZVRvRmlsZShj
b25zdCBEYXRhJiBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsZUVycm9y
ICYmICF3cml0ZURhdGFUb0ZpbGUoZGF0YSwgbV9maWxlSGFuZGxlKSkgewotICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAgICAgIG1f
ZmlsZUVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKLSAgICAgICAg
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtX21ldGFEYXRhOwotICAgICAgICBzaXplX3QgbV9m
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4geyAwIH07Ci0gICAgICAgIHNp
emVfdCBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuIHsgMCB9OwotICAgICAg
ICBzaXplX3QgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuIHsgMCB9OwotICAgICAg
ICBzaXplX3QgbV9hY3Rpb25zV3JpdHRlbiB7IDAgfTsKLSAgICAgICAgYm9vbCBtX2NvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbiB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9maWxlRXJyb3Ig
eyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBhdXRvIHRlbXBvcmFyeUZpbGVIYW5kbGUgPSBXZWJD
b3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotICAgIFN0cmluZyB0ZW1wb3JhcnlGaWxl
UGF0aCA9IFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9uIiwgdGVt
cG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgaWYgKHRlbXBvcmFyeUZpbGVIYW5kbGUgPT0gV2ViQ29y
ZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwotICAgIAotICAgIGNoYXIgaW52
YWxpZEhlYWRlcltDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemVdOwotICAgIG1lbXNldChp
bnZhbGlkSGVhZGVyLCAweEZGLCBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIC8vIFRoaXMg
aGVhZGVyIHdpbGwgYmUgcmV3cml0dGVuIGluIENvbXBpbGF0aW9uQ2xpZW50OjpmaW5hbGl6ZS4K
LSAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgaW52YWxp
ZEhlYWRlciwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKSA9PSAtMSkgewotICAgICAgICBXZWJDb3Jl
OjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLSAgICB9Ci0KLSAgICBD
b21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBt
ZXRhRGF0YSk7Ci0gICAgCi0gICAgaWYgKGF1dG8gY29tcGlsZXJFcnJvciA9IGNvbXBpbGVSdWxl
TGlzdChjb21waWxhdGlvbkNsaWVudCwgV1RGTW92ZShqc29uKSkpIHsKLSAgICAgICAgV2ViQ29y
ZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4gY29tcGls
ZXJFcnJvcjsKLSAgICB9Ci0gICAgaWYgKGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9yV2hpbGVX
cml0aW5nVG9GaWxlKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZp
bGVIYW5kbGUpOwotICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I6OkNvbXBpbGVGYWlsZWQ7Ci0gICAgfQotICAgIAotICAgIG1hcHBlZERhdGEgPSBhZG9wdEFu
ZE1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgMCwgbWV0YURhdGEuZmlsZVNpemUoKSk7Ci0g
ICAgaWYgKG1hcHBlZERhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLQotICAgIGlmICghV2ViQ29yZTo6
bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQotICAgICAgICByZXR1
cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0KLSAg
ICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b24+IGNyZWF0ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IENvbnRl
bnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRhKQotewot
ICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25z
dF9jYXN0PHVpbnQ4X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCksIFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgYXV0byBjb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhKAotICAgICAgICBXVEZNb3ZlKHNoYXJlZE1lbW9yeSksCi0gICAgICAgIGZpbGVEYXRh
LAotICAgICAgICBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQsCi0gICAgICAgIENv
bnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuYWN0aW9uc1Np
emUsCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQotICAgICAgICAgICAg
KyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRD
b25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRl
clNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKLSAgICAgICAgICAgICsg
bWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAgICAgICBt
ZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUsCi0gICAgICAgIENvbnRl
bnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25z
U2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0
ZWNvZGVTaXplLAotICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNp
emUKLSAgICApOwotICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEpKTsKLSAgICByZXR1cm4gQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbjo6
Y3JlYXRlKGlkZW50aWZpZXIsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7Ci19
Ci0KLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQ
YXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9
IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwotICAgICAgICAKLSAgICAg
ICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOwotICAgICAgICBEYXRhIGZpbGVE
YXRhOwotICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFE
YXRhLCBmaWxlRGF0YSkpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyLCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bWV0YURhdGEudmVyc2lvbiAhPSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29u
dGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uKSB7Ci0gICAgICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRjaCk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVE
YXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAg
ICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4dGVuc2lv
biA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOwotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRFeHRlbnNpb24sIHsgfSk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBX
VEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBt
X2NvbXBpbGVRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
aWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGpzb24gPSBqc29uLmlzb2xh
dGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIp
OwotCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKLSAgICAgICAg
RGF0YSBmaWxlRGF0YTsKLSAgICAgICAgYXV0byBlcnJvciA9IGNvbXBpbGVkVG9GaWxlKFdURk1v
dmUoanNvbiksIHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAgICAgIGlmIChlcnJvcikg
ewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIGVycm9yKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmll
ciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1l
dGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlm
aWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
dXNlckNvbnRlbnRFeHRlbnNpb24sIHsgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12
b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29u
c3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2Rl
KT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgbV9yZW1vdmVRdWV1ZS0+ZGlzcGF0Y2goW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNv
bGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVy
KTsKLQotICAgICAgICBpZiAoIVdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCkpIHsKLSAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihFcnJvcjo6UmVtb3ZlRmFp
bGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAgICAgICAg
fSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hy
b25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCi17Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBwYXRoIDogV2ViQ29yZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkKLSAgICAg
ICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKTsKLX0KLQotdm9pZCBVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIpCi17Ci0gICAgYXV0byBmaWxlID0gV2ViQ29yZTo6b3BlbkZpbGUo
Y29uc3RydWN0ZWRQYXRoKG1fc3RvcmVQYXRoLCBpZGVudGlmaWVyKSwgV2ViQ29yZTo6T3BlbkZv
cldyaXRlKTsKLSAgICBpZiAoZmlsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFu
ZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIGludmFs
aWRIZWFkZXI7Ci0gICAgYXV0byBieXRlc1dyaXR0ZW4gPSBXZWJDb3JlOjp3cml0ZVRvRmlsZShm
aWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmaW52YWxpZEhlYWRlciksIHNpemVv
ZihpbnZhbGlkSGVhZGVyKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChieXRlc1dyaXR0ZW4sIGJ5dGVz
V3JpdHRlbiA9PSBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIFdlYkNvcmU6OmNsb3NlRmls
ZShmaWxlKTsKLX0KLSAgICAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIHVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkKLXsKLSAgICBjbGFzcyBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVnb3J5IHsK
LSAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5vZXhjZXB0IGZpbmFsCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAidXNlciBjb250ZW50IGV4dGVuc2lvbiBzdG9yZSI7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlKGludCBlcnJvckNvZGUpIGNv
bnN0IGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+KGVycm9yQ29kZSkpIHsKLSAgICAgICAgICAg
IGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxlZDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIjsK
LSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlZlcnNp
b25NaXNtYXRjaDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlZlcnNpb24gb2YgZmlsZSBkb2Vz
IG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiI7Ci0gICAgICAgICAgICBjYXNlIFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOgotICAgICAgICAg
ICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGNvbXBpbGUuIjsKLSAgICAg
ICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxl
ZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1v
dmUuIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRl
Z29yeTsKLSAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEFQSQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIK
LSNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgV29ya1F1ZXVlOwotfQotCi1uYW1lc3BhY2UgQVBJ
IHsKLQotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247Ci0KLWNsYXNzIFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEVycm9yIHsK
LSAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKLSAgICAgICAgVmVyc2lvbk1pc21hdGNoLAotICAg
ICAgICBDb21waWxlRmFpbGVkLAotICAgICAgICBSZW1vdmVGYWlsZWQKLSAgICB9OwotICAgIAot
ICAgIC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFs
IGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KLSAgICAv
LyB0byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAgY29uc3Qg
c3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA4Owot
Ci0gICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOwot
ICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRoUGF0aChj
b25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLQotICAgIGV4cGxpY2l0IFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUoKTsKLSAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
KGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwotICAgIHZpcnR1YWwgflVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29u
c3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248
dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+
KTsKLSAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlk
ZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+
LCBzdGQ6OmVycm9yX2NvZGUpPik7Ci0gICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29k
ZSk+KTsKLQotICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gICAgdm9pZCBzeW5jaHJvbm91c1Jl
bW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudEV4
dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOwotCi1wcml2YXRl
OgotICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKLQotICAgIGNvbnN0IFdURjo6
U3RyaW5nIG1fc3RvcmVQYXRoOwotICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVl
dWU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKLSAgICBSZWY8V1RGOjpX
b3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7Ci19OwotCi1jb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5
JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOwotCi1pbmxpbmUgc3Rk
OjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpF
cnJvciBlcnJvcikKLXsKLSAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OwotfQotCi19IC8vIG5hbWVz
cGFjZSBBUEkKLQotbmFtZXNwYWNlIHN0ZCB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJy
b3JfY29kZV9lbnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVi
bGljIHRydWVfdHlwZSB7IH07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAko
cmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJ
Q2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgogCiBuYW1lc3BhY2UgQVBJIHsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb247
CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uU3RvcmU7CiBjbGFzcyBFeHBlcmltZW50YWxGZWF0dXJl
OwogY2xhc3MgRnJhbWVIYW5kbGU7CiBjbGFzcyBGcmFtZUluZm87CkBAIC02Myw4ICs2NSw2IEBA
IGNsYXNzIE9wZW5QYW5lbFBhcmFtZXRlcnM7CiBjbGFzcyBQYWdlQ29uZmlndXJhdGlvbjsKIGNs
YXNzIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjsKIGNsYXNzIFNlc3Npb25TdGF0ZTsKLWNsYXNz
IFVzZXJDb250ZW50RXh0ZW5zaW9uOwotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsK
IGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBXZWJzaXRlRGF0YVN0b3JlOwogY2xhc3MgV2Vic2l0
ZVBvbGljaWVzOwpAQCAtMTYxLDggKzE2MSw4IEBAIFdLX0FERF9BUElfTUFQUElORyhXS1Jlc291
cmNlTG9hZFN0YXRpc3QKIFdLX0FERF9BUElfTUFQUElORyhXS1Nlc3Npb25TdGF0ZVJlZiwgQVBJ
OjpTZXNzaW9uU3RhdGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJlZiwgV2Vi
VGV4dENoZWNrZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudENvbnRyb2xsZXJS
ZWYsIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZiwgQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYsIEFQSTo6VXNl
ckNvbnRlbnRFeHRlbnNpb24pCitXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZSkKK1dLX0FERF9BUElfTUFQ
UElORyhXS1VzZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb24pCiBXS19B
RERfQVBJX01BUFBJTkcoV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tSZWYsIFVzZXJNZWRpYVBl
cm1pc3Npb25DaGVja1Byb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RSZWYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkpCiBXS19BRERf
QVBJX01BUFBJTkcoV0tVc2VyU2NyaXB0UmVmLCBBUEk6OlVzZXJTY3JpcHQpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHAJKHJldmlzaW9u
IDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRl
bnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQVBJ
VXNlckNvbnRlbnRXb3JsZC5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRl
ICJBUElVc2VyU3R5bGVTaGVldC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3BwCShy
ZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVudENvbnRyb2xsZXJS
ZWYuaCIKIAotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAi
QVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eS5oIgpAQCAtNjIsMTMgKzYyLDEzIEBAIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1v
dmVBbGxVc2UKIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJBZGRVc2VyQ29udGVudEZpbHRl
cihXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJSZWYsIFdL
VXNlckNvbnRlbnRGaWx0ZXJSZWYgdXNlckNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVm
KS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnRvSW1wbCh1c2VyQ29udGVudEZpbHRlclJlZikp
OworICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xsZXJSZWYpLT5hZGRDb250ZW50RXh0ZW5z
aW9uKCp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJSZWYpKTsKICNlbmRpZgogfQogCiB2b2lkIFdL
VXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKFdLVXNlckNv
bnRlbnRDb250cm9sbGVyUmVmIHVzZXJDb250ZW50Q29udHJvbGxlclJlZikKIHsKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xsZXJS
ZWYpLT5yZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB0b0ltcGwodXNlckNv
bnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRp
ZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHJldmlzaW9uIDIx
MzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVm
LmgiCiAKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW5jbHVk
ZSAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiBXS1R5cGVJRCBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVHZXRUeXBlSUQo
KQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgcmV0dXJuIHRvQVBJKEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJ
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpBUElUeXBlKTsKICNlbHNlCiAgICAgcmV0dXJu
IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNv
Y29hLm1tCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4
dGVuc2lvblN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCkBAIC0z
Miw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1TdHJpbmcgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCgpCitTdHJpbmcgQ29udGVudEV4dGVuc2lvblN0
b3JlOjpkZWZhdWx0U3RvcmVQYXRoKCkKIHsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKICAgICBzdGF0aWMgTlNVUkwgKmNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTDsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLmg6MjEzNjcwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0
L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZp
bHRlciA6IE5TT2JqZWN0CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDggKzI3LDgg
QEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLVdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAu
MTEpLCBpb3MoOS4wKSkKLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgOiBOU09iamVj
dAorV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KQorQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gOiBOU09iamVjdAogCiBAZW5kCiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTM2NzApCShmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06MjEzNjcwKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgorCisjaWYg
V0tfQVBJX0VOQUJMRUQKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisK
K0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEZpbHRlcgorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4dGVuc2lvbigpOwor
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9j
b2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICBy
ZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvbjsKK30KKworQGVuZAorCisjZW5kaWYgLy8gV0tf
QVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTM2NzApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjQsMjAgKzI0LDE3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRF
eHRlbnNpb25JbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2luY2x1ZGUgIldl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4
dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJy
b3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+CiAKLUBpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVu
dEZpbHRlcgorQGltcGxlbWVudGF0aW9uIFdLQ29udGVudEV4dGVuc2lvbgogCiAtICh2b2lkKWRl
YWxsb2MKIHsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4dGVuc2lv
bigpOworICAgIF9jb250ZW50RXh0ZW5zaW9uLT5+Q29udGVudEV4dGVuc2lvbigpOwogCiAgICAg
W3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNDYsNyArNDMsNyBAQCAtICh2b2lkKWRlYWxsb2MKIAog
LSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29udGVudEV4
dGVuc2lvbjsKKyAgICByZXR1cm4gKl9jb250ZW50RXh0ZW5zaW9uOwogfQogCiBAZW5kCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbklu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2NzApCShmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRl
cm5hbC5oOjIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCIKKworI2lmIFdL
X0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1w
b3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworaW5saW5lIF9XS1VzZXJD
b250ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250
ZW50RXh0ZW5zaW9uKQoreworICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBl
cigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOworICAgIHJl
dHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVy
KCk7Cit9CisKK30KKworQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoKSA8V0tPYmpl
Y3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKK30KK0BlbmQKKworI2VuZGlmIC8vIFdL
X0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShyZXZpc2lv
biAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVu
dEV4dGVuc2lvbkludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDI2ICsyMywyNiBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50
RmlsdGVyLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb24uaCIKIAogI2lmIFdLX0FQSV9F
TkFCTEVECiAKLSNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJB
UElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNl
ckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250ZW50RXh0ZW5zaW9uKQoraW5saW5lIFdLQ29udGVu
dEV4dGVuc2lvbiAqd3JhcHBlcihBUEk6OkNvbnRlbnRFeHRlbnNpb24mIGNvbnRlbnRFeHRlbnNp
b24pCiB7Ci0gICAgQVNTRVJUKFt1c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVyKCkgaXNLaW5k
T2ZDbGFzczpbX1dLVXNlckNvbnRlbnRGaWx0ZXIgY2xhc3NdXSk7Ci0gICAgcmV0dXJuIChfV0tV
c2VyQ29udGVudEZpbHRlciAqKXVzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKTsKKyAgICBB
U1NFUlQoW2NvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVu
dEV4dGVuc2lvbiBjbGFzc11dKTsKKyAgICByZXR1cm4gKFdLQ29udGVudEV4dGVuc2lvbiAqKWNv
bnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOwogfQogCiB9CiAKLUBpbnRlcmZhY2UgX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lv
biAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKKyAgICBBUEk6Ok9i
amVjdFN0b3JhZ2U8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBfY29udGVudEV4dGVuc2lvbjsKIH0K
IEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMjEzNjcwKQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaDoyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lm
IFdLX0FQSV9FTkFCTEVECisKK0BjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKKworV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBlKWRlZmF1
bHRTdG9yZTsKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsOworCist
ICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBOU19SRUxFQVNF
U19BUkdVTUVOVCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cjsKKy0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVtb3ZlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKworQGVu
ZAorCitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNE
b21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JD
b2RlKSB7CisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVk
ID0gMSwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0
Y2gsCisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCwK
KyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQsCit9IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKKworI2VuZGlmIC8vIFdL
X0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2
NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI3ICsyNywxOCBAQAogCiAjaWYgV0tfQVBJX0VOQUJM
RUQKIAotQGNsYXNzIF9XS1VzZXJDb250ZW50RmlsdGVyOworQGNsYXNzIFdLQ29udGVudEV4dGVu
c2lvbjsKIAotV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQotQGlu
dGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKK1dLX0NMQVNT
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZh
Y2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAogCiArIChpbnN0YW5jZXR5cGUp
ZGVmYXVsdFN0b3JlOwogKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cmw7
CiAKLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopIE5TX1JF
TEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyOwotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29u
dGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZCljb21w
aWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRlbnRFeHRlbnNp
b24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vy
cm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cjsKIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcjsKIAogQGVuZAogCi1XS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tV
c2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIp
LCBpb3MoMTAuMCkpOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDb2RlKSB7Ci0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yTG9va3VwRmFpbGVkID0gMSwKLSAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gsCi0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yQ29tcGlsZUZhaWxlZCwKLSAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JSZW1vdmVGYWlsZWQsCi19IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEw
LjApKTsKLQogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0JKHJldmlzaW9uIDIxMzY3MCkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOjIxMzY3MCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5h
bC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgi
CisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0IDxzdHJp
bmc+CisKK05TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluID0g
QCJfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4iOworCitAaW1wbGVtZW50YXRpb24gX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZQor
eworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpkZWZhdWx0U3RvcmUoKSk7Cit9CisKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6
KE5TVVJMICopdXJsCit7CisgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4g
c3RvcmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJs
LmFic29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7CisgICAgcmV0dXJuIFdlYktp
dDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOworfQorCistICh2b2lkKWNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlv
bkhhbmRsZXIgY29weV0pOworCisgICAgU3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRFeHRlbnNp
b24pOworICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lvbiByZWxlYXNlXTsKKyAgICBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbiA9IG5pbDsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBbaGFu
ZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24s
IHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBO
U0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8g
dXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkV4dGVuc2lvbiBjb21waWxhdGlvbiBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgp
LmNfc3RyKCldfTsKKworICAgICAgICAgICAgLy8gZXJyb3IudmFsdWUoKSBjb3VsZCBoYXZlIGEg
c3BlY2lmaWMgY29tcGlsZXIgZXJyb3IgdGhhdCBpcyBub3QgZXF1YWwgdG8gX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8vIFdlIHdh
bnQgdG8gdXNlIGVycm9yLm1lc3NhZ2UsIGJ1dCBoZXJlIHdlIHdhbnQgdG8gb25seSBwYXNzIG9u
IENvbXBpbGVGYWlsZWQuCisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJy
b3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQgdXNlckluZm86dXNlckluZm9d
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmF3SGFu
ZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRs
ZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0
ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClsb29rdXBDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhh
bmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxvb2t1cENv
bnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250
ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsK
KyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9p
ZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwor
CisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogJXMiLCBl
cnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgQVNTRVJUKGVycm9yLnZhbHVl
KCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkIHx8IGVy
cm9yLnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVyc2lvbk1p
c21hdGNoKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhE
b21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6ZXJyb3IudmFsdWUoKSB1
c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICos
IE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3SGFuZGxlcihXZWJLaXQ6Ondy
YXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAgIH0pOworfQorCistICh2
b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XSk7CisKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVtb3ZlQ29udGVudEV4
dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7Cisg
ICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQg
KF4pKE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKworICAgICAgICAgICAgYXV0byB1c2VySW5m
byA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
RXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07
CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxlcihbTlNF
cnJvciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkIHVzZXJJbmZvOnVz
ZXJJbmZvXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAg
ICByYXdIYW5kbGVyKG5pbCk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXS09iamVjdCBw
cm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAorewor
ICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKKwor
Ly8gRm9yIHRlc3Rpbmcgb25seS4KKworLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lv
bnMKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVB
bGxDb250ZW50RXh0ZW5zaW9ucygpOworfQorCistICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4
dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAg
ICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25W
ZXJzaW9uKGlkZW50aWZpZXIpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxF
RApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTM2NzApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNCw3NiArMjQsODAgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVu
c2lvblN0b3JlSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIldL
RXJyb3JJbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5o
IgotI2ltcG9ydCA8c3RyaW5nPgogCi1OU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uc0RvbWFpbiA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIjsKLQotQGlt
cGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKK0BpbXBsZW1lbnRhdGlv
biBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBfdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKyAg
ICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5+Q29udGVudEV4dGVuc2lvblN0b3JlKCk7CiAKICAg
ICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICsgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKIHsK
LSAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6ZGVmYXVsdFN0b3JlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKIH0KIAogKyAoaW5zdGFuY2V0eXBl
KXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cmwKIHsKLSAgICBSZWY8QVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3Rv
cmVXaXRoUGF0aCh1cmwuYWJzb2x1dGVVUkwuZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKTsKKyAg
ICBSZWY8QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlID0gQVBJOjpDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkp
OwogfQogCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2Vy
Q29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKWNv
bXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
IGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5z
aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNF
cnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpl
bmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxl
ciByZWxlYXNlc0FyZ3VtZW50Ok5PXTsKK30KKworLSAodm9pZClfY29tcGlsZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRF
eHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6KEJPT0wpcmVsZWFzZXNBcmd1bWVudAogewogICAg
IGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKIAogICAg
IFN0cmluZyBqc29uKGVuY29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2RlZENvbnRl
bnRFeHRlbnNpb24gcmVsZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7
CisgICAgaWYgKHJlbGVhc2VzQXJndW1lbnQpIHsKKyAgICAgICAgW2VuY29kZWRDb250ZW50RXh0
ZW5zaW9uIHJlbGVhc2VdOworICAgICAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsK
KyAgICB9CiAKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRF
eHRlbnNpb24oaWRlbnRpZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUg
ZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVudEV4dGVu
c2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6Q29u
dGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7
CiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZv
aWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsK
KyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShXS0NvbnRlbnRFeHRlbnNp
b24gKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1l
c3NhZ2UoKS5jX3N0cigpXX07CiAKLSAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQg
aGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCi0gICAgICAgICAgICAv
LyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkg
cGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkIHVzZXJJbmZvOnVz
ZXJJbmZvXSk7CisgICAgICAgICAgICAvLyBlcnJvci52YWx1ZSgpIGNvdWxkIGhhdmUgYSBzcGVj
aWZpYyBjb21waWxlciBlcnJvciB0aGF0IGlzIG5vdCBlcXVhbCB0byBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gdXNl
IGVycm9yLm1lc3NhZ2UsIGJ1dCBoZXJlIHdlIHdhbnQgdG8gb25seSBwYXNzIG9uIENvbXBpbGVG
YWlsZWQgd2l0aCB1c2VySW5mbyBmcm9tIHRoZSBzdGQ6OmVycm9yX2NvZGUuCisgICAgICAgICAg
ICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4g
Y29kZTpXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZCB1c2VySW5mbzp1
c2VySW5mb10pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0
byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3Ig
KikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdL
Q29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIHJh
d0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsK
ICAgICB9KTsKIH0KIAotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lk
KWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vy
cm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhb
Y29tcGxldGlvbkhhbmRsZXIgY29weV0pOwogCi0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2Nv
ZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5sb29rdXBDb250ZW50RXh0
ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9u
PiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAgICAgICAgaWYg
KGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICAgICAg
YXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9y
ICopKWhhbmRsZXIuZ2V0KCk7CiAKICAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVs
cEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBs
b29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0gICAgICAgICAg
ICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JMb29rdXBGYWlsZWQgfHwgZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOwotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWws
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4g
Y29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICBBU1NF
UlQoZXJyb3IudmFsdWUoKSA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFp
bGVkIHx8IGVycm9yLnZhbHVlKCkgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNp
b25NaXNtYXRjaCk7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JX
aXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJ
bmZvXSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHJh
d0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSlo
YW5kbGVyLmdldCgpOworICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoV0tDb250
ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKICAgICAgICAgcmF3SGFu
ZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOwogICAg
IH0pOwogfQpAQCAtMTAyLDEzICsxMDYsMTMgQEAgLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5z
aW9uRm9ySWRlbnRpZgogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25I
YW5kbGVyIGNvcHldKTsKIAotICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVD
b250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2NvZGUgZXJy
b3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9u
KGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAgICAgICAg
aWYgKGVycm9yKSB7CiAgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNF
cnJvciAqKSloYW5kbGVyLmdldCgpOwogCiAgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtO
U0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNp
b24gcmVtb3ZhbCBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCldfTsKLSAgICAg
ICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvclJlbW92ZUZhaWxlZCk7Ci0gICAgICAgICAgICByYXdIYW5kbGVyKFtOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9d
KTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IFdLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxlcihbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVSZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0xMjEsMjMgKzEyNSwzMCBAQCAtICh2b2lkKXJlbW92ZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmCiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiB7
Ci0gICAgcmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICByZXR1cm4gKl9j
b250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKK0BpbXBsZW1lbnRhdGlvbiBXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBvbmx5Lgog
CiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwogewotICAgIF91c2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7
CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucygpOwogfQogCiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZl
cnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKIHsKLSAgICBfdXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGlk
ZW50aWZpZXIpOworICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVDb250ZW50
RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVyKTsKK30KKworLy8gTlNfUkVMRUFTRVNfQVJHVU1F
TlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCisKKy0gKHZvaWQpX2NvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRD
b250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNvZGVkQ29u
dGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciByZWxlYXNl
c0FyZ3VtZW50OllFU107CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2NzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg6
MjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRF
eHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmgiCisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworaW5saW5lIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlJiBzdG9yZSkKK3sKKyAgICBBU1NFUlQoW3N0b3JlLndyYXBw
ZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0p
OworICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3JlLndyYXBw
ZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
KCkgPFdLT2JqZWN0PiB7CitAcGFja2FnZQorICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworfQor
QGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjMsMjYgKzIzLDI2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUu
aCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tf
QVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgor
I2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAjaW1wb3J0ICJXS09iamVjdC5o
IgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgKndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBzdG9yZSkKK2lu
bGluZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBlcihBUEk6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZSYgc3RvcmUpCiB7Ci0gICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZD
bGFzczpbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKLSAgICByZXR1cm4g
KF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7CisgICAgQVNT
RVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3Jl
LndyYXBwZXIoKTsKIH0KIAogfQogCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
ICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKLSAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAg
ICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF9jb250ZW50
RXh0ZW5zaW9uU3RvcmU7CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25T
dG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg6MjEz
NjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4K
KworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3IgdGVzdGluZyBvbmx5LgorLSAodm9pZClfcmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CistICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CisKK0BlbmQK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHJl
dmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE2ICsyMywxOSBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaD4KIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLUBpbnRlcmZhY2Ug
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorQGludGVyZmFjZSBXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBvbmx5Lgog
LSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CiAtICh2b2lkKV9pbnZhbGlkYXRl
Q29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXI7CiAKKy8vIE5TX1JFTEVBU0VTX0FSR1VNRU5UIHRvIGtlZXAgcGVhayBtZW1vcnkgdXNhZ2Ug
bG93LgorLSAodm9pZClfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopIE5T
X1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTEgKzM2LDE1IEBAIFdLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IFdLRXJyb3JEb21haW4KIAog
LyohIEBlbnVtIFdLRXJyb3JDb2RlCiAgQGFic3RyYWN0IENvbnN0YW50cyB1c2VkIGJ5IE5TRXJy
b3IgdG8gaW5kaWNhdGUgZXJyb3JzIGluIHRoZSBXZWJLaXQgZG9tYWluLgotIEBjb25zdGFudCBX
S0Vycm9yVW5rbm93biAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IGFu
IHVua25vd24gZXJyb3Igb2NjdXJyZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JXZWJDb250ZW50UHJv
Y2Vzc1Rlcm1pbmF0ZWQgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIFdlYiBDb250ZW50IHByb2Nl
c3Mgd2FzIHRlcm1pbmF0ZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JXZWJWaWV3SW52YWxpZGF0ZWQg
ICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIFdLV2ViVmlldyB3YXMgaW52YWxpZGF0
ZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0RXhjZXB0aW9uT2NjdXJyZWQgICAgICAg
SW5kaWNhdGVzIHRoYXQgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSBAY29uc3Rh
bnQgV0tFcnJvckphdmFTY3JpcHRSZXN1bHRUeXBlSXNVbnN1cHBvcnRlZCBJbmRpY2F0ZXMgdGhh
dCB0aGUgcmVzdWx0IG9mIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvdWxkIG5vdCBiZSByZXR1cm5l
ZC4KKyBAY29uc3RhbnQgV0tFcnJvclVua25vd24gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmRpY2F0ZXMgdGhhdCBhbiB1bmtub3duIGVycm9yIG9jY3VycmVkLgorIEBjb25zdGFudCBX
S0Vycm9yV2ViQ29udGVudFByb2Nlc3NUZXJtaW5hdGVkICAgICAgICAgIEluZGljYXRlcyB0aGF0
IHRoZSBXZWIgQ29udGVudCBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkLgorIEBjb25zdGFudCBXS0Vy
cm9yV2ViVmlld0ludmFsaWRhdGVkICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRo
ZSBXS1dlYlZpZXcgd2FzIGludmFsaWRhdGVkLgorIEBjb25zdGFudCBXS0Vycm9ySmF2YVNjcmlw
dEV4Y2VwdGlvbk9jY3VycmVkICAgICAgICAgIEluZGljYXRlcyB0aGF0IGEgSmF2YVNjcmlwdCBl
eGNlcHRpb24gb2NjdXJyZWQuCisgQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlw
ZUlzVW5zdXBwb3J0ZWQgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdCBvZiBKYXZhU2NyaXB0
IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0dXJuZWQuCisgQGNvbnN0YW50IFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQgICAgSW5kaWNhdGVzIHRoYXQgbG9va2luZyB1
cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgorIEBjb25zdGFudCBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIEluZGljYXRlcyB0aGF0IGxvb2tpbmcg
dXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGFuIGV4dGVuc2lvbiB3aXRoIGFuIGlu
Y29tcGF0aWJsZSBiaW5hcnkgdmVyc2lvbi4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRlbnRFeHRl
bnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgICBJbmRpY2F0ZXMgdGhhdCBjb21waWxpbmcgYSBXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlbW92ZUZhaWxlZCAgICBJbmRpY2F0ZXMgdGhhdCByZW1vdmluZyBhIFdLVXNl
ckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgogICovCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBXS0Vycm9yQ29kZSkgewogICAgIFdLRXJyb3JVbmtub3duID0gMSwKQEAgLTQ4LDYgKzUyLDEw
IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLRXJyb3JDb2RlKSAKICAgICBXS0Vycm9y
V2ViVmlld0ludmFsaWRhdGVkLAogICAgIFdLRXJyb3JKYXZhU2NyaXB0RXhjZXB0aW9uT2NjdXJy
ZWQsCiAgICAgV0tFcnJvckphdmFTY3JpcHRSZXN1bHRUeXBlSXNVbnN1cHBvcnRlZCBXS19BUElf
QVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKSwKKyAgICBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVW
ZXJzaW9uTWlzbWF0Y2ggV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWls
ZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSks
CisgICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBXS19BUElfQVZB
SUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKIH0gV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7CiAKIE5TX0FTU1VNRV9OT05OVUxMX0VO
RApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5t
bQkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0Vycm9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxOCBAQCBOU1N0cmluZyAq
bG9jYWxpemVkRGVzY3JpcHRpb25Gb3JFcnJvckNvCiAKICAgICBjYXNlIFdLRXJyb3JKYXZhU2Ny
aXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQ6CiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5H
KCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiByZXR1cm5lZCBhIHJlc3VsdCBvZiBhbiB1bnN1cHBvcnRl
ZCB0eXBlIiwgIldLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgZGVzY3Jp
cHRpb24iKTsKKworICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZh
aWxlZDoKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkxvb2tpbmcgdXAgYSBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uIGZhaWxlZCIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9v
a3VwRmFpbGVkIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJM
b29raW5nIHVwIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmb3VuZCBhIGJpbmFyeSB0aGF0IGlz
IGluY29tcGF0aWJsZSIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21h
dGNoIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3Rv
cmVDb21waWxlRmFpbGVkOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ29tcGlsaW5n
IGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNp
b25TdG9yZUNvbXBpbGVGYWlsZWQgZGVzY3JpcHRpb24iKTsKKworICAgIGNhc2UgV0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9T
VFJJTkcoIlJlbW92aW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJv
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiIpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250
ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjEzNjcwKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIE5TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCiAKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CiBAY2xhc3MgV0tVc2VyU2NyaXB0
OwogQHByb3RvY29sIFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI7CiAKQEAgLTcwLDYgKzcxLDIwIEBA
IFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4KICAqLwogLSAodm9pZCly
ZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3RyaW5nICopbmFtZTsKIAorLyoh
IEBhYnN0cmFjdCBBZGRzIGEgdXNlciBjb250ZW50IGV4dGVuc2lvbi4KKyBAcGFyYW0gbmFtZSBU
aGUgbmFtZSBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVuc2lvbiB0byBhZGQuCisgKi8KKy0gKHZv
aWQpYWRkQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uICopY29udGVudEV4dGVu
c2lvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19JT1NfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKKworLyohIEBhYnN0cmFjdCBSZW1vdmVzIGEgdXNlciBjb250ZW50IGV4dGVuc2lvbi4KKyBA
cGFyYW0gbmFtZSBUaGUgaWRlbnRpZmllciBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVuc2lvbiB0
byByZW1vdmUuCisgKi8KKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcg
KilpZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX0lPU19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCisvKiEgQGFic3RyYWN0IFJlbW92ZXMgYWxsIGFzc29jaWF0ZWQgdXNlciBj
b250ZW50IGV4dGVuc2lvbnMuCisgKi8KKy0gKHZvaWQpcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lv
bnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfSU9TX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW1w
b3J0ICJBUElVc2VyQ29udGVudFdvcmxkLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25J
bnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tO
U0FycmF5LmgiCiAjaW1wb3J0ICJXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCkBAIC05MSw2ICs5
MiwyNyBAQCAtICh2b2lkKXJlbW92ZUFsbFVzZXJTY3JpcHRzCiAgICAgX3VzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyU2NyaXB0cygpOwogfQogCistICh2b2lkKWFkZENv
bnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiAqKWNvbnRlbnRFeHRlbnNpb24KK3sK
KyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIF91c2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS0+YWRkQ29udGVudEV4dGVuc2lvbigqY29udGVudEV4dGVuc2lvbi0+X2NvbnRlbnRF
eHRlbnNpb24pOworI2VuZGlmCit9CisKKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
KyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24o
aWRlbnRpZmllcik7CisjZW5kaWYKK30KKworLSAodm9pZClyZW1vdmVBbGxDb250ZW50RXh0ZW5z
aW9ucworeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgX3VzZXJDb250ZW50
Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworI2VuZGlmCit9
CisKIGNsYXNzIFNjcmlwdE1lc3NhZ2VIYW5kbGVyRGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBTY3Jp
cHRNZXNzYWdlSGFuZGxlckRlbGVnYXRlKFdLVXNlckNvbnRlbnRDb250cm9sbGVyICpjb250cm9s
bGVyLCBpZCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciwgTlNTdHJpbmcgKm5hbWUp
CkBAIC0xNTMsMjEgKzE3NSwyMSBAQCAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU2NyaXB0c0Fzc29j
aWF0ZWRXCiAtICh2b2lkKV9hZGRVc2VyQ29udGVudEZpbHRlcjooX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKil1c2VyQ29udGVudEZpbHRlcgogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29udGVudEV4dGVuc2lv
bigqdXNlckNvbnRlbnRGaWx0ZXItPl91c2VyQ29udGVudEV4dGVuc2lvbik7CisgICAgX3VzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50RXh0ZW5zaW9uKCp1c2VyQ29udGVudEZp
bHRlci0+X2NvbnRlbnRFeHRlbnNpb24tPl9jb250ZW50RXh0ZW5zaW9uKTsKICNlbmRpZgogfQog
CiAtICh2b2lkKV9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjooTlNTdHJpbmcgKil1c2VyQ29udGVu
dEZpbHRlck5hbWUKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNv
bnRlbnRGaWx0ZXJOYW1lKTsKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92
ZUNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKICNlbmRpZgogfQogCiAt
ICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMKIHsKICNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQWxs
VXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFj
b3N4KDEwLjExKSwgaW9zKDkuCiBXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3Mo
MTAuMCkpOwogCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JDb2RlKSB7Ci0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yTG9va3VwRmFpbGVkID0gMSwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JMb29rdXBGYWlsZWQgPSA2LCAvLyBNaXJyb3JzIHZhbHVlIG9mIFdLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQKICAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
RXJyb3JWZXJzaW9uTWlzbWF0Y2gsCiAgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yQ29tcGlsZUZhaWxlZCwKICAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JS
ZW1vdmVGYWlsZWQsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShy
ZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwMCAr
MjgsNTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKKyNpbXBvcnQgIldLQ29udGVudEV4dGVu
c2lvblN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0b3JlUHJp
dmF0ZS5oIgogI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgiCiAj
aW1wb3J0IDxzdHJpbmc+CiAKLU5TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25zRG9tYWluID0gQCJfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4iOworTlNTdHJpbmcg
KiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gPSBAIldLRXJyb3JEb21haW4i
OwogCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQogCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQogKyAoaW5z
dGFuY2V0eXBlKWRlZmF1bHRTdG9yZQogewotICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CisgICAgcmV0dXJu
IFtbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVu
dEV4dGVuc2lvblN0b3JlOltXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdXSBh
dXRvcmVsZWFzZV07CiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICop
dXJsCiB7Ci0gICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmUgPSBB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFic29sdXRl
VVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7Ci0gICAgcmV0dXJuIFdlYktpdDo6d3JhcHBl
cihzdG9yZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBbW1tfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTpbV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOnVybF1dIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAo
dm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8gaGFuZGxlciA9
IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLQotICAgIFN0cmluZyBqc29uKGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gcmVs
ZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7Ci0KLSAgICBfdXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwg
V1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9u
PiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYg
KGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAl
cyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0KLSAgICAgICAgICAgIC8vIGVycm9yLnZh
bHVlKCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVx
dWFsIHRvIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCi0g
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3
YW50IHRvIG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3SGFuZGxl
cihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNE
b21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVk
IHVzZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6
d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7CisgICAgW19j
b250ZW50RXh0ZW5zaW9uU3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmVuY29kZWRDb250ZW50RXh0ZW5z
aW9uIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpjb250ZW50RXh0ZW5z
aW9uLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBfV0tVc2VyQ29udGVudEZpbHRlciAqY29u
dGVudEZpbHRlciA9IGNvbnRlbnRFeHRlbnNpb24gPyBbW1tfV0tVc2VyQ29udGVudEZpbHRlciBh
bGxvY10gX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOmNvbnRlbnRFeHRlbnNpb25dIGF1dG9y
ZWxlYXNlXSA6IG5pbDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEZpbHRlciwg
ZXJyb3IpOworICAgIH1dOwogfQogCiAtICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIK
IHsKLSAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7
Ci0KLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4dGVuc2lv
bihpZGVudGlmaWVyLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+
IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2Vy
Q29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0KLSAgICAgICAgICAg
IGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2Uo
KS5jX3N0cigpXX07Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JMb29rdXBGYWlsZWQgfHwgZXJyb3IudmFsdWUoKSA9
PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOwotICAg
ICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2Vy
Q29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJ
bmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHJh
d0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSlo
YW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVu
dEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7CisgICAgW19jb250ZW50RXh0ZW5zaW9u
U3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBjb21w
bGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqY29udGVudEV4dGVuc2lvbiwgTlNF
cnJvciAqZXJyb3IpIHsKKyAgICAgICAgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmNvbnRlbnRGaWx0
ZXIgPSBjb250ZW50RXh0ZW5zaW9uID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2NdIF9p
bml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjpjb250ZW50RXh0ZW5zaW9uXSBhdXRvcmVsZWFzZV0g
OiBuaWw7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRGaWx0ZXIsIGVycm9yKTsK
KyAgICB9XTsKIH0KIAogLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vy
cm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhb
Y29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKHN0ZDo6ZXJy
b3JfY29kZSBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8g
cmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5t
ZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgQVNTRVJUKGVycm9yLnZhbHVlKCkgPT0g
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkKTsKLSAgICAgICAg
ICAgIHJhd0hhbmRsZXIoW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uc0RvbWFpbiBjb2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclJlbW92
ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TRXJyb3IgKikpaGFu
ZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihuaWwpOwotICAgIH0pOworICAgIFtfY29u
dGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlk
ZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQogCiAjcHJh
Z21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAogLSAoQVBJOjpPYmpl
Y3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OworICAgIHJldHVybiBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBfYXBpT2JqZWN0XTsKIH0KIAog
QGVuZApAQCAtMTMyLDEyICs4NiwyMyBAQCAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAogCiAt
ICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwogewotICAgIF91c2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Cisg
ICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zXTsK
IH0KIAogLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRp
ZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUtPmludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVyKTsKKyAg
ICBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKK30KKworLSAoaWQpX2luaXRXaXRoV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmU6KFdLQ29udGVudEV4dGVuc2lvblN0b3JlKiljb250ZW50RXh0ZW5z
aW9uU3RvcmUKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlID0gY29u
dGVudEV4dGVuc2lvblN0b3JlOworICAgIAorICAgIHJldHVybiBzZWxmOwogfQogCiBAZW5kCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHJl
dmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIyICsyNywxNCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3Jl
LmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotaW5saW5l
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlJiBzdG9yZSkKLXsKLSAgICBBU1NFUlQoW3N0b3JlLndyYXBwZXIoKSBpc0tp
bmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOwotICAgIHJl
dHVybiAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3JlLndyYXBwZXIoKTsKLX0K
LQotfQorQGNsYXNzIFdLQ29udGVudEV4dGVuc2lvblN0b3JlOwogCiBAaW50ZXJmYWNlIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQ
STo6T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF91c2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOworICAgIFJldGFpblB0cjxXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZT4gX2NvbnRlbnRFeHRlbnNpb25TdG9yZTsKIH0KIEBlbmQKIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNjcwKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTYgQEAKIAogI2lm
IFdLX0FQSV9FTkFCTEVECiAKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsKKwogQGlu
dGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCiAKIC8vIEZv
ciB0ZXN0aW5nIG9ubHkuCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uczsKIC0g
KHZvaWQpX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllcjsKIAorLSAoaWQpX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmU6KFdLQ29udGVudEV4dGVuc2lvblN0b3JlKiljb250ZW50RXh0ZW5zaW9uU3RvcmU7CisK
IEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RmlsdGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0JKHJldmlzaW9uIDIxMzY3
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRG
aWx0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyNiBAQAogCiBAaW1wbGVtZW50
YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKIAotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uLT5+VXNlckNvbnRlbnRFeHRlbnNpb24oKTsKKyNwcmFnbWEgbWFy
ayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCi0gICAgW3N1cGVyIGRlYWxsb2Nd
OworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gW19jb250ZW50RXh0
ZW5zaW9uIF9hcGlPYmplY3RdOwogfQogCi0jcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wg
aW1wbGVtZW50YXRpb24KK0BlbmQKIAotLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK0BpbXBs
ZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEZpbHRlciAoV0tQcml2YXRlKQorCistIChpZClfaW5p
dFdpdGhXS0NvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiopY29udGVudEV4dGVu
c2lvbgogewotICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uOworICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAor
ICAgIF9jb250ZW50RXh0ZW5zaW9uID0gY29udGVudEV4dGVuc2lvbjsKKyAgICAKKyAgICByZXR1
cm4gc2VsZjsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFs
LmgJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywy
MiArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW1wb3J0
ICJXS09iamVjdC5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotaW5saW5lIF9XS1VzZXJDb250
ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250ZW50
RXh0ZW5zaW9uKQotewotICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigp
IGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwotICAgIHJldHVy
biAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVyKCk7
Ci19Ci0KLX0KK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CiAKIEBpbnRlcmZhY2UgX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6T2JqZWN0
U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRlbnNpb247
CisgICAgUmV0YWluUHRyPFdLQ29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNpb247CiB9
CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
ckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RmlsdGVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaD4KKworI2lmIFdLX0FQ
SV9FTkFCTEVECisKK0BjbGFzcyBXS1VzZXJDb250ZW50RXh0ZW5zaW9uOworCitAaW50ZXJmYWNl
IF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCisKKy0gKGlkKV9pbml0V2l0aFdLQ29u
dGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKiljb250ZW50RXh0ZW5zaW9uOworCitA
ZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHkuY3BwCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAiQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAj
aW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjZW5kaWYKIApAQCAtOTcs
MTAgKzk3LDEwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFAKICAg
ICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMobWVzc2FnZUhhbmRs
ZXJzKSwgbV9pZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE+PiB1c2VyQ29udGVudEV4dGVuc2lvbnM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2VyQ29u
dGVudEV4dGVuc2lvbiA6IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zLnZhbHVlcygpKQotICAgICAg
ICB1c2VyQ29udGVudEV4dGVuc2lvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJDb250ZW50
RXh0ZW5zaW9uLT5uYW1lKCksIHVzZXJDb250ZW50RXh0ZW5zaW9uLT5jb21waWxlZEV4dGVuc2lv
bigpLmRhdGEoKSkpOwotICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRFeHRlbnNpb25z
KHVzZXJDb250ZW50RXh0ZW5zaW9ucyksIG1faWRlbnRpZmllcik7CisgICAgVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiBjb250ZW50RXh0
ZW5zaW9uczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRFeHRlbnNpb24gOiBtX2NvbnRl
bnRFeHRlbnNpb25zLnZhbHVlcygpKQorICAgICAgICBjb250ZW50RXh0ZW5zaW9ucy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoY29udGVudEV4dGVuc2lvbi0+bmFtZSgpLCBjb250ZW50RXh0ZW5zaW9u
LT5jb21waWxlZEV4dGVuc2lvbigpLmRhdGEoKSkpOworICAgIHdlYlByb2Nlc3NQcm94eS5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkQ29u
dGVudEV4dGVuc2lvbnMoY29udGVudEV4dGVuc2lvbnMpLCBtX2lkZW50aWZpZXIpOwogI2VuZGlm
CiB9CiAKQEAgLTMzOCwzMCArMzM4LDMwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OmRpZFAKIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi12b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbihBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKK3ZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24oQVBJOjpDb250ZW50
RXh0ZW5zaW9uJiBjb250ZW50RXh0ZW5zaW9uKQogewotICAgIG1fdXNlckNvbnRlbnRFeHRlbnNp
b25zLnNldCh1c2VyQ29udGVudEV4dGVuc2lvbi5uYW1lKCksICZ1c2VyQ29udGVudEV4dGVuc2lv
bik7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5zZXQoY29udGVudEV4dGVuc2lvbi5uYW1lKCks
ICZjb250ZW50RXh0ZW5zaW9uKTsKIAotICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFrZV9wYWlyKHVz
ZXJDb250ZW50RXh0ZW5zaW9uLm5hbWUoKSwgdXNlckNvbnRlbnRFeHRlbnNpb24uY29tcGlsZWRF
eHRlbnNpb24oKS5kYXRhKCkpOworICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFrZV9wYWlyKGNvbnRl
bnRFeHRlbnNpb24ubmFtZSgpLCBjb250ZW50RXh0ZW5zaW9uLmNvbXBpbGVkRXh0ZW5zaW9uKCku
ZGF0YSgpKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoeyBwYWlyIH0pLCBt
X2lkZW50aWZpZXIpOworICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkQ29udGVudEV4dGVuc2lvbnMoeyBwYWly
IH0pLCBtX2lkZW50aWZpZXIpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5OjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50RXh0ZW5zaW9ucy5yZW1vdmUo
bmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5yZW1vdmUobmFtZSk7CiAKICAgICBmb3Ig
KFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNz
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
UmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSksIG1faWRlbnRpZmllcik7CisgICAgICAg
IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpSZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpLCBtX2lkZW50aWZpZXIpOwogfQog
Ci12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyQ29udGVu
dEV4dGVuc2lvbnMoKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRFeHRlbnNpb25zLmNs
ZWFyKCk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogCiAgICAgZm9yIChXZWJQ
cm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92
ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9j
ZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6UmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKSwgbV9pZGVudGlmaWVyKTsKIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAkocmV2aXNp
b24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5X2gKLSNkZWZpbmUgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHlfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKQEAgLTM4LDggKzM3LDggQEAKIAogbmFtZXNwYWNl
IEFQSSB7CiBjbGFzcyBBcnJheTsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb247CiBjbGFzcyBVc2Vy
Q29udGVudFdvcmxkOwotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CiBjbGFzcyBVc2VyU2Ny
aXB0OwogY2xhc3MgVXNlclN0eWxlU2hlZXQ7CiB9CkBAIC05Miw5ICs5MSw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlbW92ZUFsbFVzZXJNZXNzYWdlSGFuZGxlcnMoQVBJOjpVc2VyQ29udGVudFdv
cmxkJik7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHZvaWQgYWRkVXNl
ckNvbnRlbnRFeHRlbnNpb24oQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYpOwotICAgIHZvaWQg
cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCByZW1v
dmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB2b2lkIGFkZENvbnRlbnRFeHRlbnNp
b24oQVBJOjpDb250ZW50RXh0ZW5zaW9uJik7CisgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMo
KTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTE2LDEwICsxMTUsOCBAQCBwcml2YXRlOgogICAg
IEhhc2hDb3VudGVkU2V0PFJlZlB0cjxBUEk6OlVzZXJDb250ZW50V29ybGQ+PiBtX3VzZXJDb250
ZW50V29ybGRzOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+PiBtX3VzZXJDb250ZW50
RXh0ZW5zaW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVu
c2lvbj4+IG1fY29udGVudEV4dGVuc2lvbnM7CiAjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlfaApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDYgKzExNDUsMTMgQEAKIAkJ
NUNCMjM3OTIxREYwRTJFRTAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMjM3OEYxREYwRTFCODAw
MTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5oICovOyB9OwogCQk1Q0JDOUI4RDFDNjUyNzlD
MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07CiAJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRDRiAv
KiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAq
LzsgfTsKKwkJNUNFMzU0Q0IxRTcwOUZBODAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFMzU0Qzkx
RTcwOUZBMDAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNUNFMzU0Q0MxRTcwQTA0MjAwQkVGRTNC
IC8qIFdLQ29udGVudEV4dGVuc2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDRTM1NENBMUU3MDlGQTAwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRl
bnNpb24ubW0gKi87IH07CisJCTVDRTM1NENFMUU3MEEwOTkwMEJFRkUzQiAvKiBXS0NvbnRlbnRF
eHRlbnNpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNFMzU0Q0QxRTcwQTA5NDAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvbklu
dGVybmFsLmggKi87IH07CisJCTVDRTM1NEQzMUU3MEEyQUUwMEJFRkUzQiAvKiBXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNFMzU0Q0YxRTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQk1Q0Uz
NTRENDFFNzBBMkIzMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTREMDFFNzBBMUJG
MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi87IH07CisJCTVDRTM1NEQ1
MUU3MEEyQjgwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTREMTFFNzBB
MUJGMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovOyB9Owor
CQk1Q0UzNTRENjFFNzBBMkJDMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0Uz
NTREMjFFNzBBMUJGMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUNFODVC
MjAxQzg4RTY0QjAwNzBCRkNFIC8qIFBpbmdMb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U4NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xv
YWQuaCAqLzsgfTsKIAkJNUNGRUNCMDQxRTFFRDFDQzAwRjg4NTA0IC8qIExlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1Q0ZFQ0IwMzFFMUVEMUM4MDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLmNwcCAqLzsgfTsKIAkJNjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxl
SW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87
IH07CkBAIC0xMTk1LDggKzEyMDIsOCBAQAogCQk3QzM2MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyog
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzNjFENzYxOTI4MDNCRDAw
MzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKIAkJN0MzNjFENzkxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMzYxRDc3MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CiAJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4
QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLzsg
fTsKLQkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
Y3BwICovOyB9OwotCQk3QzNBMDZBODFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaCAqLzsgfTsKKwkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzNBMDZBNTFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0
b3JlLmNwcCAqLzsgfTsKKwkJN0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oICovOyB9OwogCQk3QzNGOEM5MDE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mz
RjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJ
N0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGOEM4RjE3M0FGNTJEMDA3
QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCAqLzsgfTsKIAkJN0M0Njk0QzkxQTRCNEVBMTAw
QUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDNzFBNEI0RUEwMDBB
RDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAg
LTEyMjksOCArMTIzNiw4IEBACiAJCTdDODlEMkEzMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJT
Y3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0M4OUQyQTExQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5jcHAgKi87IH07
CiAJCTdDODlEMkE0MUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkEyMUE2Nzg4NzUw
MDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3Qzg5RDJBNjFBNjc4OUVBMDAzQTVGREUgLyogQVBJVXNl
clNjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qzg5RDJBNTFBNjc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgKi87IH07Ci0J
CTdDODlEMkIzMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFB
NkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OwotCQk3
Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkIyMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICovOyB9OworCQk3Qzg5RDJC
MzFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAzQTVG
REUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgKi87IH07CisJCTdDODlEMkI0MUE2QjA2OEMw
MDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29u
dGVudEV4dGVuc2lvbi5oICovOyB9OwogCQk3Qzg5RDJCNjFBNkIwREQ5MDAzQTVGREUgLyogV0tV
c2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0M4OUQyQjkxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250
ZW50RmlsdGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICov
OyB9OwogCQk3Qzg5RDJCQTFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkI4
MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzUyLDYgKzMzNTksMTQgQEAK
IAkJNUNCMjM3OTAxREYwRTFERDAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElXZWJzaXRlUG9saWNpZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4OTFDNjUyNEE1MDBBOEZEQ0Yg
LyogTmV0d29ya0RhdGFUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5l
dHdvcmtEYXRhVGFzay5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQkM5QjhCMUM2NTI1NzMwMEE4RkRDRiAv
KiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0NvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDRTM1NEM5MUU3MDlGQTAwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NENBMUU3MDlGQTAwMEJFRkUzQiAvKiBXS0Nv
bnRlbnRFeHRlbnNpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXS0NvbnRlbnRFeHRlbnNpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
RTM1NENEMUU3MEEwOTQwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0UzNTRDRjFFNzBBMUJGMDBCRUZF
M0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNFMzU0RDAxRTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NEQx
MUU3MEExQkYwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNFMzU0RDIxRTcwQTFCRjAw
QkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNFMzU0RDcxRTcwQzNBRDAwQkVGRTNCIC8qIF9X
S1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0ZFQ0IwMzFFMUVE
MUM4MDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ0NDJBNTUx
NkQ1ODU2NzAwQUMzMzMxIC8qIFBsdWdpblNlcnZpY2UuZW50aXRsZW1lbnRzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBQ
bHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM0MTIsOCArMzQyNyw4IEBACiAJCTdDMzYxRDc2MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzYxRDc3MTky
ODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzODc0MzMx
NzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFnZUJhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTdDM0EwNkE1MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzNB
MDZBNjFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0EwNkE1MUFBQjkwM0UwMDlE
NzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Mz
RjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdp
bkluZm9ybWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbklu
Zm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDY5NEM3MUE0QjRF
QTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFzdGVib2FyZFByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NDksOCArMzQ2
NCw4IEBACiAJCTdDODlEMkExMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tVc2VyU2NyaXB0UmVmLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQTIxQTY3ODg3NTAwM0E1RkRF
IC8qIFdLVXNlclNjcmlwdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S1VzZXJTY3JpcHRSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQTUx
QTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNlclNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVu
c2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2VyQ29u
dGVudEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkIy
MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29u
dGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
UElDb250ZW50RXh0ZW5zaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4
OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Qzg5RDJCNzFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tVc2VyQ29udGVu
dEZpbHRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQjgxQTZCMEYy
QzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC01Mzk4LDYgKzU0MTMsMTMgQEAKIAkJMzdDNEMwODMxODE0OUMyQTAwMzY4OEI5
IC8qIENvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1Q0UzNTRDRjFFNzBBMUJGMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAq
LywKKwkJCQk1Q0UzNTREMDFFNzBBMUJGMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW0gKi8sCisJCQkJNUNFMzU0RDExRTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVu
c2lvblN0b3JlSW50ZXJuYWwuaCAqLywKKwkJCQk1Q0UzNTREMjFFNzBBMUJGMDBCRUZFM0IgLyog
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi8sCisJCQkJNUNFMzU0Q0QxRTcwQTA5
NDAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggKi8sCisJCQkJNUNFMzU0
QzkxRTcwOUZBMDAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvbi5oICovLAorCQkJCTVDRTM1
NENBMUU3MDlGQTAwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb24ubW0gKi8sCiAJCQkJMUE0
M0U4MjYxODhGMzhFMjAwOUU0RDMwIC8qIERlcHJlY2F0ZWQgKi8sCiAJCQkJMzdBNUUwMTIxOEJC
RjkzNzAwMEEwODFFIC8qIF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLmggKi8sCiAJCQkJMzdBNUUw
MTExOEJCRjkzNzAwMEEwODFFIC8qIF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLm1tICovLApAQCAt
NTQ1Myw2ICs1NDc1LDcgQEAKIAkJCQk3Qzg5RDJCODFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNl
ckNvbnRlbnRGaWx0ZXIuaCAqLywKIAkJCQk3Qzg5RDJCNzFBNkIwRjJDMDAzQTVGREUgLyogX1dL
VXNlckNvbnRlbnRGaWx0ZXIubW0gKi8sCiAJCQkJN0M4OUQyQkIxQTZCMEY1QjAwM0E1RkRFIC8q
IF9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCAqLywKKwkJCQk1Q0UzNTRENzFFNzBDM0FE
MDBCRUZFM0IgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmggKi8sCiAJCQkJN0M4ODJE
RjMxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGQuaCAqLywKIAkJCQk3Qzg4
MkRGNDFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNvbnRlbnRXb3JsZC5tbSAqLywKIAkJCQk3
Qzg4MkRGNTFDN0U5OTVFMDA2QkY3MzEgLyogX1dLVXNlckNvbnRlbnRXb3JsZEludGVybmFsLmgg
Ki8sCkBAIC02NjU0LDYgKzY2NzcsMTAgQEAKIAkJCQlCQzExMUI0NzExMkY2MTY5MDAzMzdCQUIg
LyogbWFjICovLAogCQkJCTk5QzgxRDVCMUMyMEU4MTcwMDVDNEM4MiAvKiBBUElBdXRvbWF0aW9u
Q2xpZW50LmggKi8sCiAJCQkJOTkwRDI4QjMxQzY1MjZENDAwOTg2OTc3IC8qIEFQSUF1dG9tYXRp
b25TZXNzaW9uQ2xpZW50LmggKi8sCisJCQkJN0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQ
SUNvbnRlbnRFeHRlbnNpb24uY3BwICovLAorCQkJCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAv
KiBBUElDb250ZW50RXh0ZW5zaW9uLmggKi8sCisJCQkJN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJB
IC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgKi8sCisJCQkJN0MzQTA2QTYxQUFCOTAz
RTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovLAogCQkJCTA3NkU4ODRE
MUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oICovLAogCQkJCTdBODIx
RjRGMUUyRjdBNUMwMDYwNDU3NyAvKiBBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCAq
LywKIAkJCQk4Mzg5MUI2MjFBNjhCMzQyMDAzMEYzODYgLyogQVBJRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaCAqLywKQEAgLTY2ODksMTAgKzY3MTYsNiBAQAogCQkJCTFBRkRFNjVGMTk1NEU5QjEw
MEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuY3BwICovLAogCQkJCTFBRkRFNjYwMTk1NEU5QjEw
MEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuaCAqLywKIAkJCQkxQTRENjY0NzE4QTJEOTFBMDBE
ODJFMjEgLyogQVBJVUlDbGllbnQuaCAqLywKLQkJCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUg
LyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwICovLAotCQkJCTdDODlEMkIyMUE2QjA2OEMw
MDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICovLAotCQkJCTdDM0EwNkE1MUFB
QjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLywKLQkJ
CQk3QzNBMDZBNjFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oICovLAogCQkJCTdDODgyREZCMUM3RTk5QTYwMDZCRjczMSAvKiBBUElVc2VyQ29udGVudFdv
cmxkLmNwcCAqLywKIAkJCQk3Qzg4MkRGQzFDN0U5OUE2MDA2QkY3MzEgLyogQVBJVXNlckNvbnRl
bnRXb3JsZC5oICovLAogCQkJCTdDQjM2NUFGMUQzMUREMUUwMDcxNThDQSAvKiBBUElVc2VySW5p
dGlhdGVkQWN0aW9uLmggKi8sCkBAIC04MDEzLDggKzgwMzYsOCBAQAogCQkJCUJDREI4NkMxMTIw
MEZCOTcwMDcyNTRCRSAvKiBBUElVUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTIzMTVEMTIy
QzMwQ0EwMEQ1QzM1QSAvKiBBUElVUkxSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkw
QTFEMjEyMkRENTVFMDBDQzhDNTAgLyogQVBJVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJN0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDODlEMkI0MUE2QjA2
OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QzNBMDZBODFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNjExM0UyNTEyNkNFMTgyMDA1N0QwQTcgLyogQVBJVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzg4MkRGRDFDN0U5OUE4MDA2QkY3
MzEgLyogQVBJVXNlckNvbnRlbnRXb3JsZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NCMzY1QjEx
RDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICov
LApAQCAtODMwMCw2ICs4MzIzLDcgQEAKIAkJCQkwRjU5NDc5QjE4N0IzQjYwMDA0Mzc4NTcgLyog
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
OTQ3QTQxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzlEMTg3QjNCNjAwMDQzNzg1NyAvKiBS
ZW1vdGVTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0UzNTRDRTFFNzBBMDk5
MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1NUJBODFGMUJBMjVCMjcwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1QkE4MjUxQkEyNUNGQjAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUJBODE3MUJB
MjNFMTIwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGluIEhlYWRlcnMgKi8sCkBA
IC04NDM1LDYgKzg0NTksNyBAQAogCQkJCTJENTAzNjc2MUJDRUQxOUYwMEUyMEJCMyAvKiBXZWJH
ZXN0dXJlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjMzMUJDNkU5Q0QwMEFCQTVD
MiAvKiBXZWJIaXRUZXN0UmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExQjI0QUIx
MzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUNFMzU0RDUxRTcwQTJCODAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODM0NTkzMTM0NTMyRTkwMDkyQjY5NiAvKiBXZWJJ
Y29uRGF0YWJhc2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDAyRjZBMTMyRUM3Mzcw
MEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTExQjI0QTcxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggaW4gSGVh
ZGVycyAqLywKQEAgLTg0NDgsNiArODQ3Myw3IEBACiAJCQkJMUM4RTI4MjAxMjc1RDE1NDAwQkM3
QkQwIC8qIFdlYkluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJEODIxMEY0Mzc4
RDAwNThDMTVBIC8qIFdlYkluc3BlY3RvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1
QkE4MzUxQkEzRTcwQTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNFMzU0RDMxRTcwQTJBRTAwQkVGRTNCIC8qIFdLQ29u
dGVudEV4dGVuc2lvblN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzhFMkEzNjEyNzc4NTI0
MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFD
OEUyODM0MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUNBOEI5NDYxMjdDODgyQTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODQ3OCw2ICs4NTA0LDcgQEAKIAkJCQk4MzcyREIy
OTFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzdCNjIwNjEyOUEwQTY3MDBEMTc0QTQgLyogV2ViUGFnZUdyb3Vw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjI1MjEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFn
ZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNFMzU0RDYxRTcwQTJCQzAwQkVGRTNC
IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM3QjYyMTUxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDlFQTMwRjFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVu
ZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENFNzJBMTEyNDdFNzFEMDBCQzBFQzQg
LyogV2ViUGFnZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTg3MjUsNiArODc1Miw3IEBA
CiAJCQkJMkQzQTY1REYxQTdDM0E3RDAwQ0FDNjM3IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUmVm
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThCRTE3OTE0NzQzRTZGMDBBOEZCQjIgLyogV0tOb3Rp
ZmljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEJFMTcxMTQ3NDNEQjEwMEE4RkJCMiAv
KiBXS05vdGlmaWNhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDRTM1NENCMUU3
MDlGQTgwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxQTJFQzc0MTQ4RDU5Q0EwMDgxMEQ3MSAvKiBXS05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5MTEgLyogV0tO
b3RpZmljYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNEMwOTQxODE0QjNB
RjAwMzY4OEI5IC8qIFdLTlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTM1LDggKzk1NjMs
OCBAQAogCQkJCTFBRkRFNjYxMTk1NEU5QjEwMEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMjMxNUUxMjJDMzBDQTAwRDVDMzVBIC8qIEFQSVVSTFJl
cXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MEExRDMxMjJERDU1RTAwQ0M4QzUwIC8q
IEFQSVVSTFJlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDODlEMkIzMUE2QjA2OEMw
MDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk3QzNBMDZBNzFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJ
Q29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzNBMDZBNzFBQUI5MDNF
MDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDRUZBOTYyMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Qzg4MkRGRTFDN0U5OUFDMDA2QkY3MzEg
LyogQVBJVXNlckNvbnRlbnRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Qzg5RDJBNjFB
Njc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk1
ODUsNiArOTYxMyw3IEBACiAJCQkJQ0RDMzgzMTAxNzIxMjQ0MDAwOEEyRkMzIC8qIENvb2tpZVN0
b3JhZ2VTaGltLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjg3OEI2MTYxMzM0MjhEQzAwNjg4OEU5
IC8qIENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTQyNzFEMUMyM0Y4
Q0YwMEQ0MTE4MyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTVDRTM1NENDMUU3MEEwNDIwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNp
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTg0RjU4ODE2NEJBMDk1MDA0QkMwQzYgLyogTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTI5ODRGNTdDMTY0QjkxNUYwMDRCQzBDNiAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUzNTFG
RjE4MEY1RDBGMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTkxMCw2ICs5OTM5LDcgQEAKIAkJCQkxQTBGMjlDQjEyMEIzNzE2MDA1M0QxQjkgLyogVmlz
aXRlZExpbmtUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUY0Q0VFRjE4QkM0ODE4MDBC
QzJEMzQgLyogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE4RTdEM0MxOEMxNTE0OTAwNUE3MDJBIC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDRTM1NEQ0MUU3MEEyQjMw
MEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUNFREExMkUyMTUyQ0QxQUUwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTk1NUE2RUQxQzc5ODBDQTAwRUI2QTkzIC8qIFdlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMEExOTU3MUM5MDA2OEYwMEZF
MEVCQiAvKiBXZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM5LDIyICszMzksMjIg
QEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+JiB1c2VyQ29udGVudEV4dGVuc2lv
bnMpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudEV4dGVuc2lvbnMo
Y29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE+PiYgY29udGVudEV4dGVuc2lvbnMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1c2Vy
Q29udGVudEV4dGVuc2lvbiA6IHVzZXJDb250ZW50RXh0ZW5zaW9ucykgewotICAgICAgICBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb25EYXRhID0gdXNlckNv
bnRlbnRFeHRlbnNpb24uc2Vjb25kOworICAgIGZvciAoY29uc3QgYXV0byYgY29udGVudEV4dGVu
c2lvbiA6IGNvbnRlbnRFeHRlbnNpb25zKSB7CisgICAgICAgIFdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEgY29udGVudEV4dGVuc2lvbkRhdGEgPSBjb250ZW50RXh0ZW5zaW9uLnNlY29u
ZDsKICAgICAgICAgUmVmUHRyPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RG
TW92ZShjb250ZW50RXh0ZW5zaW9uRGF0YSkpOwogCi0gICAgICAgIG1fY29udGVudEV4dGVuc2lv
bkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbih1c2VyQ29udGVudEV4dGVuc2lvbi5maXJzdCwg
V1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsKKyAgICAgICAgbV9jb250ZW50RXh0
ZW5zaW9uQmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKGNvbnRlbnRFeHRlbnNpb24uZmlyc3Qs
IFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7CiAgICAgfQogfQogCi12b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3Qg
U3RyaW5nJiBuYW1lKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUNvbnRl
bnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIG1fY29udGVudEV4dGVuc2lv
bkJhY2tlbmQucmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKTsKIH0KIAotdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpCit2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQog
ewogICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQWxsQ29udGVudEV4dGVuc2lv
bnMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24g
MjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyX2gKLSNkZWZpbmUgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyX2gKKyNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKQEAgLTk1LDkgKzk0LDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbW92ZUFsbFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMoY29uc3QgVmVjdG9yPHVpbnQ2
NF90PiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+Jik7Ci0gICAgdm9pZCByZW1vdmVVc2VyQ29udGVu
dEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNv
bnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBhZGRDb250ZW50RXh0ZW5zaW9ucyhjb25zdCBW
ZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+
Jik7CisgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgdm9pZCByZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiAKICAgICB2
b2lkIGFkZFVzZXJTY3JpcHRJbnRlcm5hbChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWlu
dDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIsIFdlYkNvcmU6OlVzZXJTY3JpcHQmJik7CkBAIC0x
MjgsNSArMTI3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMTM2NzApCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29u
dHJvbGxlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCBtZXNz
YWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgewogICAgIFJlbW92ZUFsbFVzZXJTY3Jp
cHRNZXNzYWdlSGFuZGxlcnMoVmVjdG9yPHVpbnQ2NF90PiB3b3JsZElkZW50aWZpZXJzKTsKIAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgQWRkVXNlckNvbnRlbnRFeHRlbnNp
b25zKFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGE+PiB1c2VyQ29udGVudEZpbHRlcnMpOwotICAgIFJlbW92ZVVzZXJDb250ZW50
RXh0ZW5zaW9uKFN0cmluZyBuYW1lKTsKLSAgICBSZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lv
bnMoKTsKKyAgICBBZGRDb250ZW50RXh0ZW5zaW9ucyhWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywg
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4gY29udGVudEZpbHRlcnMp
OworICAgIFJlbW92ZUNvbnRlbnRFeHRlbnNpb24oU3RyaW5nIG5hbWUpOworICAgIFJlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zKCk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVycm9yc01hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFcnJvcnNN
YWMubW0JKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkVycm9yc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODUsNyAr
ODUsNyBAQCBSZXNvdXJjZUVycm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlCiAjaWYgRU5B
QkxFKENPTlRFTlRfRklMVEVSSU5HKQogUmVzb3VyY2VFcnJvciBibG9ja2VkQnlDb250ZW50Rmls
dGVyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKEFQSTo6RXJyb3I6OndlYktpdEVycm9yRG9tYWluKCksIGtXS0Vycm9yQ29k
ZUZyYW1lTG9hZEJsb2NrZWRCeUNvbnRlbnRGaWx0ZXIsIHJlcXVlc3QudXJsKCksIFdFQl9VSV9T
VFJJTkcoIlRoZSBVUkwgd2FzIGJsb2NrZWQgYnkgYSBjb250ZW50IGZpbHRlciIsICJXZWJLaXRF
cnJvckJsb2NrZWRCeUNvbnRlbnRGaWx0ZXIiKSk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3Io
QVBJOjpFcnJvcjo6d2ViS2l0RXJyb3JEb21haW4oKSwga1dLRXJyb3JDb2RlRnJhbWVMb2FkQmxv
Y2tlZEJ5Q29udGVudEZpbHRlciwgcmVxdWVzdC51cmwoKSwgV0VCX1VJX1NUUklORygiVGhlIFVS
TCB3YXMgYmxvY2tlZCBieSBhIGNvbnRlbnQgZmlsdGVyIiwgIldlYktpdEVycm9yRnJhbWVMb2Fk
QmxvY2tlZEJ5Q29udGVudEZpbHRlciBkZXNjcmlwdGlvbiIpKTsKIH0KICNlbmRpZgogCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTM2NzApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NCBAQAorMjAxNy0wMy0wOSAgQnJpYW4gTmljaG9sc29uICA8Ym5pY2hvbHNvbkBtb3ppbGxhLmNv
bT4gYW5kIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBFeHBvc2UgcHVibGljIEFQSXMgZm9yIGNvbnRlbnQgZmlsdGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgS2VlcCB0aGUgZXhpc3RpbmcgdGVz
dHMgdG8gdmVyaWZ5IHRoYXQgSSBtYWRlIHRoZSB3cmFwcGVyIGNsYXNzZXMgZm9yIHRoZSBvbGQg
U1BJIHdvcmsgY29ycmVjdGx5LgorICAgICAgICBBZGQgbmV3IGlkZW50aWNhbCB0ZXN0cyBmb3Ig
dGhlIG5ldyBBUEkgYXJlIGFkZGVkIHdpdGggdGhlIG5ldyBuYW1lcy4KKyAgICAgICAgV2Ugc2hv
dWxkIGtlZXAgYm90aCB1bnRpbCB3ZSBtaWdyYXRlIGZyb20gYW5kIHJlbW92ZSB0aGUgb2xkIFNQ
SS4KKyAgICAgICAgRW51bSBlcnJvciBjb2RlIHZhbHVlcyBhbmQgc3RyaW5ncyBoYXZlIGNoYW5n
ZWQsIGJ1dCB0aGUgQVBJIGlzIHNvdXJjZSBjb21wYXRpYmxlLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJD
b2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tLgorICAgICAgICAoV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlVGVzdDo6U2V0VXApOgorICAgICAgICAoVEVTVF9GKToKKyAgICAg
ICAgKGNoZWNrRG9tYWluKToKKyAgICAgICAgKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVU
ZXN0OjpTZXRVcCk6IERlbGV0ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKGNoZWNr
RG9tYWluKToKKwogMjAxNy0wMy0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEludHJvZHVjZSBpZi10
b3AtdXJsIGFuZCB1bmxlc3MtdG9wLXVybApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxMzY3MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDcgQEAK
IAkJNUM5RTU5NDExRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5M0Ux
RDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgKi87IH07CiAJCTVDOUU1OTQy
MUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTkzRjFEM0VCMURF
MDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0gKi87IH07CiAJCTVDOUU1OTQzMUQz
RUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTk0MDFEM0VCMURFMDBF
M0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgKi87IH07CisJCTVDRTM1NEQ5MUU3MERB
NUMwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTREODFFNzBEOUMzMDBCRUZF
M0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk1RTRCMUQyRTFE
NDA0QzYxMDAwNTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVFNEIxRDJDMUQ0MDRDNjEwMDA1
MzYyMSAvKiBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tICovOyB9OwogCQk2QkZEMjk0QzFE
NUU2QzFEMDA4RUM5NjggLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0EzOEQ3RTUxQzc1MkQ1RjAwNEYxNTdEIC8qIEhh
c2hDb3VudGVkU2V0LmNwcCAqLzsgfTsKIAkJNzU1QTIwQUYxRTZFMzg2MzAwOTNDNjlGIC8qIERh
dGFiYXNlVHJhY2tlclRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzU1QTIwQUUxRTZFMzg2MzAwOTNDNjlGIC8qIERhdGFiYXNlVHJhY2tlclRl
c3QuY3BwICovOyB9OwpAQCAtMTA5MCw2ICsxMDkxLDcgQEAKIAkJNUM5RTU5M0UxRDNFQjFERTAw
RTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZS5kYjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8q
IEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTQwMUQzRUIxREUwMEUzQzYyRSAv
KiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi13YWwi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0UzNTREODFFNzBEOUMzMDBCRUZFM0Ig
LyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RTRCMUQyQzFENDA0QzYxMDAwNTM2MjEgLyogV0tTY3Jv
bGxWaWV3RGVsZWdhdGVDcmFzaC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdLU2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gubW07IHBhdGggPSAuLi9pb3MvV0tTY3Jv
bGxWaWV3RGVsZWdhdGVDcmFzaC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1
QTIwQUUxRTZFMzg2MzAwOTNDNjlGIC8qIERhdGFiYXNlVHJhY2tlclRlc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VUcmFja2VyVGVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NjA5MTc3MTkyNTlDNTkwMDlFRjA2RSAvKiBN
ZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IE1lbW9yeUNhY2hlQWRkSW1hZ2VUb0NhY2hlSU9TLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0Niw2ICsxNjQ4LDcgQEAKIAkJCQkzN0I0N0UyRTFE
NjRFN0NBMDA1RjRFRkYgLyogV0tPYmplY3QubW0gKi8sCiAJCQkJMkQwMDA2NUQxQzFGNTg5NDAw
ODhFNkE3IC8qIFdLUERGVmlld1Jlc2l6ZUNyYXNoLm1tICovLAogCQkJCTVFNEIxRDJDMUQ0MDRD
NjEwMDA1MzYyMSAvKiBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tICovLAorCQkJCTVDRTM1
NEQ4MUU3MEQ5QzMwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8s
CiAJCQkJMkVGRjA2RDYxRDhBRjM0QTAwMDRCQjMwIC8qIFdLV2ViVmlld0NhbmRpZGF0ZVRlc3Rz
Lm1tICovLAogCQkJCTdDNDE3RjMxMUQxOUUxNDgwMEI4RUY1MyAvKiBXS1dlYlZpZXdEZWZhdWx0
TmF2aWdhdGlvbkRlbGVnYXRlLm1tICovLAogCQkJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAv
KiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8sCkBAIC0yOTE0LDYgKzI5MTcsNyBA
QAogCQkJCTdDQ0U3RjFFMUE0MTFBRTYwMDQ0N0M0QyAvKiBXS1N0cmluZ0pTU3RyaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExNEZDNTg1MUI4OTczOTEwMEQxMDdFQiAvKiBXS1dlYlZpZXdD
b25maWd1cmF0aW9uRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M0MTdGMzMxRDE5RTE0
ODAwQjhFRjUzIC8qIFdLV2ViVmlld0RlZmF1bHROYXZpZ2F0aW9uRGVsZWdhdGUubW0gaW4gU291
cmNlcyAqLywKKwkJCQk1Q0UzNTREOTFFNzBEQTVDMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjk0QTcxQTc3MjY3NDAwREUz
MjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTk5ODRGQUNDMUNGRkFGNjAwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3NjQzMjJENzFCNjFDQ0MzMDAyNEY4MDEgLyogV29yZEJvdW5kYXJ5VHlw
aW5nQXR0cmlidXRlcy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tOjIxMzY3MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCA8V2ViS2l0L1dL
Rm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1V
dGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgor
CitjbGFzcyBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5n
OjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAg
ICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zXTsKKyAgICB9Cit9OworCitzdGF0aWMgTlNTdHJpbmcgKmJhc2lj
RmlsdGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOworCitURVNUX0YoX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCit7CisgICAgX19ibG9jayBib29sIGRv
bmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0
RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9u
SGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7
CisgICAgCisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKK30KKworc3RhdGlj
IE5TU3RyaW5nICppbnZhbGlkRmlsdGVyID0gQCJbIjsKKworc3RhdGljIHZvaWQgY2hlY2tEb21h
aW4oTlNFcnJvciAqZXJyb3IpCit7CisgICAgRVhQRUNUX1NUUkVRKFtbZXJyb3IgZG9tYWluXSBV
VEY4U3RyaW5nXSwgW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBVVEY4U3RyaW5nXSk7
Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgSW52YWxpZEV4
dGVuc2lvbikKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAg
IFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVu
dEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1Rf
TlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAgICBj
aGVja0RvbWFpbihlcnJvcik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkKTsKKyAgICAgICAgRVhQRUNU
X1NUUkVRKCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiBGYWlsZWQgdG8gcGFyc2UgdGhl
IEpTT04gU3RyaW5nLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworCisgICAg
ICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlVGVzdCwgTG9va3VwKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5n
ID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9y
ZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIg
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6Xihf
V0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAg
ICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3Ip
OworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9u
ZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVy
KTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVMb29raW5nVXAg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tp
bmdVcCk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9u
RXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2lu
Z1VwID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRT
dG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3Qi
IGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKKyAgICAgICAg
RVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKyAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOworICAg
ICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yTG9va3VwRmFpbGVkKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3Vw
IGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhlbHBB
bmNob3JdIFVURjhTdHJpbmddKTsKKyAgICAgICAgCisgICAgICAgIGRvbmVMb29raW5nVXAgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdV
cCk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgVmVyc2lv
bk1pc21hdGNoKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Cisg
ICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRl
bnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVu
dEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAgICB7CisgICAgICAgIAorICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwor
ICAgICAgICAKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKKworICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiJdOworICAgIAorICAgIF9f
YmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50
RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKQorICAgIHsKKyAgICAgICAgCisgICAgICAg
IEVYUEVDVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7Cisg
ICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUs
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclZlcnNpb25NaXNtYXRjaCk7CisgICAg
ICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFZlcnNpb24gb2YgZmls
ZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiIsIFtbZXJyb3IgaGVscEFu
Y2hvcl0gVVRGOFN0cmluZ10pOworICAgICAgICAKKyAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRy
dWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1Vw
KTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1vdmFs
KQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNp
b246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAq
ZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwo
ZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21w
aWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7Cisg
ICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFu
ZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKwor
ICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCit7CisgICAgX19i
bG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7
CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisgICAgICAgIGNoZWNrRG9tYWluKGVy
cm9yKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5z
aW9uIHJlbW92YWwgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiIsIFtb
ZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworCisgICAgICAgIGRvbmVSZW1vdmluZyA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lUmVtb3Zp
bmcpOworfQorCisjZW5kaWYKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0JKHJldmlzaW9uIDIxMzY3MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
MjMgKzMwLDIzIEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJU
ZXN0LmgiCi0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLWNsYXNzIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworY2xhc3MgV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQogICAgIHsKLSAgICAgICAgW1tfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25z
XTsKKyAgICAgICAgW1tXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBf
cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwogICAgIH0KIH07CiAKIHN0YXRpYyBOU1N0cmlu
ZyAqYmFzaWNGaWx0ZXIgPSBAIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CiAKLVRFU1RfRihf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgQ29tcGlsZSkKK1RFU1RfRihXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBDb21waWxlKQogewogICAgIF9fYmxvY2sgYm9vbCBk
b25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVz
dEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlv
bkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikg
eworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGls
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENv
bnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250
ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVY
UEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC02
MCwxOCArNjAsMTggQEAgc3RhdGljIE5TU3RyaW5nICppbnZhbGlkRmlsdGVyID0gQCJbIjsKIAog
c3RhdGljIHZvaWQgY2hlY2tEb21haW4oTlNFcnJvciAqZXJyb3IpCiB7Ci0gICAgRVhQRUNUX1NU
UkVRKFtbZXJyb3IgZG9tYWluXSBVVEY4U3RyaW5nXSwgW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
c0RvbWFpbiBVVEY4U3RyaW5nXSk7CisgICAgRVhQRUNUX1NUUkVRKFtbZXJyb3IgZG9tYWluXSBV
VEY4U3RyaW5nXSwgW1dLRXJyb3JEb21haW4gVVRGOFN0cmluZ10pOwogfQogCi1URVNUX0YoX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNpb24pCitURVNUX0Yo
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikKIHsKICAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFs
aWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRl
ZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246aW52YWxpZEZpbHRlciBjb21wbGV0aW9u
SGFuZGxlcjpeKFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3Ip
IHsKICAgICAKICAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05P
VF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwotICAgICAgICBFWFBF
Q1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGls
ZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZCk7CiAgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5z
aW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmluZy4i
LCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKIAogICAgICAgICBkb25lQ29tcGls
aW5nID0gdHJ1ZTsKQEAgLTc5LDEwICs3OSwxMCBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGls
aW5nKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBMb29r
dXApCitURVNUX0YoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQogewog
ICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFz
aWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRl
ZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhh
bmRsZXI6XihXS1VzZXJDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7
CiAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CkBAIC05Miw3ICs5Miw3IEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxp
bmcpOwogCiAgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKLSAgICBbW19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4o
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihX
S1VzZXJDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAg
ICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJv
cik7CkBAIC0xMDIsMTUgKzEwMiwxNSBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsK
IH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGlu
Z0lkZW50aWZpZXJMb29rdXApCitURVNUX0YoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVz
dCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25l
TG9va2luZ1VwID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRl
ZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90
RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4
aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLVXNlckNvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKICAgICAKICAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKICAg
ICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3Ip
OwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yTG9va3VwRmFpbGVkKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdL
RXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQpOwogICAgICAgICBFWFBFQ1Rf
U1RSRVEoIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcg
bG9va3VwLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogICAgICAgICAKICAg
ICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7CkBAIC0xMTgsMTAgKzExOCwxMCBAQCBURVNUX0Yo
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lTG9va2luZ1VwKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVUZXN0LCBWZXJzaW9uTWlzbWF0Y2gpCitURVNUX0YoV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25l
Q29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRl
ZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhh
bmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAg
ICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVudEV4
dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKICAgICB7CiAgICAgICAgIAogICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKQEAgLTEzMSwxNiArMTMxLDE2IEBAIFRFU1RfRihf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwogCi0gICAgW1tfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVy
c2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIl07CisgICAgW1tXS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25W
ZXJzaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iXTsKICAgICAKICAgICBfX2Jsb2Nr
IGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRl
ciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAi
VGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihXS1VzZXJDb250ZW50RXh0ZW5zaW9u
ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKQogICAgIHsKICAgICAgICAgCiAgICAgICAgIEVYUEVD
VF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAg
IGNoZWNrRG9tYWluKGVycm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgIEVY
UEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1p
c21hdGNoKTsKICAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDog
VmVyc2lvbiBvZiBmaWxlIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIuIiwg
W1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAgICAgICAgIAogICAgICAgICBkb25l
TG9va2luZ1VwID0gdHJ1ZTsKQEAgLTE0OCwxMCArMTQ4LDEwIEBAIFRFU1RfRihfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVMb29raW5nVXApOwogfQogCi1URVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QsIFJlbW92YWwpCitURVNUX0YoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVt
b3ZhbCkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNv
bXBsZXRpb25IYW5kbGVyOl4oV0tVc2VyQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9y
ICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAg
ICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtMTYxLDcgKzE2MSw3IEBAIFRFU1RfRihfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmVDb21waWxpbmcpOwogCiAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNl
OwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlv
bkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CiAg
ICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIAogICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVl
OwpAQCAtMTY5LDEzICsxNjksMTMgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVUZXN0LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKIH0K
IAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lk
ZW50aWZpZXJSZW1vdmUpCitURVNUX0YoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwg
Tm9uRXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lUmVt
b3ZpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVs
dFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkRvZXNOb3RFeGlz
dCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAq
ZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tE
b21haW4oZXJyb3IpOwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkKTsKKyAgICAgICAgRVhQRUNUX0VRKGVy
cm9yLmNvZGUsIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOwogICAg
ICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogVW5zcGVjaWZpZWQg
ZXJyb3IgZHVyaW5nIHJlbW92ZS4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsK
IAogICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304010</attachid>
            <date>2017-03-09 16:41:32 -0800</date>
            <delta_ts>2017-03-09 16:51:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20170309164131.patch</filename>
            <type>text/plain</type>
            <size>211461</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTAzLTA5ICBCcmlhbiBO
aWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBm
b3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24gYW5k
IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJp
bmdzOgorCiAyMDE3LTAzLTA5ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW01vZGVybiBNZWRpYSBDb250cm9sc10gaU9TOiBsb25nIHByZXNzIG9uIHBsYXkg
YnV0dG9uIHNob3dzIHRoZSBDb3B5IG1lbnUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gu
bHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNv
dXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwkod29ya2luZyBj
b3B5KQpAQCAtMTcyLDYgKzE3Miw5IEBACiAvKiBTdWJ0aXRsZSBvZiB0aGUgbGFiZWwgdG8gc2hv
dyBvbiBhIHNuYXBzaG90dGVkIHBsdWctaW4gKi8KICJDbGljayB0byByZXN0YXJ0IiA9ICJDbGlj
ayB0byByZXN0YXJ0IjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVG
YWlsZWQgZGVzY3JpcHRpb24gKi8KKyJDb21waWxpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFp
bGVkIiA9ICJDb21waWxpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKwogLyogV2Vi
S2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgZGVzY3JpcHRpb24gKi8KICJDb250ZW50IHdpdGgg
c3BlY2lmaWVkIE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3duIiA9ICJDb250ZW50IHdpdGggc3Bl
Y2lmaWVkIE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3duIjsKIApAQCAtMzU4LDYgKzM2MSwxMiBA
QAogLyogTG9vayBVcCBjb250ZXh0IG1lbnUgaXRlbSB3aXRoIHNlbGVjdGVkIHdvcmQgKi8KICJM
b29rIFVwIOKAnDxzZWxlY3Rpb24+4oCdIiA9ICJMb29rIFVwIOKAnDxzZWxlY3Rpb24+4oCdIjsK
IAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlv
biAqLworIkxvb2tpbmcgdXAgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9ICJMb29raW5n
IHVwIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCI7CisKKy8qIFdLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2ggZGVzY3JpcHRpb24gKi8KKyJMb29raW5nIHVwIGEg
V0tDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIiA9
ICJMb29raW5nIHVwIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMg
aW5jb21wYXRpYmxlIjsKKwogLyogTWVkaWEgTG9vcCBjb250ZXh0IG1lbnUgaXRlbSAqLwogIkxv
b3AiID0gIkxvb3AiOwogCkBAIC00OTYsNiArNTA1LDkgQEAKIC8qIFJlbG9hZCBjb250ZXh0IG1l
bnUgaXRlbSAqLwogIlJlbG9hZCIgPSAiUmVsb2FkIjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiAqLworIlJlbW92aW5nIGEgV0tDb250
ZW50RXh0ZW5zaW9uIGZhaWxlZCIgPSAiUmVtb3ZpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFp
bGVkIjsKKwogLyogZGVmYXVsdCBsYWJlbCBmb3IgUmVzZXQgYnV0dG9ucyBpbiBmb3JtcyBvbiB3
ZWIgcGFnZXMgKi8KICJSZXNldCIgPSAiUmVzZXQiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDIxMzY3MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAog
dHlwZWRlZiB1aW50OF90IERGQUJ5dGVjb2RlOwogCi0vLyBJbmNyZW1lbnQgVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbgorLy8gSW5j
cmVtZW50IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxl
VmVyc2lvbgogLy8gd2hlbiBtYWtpbmcgYW55IG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFu
Z2VzIHRvIHRoZSBieXRlY29kZS4KIC8vIEZJWE1FOiBDaGFuZ2VzIGhlcmUgc2hvdWxkIG5vdCBy
ZXF1aXJlIGNoYW5nZXMgaW4gV2ViS2l0Mi4gIE1vdmUgYWxsIHZlcnNpb25pbmcgdG8gV2ViQ29y
ZS4KIGVudW0gY2xhc3MgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQ4X3QgewpJbmRleDog
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gMjEzNjg1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY0IEBACisyMDE3LTAzLTA5ICBCcmlhbiBOaWNob2xz
b24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBmb3IgY29u
dGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24gYW5kIEdlb2Zm
IEdhcmVuLgorCisgICAgICAgIFRoaXMgdGFrZXMgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBhbmQgX1dLVXNlckNvbnRlbnRGaWx0ZXIgYW5kIHR1cm5zIHRoZW0gaW50byB0aGUgY29uc2lz
dGVudGx5LW5hbWVkIHB1YmxpYyBBUEkKKyAgICAgICAgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUg
YW5kIFdLQ29udGVudEV4dGVuc2lvbiByZXNwZWN0aXZlbHkgd2l0aCB0aGUgc2FtZSBkZXNpZ24g
YW5kIGZ1bmN0aW9uYWx5IG9mIHRoZSBvcmlnaW5hbCBTUEkuCisgICAgICAgIFdlIGFsc28gYWRk
ZWQgcHVibGljIGZ1bmN0aW9ucyB0byBXS1VzZXJDb250ZW50Q29udHJvbGxlciBjb3JyZXNwb25k
aW5nIHRvIGV4aXN0aW5nIHByaXZhdGUgZnVuY3Rpb25zLgorCisgICAgICAgIFRoZSBvbGQgU1BJ
IE9iakMgY2xhc3NlcyBhcmUgbm93IGp1c3Qgd3JhcHBlcnMgYXJvdW5kIHRoZSBuZXcgT2JqQyBj
bGFzc2VzLCB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIEMrKyBvYmplY3RzIGluIHRoZSBBUEkg
bmFtZXNwYWNlLgorICAgICAgICAKKyAgICAgICAgVGhlIHBlYWstbWVtb3J5LXJlZHVjaW5nIG9w
dGltaXphdGlvbiBvZiBoYXZpbmcgTlNfUkVMRUFTRVNfQVJHVU1FTlQgaW4gX2NvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllciBpcyBrZXB0IGZvciBTYWZhcmksCisgICAgICAgIGJ1
dCB0aGUgcHVibGljIEFQSSBkb2Vzbid0IG5lZWQgc3VjaCBhbiBvcHRpbWl6YXRpb24uICBUaGUg
cHVibGljIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllciB3aWxsIG5vdCBkZWFs
bG9jYXRlIHRoZSBpbnB1dAorICAgICAgICBOU1N0cmluZyBkdXJpbmcgY29tcGlsaW5nLgorICAg
ICAgICAKKyAgICAgICAgV2UgbW92ZWQgdGhlIGVycm9yIGNvZGVzIGludG8gdGhlIFdLRXJyb3JE
b21haW4sIHdoaWNoIHJlcXVpcmVzIGNoYW5naW5nIHRoZSB2YWx1ZXMgb2YgdGhlIGVycm9yIGNv
ZGVzIGFuZCBkb21haW4sIGJ1dCBzb3VyY2UKKyAgICAgICAgY29tcGlsZWQgdGhhdCB1c2VzIHRo
ZSBTUEkgYmVmb3JlIGFuZCBhZnRlciBzaG91bGQgc3RpbGwgd29yay4gIFVzaW5nIG5ldyBhcHBs
aWNhdGlvbnMgd2l0aCBvbGQgZnJhbWV3b3JrcyBvciB2aWNlIHZlcnNhIHdpbGwKKyAgICAgICAg
aGF2ZSB1bmV4cGVjdGVkIGVycm9yIGNvZGVzLCB0aG91Z2guCisKKyAgICAgICAgKiBTaGFyZWQv
QVBJL0FQSU9iamVjdC5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5j
dGlvbnMuY3BwOgorICAgICAgICAoV0tQYWdlR3JvdXBBZGRVc2VyQ29udGVudEZpbHRlcik6Cisg
ICAgICAgIChXS1BhZ2VHcm91cFJlbW92ZVVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKiBT
aGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVj
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcDogQ29w
aWVkIGZyb20gVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAuCisgICAg
ICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAo
QVBJOjpDb250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uOjpVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisg
ICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjp+VXNlckNvbnRlbnRFeHRlbnNpb24p
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5o
OiBDb3BpZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmguCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwLgor
ICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAg
ICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aCk6CisgICAgICAg
IChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q29udGVudEV4dGVuc2lvblN0b3JlKToKKyAg
ICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjp+Q29udGVudEV4dGVuc2lvblN0b3Jl
KToKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUpOgorICAgICAgICAoQVBJOjpjcmVhdGVF
eHRlbnNpb24pOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENv
bnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNv
bXBpbGVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0
b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVu
c2lvblN0b3JlOjpzeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAg
ICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lv
blZlcnNpb24pOgorICAgICAgICAoQVBJOjpjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVn
b3J5KToKKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
c3RvcmVXaXRoUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAo
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxv
b2t1cENvbnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNp
b24pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpz
eW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNp
b25WZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6dXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yQ2F0ZWdvcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJ
Q29udGVudEV4dGVuc2lvblN0b3JlLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAoQVBJOjptYWtlX2Vycm9yX2NvZGUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24u
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0FQSUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3Bw
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5j
cHA6CisgICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVzZXJDb250ZW50RmlsdGVy
KToKKyAgICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRG
aWx0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUdldFR5
cGVJRCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlQ29jb2EubW06CisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
ZGVmYXVsdFN0b3JlUGF0aCk6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OmRlZmF1bHRTdG9yZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvbi5tbTogQ29waWVkIGZyb20gVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEZpbHRlci5tbS4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uIGRl
YWxsb2NdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdKToKKyAg
ICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgZGVhbGxvY10pOiBEZWxldGVkLgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEZpbHRlciBfYXBpT2JqZWN0XSk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwu
aC4KKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oOiBDb3BpZWQgZnJvbSBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOiBDb3BpZWQgZnJvbSBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0uCisgICAgICAg
ICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSk6CisgICAgICAgICgrW1dLQ29udGVudEV4
dGVuc2lvblN0b3JlIHN0b3JlV2l0aFVSTDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZSBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOnJlbGVhc2VzQXJndW1lbnQ6XSk6
CisgICAgICAgICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21w
bGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2Fw
aU9iamVjdF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxs
Q29udGVudEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUg
X2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZpZXI6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6
CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVhbGxvY10pOiBEZWxl
dGVkLgorICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9y
ZV0pOiBEZWxldGVkLgorICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHN0
b3JlV2l0aFVSTDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRl
bnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVjdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOiBEZWxl
dGVkLgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbnZhbGlkYXRl
Q29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
OiBDb3BpZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVJbnRlcm5hbC5oLgorICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tOgorICAgICAgICAobG9jYWxpemVk
RGVzY3JpcHRpb25Gb3JFcnJvckNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29u
dHJvbGxlciBhZGRDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50
Q29udHJvbGxlciByZW1vdmVDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtXS1VzZXJD
b250ZW50Q29udHJvbGxlciByZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAgICAgICAo
LVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlckNvbnRlbnRGaWx0ZXI6XSk6CisgICAg
ICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjpd
KToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJDb250
ZW50RmlsdGVyc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdKToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBzdG9yZVdpdGhVUkw6XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRD
b250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9hcGlPYmpl
Y3RdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxs
Q29udGVudEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpdKToK
KyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW5pdFdpdGhXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZTpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYktpdDo6
d3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAgICgtW19XS1VzZXJDb250ZW50
RmlsdGVyIF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgX2lu
aXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEZp
bHRlciBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmg6CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRG
aWx0ZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQ29udGVu
dEV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5OjpyZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMp
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3Bw
OgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudEV4dGVu
c2lvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJD
b250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRXJyb3JzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpibG9ja2VkQnlDb250ZW50Rmls
dGVyRXJyb3IpOgorCiAyMDE3LTAzLTA5ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBmb2xsb3ctdXAgdG8gcjIxMzY4Mi4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAkocmV2aXNpb24gMjEzNjcwKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgQmFja0ZvcndhcmRMaXN0SXRlbSwKICAg
ICAgICAgQ2FjaGVNYW5hZ2VyLAogICAgICAgICBDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyLAor
ICAgICAgICBDb250ZW50RXh0ZW5zaW9uLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uU3RvcmUs
CiAgICAgICAgIENvbnRleHRNZW51TGlzdGVuZXIsCiAgICAgICAgIENvb2tpZU1hbmFnZXIsCiAg
ICAgICAgIERvd25sb2FkLApAQCAtMTQ1LDggKzE0Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgUnVu
SmF2YVNjcmlwdFByb21wdFJlc3VsdExpc3RlbmVyLAogICAgICAgICBUZXh0Q2hlY2tlciwKICAg
ICAgICAgVXNlckNvbnRlbnRDb250cm9sbGVyLAotICAgICAgICBVc2VyQ29udGVudEV4dGVuc2lv
biwKLSAgICAgICAgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSwKICAgICAgICAgVXNlckNvbnRl
bnRXb3JsZCwKICAgICAgICAgVXNlckluaXRpYXRlZEFjdGlvbiwKICAgICAgICAgVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVw
cmVjYXRlZEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2lu
Y2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJBUElEaWN0aW9uYXJ5Lmgi
Ci0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXS0FycmF5
LmgiCiAjaW5jbHVkZSAiV0tDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldLTXV0YWJsZURp
Y3Rpb25hcnkuaCIKQEAgLTU2LDIyICs1NiwyMiBAQCBXS1N0cmluZ1JlZiBXS1BhZ2VHcm91cENv
cHlJZGVudGlmaWVyKFdLCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgV0tQYWdlR3Jv
dXBBZGRVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLVXNl
ckNvbnRlbnRGaWx0ZXJSZWYgdXNlckNvbnRlbnRGaWx0ZXJSZWYpCit2b2lkIFdLUGFnZUdyb3Vw
QWRkVXNlckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1VzZXJD
b250ZW50RmlsdGVyUmVmIGNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+dXNlckNvbnRlbnRDb250cm9s
bGVyKCkuYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnRvSW1wbCh1c2VyQ29udGVudEZpbHRlclJl
ZikpOworICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5h
ZGRDb250ZW50RXh0ZW5zaW9uKCp0b0ltcGwoY29udGVudEZpbHRlclJlZikpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ocGFnZUdyb3VwUmVmKTsKLSAgICBVTlVTRURfUEFSQU0odXNlckNvbnRl
bnRGaWx0ZXJSZWYpOworICAgIFVOVVNFRF9QQVJBTShjb250ZW50RmlsdGVyUmVmKTsKICNlbmRp
ZgogfQogCi12b2lkIFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiB1c2VyQ29udGVudEZpbHRlck5hbWVSZWYp
Cit2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiBjb250ZW50RmlsdGVyTmFtZVJlZikKIHsKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbih0b1dURlN0cmlu
Zyh1c2VyQ29udGVudEZpbHRlck5hbWVSZWYpKTsKKyAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+
dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlQ29udGVudEV4dGVuc2lvbih0b1dURlN0cmlu
Zyhjb250ZW50RmlsdGVyTmFtZVJlZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZUdy
b3VwUmVmKTsKLSAgICBVTlVTRURfUEFSQU0odXNlckNvbnRlbnRGaWx0ZXJOYW1lUmVmKTsKKyAg
ICBVTlVTRURfUEFSQU0oY29udGVudEZpbHRlck5hbWVSZWYpOwogI2VuZGlmCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHJldmlzaW9uIDIxMzY3MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ckludGVybmFsLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIldLQ29ubmVjdGlvbkludGVybmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRl
bnNpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tOU0FycmF5
LmgiCiAjaW1wb3J0ICJXS05TRGF0YS5oIgpAQCAtNzAsOCArNzIsNiBAQAogI2ltcG9ydCAiX1dL
RnJhbWVIYW5kbGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIgotI2lt
cG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgiCi0jaW1wb3J0ICJf
V0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tVc2VyQ29udGVudFdv
cmxkSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJJbml0aWF0ZWRBY3Rpb25JbnRlcm5hbC5o
IgogI2ltcG9ydCAiX1dLVXNlclN0eWxlU2hlZXRJbnRlcm5hbC5oIgpAQCAtMjI5LDEyICsyMjks
MTIgQEAgdm9pZCogT2JqZWN0OjpuZXdPYmplY3Qoc2l6ZV90IHNpemUsIFR5cAogICAgICAgICB3
cmFwcGVyID0gW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIGFsbG9jXTsKICAgICAgICAgYnJlYWs7
CiAKLSAgICBjYXNlIFR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uOgotICAgICAgICB3cmFwcGVy
ID0gW19XS1VzZXJDb250ZW50RmlsdGVyIGFsbG9jXTsKKyAgICBjYXNlIFR5cGU6OkNvbnRlbnRF
eHRlbnNpb246CisgICAgICAgIHdyYXBwZXIgPSBbV0tDb250ZW50RXh0ZW5zaW9uIGFsbG9jXTsK
ICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6Ci0gICAgICAgIHdyYXBwZXIgPSBbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxv
Y107CisgICAgY2FzZSBUeXBlOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6CisgICAgICAgIHdyYXBw
ZXIgPSBbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRXb3JsZDoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXku
aCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIkFQSUNv
bnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJBUElVc2VyU2NyaXB0LmgiCiAjaW5jbHVkZSAi
QVBJVXNlclN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVu
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElD
b250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcDoyMTM2NzApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKKworI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCIKKworbmFtZXNwYWNlIEFQSSB7CisKK1VzZXJDb250ZW50RXh0ZW5zaW9uOjpVc2VyQ29u
dGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCisgICAgOiBtX25hbWUo
bmFtZSkKKyAgICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGTW92ZShjb250ZW50RXh0ZW5zaW9u
KSkKK3sKK30KKworVXNlckNvbnRlbnRFeHRlbnNpb246On5Vc2VyQ29udGVudEV4dGVuc2lvbigp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNp
b24uaCIKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKQEAgLTMyLDEzICszMiwx
MyBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIAotVXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJDb250
ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKK0NvbnRlbnRFeHRlbnNp
b246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQogICAgIDog
bV9uYW1lKG5hbWUpCiAgICAgLCBtX2NvbXBpbGVkRXh0ZW5zaW9uKFdURk1vdmUoY29udGVudEV4
dGVuc2lvbikpCiB7CiB9CiAKLVVzZXJDb250ZW50RXh0ZW5zaW9uOjp+VXNlckNvbnRlbnRFeHRl
bnNpb24oKQorQ29udGVudEV4dGVuc2lvbjo6fkNvbnRlbnRFeHRlbnNpb24oKQogewogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRl
bnNpb24uaAkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmg6MjEzNjcwKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25f
aAorI2RlZmluZSBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCisKKyNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247Cit9CisKK25hbWVzcGFjZSBB
UEkgeworCitjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBPYmplY3RJ
bXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHsKK3B1YmxpYzoKKyNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRl
bnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyQ29udGVudEV4dGVuc2lvbihuYW1lLCBXVEZNb3Zl
KGNvbnRlbnRFeHRlbnNpb24pKSk7CisgICAgfQorCisgICAgVXNlckNvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4mJik7CisgICAgdmlydHVhbCB+VXNlckNvbnRlbnRFeHRlbnNpb24oKTsKKworICAg
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAg
Y29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVkRXh0ZW5z
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsgfQorCitwcml2
YXRlOgorICAgIFdURjo6U3RyaW5nIG1fbmFtZTsKKyAgICBSZWY8V2ViS2l0OjpXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247CisjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKK307CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYg
Ly8gQVBJVXNlckNvbnRlbnRFeHRlbnNpb25faApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxMzY3MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCi0jZGVm
aW5lIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zNSwxNiAr
MzQsMTYgQEAgY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOwogCiBuYW1lc3BhY2Ug
QVBJIHsKIAotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0
SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB7CitjbGFzcyBDb250ZW50
RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpDb250ZW50
RXh0ZW5zaW9uPiB7CiBwdWJsaWM6CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAg
ICBzdGF0aWMgUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250
ZW50RXh0ZW5zaW9uKQorICAgIHN0YXRpYyBSZWY8Q29udGVudEV4dGVuc2lvbj4gY3JlYXRlKGNv
bnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lv
bikpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVuc2lvbihuYW1l
LCBXVEZNb3ZlKGNvbnRlbnRFeHRlbnNpb24pKSk7CiAgICAgfQogCi0gICAgVXNlckNvbnRlbnRF
eHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbj4mJik7Ci0gICAgdmlydHVhbCB+VXNlckNvbnRlbnRFeHRlbnNpb24o
KTsKKyAgICBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2Vi
S2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYpOworICAgIHZpcnR1YWwgfkNvbnRl
bnRFeHRlbnNpb24oKTsKIAogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24mIGNvbXBpbGVkRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVu
c2lvbi5nZXQoKTsgfQpAQCAtNTYsNSArNTUsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0
ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM2NzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6MjEzNjcwKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKwor
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElVc2VyQ29udGVu
dEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5j
bHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9D
b250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25FcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0
Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTsKKworbmFtZXNwYWNlIEFQSSB7CisKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCit7CisgICAgc3RhdGlj
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpkZWZhdWx0
U3RvcmU7Cit9CisKK1JlZjxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZShz
dG9yZVBhdGgpKTsKK30KKworVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6VXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSgpCisgICAgOiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGRlZmF1bHRT
dG9yZVBhdGgoKSkKK3sKK30KKworVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6VXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQorICAgIDogbV9z
dG9yZVBhdGgoc3RvcmVQYXRoKQorICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVh
dGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgQ29tcGlsZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6
VHlwZTo6Q29uY3VycmVudCkpCisgICAgLCBtX3JlYWRRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgi
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBSZWFkIFF1ZXVlIikpCisgICAgLCBtX3JlbW92ZVF1
ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlbW92ZSBR
dWV1ZSIpKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSgpCit7Cit9CisKK3N0YXRpYyBTdHJpbmcgY29uc3RydWN0ZWRQYXRoKGNv
bnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQoreworICAgIHJldHVy
biBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZSwgIkNvbnRlbnRFeHRlbnNp
b24tIiArIFdlYkNvcmU6OmVuY29kZUZvckZpbGVOYW1lKGlkZW50aWZpZXIpKTsKK30KKworLy8g
VGhlIHNpemUgYW5kIG9mZnNldCBvZiB0aGUgZGVuc2VseSBwYWNrZWQgYnl0ZXMgaW4gdGhlIGZp
bGUsIG5vdCBzaXplb2YgYW5kIG9mZnNldG9mLCB3aGljaCB3b3VsZAorLy8gcmVwcmVzZW50IHRo
ZSBzaXplIGFuZCBvZmZzZXQgb2YgdGhlIHN0cnVjdHVyZSBpbiBtZW1vcnksIHBvc3NpYmx5IHdp
dGggY29tcGlsZXItYWRkZWQgcGFkZGluZy4KK2NvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9u
RmlsZUhlYWRlclNpemUgPSAyICogc2l6ZW9mKHVpbnQzMl90KSArIDQgKiBzaXplb2YodWludDY0
X3QpOworY29uc3Qgc2l6ZV90IENvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCA9IHNp
emVvZih1aW50MzJfdCkgKyA0ICogc2l6ZW9mKHVpbnQ2NF90KTsKKworc3RydWN0IENvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YSB7CisgICAgdWludDMyX3QgdmVyc2lvbiB7IFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gfTsKKyAgICB1
aW50NjRfdCBhY3Rpb25zU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDY0X3QgZmlsdGVyc1dpdGhDb25k
aXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGNvbmRpdGlvbmVkRmlsdGVy
c0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50MzJfdCBjb25kaXRpb25zQXBwbHlPbmx5VG9E
b21haW4geyBmYWxzZSB9OworICAgIAorICAgIHNpemVfdCBmaWxlU2l6ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAgICAg
ICAgICArIGFjdGlvbnNTaXplCisgICAgICAgICAgICArIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlU2l6ZQorICAgICAgICAgICAgKyBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29k
ZVNpemUKKyAgICAgICAgICAgICsgY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOworICAg
IH0KK307CisKK3N0YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShjb25z
dCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQoreworICAgIFdURjo6UGVyc2lz
dGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKKworICAgIGVuY29kZXIgPDwgbWV0YURhdGEudmVyc2lv
bjsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmFjdGlvbnNTaXplOworICAgIGVuY29kZXIgPDwg
bWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgIGVuY29k
ZXIgPDwgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgIGVu
Y29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOworICAgIGVu
Y29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworCisgICAgQVNT
RVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6
ZSk7CisgICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXpl
KCkpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCit7
CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0
YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKKyAgICAgICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNv
bnRpbnVvdXMgbWVtb3J5IHNlZ21lbnQgc28gdGhlIHNpemUKKyAgICAgICAgLy8gcGFzc2VkIHRv
IHRoZSBhcHBsaWVyIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIGRhdGEgc2l6ZS4KKyAgICAgICAg
aWYgKHNpemUgIT0gZmlsZURhdGEuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS52ZXJzaW9uKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5h
Y3Rpb25zU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXpl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNv
bmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3VjY2VzcyA9
IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKyAgICByZXR1cm4gc3VjY2Vz
czsKK30KKworc3RhdGljIGJvb2wgb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBwYXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBmaWxl
RGF0YSkKK3sKKyAgICBmaWxlRGF0YSA9IG1hcEZpbGUoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHBhdGgpLmRhdGEoKSk7CisgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRh
RGF0YShtZXRhRGF0YSwgZmlsZURhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IERhdGEm
IGZpbGVEYXRhLCBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7CisgICAgYm9vbCBz
dWNjZXNzID0gdHJ1ZTsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpZiAoV2ViQ29yZTo6d3JpdGVU
b0ZpbGUoZmQsIChjb25zdCBjaGFyKilkYXRhLCBzaXplKSA9PSAtMSkgeworICAgICAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIAorICAgIHJldHVybiBzdWNjZXNzOwor
fQorCitzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0cmluZyYmIGpzb24s
IGNvbnN0IFN0cmluZyYgZmluYWxGaWxlUGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBt
ZXRhRGF0YSwgRGF0YSYgbWFwcGVkRGF0YSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM7CisKKyAgICBjbGFzcyBDb21waWxhdGlvbkNsaWVudCBmaW5h
bCA6IHB1YmxpYyBDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgQ29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGZpbGVIYW5kbGUsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCisgICAgICAg
ICAgICA6IG1fZmlsZUhhbmRsZShmaWxlSGFuZGxlKQorICAgICAgICAgICAgLCBtX21ldGFEYXRh
KG1ldGFEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmFjdGlv
bnNTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25k
aXRpb25zQnl0ZWNvZGVTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuZmlsdGVy
c1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURh
dGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCB3cml0ZUZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKFZl
Y3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAg
ICAgICAgIG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVj
b2RlLnNpemUoKTsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgp
LCBieXRlY29kZS5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB3
cml0ZUZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBi
eXRlY29kZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlv
bkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgbV9maWx0ZXJzV2l0aENvbmRp
dGlvbkJ5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7CisgICAgICAgICAgICB3cml0
ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgd3JpdGVUb3BVUkxGaWx0ZXJzQnl0ZWNvZGUoVmVj
dG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAg
ICBtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOwor
ICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNp
emUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNl
cmlhbGl6ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMsIGJvb2wgY29uZGl0aW9uc0FwcGx5T25seVRv
RG9tYWluKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9m
aWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQo
IW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQo
IW1fYWN0aW9uc1dyaXR0ZW4pOworICAgICAgICAgICAgbV9hY3Rpb25zV3JpdHRlbiArPSBhY3Rp
b25zLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluID0g
Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0
YShhY3Rpb25zLmRhdGEoKSwgYWN0aW9ucy5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBmaW5hbGl6ZSgpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
bWV0YURhdGEuYWN0aW9uc1NpemUgPSBtX2FjdGlvbnNXcml0dGVuOworICAgICAgICAgICAgbV9t
ZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBtX2ZpbHRlcnNX
aXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURhdGEu
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplID0gbV9maWx0ZXJzV2l0aENvbmRpdGlv
bkJ5dGVjb2RlV3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0
ZXJzQnl0ZWNvZGVTaXplID0gbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuOworICAg
ICAgICAgICAgbV9tZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4gPSBtX2NvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRGF0YSBo
ZWFkZXIgPSBlbmNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEobV9tZXRhRGF0YSk7CisgICAg
ICAgICAgICBpZiAoIW1fZmlsZUVycm9yICYmIFdlYkNvcmU6OnNlZWtGaWxlKG1fZmlsZUhhbmRs
ZSwgMGxsLCBXZWJDb3JlOjpGaWxlU2Vla09yaWdpbjo6U2Vla0Zyb21CZWdpbm5pbmcpID09IC0x
KSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7Cisg
ICAgICAgICAgICAgICAgbV9maWxlRXJyb3IgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgd3JpdGVUb0ZpbGUoaGVhZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCBoYWRFcnJvcldoaWxlV3JpdGluZ1RvRmlsZSgpIHsgcmV0dXJuIG1fZmlsZUVycm9yOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHdyaXRlVG9GaWxlKGNvbnN0IERhdGEmIGRh
dGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgIXdyaXRlRGF0
YVRvRmlsZShkYXRhLCBtX2ZpbGVIYW5kbGUpKSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6
Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7CisgICAgICAgICAgICAgICAgbV9maWxlRXJyb3IgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlSGFuZGxlOworICAgICAgICBDb250ZW50RXh0ZW5z
aW9uTWV0YURhdGEmIG1fbWV0YURhdGE7CisgICAgICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fZmlsdGVy
c1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4geyAwIH07CisgICAgICAgIHNpemVfdCBtX2Nv
bmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4geyAwIH07CisgICAgICAgIHNpemVfdCBtX2Fj
dGlvbnNXcml0dGVuIHsgMCB9OworICAgICAgICBib29sIG1fY29uZGl0aW9uc0FwcGx5T25seVRv
RG9tYWluIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2ZpbGVFcnJvciB7IGZhbHNlIH07Cisg
ICAgfTsKKworICAgIGF1dG8gdGVtcG9yYXJ5RmlsZUhhbmRsZSA9IFdlYkNvcmU6OmludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgU3RyaW5nIHRlbXBvcmFyeUZpbGVQYXRoID0gV2ViQ29y
ZTo6b3BlblRlbXBvcmFyeUZpbGUoIkNvbnRlbnRFeHRlbnNpb24iLCB0ZW1wb3JhcnlGaWxlSGFu
ZGxlKTsKKyAgICBpZiAodGVtcG9yYXJ5RmlsZUhhbmRsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxh
dGZvcm1GaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgCisgICAgY2hhciBpbnZhbGlkSGVhZGVyW0Nv
bnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07CisgICAgbWVtc2V0KGludmFsaWRIZWFkZXIs
IDB4RkYsIHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CisgICAgLy8gVGhpcyBoZWFkZXIgd2lsbCBi
ZSByZXdyaXR0ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6OmZpbmFsaXplLgorICAgIGlmIChXZWJD
b3JlOjp3cml0ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBpbnZhbGlkSGVhZGVyLCBzaXpl
b2YoaW52YWxpZEhlYWRlcikpID09IC0xKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0
ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgIH0KKworICAgIENvbXBpbGF0aW9uQ2xp
ZW50IGNvbXBpbGF0aW9uQ2xpZW50KHRlbXBvcmFyeUZpbGVIYW5kbGUsIG1ldGFEYXRhKTsKKyAg
ICAKKyAgICBpZiAoYXV0byBjb21waWxlckVycm9yID0gY29tcGlsZVJ1bGVMaXN0KGNvbXBpbGF0
aW9uQ2xpZW50LCBXVEZNb3ZlKGpzb24pKSkgeworICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUo
dGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAgICAgIHJldHVybiBjb21waWxlckVycm9yOworICAg
IH0KKyAgICBpZiAoY29tcGlsYXRpb25DbGllbnQuaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUo
KSkgeworICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Cisg
ICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZh
aWxlZDsKKyAgICB9CisgICAgCisgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5kTWFwRmlsZSh0ZW1w
b3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKKyAgICBpZiAobWFwcGVk
RGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgaWYgKCFXZWJDb3JlOjptb3ZlRmlsZSh0ZW1w
b3JhcnlGaWxlUGF0aCwgZmluYWxGaWxlUGF0aCkpCisgICAgICAgIHJldHVybiBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKworICAgIHJldHVybiB7IH07
Cit9CisKK3N0YXRpYyBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCit7CisgICAgYXV0byBzaGFy
ZWRNZW1vcnkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8dWludDhf
dCo+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEgPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoCisgICAg
ICAgIFdURk1vdmUoc2hhcmVkTWVtb3J5KSwKKyAgICAgICAgZmlsZURhdGEsCisgICAgICAgIENv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCwKKyAgICAgICAgQ29udGVudEV4dGVuc2lv
bkZpbGVIZWFkZXJTaXplLAorICAgICAgICBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKKyAgICAgICAg
Q29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFj
dGlvbnNTaXplLAorICAgICAgICBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVNpemUsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQorICAgICAg
ICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsCisgICAgICAgIG1ldGFEYXRhLmZpbHRl
cnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZp
bGVIZWFkZXJTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplCisgICAgICAg
ICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZQorICAg
ICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUsCisg
ICAgICAgIG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZQorICAgICk7Cisg
ICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YSkpOworICAgIHJldHVybiBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRp
ZmllciwgV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsKK30KKwordm9pZCBVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
bV9yZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlk
ZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3Jl
UGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQ
YXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisgICAgICAgIAorICAgICAgICBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURhdGE7CisgICAgICAg
IGlmICghb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24ocGF0aCwgbWV0YURhdGEsIGZpbGVEYXRh
KSkgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlz
ID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51
bGxwdHIsIEVycm9yOjpMb29rdXBGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtZXRhRGF0YS52ZXJz
aW9uICE9IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9u
RmlsZVZlcnNpb24pIHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyLCBFcnJvcjo6VmVyc2lvbk1pc21hdGNoKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBpZGVudGlmaWVyID0gV1RGTW92ZShpZGVudGlmaWVyKSwgZmlsZURhdGEgPSBXVEZNb3Zl
KGZpbGVEYXRhKSwgbWV0YURhdGEgPSBXVEZNb3ZlKG1ldGFEYXRhKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgUmVmUHRyPEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHVzZXJDb250ZW50RXh0ZW5zaW9uID0gY3JlYXRlRXh0
ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRhLCBmaWxlRGF0YSk7CisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcih1c2VyQ29udGVudEV4dGVuc2lvbiwgeyB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUNvbnRl
bnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYg
anNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0
ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fY29tcGlsZVF1ZXVl
LT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0g
aWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwganNvbiA9IGpzb24uaXNvbGF0ZWRDb3B5KCksIHN0
b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBw
YXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisKKyAgICAgICAg
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBEYXRhIGZpbGVEYXRh
OworICAgICAgICBhdXRvIGVycm9yID0gY29tcGlsZWRUb0ZpbGUoV1RGTW92ZShqc29uKSwgcGF0
aCwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3Rl
Y3RlZFRoaXMpLCBlcnJvciA9IFdURk1vdmUoZXJyb3IpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0ciwgZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBpZGVudGlmaWVyID0gV1RGTW92ZShp
ZGVudGlmaWVyKSwgZmlsZURhdGEgPSBXVEZNb3ZlKGZpbGVEYXRhKSwgbWV0YURhdGEgPSBXVEZN
b3ZlKG1ldGFEYXRhKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0geworICAgICAgICAgICAgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHVz
ZXJDb250ZW50RXh0ZW5zaW9uID0gY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRh
LCBmaWxlRGF0YSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih1c2VyQ29udGVudEV4
dGVuc2lvbiwgeyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBtX3JlbW92ZVF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwg
c3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8g
cGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOworCisgICAgICAg
IGlmICghV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKSkgeworICAgICAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEVycm9yOjpSZW1vdmVGYWlsZWQpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJvbm91c1JlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zKCkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJD
b3JlOjpsaXN0RGlyZWN0b3J5KG1fc3RvcmVQYXRoLCAiKiIpKQorICAgICAgICBXZWJDb3JlOjpk
ZWxldGVGaWxlKHBhdGgpOworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omlu
dmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvIGZpbGUgPSBXZWJDb3JlOjpvcGVuRmlsZShjb25zdHJ1Y3RlZFBh
dGgobV9zdG9yZVBhdGgsIGlkZW50aWZpZXIpLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAg
IGlmIChmaWxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAg
IHJldHVybjsKKyAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgaW52YWxpZEhlYWRlcjsKKyAg
ICBhdXRvIGJ5dGVzV3JpdHRlbiA9IFdlYkNvcmU6OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZpbnZhbGlkSGVhZGVyKSwgc2l6ZW9mKGludmFsaWRIZWFk
ZXIpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGJ5dGVzV3JpdHRlbiwgYnl0ZXNXcml0dGVuID09IHNp
emVvZihpbnZhbGlkSGVhZGVyKSk7CisgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGZpbGUpOworfQor
ICAgIAorY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yQ2F0ZWdvcnkoKQoreworICAgIGNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVF
cnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3JfY2F0ZWdvcnkgeworICAgICAgICBjb25z
dCBjaGFyKiBuYW1lKCkgY29uc3Qgbm9leGNlcHQgZmluYWwKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICJ1c2VyIGNvbnRlbnQgZXh0ZW5zaW9uIHN0b3JlIjsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UoaW50IGVycm9yQ29kZSkgY29uc3QgZmluYWwKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcj4oZXJyb3JDb2RlKSkgeworICAgICAgICAgICAgY2FzZSBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFpbGVkOgorICAgICAgICAgICAgICAg
IHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iOworICAgICAgICAgICAg
Y2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgor
ICAgICAgICAgICAgICAgIHJldHVybiAiVmVyc2lvbiBvZiBmaWxlIGRvZXMgbm90IG1hdGNoIHZl
cnNpb24gb2YgaW50ZXJwcmV0ZXIuIjsKKyAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgY29tcGlsZS4iOworICAgICAgICAgICAgY2FzZSBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OworICAgIHJl
dHVybiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
QVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lv
blN0b3JlLmNwcAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
MSArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAotI2luY2x1ZGUgIkFQ
SVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5o
IgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVG
aWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCkBAIC00NiwzMSArNDYsMzEg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0d29ya0NhY2hlOwogCiBuYW1lc3BhY2UgQVBJ
IHsKIAotVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6ZGVmYXVsdFN0b3JlKCkKK0NvbnRlbnRFeHRlbnNpb25TdG9yZSYgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpkZWZhdWx0U3RvcmUoKQogewotICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKiBkZWZhdWx0U3RvcmUgPSBhZG9wdFJlZihuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSkubGVha1JlZigpOworICAgIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uU3RvcmUqIGRlZmF1
bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYoKTsK
ICAgICByZXR1cm4gKmRlZmF1bHRTdG9yZTsKIH0KIAotUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU+IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgoY29uc3QgV1RG
OjpTdHJpbmcmIHN0b3JlUGF0aCkKK1JlZjxDb250ZW50RXh0ZW5zaW9uU3RvcmU+IENvbnRlbnRF
eHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRo
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUo
c3RvcmVQYXRoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVuc2lvblN0
b3JlKHN0b3JlUGF0aCkpOwogfQogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlKCkKLSAgICA6IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVm
YXVsdFN0b3JlUGF0aCgpKQorQ29udGVudEV4dGVuc2lvblN0b3JlOjpDb250ZW50RXh0ZW5zaW9u
U3RvcmUoKQorICAgIDogQ29udGVudEV4dGVuc2lvblN0b3JlKGRlZmF1bHRTdG9yZVBhdGgoKSkK
IHsKIH0KIAotVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQorQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCkKICAg
ICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKLSAgICAsIG1fY29tcGlsZVF1ZXVlKFdvcmtRdWV1
ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIENvbXBpbGUgUXVldWUiLCBXb3Jr
UXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQotICAgICwgbV9yZWFkUXVldWUoV29ya1F1ZXVlOjpj
cmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQotICAgICwgbV9y
ZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBS
ZW1vdmUgUXVldWUiKSkKKyAgICAsIG1fY29tcGlsZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgQ29tcGlsZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6Q29u
Y3VycmVudCkpCisgICAgLCBtX3JlYWRRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudEV4
dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkKKyAgICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVl
OjpjcmVhdGUoIkNvbnRlbnRFeHRlbnNpb25TdG9yZSBSZW1vdmUgUXVldWUiKSkKIHsKIH0KIAot
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQor
Q29udGVudEV4dGVuc2lvblN0b3JlOjp+Q29udGVudEV4dGVuc2lvblN0b3JlKCkKIHsKIH0KIApA
QCAtODUsNyArODUsNyBAQCBjb25zdCBzaXplX3QgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJT
CiBjb25zdCBzaXplX3QgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0ID0gc2l6ZW9m
KHVpbnQzMl90KSArIDQgKiBzaXplb2YodWludDY0X3QpOwogCiBzdHJ1Y3QgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhIHsKLSAgICB1aW50MzJfdCB2ZXJzaW9uIHsgVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiB9OworICAgIHVpbnQz
Ml90IHZlcnNpb24geyBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5z
aW9uRmlsZVZlcnNpb24gfTsKICAgICB1aW50NjRfdCBhY3Rpb25zU2l6ZSB7IDAgfTsKICAgICB1
aW50NjRfdCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CiAgICAg
dWludDY0X3QgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OwpAQCAtMjYw
LDE0ICsyNjAsMTQgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdAog
ICAgIGF1dG8gdGVtcG9yYXJ5RmlsZUhhbmRsZSA9IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGU7CiAgICAgU3RyaW5nIHRlbXBvcmFyeUZpbGVQYXRoID0gV2ViQ29yZTo6b3BlblRl
bXBvcmFyeUZpbGUoIkNvbnRlbnRFeHRlbnNpb24iLCB0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKICAg
ICBpZiAodGVtcG9yYXJ5RmlsZUhhbmRsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlKQotICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OkNvbXBpbGVGYWlsZWQ7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVy
cm9yOjpDb21waWxlRmFpbGVkOwogICAgIAogICAgIGNoYXIgaW52YWxpZEhlYWRlcltDb250ZW50
RXh0ZW5zaW9uRmlsZUhlYWRlclNpemVdOwogICAgIG1lbXNldChpbnZhbGlkSGVhZGVyLCAweEZG
LCBzaXplb2YoaW52YWxpZEhlYWRlcikpOwogICAgIC8vIFRoaXMgaGVhZGVyIHdpbGwgYmUgcmV3
cml0dGVuIGluIENvbXBpbGF0aW9uQ2xpZW50OjpmaW5hbGl6ZS4KICAgICBpZiAoV2ViQ29yZTo6
d3JpdGVUb0ZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgaW52YWxpZEhlYWRlciwgc2l6ZW9mKGlu
dmFsaWRIZWFkZXIpKSA9PSAtMSkgewogICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9y
YXJ5RmlsZUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAgICAgfQogCiAgICAgQ29tcGlsYXRpb25DbGll
bnQgY29tcGlsYXRpb25DbGllbnQodGVtcG9yYXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOwpAQCAt
Mjc4LDIwICsyNzgsMjAgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShT
dAogICAgIH0KICAgICBpZiAoY29tcGlsYXRpb25DbGllbnQuaGFkRXJyb3JXaGlsZVdyaXRpbmdU
b0ZpbGUoKSkgewogICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRs
ZSk7Ci0gICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29t
cGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OkNvbXBpbGVGYWlsZWQ7CiAgICAgfQogICAgIAogICAgIG1hcHBlZERhdGEgPSBhZG9wdEFuZE1h
cEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgMCwgbWV0YURhdGEuZmlsZVNpemUoKSk7CiAgICAg
aWYgKG1hcHBlZERhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRF
eHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAKICAgICBpZiAoIVdlYkNvcmU6
Om1vdmVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKLSAgICAgICAgcmV0
dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsK
IAogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvbj4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3Qg
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEp
CitzdGF0aWMgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gY3JlYXRlRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBt
ZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYXV0byBzaGFyZWRNZW1vcnkg
PSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8dWludDhfdCo+KGZpbGVE
YXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KTsKICAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEg
PSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoCkBAIC0zMTQsMTAgKzMx
NCwxMCBAQCBzdGF0aWMgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+CiAgICAgICAg
IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZQogICAgICk7CiAgICAgYXV0
byBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkpOwot
ICAgIHJldHVybiBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwg
V1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsKKyAgICByZXR1cm4gQVBJOjpDb250
ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwgV1RGTW92ZShjb21waWxlZENvbnRlbnRF
eHRlbnNpb24pKTsKIH0KIAotdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2
b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4g
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29u
dGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9p
ZChSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgp
LCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0
byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CkBAIC0zMzEs
NyArMzMxLDcgQEAgdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBDbwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobWV0YURh
dGEudmVyc2lvbiAhPSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4
dGVuc2lvbkZpbGVWZXJzaW9uKSB7CisgICAgICAgIGlmIChtZXRhRGF0YS52ZXJzaW9uICE9IENv
bnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbikg
ewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIsIEVycm9yOjpWZXJzaW9uTWlzbWF0Y2gpOwogICAgICAgICAgICAgfSk7CkBAIC0zMzksMTMg
KzMzOSwxMyBAQCB2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvCiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlk
ZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1v
dmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSB7Ci0gICAgICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNl
ckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEs
IGZpbGVEYXRhKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0
ZW5zaW9uLCB7IH0pOworICAgICAgICAgICAgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4g
Y29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwg
ZmlsZURhdGEpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEV4dGVuc2lv
biwgeyB9KTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlk
ZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVy
KQordm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9u
PHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fY29tcGlsZVF1ZXVlLT5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRl
ZENvcHkoKSwganNvbiA9IGpzb24uaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQ
YXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQ
YXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CkBAIC0zNjEsMTMgKzM2MSwxMyBAQCB2b2lkIFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVDCiAgICAgICAgIH0KIAogICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpLCBpZGVudGlmaWVyID0gV1RGTW92ZShpZGVudGlmaWVyKSwgZmlsZURhdGEgPSBXVEZN
b3ZlKGZpbGVEYXRhKSwgbWV0YURhdGEgPSBXVEZNb3ZlKG1ldGFEYXRhKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgUmVmUHRy
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHVzZXJDb250ZW50RXh0ZW5zaW9uID0gY3JlYXRl
RXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcih1c2VyQ29udGVudEV4dGVuc2lvbiwgeyB9KTsKKyAgICAgICAgICAg
IFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVF
eHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGNvbnRlbnRFeHRlbnNpb24sIHsgfSk7CiAgICAgICAgIH0pOwogICAg
IH0pOwogfQogCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRF
eHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3Rk
OjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25T
dG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgRnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBtX3JlbW92ZVF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0g
bV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0
cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwpAQCAtMzg1LDQxICszODUsNDEgQEAg
dm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDbwogICAgIH0pOwogfQogCi12
b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVu
dEV4dGVuc2lvbnMoKQordm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQogewogICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6
IFdlYkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgsICIqIikpCiAgICAgICAgIFdlYkNv
cmU6OmRlbGV0ZUZpbGUocGF0aCk7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyKQordm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmludmFsaWRhdGVDb250ZW50
RXh0ZW5zaW9uVmVyc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICBh
dXRvIGZpbGUgPSBXZWJDb3JlOjpvcGVuRmlsZShjb25zdHJ1Y3RlZFBhdGgobV9zdG9yZVBhdGgs
IGlkZW50aWZpZXIpLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOwogICAgIGlmIChmaWxlID09IFdl
YkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCiAgICAgICAgIHJldHVybjsKLSAgICBD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEgaW52YWxpZEhlYWRlcjsKKyAgICBDb250ZW50RXh0ZW5z
aW9uTWV0YURhdGEgaW52YWxpZEhlYWRlciA9IHswLCAwLCAwLCAwLCAwLCAwfTsKICAgICBhdXRv
IGJ5dGVzV3JpdHRlbiA9IFdlYkNvcmU6OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZpbnZhbGlkSGVhZGVyKSwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKGJ5dGVzV3JpdHRlbiwgYnl0ZXNXcml0dGVuID09IHNpemVvZihp
bnZhbGlkSGVhZGVyKSk7CiAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGZpbGUpOwogfQogICAgIAot
Y29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9y
Q2F0ZWdvcnkoKQorY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JDYXRlZ29yeSgpCiB7Ci0gICAgY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjplcnJvcl9jYXRlZ29yeSB7CisgICAgY2xhc3Mg
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2Nh
dGVnb3J5IHsKICAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5vZXhjZXB0IGZpbmFs
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAidXNlciBjb250ZW50IGV4dGVuc2lvbiBz
dG9yZSI7CisgICAgICAgICAgICByZXR1cm4gImNvbnRlbnQgZXh0ZW5zaW9uIHN0b3JlIjsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UoaW50IGVycm9yQ29kZSkgY29u
c3QgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4oZXJyb3JDb2RlKSkgewotICAgICAgICAgICAg
Y2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFpbGVkOgorICAg
ICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9y
PihlcnJvckNvZGUpKSB7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6
RXJyb3I6Okxvb2t1cEZhaWxlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVk
IGVycm9yIGR1cmluZyBsb29rdXAuIjsKLSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6RXJyb3I6OlZlcnNpb25NaXNtYXRjaDoKKyAgICAgICAgICAgIGNhc2UgQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgogICAgICAgICAgICAg
ICAgIHJldHVybiAiVmVyc2lvbiBvZiBmaWxlIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2YgaW50
ZXJwcmV0ZXIuIjsKLSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
RXJyb3I6OkNvbXBpbGVGYWlsZWQ6CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNw
ZWNpZmllZCBlcnJvciBkdXJpbmcgY29tcGlsZS4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgorICAgICAgICAgICAgY2Fz
ZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiI7CiAgICAgICAg
ICAgICB9CiAKQEAgLTQyNyw3ICs0MjcsNyBAQCBjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1
c2VyQ29udGVudEV4CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5z
aW9uRXJyb3JDYXRlZ29yeTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CiAg
ICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lv
blN0b3JlLmgJKHJldmlzaW9uIDIxMzY3MCkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg6MjEzNjcwKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5j
bHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV1RGIHsKK2NsYXNzIFdvcmtRdWV1ZTsKK30KKworbmFtZXNwYWNlIEFQSSB7CisK
K2NsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOworCitjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBFcnJvciB7CisgICAg
ICAgIExvb2t1cEZhaWxlZCA9IDEsCisgICAgICAgIFZlcnNpb25NaXNtYXRjaCwKKyAgICAgICAg
Q29tcGlsZUZhaWxlZCwKKyAgICAgICAgUmVtb3ZlRmFpbGVkCisgICAgfTsKKyAgICAKKyAgICAv
LyBUaGlzIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFu
Z2UgaXMgbWFkZSB0byB0aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCisgICAgLy8gdG8g
cHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgorICAgIGNvbnN0IHN0YXRp
YyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gODsKKworICAg
IHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKKyAgICBz
dGF0aWMgUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3Qg
V1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CisKKyAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZShjb25z
dCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKKyAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlKCk7CisKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdU
Rjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQo
UmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7Cisg
ICAgdm9pZCBsb29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlm
aWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3Rk
OjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBX
VEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPik7
CisKKyAgICAvLyBGb3IgdGVzdGluZyBvbmx5LgorICAgIHZvaWQgc3luY2hyb25vdXNSZW1vdmVB
bGxDb250ZW50RXh0ZW5zaW9ucygpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNp
b25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAg
ICBXVEY6OlN0cmluZyBkZWZhdWx0U3RvcmVQYXRoKCk7CisKKyAgICBjb25zdCBXVEY6OlN0cmlu
ZyBtX3N0b3JlUGF0aDsKKyAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fY29tcGlsZVF1ZXVlOwor
ICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9yZWFkUXVldWU7CisgICAgUmVmPFdURjo6V29ya1F1
ZXVlPiBtX3JlbW92ZVF1ZXVlOworfTsKKworY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKTsKKworaW5saW5lIHN0ZDo6ZXJy
b3JfY29kZSBtYWtlX2Vycm9yX2NvZGUoVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3Ig
ZXJyb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8aW50PihlcnJvciksIHVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
QVBJCisKK25hbWVzcGFjZSBzdGQgeworICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2Nv
ZGVfZW51bTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0
cnVlX3R5cGUgeyB9OworfQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsMTIgKzM3LDEyIEBAIGNsYXNzIFdvcmtRdWV1ZTsKIAogbmFtZXNwYWNlIEFQSSB7CiAK
LWNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOworY2xhc3MgQ29udGVudEV4dGVuc2lvbjsKIAot
Y2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBs
PE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4geworY2xhc3MgQ29udGVu
dEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpD
b250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEVycm9yIHsK
LSAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKKyAgICAgICAgTG9va3VwRmFpbGVkID0gNiwgLy8g
TWlycm9ycyB2YWx1ZSBvZiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVk
CiAgICAgICAgIFZlcnNpb25NaXNtYXRjaCwKICAgICAgICAgQ29tcGlsZUZhaWxlZCwKICAgICAg
ICAgUmVtb3ZlRmFpbGVkCkBAIC01MiwxNSArNTIsMTUgQEAgcHVibGljOgogICAgIC8vIHRvIHBy
ZXZlbnQgY3Jhc2hpbmcgd2hpbGUgbG9hZGluZyBvbGQgZGF0YS4KICAgICBjb25zdCBzdGF0aWMg
dWludDMyX3QgQ3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDg7CiAKLSAgICBz
dGF0aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7Ci0gICAgc3Rh
dGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZVdpdGhQYXRoKGNvbnN0IFdU
Rjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IGRlZmF1bHRTdG9yZSgpOworICAgIHN0YXRpYyBSZWY8Q29udGVudEV4dGVuc2lvblN0b3JlPiBz
dG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwogCi0gICAgZXhwbGlj
aXQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOwotICAgIGV4cGxpY2l0IFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Ci0gICAgdmlydHVh
bCB+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworICAgIGV4cGxpY2l0IENvbnRlbnRFeHRl
bnNpb25TdG9yZSgpOworICAgIGV4cGxpY2l0IENvbnRlbnRFeHRlbnNpb25TdG9yZShjb25zdCBX
VEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKKyAgICB2aXJ0dWFsIH5Db250ZW50RXh0ZW5zaW9uU3Rv
cmUoKTsKIAotICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKLSAgICB2b2lk
IGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1
bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9y
X2NvZGUpPik7CisgICAgdm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0
cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0
cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCBs
b29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5j
dGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUp
Pik7CiAgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+KTsKIAogICAgIC8vIEZv
ciB0ZXN0aW5nIG9ubHkuCkBAIC03NiwxNyArNzYsMTcgQEAgcHJpdmF0ZToKICAgICBSZWY8V1RG
OjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7CiB9OwogCi1jb25zdCBzdGQ6OmVycm9yX2NhdGVn
b3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOworY29uc3Qgc3Rk
OjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOwog
Ci1pbmxpbmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvciBlcnJvcikKK2lubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJv
cl9jb2RlKENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3IgZXJyb3IpCiB7Ci0gICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8aW50PihlcnJvciksIHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
ckNhdGVnb3J5KCkgfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgY29u
dGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEFQSQogCiBuYW1lc3BhY2Ugc3RkIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lcnJvcl9j
b2RlX2VudW08QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4gOiBwdWJsaWMg
dHJ1ZV90eXBlIHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxBUEk6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVibGljIHRydWVfdHlwZSB7IH07CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lv
bi5jcHAJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29u
dGVudEV4dGVuc2lvbi5oIgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQotI2lu
Y2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgotCi1uYW1lc3BhY2UgQVBJIHsK
LQotVXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYg
Y29udGVudEV4dGVuc2lvbikKLSAgICA6IG1fbmFtZShuYW1lKQotICAgICwgbV9jb21waWxlZEV4
dGVuc2lvbihXVEZNb3ZlKGNvbnRlbnRFeHRlbnNpb24pKQotewotfQotCi1Vc2VyQ29udGVudEV4
dGVuc2lvbjo6flVzZXJDb250ZW50RXh0ZW5zaW9uKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
QVBJCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b24uaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElVc2VyQ29udGVudEV4dGVuc2lvbi5oCShub25leGlzdGVudCkKQEAgLTEsNjAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25faAotI2RlZmluZSBB
UElVc2VyQ29udGVudEV4dGVuc2lvbl9oCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1jbGFz
cyBVc2VyQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6
VHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHsKLXB1YmxpYzoKLSNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb24+IGNyZWF0
ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBVc2VyQ29udGVudEV4dGVuc2lvbihuYW1lLCBXVEZNb3ZlKGNvbnRlbnRFeHRl
bnNpb24pKSk7Ci0gICAgfQotCi0gICAgVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJik7
Ci0gICAgdmlydHVhbCB+VXNlckNvbnRlbnRFeHRlbnNpb24oKTsKLQotICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgV2ViS2l0
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVkRXh0ZW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIFdU
Rjo6U3RyaW5nIG1fbmFtZTsKLSAgICBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEFQSQotCi0jZW5kaWYgLy8gQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25faApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lv
biAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUuY3BwCShub25leGlzdGVudCkKQEAgLTEsNDM2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oIgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQotI2luY2x1
ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0
YS5oIgotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDo6TmV0d29ya0NhY2hlOwotCi1uYW1lc3BhY2UgQVBJIHsKLQotVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSYgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3Jl
KCkKLXsKLSAgICBzdGF0aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVmYXVsdFN0b3Jl
ID0gYWRvcHRSZWYobmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYoKTsKLSAg
ICByZXR1cm4gKmRlZmF1bHRTdG9yZTsKLX0KLQotUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU+IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpT
dHJpbmcmIHN0b3JlUGF0aCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlKHN0b3JlUGF0aCkpOwotfQotCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCkKLSAgICA6IFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgpKQotewotfQotCi1Vc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9y
ZVBhdGgpCi0gICAgOiBtX3N0b3JlUGF0aChzdG9yZVBhdGgpCi0gICAgLCBtX2NvbXBpbGVRdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1
ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKLSAgICAsIG1fcmVhZFF1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkK
LSAgICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgUmVtb3ZlIFF1ZXVlIikpCi17Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6On5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCkKLXsKLX0KLQotc3RhdGljIFN0cmluZyBj
b25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNl
LCAiQ29udGVudEV4dGVuc2lvbi0iICsgV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRp
ZmllcikpOwotfQotCi0vLyBUaGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBkZW5zZWx5IHBhY2tl
ZCBieXRlcyBpbiB0aGUgZmlsZSwgbm90IHNpemVvZiBhbmQgb2Zmc2V0b2YsIHdoaWNoIHdvdWxk
Ci0vLyByZXByZXNlbnQgdGhlIHNpemUgYW5kIG9mZnNldCBvZiB0aGUgc3RydWN0dXJlIGluIG1l
bW9yeSwgcG9zc2libHkgd2l0aCBjb21waWxlci1hZGRlZCBwYWRkaW5nLgotY29uc3Qgc2l6ZV90
IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSA9IDIgKiBzaXplb2YodWludDMyX3QpICsg
NCAqIHNpemVvZih1aW50NjRfdCk7Ci1jb25zdCBzaXplX3QgQ29uZGl0aW9uc0FwcGx5T25seVRv
RG9tYWluT2Zmc2V0ID0gc2l6ZW9mKHVpbnQzMl90KSArIDQgKiBzaXplb2YodWludDY0X3QpOwot
Ci1zdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIHsKLSAgICB1aW50MzJfdCB2ZXJzaW9u
IHsgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxl
VmVyc2lvbiB9OwotICAgIHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OwotICAgIHVpbnQ2NF90
IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRf
dCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdWludDY0X3Qg
Y29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVpbnQzMl90IGNvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgc2l6ZV90IGZpbGVT
aXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRmlsZUhl
YWRlclNpemUKLSAgICAgICAgICAgICsgYWN0aW9uc1NpemUKLSAgICAgICAgICAgICsgZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplCi0gICAgICAgICAgICArIGZpbHRlcnNXaXRo
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZQotICAgICAgICAgICAgKyBjb25kaXRpb25lZEZpbHRlcnNC
eXRlY29kZVNpemU7Ci0gICAgfQotfTsKLQotc3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCi17
Ci0gICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOwotCi0gICAgZW5jb2RlciA8
PCBtZXRhRGF0YS52ZXJzaW9uOwotICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYWN0aW9uc1NpemU7
Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29k
ZVNpemU7Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRl
Y29kZVNpemU7Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRl
Y29kZVNpemU7Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9E
b21haW47Ci0KLSAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0gQ29udGVudEV4dGVu
c2lvbkZpbGVIZWFkZXJTaXplKTsKLSAgICByZXR1cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YShDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBE
YXRhJiBmaWxlRGF0YSkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0
YS5hcHBseShbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3Qgc2l6ZSkgewotICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBt
YXBwZWQgaW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQotICAg
ICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0
YSBzaXplLgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNv
ZGVyKGRhdGEsIHNpemUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnZl
cnNpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZVNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5j
b25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0pOwot
ICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1zdGF0aWMgYm9vbCBvcGVuQW5kTWFwQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0
YURhdGEsIERhdGEmIGZpbGVEYXRhKQotewotICAgIGZpbGVEYXRhID0gbWFwRmlsZShXZWJDb3Jl
OjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKLSAgICBpZiAoZmlsZURh
dGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2RlQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCB3cml0ZURhdGFU
b0ZpbGUoY29uc3QgRGF0YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBm
ZCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwg
JnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIGlm
IChXZWJDb3JlOjp3cml0ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRhdGEsIHNpemUpID09IC0x
KSB7Ci0gICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSk7Ci0gICAgCi0gICAg
cmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0Zp
bGUoU3RyaW5nJiYganNvbiwgY29uc3QgU3RyaW5nJiBmaW5hbEZpbGVQYXRoLCBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQotewotICAgIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczsKLQotICAgIGNsYXNzIENvbXBp
bGF0aW9uQ2xpZW50IGZpbmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNs
aWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBDb21waWxhdGlvbkNsaWVudChXZWJDb3JlOjpQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBt
ZXRhRGF0YSkKLSAgICAgICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVIYW5kbGUpCi0gICAgICAg
ICAgICAsIG1fbWV0YURhdGEobWV0YURhdGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VCghbWV0YURhdGEuYWN0aW9uc1NpemUpOwotICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5m
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpOwotICAgICAgICAgICAgQVNTRVJU
KCFtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpOwotICAgICAgICAg
ICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpOwotICAg
ICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdyaXRlRmlsdGVyc1dpdGhvdXRDb25k
aXRpb25zQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29k
ZVdyaXR0ZW4pOwotICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29k
ZVdyaXR0ZW4pOwotICAgICAgICAgICAgbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29k
ZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOwotICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0
YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHdyaXRlRmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUoVmVjdG9y
PERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBB
U1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBt
X2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsK
LSAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5z
aXplKCkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCB3cml0ZVRvcFVSTEZp
bHRlcnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiArPSBi
eXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRh
dGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRl
QWN0aW9ucyhWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucywgYm9vbCBjb25k
aXRpb25zQXBwbHlPbmx5VG9Eb21haW4pIGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVCghbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4pOwotICAgICAg
ICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghbV9hY3Rpb25zV3JpdHRlbik7Ci0gICAgICAgICAgICBtX2FjdGlv
bnNXcml0dGVuICs9IGFjdGlvbnMuc2l6ZSgpOwotICAgICAgICAgICAgbV9jb25kaXRpb25zQXBw
bHlPbmx5VG9Eb21haW4gPSBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47Ci0gICAgICAgICAg
ICB3cml0ZVRvRmlsZShEYXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSkpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGZpbmFsaXplKCkgZmluYWwKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9tZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IG1fYWN0aW9uc1dyaXR0ZW47
Ci0gICAgICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSA9IG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuOwotICAgICAg
ICAgICAgbV9tZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBtX2Zp
bHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuOwotICAgICAgICAgICAgbV9tZXRhRGF0
YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgPSBtX2NvbmRpdGlvbkZpbHRlcnNCeXRl
Y29kZVdyaXR0ZW47Ci0gICAgICAgICAgICBtX21ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbiA9IG1fY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBEYXRhIGhlYWRlciA9IGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSht
X21ldGFEYXRhKTsKLSAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgV2ViQ29yZTo6c2Vl
a0ZpbGUobV9maWxlSGFuZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVTZWVrT3JpZ2luOjpTZWVrRnJv
bUJlZ2lubmluZykgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUo
bV9maWxlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShoZWFkZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBib29sIGhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkgeyByZXR1
cm4gbV9maWxlRXJyb3I7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgd3JpdGVUb0Zp
bGUoY29uc3QgRGF0YSYgZGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2ZpbGVF
cnJvciAmJiAhd3JpdGVEYXRhVG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkpIHsKLSAgICAgICAg
ICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKLSAgICAgICAgICAgICAg
ICBtX2ZpbGVFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7Ci0gICAg
ICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKLSAgICAgICAgc2l6ZV90
IG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsgMCB9OwotICAgICAg
ICBzaXplX3QgbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiB7IDAgfTsKLSAg
ICAgICAgc2l6ZV90IG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKLSAg
ICAgICAgc2l6ZV90IG1fYWN0aW9uc1dyaXR0ZW4geyAwIH07Ci0gICAgICAgIGJvb2wgbV9jb25k
aXRpb25zQXBwbHlPbmx5VG9Eb21haW4geyBmYWxzZSB9OwotICAgICAgICBib29sIG1fZmlsZUVy
cm9yIHsgZmFsc2UgfTsKLSAgICB9OwotCi0gICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0g
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKLSAgICBTdHJpbmcgdGVtcG9yYXJ5
RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIs
IHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdl
YkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLSAgICAKLSAgICBjaGFy
IGludmFsaWRIZWFkZXJbQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplXTsKLSAgICBtZW1z
ZXQoaW52YWxpZEhlYWRlciwgMHhGRiwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKLSAgICAvLyBU
aGlzIGhlYWRlciB3aWxsIGJlIHJld3JpdHRlbiBpbiBDb21waWxhdGlvbkNsaWVudDo6ZmluYWxp
emUuCi0gICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIGlu
dmFsaWRIZWFkZXIsIHNpemVvZihpbnZhbGlkSGVhZGVyKSkgPT0gLTEpIHsKLSAgICAgICAgV2Vi
Q29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4gVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0gICAgfQotCi0g
ICAgQ29tcGlsYXRpb25DbGllbnQgY29tcGlsYXRpb25DbGllbnQodGVtcG9yYXJ5RmlsZUhhbmRs
ZSwgbWV0YURhdGEpOwotICAgIAotICAgIGlmIChhdXRvIGNvbXBpbGVyRXJyb3IgPSBjb21waWxl
UnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQsIFdURk1vdmUoanNvbikpKSB7Ci0gICAgICAgIFdl
YkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIGNv
bXBpbGVyRXJyb3I7Ci0gICAgfQotICAgIGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldo
aWxlV3JpdGluZ1RvRmlsZSgpKSB7Ci0gICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3Jh
cnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OkVycm9yOjpDb21waWxlRmFpbGVkOwotICAgIH0KLSAgICAKLSAgICBtYXBwZWREYXRhID0gYWRv
cHRBbmRNYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZpbGVTaXplKCkp
OwotICAgIGlmIChtYXBwZWREYXRhLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0KLSAgICBpZiAoIVdlYkNv
cmU6Om1vdmVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKLSAgICAgICAg
cmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwot
Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkK
LXsKLSAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUo
Y29uc3RfY2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpLCBX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgIGF1dG8gY29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSgKLSAgICAgICAgV1RGTW92ZShzaGFyZWRNZW1vcnkpLAotICAgICAgICBmaWxl
RGF0YSwKLSAgICAgICAgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0LAotICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUsCi0gICAgICAgIG1ldGFEYXRhLmFjdGlv
bnNTaXplLAotICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKLSAgICAgICAg
ICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKLSAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVI
ZWFkZXJTaXplCi0gICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplCi0gICAgICAgICAg
ICArIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKLSAgICAg
ICAgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAgICAgICBD
b250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0
aW9uc1NpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGVTaXplCi0gICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9u
c0J5dGVjb2RlU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNv
ZGVTaXplCi0gICAgKTsKLSAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhKSk7Ci0gICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b246OmNyZWF0ZShpZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikp
OwotfQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRl
bnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRy
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0
b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBhdXRvIHBh
dGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKLSAgICAgICAgCi0g
ICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKLSAgICAgICAgRGF0YSBm
aWxlRGF0YTsKLSAgICAgICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihwYXRoLCBt
ZXRhRGF0YSwgZmlsZURhdGEpKSB7Ci0gICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6Okxvb2t1cEZhaWxlZCk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKG1ldGFEYXRhLnZlcnNpb24gIT0gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVu
dENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbikgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpWZXJzaW9uTWlzbWF0Y2gp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBm
aWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRl
bnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0p
OwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250
ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgbV9jb21waWxlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBqc29uID0ganNvbi5p
c29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
ewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlm
aWVyKTsKLQotICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7Ci0gICAg
ICAgIERhdGEgZmlsZURhdGE7Ci0gICAgICAgIGF1dG8gZXJyb3IgPSBjb21waWxlZFRvRmlsZShX
VEZNb3ZlKGpzb24pLCBwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpOwotICAgICAgICBpZiAoZXJy
b3IpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhp
cyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGVycm9yID0gV1RGTW92ZShlcnJvciksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBlcnJvcik7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50
aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEp
LCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRl
bnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0K
LQotdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3Jf
Y29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNo
KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVy
Lmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRp
Zmllcik7Ci0KLSAgICAgICAgaWYgKCFXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpKSB7Ci0gICAg
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoRXJyb3I6OlJlbW92
ZUZhaWxlZCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5
bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQotewotICAgIGZvciAoY29uc3Qg
YXV0byYgcGF0aCA6IFdlYkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgsICIqIikpCi0g
ICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCk7Ci19Ci0KLXZvaWQgVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdU
Rjo6U3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIGF1dG8gZmlsZSA9IFdlYkNvcmU6Om9wZW5G
aWxlKGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciksIFdlYkNvcmU6Ok9w
ZW5Gb3JXcml0ZSk7Ci0gICAgaWYgKGZpbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmls
ZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBp
bnZhbGlkSGVhZGVyOwotICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0Zp
bGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBz
aXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBi
eXRlc1dyaXR0ZW4gPT0gc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKLSAgICBXZWJDb3JlOjpjbG9z
ZUZpbGUoZmlsZSk7Ci19Ci0gICAgCi1jb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpCi17Ci0gICAgY2xhc3MgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjplcnJvcl9jYXRlZ29y
eSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2VwdCBmaW5hbAotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gInVzZXIgY29udGVudCBleHRlbnNpb24gc3RvcmUi
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2Rl
KSBjb25zdCBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgbG9va3Vw
LiI7Ci0gICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpW
ZXJzaW9uTWlzbWF0Y2g6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUg
ZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iOwotICAgICAgICAgICAgY2Fz
ZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7Ci0g
ICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVG
YWlsZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcg
cmVtb3ZlLiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmlu
ZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9y
Q2F0ZWdvcnk7Ci0gICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5jbHVkZSAiQVBJT2JqZWN0
LmgiCi0jaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFdvcmtRdWV1ZTsKLX0KLQotbmFtZXNwYWNl
IEFQSSB7Ci0KLWNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOwotCi1jbGFzcyBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBFcnJv
ciB7Ci0gICAgICAgIExvb2t1cEZhaWxlZCA9IDEsCi0gICAgICAgIFZlcnNpb25NaXNtYXRjaCwK
LSAgICAgICAgQ29tcGlsZUZhaWxlZCwKLSAgICAgICAgUmVtb3ZlRmFpbGVkCi0gICAgfTsKLSAg
ICAKLSAgICAvLyBUaGlzIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rp
b25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCi0g
ICAgLy8gdG8gcHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgotICAgIGNv
bnN0IHN0YXRpYyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0g
ODsKLQotICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUo
KTsKLSAgICBzdGF0aWMgUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBh
dGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Ci0KLSAgICBleHBsaWNpdCBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlKCk7Ci0gICAgZXhwbGljaXQgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLSAgICB2aXJ0dWFsIH5Vc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0
aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2Nv
ZGUpPik7Ci0gICAgdm9pZCBsb29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5n
JiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOwotICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4dGVuc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChzdGQ6OmVycm9y
X2NvZGUpPik7Ci0KLSAgICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICAgIHZvaWQgc3luY2hyb25v
dXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRl
bnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKTsKLQotcHJp
dmF0ZToKLSAgICBXVEY6OlN0cmluZyBkZWZhdWx0U3RvcmVQYXRoKCk7Ci0KLSAgICBjb25zdCBX
VEY6OlN0cmluZyBtX3N0b3JlUGF0aDsKLSAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fY29tcGls
ZVF1ZXVlOwotICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9yZWFkUXVldWU7Ci0gICAgUmVmPFdU
Rjo6V29ya1F1ZXVlPiBtX3JlbW92ZVF1ZXVlOwotfTsKLQotY29uc3Qgc3RkOjplcnJvcl9jYXRl
Z29yeSYgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKTsKLQotaW5saW5l
IHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vycm9yX2NvZGUoVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3IgZXJyb3IpCi17Ci0gICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8aW50PihlcnJvciks
IHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkgfTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgQVBJCi0KLW5hbWVzcGFjZSBzdGQgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IGlz
X2Vycm9yX2NvZGVfZW51bTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6
IHB1YmxpYyB0cnVlX3R5cGUgeyB9OwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0
LmgJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S0FQSUNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvU2V0dGluZ3MuaD4KIAogbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBDb250ZW50RXh0ZW5z
aW9uOworY2xhc3MgQ29udGVudEV4dGVuc2lvblN0b3JlOwogY2xhc3MgRXhwZXJpbWVudGFsRmVh
dHVyZTsKIGNsYXNzIEZyYW1lSGFuZGxlOwogY2xhc3MgRnJhbWVJbmZvOwpAQCAtNjMsOCArNjUs
NiBAQCBjbGFzcyBPcGVuUGFuZWxQYXJhbWV0ZXJzOwogY2xhc3MgUGFnZUNvbmZpZ3VyYXRpb247
CiBjbGFzcyBQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb247CiBjbGFzcyBTZXNzaW9uU3RhdGU7Ci1j
bGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbjsKLWNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU7CiBjbGFzcyBVc2VyU2NyaXB0OwogY2xhc3MgV2Vic2l0ZURhdGFTdG9yZTsKIGNsYXNzIFdl
YnNpdGVQb2xpY2llczsKQEAgLTE2MSw4ICsxNjEsOCBAQCBXS19BRERfQVBJX01BUFBJTkcoV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0CiBXS19BRERfQVBJX01BUFBJTkcoV0tTZXNzaW9uU3RhdGVSZWYs
IEFQSTo6U2Vzc2lvblN0YXRlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVGV4dENoZWNrZXJSZWYs
IFdlYlRleHRDaGVja2VyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRDb250cm9s
bGVyUmVmLCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSkKLVdLX0FERF9BUElfTUFQUElO
RyhXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYsIEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSkKLVdLX0FERF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uKQorV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVJlZiwgQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmUpCitXS19BRERfQVBJ
X01BUFBJTkcoV0tVc2VyQ29udGVudEZpbHRlclJlZiwgQVBJOjpDb250ZW50RXh0ZW5zaW9uKQog
V0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUmVmLCBVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2tQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS1VzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0UmVmLCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5KQogV0tf
QUREX0FQSV9NQVBQSU5HKFdLVXNlclNjcmlwdFJlZiwgQVBJOjpVc2VyU2NyaXB0KQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCShyZXZp
c2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV0tQYWdlR3JvdXAuaCIKIAotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUg
IkFQSVVzZXJDb250ZW50V29ybGQuaCIKICNpbmNsdWRlICJBUElVc2VyU2NyaXB0LmgiCiAjaW5j
bHVkZSAiQVBJVXNlclN0eWxlU2hlZXQuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNw
cAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
VXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLVXNlckNvbnRlbnRDb250cm9s
bGVyUmVmLmgiCiAKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1
ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJBUElVc2VyU2NyaXB0LmgiCiAj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkuaCIKQEAgLTYyLDEzICs2MiwxMyBAQCB2b2lkIFdLVXNlckNvbnRlbnRDb250cm9sbGVy
UmVtb3ZlQWxsVXNlCiB2b2lkIFdLVXNlckNvbnRlbnRDb250cm9sbGVyQWRkVXNlckNvbnRlbnRG
aWx0ZXIoV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYgdXNlckNvbnRlbnRDb250cm9sbGVyUmVm
LCBXS1VzZXJDb250ZW50RmlsdGVyUmVmIHVzZXJDb250ZW50RmlsdGVyUmVmKQogewogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHVzZXJDb250ZW50Q29udHJvbGxl
clJlZiktPmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKCp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJS
ZWYpKTsKKyAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+YWRkQ29udGVudEV4
dGVuc2lvbigqdG9JbXBsKHVzZXJDb250ZW50RmlsdGVyUmVmKSk7CiAjZW5kaWYKIH0KIAogdm9p
ZCBXS1VzZXJDb250ZW50Q29udHJvbGxlclJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyhXS1Vz
ZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJSZWYpCiB7CiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9s
bGVyUmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdG9JbXBsKHVz
ZXJDb250ZW50Q29udHJvbGxlclJlZiktPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CiAj
ZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCShyZXZpc2lv
biAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVJlZi5oIgogCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2lu
Y2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogV0tUeXBlSUQgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlw
ZUlEKCkKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHJldHVybiB0b0FQ
SShBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkFQSVR5cGUpOworICAgIHJldHVybiB0
b0FQSShBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6QVBJVHlwZSk7CiAjZWxzZQogICAgIHJl
dHVybiAwOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVDb2NvYS5tbQkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2luY2x1ZGUgIkFQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIApA
QCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIAotU3RyaW5nIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZVBhdGgoKQorU3RyaW5nIENvbnRlbnRFeHRlbnNp
b25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCgpCiB7CiAgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlVG9rZW47CiAgICAgc3RhdGljIE5TVVJMICpjb250ZW50RXh0ZW5zaW9uU3RvcmVVUkw7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxMzY3MCkJKGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5oOjIxMzY3MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdl
YktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK1dLX0NMQVNTX0FW
QUlMQUJMRShtYWNvc3goMTAuMTEpLCBpb3MoOS4wKSkKK0BpbnRlcmZhY2UgX1dLVXNlckNvbnRl
bnRGaWx0ZXIgOiBOU09iamVjdAorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw4ICsy
Nyw4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCi1XS19DTEFTU19BVkFJTEFCTEUobWFjb3N4
KDEwLjExKSwgaW9zKDkuMCkpCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RmlsdGVyIDogTlNP
YmplY3QKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSkKK0BpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uIDogTlNPYmplY3QKIAogQGVuZAog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvbi5tbQkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tOjIxMzY3MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CisjaW5jbHVkZSA8c3RyaW5n
PgorCitAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uLT5+VXNlckNvbnRlbnRFeHRlbnNpb24o
KTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHBy
b3RvY29sIGltcGxlbWVudGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7Cisg
ICAgcmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb247Cit9CisKK0BlbmQKKworI2VuZGlmIC8v
IFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5tbQkocmV2aXNpb24gMjEzNjcwKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI0LDIwICsyNCwxNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tDb250
ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbmNsdWRl
ICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRl
bnRFeHRlbnNpb25Db21waWxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lv
bkVycm9yLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgogCi1AaW1wbGVtZW50YXRpb24gX1dLVXNlckNv
bnRlbnRGaWx0ZXIKK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb24KIAogLSAodm9p
ZClkZWFsbG9jCiB7Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uLT5+VXNlckNvbnRlbnRFeHRl
bnNpb24oKTsKKyAgICBfY29udGVudEV4dGVuc2lvbi0+fkNvbnRlbnRFeHRlbnNpb24oKTsKIAog
ICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTQ2LDcgKzQzLDcgQEAgLSAodm9pZClkZWFsbG9j
CiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuICpfdXNlckNvbnRl
bnRFeHRlbnNpb247CisgICAgcmV0dXJuICpfY29udGVudEV4dGVuc2lvbjsKIH0KIAogQGVuZApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNp
b25JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaAkocmV2aXNpb24gMjEzNjcwKQkoZnJv
bSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVy
SW50ZXJuYWwuaDoyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVyLmgiCisKKyNp
ZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgor
I2ltcG9ydCAiV0tPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2lubGluZSBfV0tV
c2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2Vy
Q29udGVudEV4dGVuc2lvbikKK3sKKyAgICBBU1NFUlQoW3VzZXJDb250ZW50RXh0ZW5zaW9uLndy
YXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEZpbHRlciBjbGFzc11dKTsKKyAg
ICByZXR1cm4gKF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRFeHRlbnNpb24ud3Jh
cHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdL
T2JqZWN0PiB7CitAcGFja2FnZQorICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250
ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRlbnNpb247Cit9CitAZW5kCisKKyNlbmRpZiAv
LyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaAkocmV2
aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywyNiArMjMsMjYgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJfV0tVc2VyQ29u
dGVudEZpbHRlci5oIgorI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uLmgiCiAKICNpZiBXS19B
UElfRU5BQkxFRAogCi0jaW1wb3J0ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2ltcG9y
dCAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWlubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKK2lubGluZSBXS0Nv
bnRlbnRFeHRlbnNpb24gKndyYXBwZXIoQVBJOjpDb250ZW50RXh0ZW5zaW9uJiBjb250ZW50RXh0
ZW5zaW9uKQogewotICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpIGlz
S2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwotICAgIHJldHVybiAo
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVyKCk7Cisg
ICAgQVNTRVJUKFtjb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0Nv
bnRlbnRFeHRlbnNpb24gY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRlbnRFeHRlbnNpb24g
Kiljb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKTsKIH0KIAogfQogCi1AaW50ZXJmYWNlIF9XS1Vz
ZXJDb250ZW50RmlsdGVyICgpIDxXS09iamVjdD4geworQGludGVyZmFjZSBXS0NvbnRlbnRFeHRl
bnNpb24gKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRlbnNpb247CisgICAgQVBJ
OjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNpb247
CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDIxMzY3
MCkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLmg6MjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisK
KyNpZiBXS19BUElfRU5BQkxFRAorCitAY2xhc3MgX1dLVXNlckNvbnRlbnRGaWx0ZXI7CisKK1dL
X0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTEpLCBpb3MoOS4wKSkKK0BpbnRlcmZhY2UgX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSA6IE5TT2JqZWN0CisKKysgKGluc3RhbmNldHlwZSlk
ZWZhdWx0U3RvcmU7CisrIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVybDsK
KworLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgTlNfUkVM
RUFTRVNfQVJHVU1FTlQgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXI7CistICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250
ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKXJlbW92
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CisK
K0BlbmQKKworV0tfRVhURVJOIE5TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25zRG9tYWluIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKKwor
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yQ29kZSkgeworICAgIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZh
aWxlZCA9IDEsCisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVyc2lvbk1p
c21hdGNoLAorICAgIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWls
ZWQsCisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkLAor
fSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMiksIGlvcygxMC4wKSk7CisKKyNlbmRpZiAv
LyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24g
MjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRF
eHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyNyArMjcsMTggQEAKIAogI2lmIFdLX0FQSV9F
TkFCTEVECiAKLUBjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKK0BjbGFzcyBXS0NvbnRlbnRF
eHRlbnNpb247CiAKLVdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTEpLCBpb3MoOS4wKSkK
LUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSA6IE5TT2JqZWN0CitXS19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKIAogKyAoaW5zdGFuY2V0
eXBlKWRlZmF1bHRTdG9yZTsKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICop
dXJsOwogCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBO
U19SRUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0
aW9uSGFuZGxlcjsKLS0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXI7CiAtICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXI7CiAKIEBlbmQKIAotV0tfRVhURVJOIE5TU3RyaW5nICogY29uc3Qg
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEw
LjEyKSwgaW9zKDEwLjApKTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29kZSkgewotICAgIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCA9IDEsCi0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUVycm9yVmVyc2lvbk1pc21hdGNoLAotICAgIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVFcnJvckNvbXBpbGVGYWlsZWQsCi0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yUmVtb3ZlRmFpbGVkLAotfSBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMiksIGlv
cygxMC4wKSk7Ci0KICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTM2NzApCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToyMTM2NzApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50
ZXJuYWwuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIldLRXJyb3JJbnRlcm5h
bC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCA8
c3RyaW5nPgorCitOU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFp
biA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIjsKKworQGltcGxlbWVudGF0aW9u
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
X3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7
CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKysgKGluc3RhbmNldHlwZSlkZWZhdWx0U3Rv
cmUKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworfQorCisrIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRo
VVJMOihOU1VSTCAqKXVybAoreworICAgIFJlZjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU+IHN0b3JlID0gQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRo
KHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiBX
ZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVha1JlZigpKTsKK30KKworLSAodm9pZCljb21waWxlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldKTsKKworICAgIFN0cmluZyBqc29uKGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uKTsKKyAgICBbZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gcmVsZWFzZV07CisgICAgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7CisKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgV1RGTW92ZShqc29uKSwg
W2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5z
aW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAg
ICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBh
dXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3Nh
Z2UoKS5jX3N0cigpXX07CisKKyAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2
ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCisgICAgICAgICAgICAvLyBX
ZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkgcGFz
cyBvbiBDb21waWxlRmFpbGVkLgorICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9y
IGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkIHVzZXJJbmZvOnVzZXJJ
bmZvXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJh
d0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSlo
YW5kbGVyLmdldCgpOworICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVu
dEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpbG9va3VwQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRp
b25IYW5kbGVyIGNvcHldKTsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5sb29r
dXBDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9y
KSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQo
KTsKKworICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6ICVz
IiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCldfTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvci52
YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCB8
fCBlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclZlcnNp
b25NaXNtYXRjaCk7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JX
aXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOmVycm9yLnZhbHVl
KCkgdXNlckluZm86dXNlckluZm9dKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0
Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKwor
LSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRs
ZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPnJlbW92ZUNvbnRl
bnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikg
eworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2
b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisKKyAgICAgICAgICAgIGF1dG8gdXNl
ckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIo
KV19OworICAgICAgICAgICAgQVNTRVJUKGVycm9yLnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIo
W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBj
b2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCB1c2VySW5m
bzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAg
ICAgICAgcmF3SGFuZGxlcihuaWwpOworICAgIH0pOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmpl
Y3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QK
K3sKKyAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworfQorCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUp
CisKKy8vIEZvciB0ZXN0aW5nIG9ubHkuCisKKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRl
bnNpb25zCit7CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3VzUmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKK30KKworLSAodm9pZClfaW52YWxpZGF0ZUNvbnRl
bnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7
CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVDb250ZW50RXh0ZW5z
aW9uVmVyc2lvbihpZGVudGlmaWVyKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VO
QUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjEzNjcwKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjQsNzYgKzI0LDgwIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIldLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZUludGVybmFsLmgiCiAKICNpZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0
ICJXS0Vycm9ySW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJu
YWwuaCIKLSNpbXBvcnQgPHN0cmluZz4KIAotTlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvbnNEb21haW4gPSBAIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiI7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCitAaW1wbGVtZW50
YXRpb24gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAg
X3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7
CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+fkNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOwog
CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiArIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3Jl
CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6
Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CiB9CiAKICsgKGluc3RhbmNl
dHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsCiB7Ci0gICAgUmVmPEFQSTo6VXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZT4gc3RvcmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OnN0b3JlV2l0aFBhdGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7
CisgICAgUmVmPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6Q29udGVu
dEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVt
UmVwcmVzZW50YXRpb24pOwogICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVha1Jl
ZigpKTsKIH0KIAotLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcg
KillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9p
ZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4
dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICos
IE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbc2VsZiBfY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNp
b246ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhh
bmRsZXIgcmVsZWFzZXNBcmd1bWVudDpOT107Cit9CisKKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50OihCT09MKXJlbGVhc2VzQXJndW1lbnQKIHsK
ICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CiAK
ICAgICBTdHJpbmcganNvbihlbmNvZGVkQ29udGVudEV4dGVuc2lvbik7Ci0gICAgW2VuY29kZWRD
b250ZW50RXh0ZW5zaW9uIHJlbGVhc2VdOwotICAgIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uID0g
bmlsOworICAgIGlmIChyZWxlYXNlc0FyZ3VtZW50KSB7CisgICAgICAgIFtlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiByZWxlYXNlXTsKKyAgICAgICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBu
aWw7CisgICAgfQogCi0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmNvbXBpbGVDb250
ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFdURk1vdmUoanNvbiksIFtoYW5kbGVyXShSZWZQdHI8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9j
b2RlIGVycm9yKSB7CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRF
eHRlbnNpb24oaWRlbnRpZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6
OkNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJv
cikgewogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9
ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0
KCk7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoV0tDb250ZW50RXh0
ZW5zaW9uICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJv
ci5tZXNzYWdlKCkuY19zdHIoKV19OwogCi0gICAgICAgICAgICAvLyBlcnJvci52YWx1ZSgpIGNv
dWxkIGhhdmUgYSBzcGVjaWZpYyBjb21waWxlciBlcnJvciB0aGF0IGlzIG5vdCBlcXVhbCB0byBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkLgotICAgICAgICAg
ICAgLy8gV2Ugd2FudCB0byB1c2UgZXJyb3IubWVzc2FnZSwgYnV0IGhlcmUgd2Ugd2FudCB0byBv
bmx5IHBhc3Mgb24gQ29tcGlsZUZhaWxlZC4KLSAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBb
TlNFcnJvciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNv
ZGU6X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCB1c2VySW5m
bzp1c2VySW5mb10pOworICAgICAgICAgICAgLy8gZXJyb3IudmFsdWUoKSBjb3VsZCBoYXZlIGEg
c3BlY2lmaWMgY29tcGlsZXIgZXJyb3IgdGhhdCBpcyBub3QgZXF1YWwgdG8gV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQuCisgICAgICAgICAgICAvLyBXZSB3YW50IHRv
IHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkgcGFzcyBvbiBDb21w
aWxlRmFpbGVkIHdpdGggdXNlckluZm8gZnJvbSB0aGUgc3RkOjplcnJvcl9jb2RlLgorICAgICAg
ICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9t
YWluIGNvZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgdXNlcklu
Zm86dXNlckluZm9dKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vy
cm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkIChe
KShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogICAgICAg
ICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5p
bCk7CiAgICAgfSk7CiB9CiAKLS0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAo
dm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVu
dGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0
TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKIAotICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5sb29rdXBDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQ
dHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJv
cl9jb2RlIGVycm9yKSB7CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVu
dEV4dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6Q29udGVudEV4dGVu
c2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAg
IGlmIChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9X
S1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAg
ICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNF
cnJvciAqKSloYW5kbGVyLmdldCgpOwogCiAgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtO
U0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNp
b24gbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAg
ICAgICAgQVNTRVJUKGVycm9yLnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yTG9va3VwRmFpbGVkIHx8IGVycm9yLnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yVmVyc2lvbk1pc21hdGNoKTsKLSAgICAgICAgICAgIHJhd0hhbmRsZXIo
bmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9t
YWluIGNvZGU6ZXJyb3IudmFsdWUoKSB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAg
QVNTRVJUKGVycm9yLnZhbHVlKCkgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1
cEZhaWxlZCB8fCBlcnJvci52YWx1ZSgpID09IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVW
ZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6ZXJyb3IudmFsdWUoKSB1c2VySW5mbzp1
c2VySW5mb10pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0
byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3Ig
KikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdL
Q29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIHJh
d0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsK
ICAgICB9KTsKIH0KQEAgLTEwMiwxMyArMTA2LDEzIEBAIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWYKIHsKICAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0
aW9uSGFuZGxlciBjb3B5XSk7CiAKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVt
b3ZlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2Rl
IGVycm9yKSB7CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVtb3ZlQ29udGVudEV4dGVu
c2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAg
ICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4p
KE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKIAogICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9
IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0
ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0g
ICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JSZW1vdmVGYWlsZWQpOwotICAgICAgICAgICAgcmF3SGFuZGxlcihbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6X1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkIHVzZXJJbmZvOnVzZXJJ
bmZvXSk7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBXS0Vycm9yQ29udGVu
dEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIoW05T
RXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkIHVzZXJJbmZvOnVzZXJJbmZvXSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTIxLDIzICsxMjUsMzAgQEAgLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZgogCiAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVj
dAogewotICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7CisgICAgcmV0dXJu
ICpfY29udGVudEV4dGVuc2lvblN0b3JlOwogfQogCiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCitAaW1wbGVtZW50YXRpb24g
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKIAogLy8gRm9yIHRlc3Rpbmcgb25s
eS4KIAogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMKIHsKLSAgICBfdXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
cygpOworICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29u
dGVudEV4dGVuc2lvbnMoKTsKIH0KIAogLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNp
b25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lv
bihpZGVudGlmaWVyKTsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5pbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb24oaWRlbnRpZmllcik7Cit9CisKKy8vIE5TX1JFTEVBU0VTX0FS
R1VNRU5UIHRvIGtlZXAgcGVhayBtZW1vcnkgdXNhZ2UgbG93LgorCistICh2b2lkKV9jb21waWxl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3Ig
KikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBbc2VsZiBfY29tcGlsZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246ZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXIgcmVs
ZWFzZXNBcmd1bWVudDpZRVNdOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvblN0b3JlSW50ZXJuYWwuaAkocmV2aXNpb24gMjEzNjcwKQkoZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5h
bC5oOjIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJp
dmF0ZS5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiV0tPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2lubGluZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICp3cmFwcGVyKEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgc3RvcmUpCit7CisgICAgQVNTRVJUKFtzdG9yZS53
cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFz
c11dKTsKKyAgICByZXR1cm4gKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53
cmFwcGVyKCk7Cit9CisKK30KKworQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlICgpIDxXS09iamVjdD4geworQHBhY2thZ2UKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsK
K30KK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTIzLDI2ICsyMywyNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2
YXRlLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCIKIAogI2lm
IFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aCIKKyNpbXBvcnQgIkFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgogI2ltcG9ydCAiV0tPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWlubGluZSBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgc3RvcmUp
CitpbmxpbmUgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpDb250ZW50RXh0
ZW5zaW9uU3RvcmUmIHN0b3JlKQogewotICAgIEFTU0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2lu
ZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY2xhc3NdXSk7Ci0gICAgcmV0
dXJuIChfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICopc3RvcmUud3JhcHBlcigpOworICAg
IEFTU0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVudEV4dGVuc2lv
blN0b3JlIGNsYXNzXV0pOworICAgIHJldHVybiAoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilz
dG9yZS53cmFwcGVyKCk7CiB9CiAKIH0KIAotQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlICgpIDxXS09iamVjdD4geworQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZSAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7
CisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiBfY29u
dGVudEV4dGVuc2lvblN0b3JlOwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDIxMzY3MCkJKGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5o
OjIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKy0gKHZvaWQp
X3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOworLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRF
eHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOworCitA
ZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5o
CShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNiArMjMsMTkg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0IDxX
ZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
Q29udGVudEV4dGVuc2lvblN0b3JlLmg+CiAKICNpZiBXS19BUElfRU5BQkxFRAogCi1AaW50ZXJm
YWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKK0BpbnRlcmZhY2Ug
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKIAogLy8gRm9yIHRlc3Rpbmcgb25s
eS4KIC0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOwogLSAodm9pZClfaW52YWxp
ZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVu
dGlmaWVyOwogCisvLyBOU19SRUxFQVNFU19BUkdVTUVOVCB0byBrZWVwIHBlYWsgbWVtb3J5IHVz
YWdlIGxvdy4KKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAq
KSBOU19SRUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXI7CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDExICszNiwxNSBAQCBXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBXS0Vycm9yRG9tYWlu
CiAKIC8qISBAZW51bSBXS0Vycm9yQ29kZQogIEBhYnN0cmFjdCBDb25zdGFudHMgdXNlZCBieSBO
U0Vycm9yIHRvIGluZGljYXRlIGVycm9ycyBpbiB0aGUgV2ViS2l0IGRvbWFpbi4KLSBAY29uc3Rh
bnQgV0tFcnJvclVua25vd24gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhh
dCBhbiB1bmtub3duIGVycm9yIG9jY3VycmVkLgotIEBjb25zdGFudCBXS0Vycm9yV2ViQ29udGVu
dFByb2Nlc3NUZXJtaW5hdGVkICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBXZWIgQ29udGVudCBw
cm9jZXNzIHdhcyB0ZXJtaW5hdGVkLgotIEBjb25zdGFudCBXS0Vycm9yV2ViVmlld0ludmFsaWRh
dGVkICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBXS1dlYlZpZXcgd2FzIGludmFs
aWRhdGVkLgotIEBjb25zdGFudCBXS0Vycm9ySmF2YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkICAg
ICAgIEluZGljYXRlcyB0aGF0IGEgSmF2YVNjcmlwdCBleGNlcHRpb24gb2NjdXJyZWQuCi0gQGNv
bnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgSW5kaWNhdGVz
IHRoYXQgdGhlIHJlc3VsdCBvZiBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0
dXJuZWQuCisgQGNvbnN0YW50IFdLRXJyb3JVbmtub3duICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW5kaWNhdGVzIHRoYXQgYW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4KKyBAY29uc3Rh
bnQgV0tFcnJvcldlYkNvbnRlbnRQcm9jZXNzVGVybWluYXRlZCAgICAgICAgICBJbmRpY2F0ZXMg
dGhhdCB0aGUgV2ViIENvbnRlbnQgcHJvY2VzcyB3YXMgdGVybWluYXRlZC4KKyBAY29uc3RhbnQg
V0tFcnJvcldlYlZpZXdJbnZhbGlkYXRlZCAgICAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhh
dCB0aGUgV0tXZWJWaWV3IHdhcyBpbnZhbGlkYXRlZC4KKyBAY29uc3RhbnQgV0tFcnJvckphdmFT
Y3JpcHRFeGNlcHRpb25PY2N1cnJlZCAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCBhIEphdmFTY3Jp
cHQgZXhjZXB0aW9uIG9jY3VycmVkLgorIEBjb25zdGFudCBXS0Vycm9ySmF2YVNjcmlwdFJlc3Vs
dFR5cGVJc1Vuc3VwcG9ydGVkICAgIEluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgb2YgSmF2YVNj
cmlwdCBleGVjdXRpb24gY291bGQgbm90IGJlIHJldHVybmVkLgorIEBjb25zdGFudCBXS0Vycm9y
Q29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkICAgIEluZGljYXRlcyB0aGF0IGxvb2tp
bmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KKyBAY29uc3RhbnQgV0tFcnJv
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCBJbmRpY2F0ZXMgdGhhdCBsb29r
aW5nIHVwIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmb3VuZCBhbiBleHRlbnNpb24gd2l0aCBh
biBpbmNvbXBhdGlibGUgYmluYXJ5IHZlcnNpb24uCisgQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkICAgSW5kaWNhdGVzIHRoYXQgY29tcGlsaW5nIGEg
V0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQuCisgQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgICAgSW5kaWNhdGVzIHRoYXQgcmVtb3ZpbmcgYSBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KICAqLwogdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgV0tFcnJvckNvZGUpIHsKICAgICBXS0Vycm9yVW5rbm93biA9IDEsCkBAIC00OCw2ICs1
MiwxMCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBXS0Vycm9yQ29kZSkgCiAgICAgV0tF
cnJvcldlYlZpZXdJbnZhbGlkYXRlZCwKICAgICBXS0Vycm9ySmF2YVNjcmlwdEV4Y2VwdGlvbk9j
Y3VycmVkLAogICAgIFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTEpLCBpb3MoOS4wKSksCisgICAgV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKKyAgICBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0
b3JlVmVyc2lvbk1pc21hdGNoIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxl
RmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSksCiB9IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkpOwogCiBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJy
b3IubW0JKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tFcnJvci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTggQEAgTlNTdHJp
bmcgKmxvY2FsaXplZERlc2NyaXB0aW9uRm9yRXJyb3JDbwogCiAgICAgY2FzZSBXS0Vycm9ySmF2
YVNjcmlwdFJlc3VsdFR5cGVJc1Vuc3VwcG9ydGVkOgogICAgICAgICByZXR1cm4gV0VCX1VJX1NU
UklORygiSmF2YVNjcmlwdCBleGVjdXRpb24gcmV0dXJuZWQgYSByZXN1bHQgb2YgYW4gdW5zdXBw
b3J0ZWQgdHlwZSIsICJXS0Vycm9ySmF2YVNjcmlwdFJlc3VsdFR5cGVJc1Vuc3VwcG9ydGVkIGRl
c2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29r
dXBGYWlsZWQ6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJMb29raW5nIHVwIGEgV0tV
c2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiIpOworCisgICAgY2FzZSBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklO
RygiTG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZm91bmQgYSBiaW5hcnkgdGhh
dCBpcyBpbmNvbXBhdGlibGUiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25N
aXNtYXRjaCBkZXNjcmlwdGlvbiIpOworCisgICAgY2FzZSBXS0Vycm9yQ29udGVudEV4dGVuc2lv
blN0b3JlQ29tcGlsZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkNvbXBp
bGluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiwgIldLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQ6CisgICAgICAgIHJldHVybiBXRUJf
VUlfU1RSSU5HKCJSZW1vdmluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiwgIldL
RXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgZGVzY3JpcHRpb24iKTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMzY3MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiBOU19BU1NVTUVfTk9O
TlVMTF9CRUdJTgogCitAY2xhc3MgV0tDb250ZW50RXh0ZW5zaW9uOwogQGNsYXNzIFdLVXNlclNj
cmlwdDsKIEBwcm90b2NvbCBXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyOwogCkBAIC03MCw2ICs3MSwy
MCBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguCiAgKi8KIC0gKHZv
aWQpcmVtb3ZlU2NyaXB0TWVzc2FnZUhhbmRsZXJGb3JOYW1lOihOU1N0cmluZyAqKW5hbWU7CiAK
Ky8qISBAYWJzdHJhY3QgQWRkcyBhIHVzZXIgY29udGVudCBleHRlbnNpb24uCisgQHBhcmFtIG5h
bWUgVGhlIG5hbWUgb2YgdGhlIHVzZXIgY29udGVudCBleHRlbnNpb24gdG8gYWRkLgorICovCist
ICh2b2lkKWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiAqKWNvbnRlbnRF
eHRlbnNpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfSU9TX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKKy8qISBAYWJzdHJhY3QgUmVtb3ZlcyBhIHVzZXIgY29udGVudCBleHRlbnNpb24u
CisgQHBhcmFtIG5hbWUgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIgY29udGVudCBleHRlbnNp
b24gdG8gcmVtb3ZlLgorICovCistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb246KE5TU3Ry
aW5nICopaWRlbnRpZmllciBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19JT1NfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKKworLyohIEBhYnN0cmFjdCBSZW1vdmVzIGFsbCBhc3NvY2lhdGVkIHVz
ZXIgY29udGVudCBleHRlbnNpb25zLgorICovCistICh2b2lkKXJlbW92ZUFsbENvbnRlbnRFeHRl
bnNpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX0lPU19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRD
b250cm9sbGVyLm1tCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkFQSVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
I2ltcG9ydCAiQVBJVXNlckNvbnRlbnRXb3JsZC5oIgorI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5z
aW9uSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLRnJhbWVJbmZvSW50ZXJuYWwuaCIKICNpbXBvcnQg
IldLTlNBcnJheS5oIgogI2ltcG9ydCAiV0tTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgpAQCAtOTEs
NiArOTIsMjcgQEAgLSAodm9pZClyZW1vdmVBbGxVc2VyU2NyaXB0cwogICAgIF91c2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQWxsVXNlclNjcmlwdHMoKTsKIH0KIAorLSAodm9pZClh
ZGRDb250ZW50RXh0ZW5zaW9uOihXS0NvbnRlbnRFeHRlbnNpb24gKiljb250ZW50RXh0ZW5zaW9u
Cit7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHktPmFkZENvbnRlbnRFeHRlbnNpb24oKmNvbnRlbnRFeHRlbnNpb24tPl9jb250
ZW50RXh0ZW5zaW9uKTsKKyNlbmRpZgorfQorCistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNp
b246KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGlkZW50aWZpZXIpOworI2VuZGlmCit9CisKKy0gKHZvaWQpcmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMKK3sKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIF91c2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKKyNlbmRp
ZgorfQorCiBjbGFzcyBTY3JpcHRNZXNzYWdlSGFuZGxlckRlbGVnYXRlIGZpbmFsIDogcHVibGlj
IFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAg
U2NyaXB0TWVzc2FnZUhhbmRsZXJEZWxlZ2F0ZShXS1VzZXJDb250ZW50Q29udHJvbGxlciAqY29u
dHJvbGxlciwgaWQgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIsIE5TU3RyaW5nICpu
YW1lKQpAQCAtMTUzLDIxICsxNzUsMjEgQEAgLSAodm9pZClfcmVtb3ZlQWxsVXNlclNjcmlwdHNB
c3NvY2lhdGVkVwogLSAodm9pZClfYWRkVXNlckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50
RmlsdGVyICopdXNlckNvbnRlbnRGaWx0ZXIKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkVXNlckNvbnRlbnRFeHRl
bnNpb24oKnVzZXJDb250ZW50RmlsdGVyLT5fdXNlckNvbnRlbnRFeHRlbnNpb24pOworICAgIF91
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkQ29udGVudEV4dGVuc2lvbigqdXNlckNvbnRl
bnRGaWx0ZXItPl9jb250ZW50RXh0ZW5zaW9uLT5fY29udGVudEV4dGVuc2lvbik7CiAjZW5kaWYK
IH0KIAogLSAodm9pZClfcmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXI6KE5TU3RyaW5nICopdXNlckNv
bnRlbnRGaWx0ZXJOYW1lCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBf
dXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHVz
ZXJDb250ZW50RmlsdGVyTmFtZSk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5y
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKHVzZXJDb250ZW50RmlsdGVyTmFtZSk7CiAjZW5kaWYKIH0K
IAogLSAodm9pZClfcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzCiB7CiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKLSAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92
ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS0+cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMjEzNjcwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgV0tfQ0xBU1NfQVZBSUxBQkxF
KG1hY29zeCgxMC4xMSksIGlvcyg5LgogV0tfRVhURVJOIE5TU3RyaW5nICogY29uc3QgX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwg
aW9zKDEwLjApKTsKIAogdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUVycm9yQ29kZSkgewotICAgIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvckxvb2t1cEZhaWxlZCA9IDEsCisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yTG9va3VwRmFpbGVkID0gNiwgLy8gTWlycm9ycyB2YWx1ZSBvZiBXS0Vycm9yQ29udGVu
dEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkCiAgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yVmVyc2lvbk1pc21hdGNoLAogICAgIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvckNvbXBpbGVGYWlsZWQsCiAgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yUmVtb3ZlRmFpbGVkLApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5t
bQkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
MDAgKzI4LDU0IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCisjaW1wb3J0ICJXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZUludGVybmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZVByaXZhdGUuaCIKICNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50
RmlsdGVySW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5o
IgogI2ltcG9ydCA8c3RyaW5nPgogCi1OU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uc0RvbWFpbiA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIjsKK05TU3Ry
aW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluID0gQCJXS0Vycm9yRG9t
YWluIjsKIAogQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKIAot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlKCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KICsg
KGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVy
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworICAgIHJl
dHVybiBbW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXSBfaW5pdFdpdGhXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZTpbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XV0gYXV0b3JlbGVhc2VdOwogfQogCiArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VS
TCAqKXVybAogewotICAgIFJlZjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3Jl
ID0gQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNv
bHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOwotICAgIHJldHVybiBXZWJLaXQ6Ondy
YXBwZXIoc3RvcmUubGVha1JlZigpKTsKKyAgICByZXR1cm4gW1tbX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmU6W1dLQ29u
dGVudEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0aFVSTDp1cmxdXSBhdXRvcmVsZWFzZV07CiB9CiAK
IC0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAq
KWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENv
bnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50
RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBhdXRvIGhhbmRs
ZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7Ci0KLSAgICBTdHJpbmcganNv
bihlbmNvZGVkQ29udGVudEV4dGVuc2lvbik7Ci0gICAgW2VuY29kZWRDb250ZW50RXh0ZW5zaW9u
IHJlbGVhc2VdOwotICAgIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uID0gbmlsOwotCi0gICAgX3Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZp
ZXIsIFdURk1vdmUoanNvbiksIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7Ci0gICAgICAg
IGlmIChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9X
S1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxl
ZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotCi0gICAgICAgICAgICAvLyBlcnJv
ci52YWx1ZSgpIGNvdWxkIGhhdmUgYSBzcGVjaWZpYyBjb21waWxlciBlcnJvciB0aGF0IGlzIG5v
dCBlcXVhbCB0byBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVk
LgotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byB1c2UgZXJyb3IubWVzc2FnZSwgYnV0IGhlcmUg
d2Ugd2FudCB0byBvbmx5IHBhc3Mgb24gQ29tcGlsZUZhaWxlZC4KLSAgICAgICAgICAgIHJhd0hh
bmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNp
b25zRG9tYWluIGNvZGU6X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZh
aWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50Rmls
dGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihXZWJL
aXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOwotICAgIH0pOworICAg
IFtfY29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNvZGVkQ29udGVudEV4
dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqY29udGVudEV4
dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KmNvbnRlbnRGaWx0ZXIgPSBjb250ZW50RXh0ZW5zaW9uID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0
ZXIgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjpjb250ZW50RXh0ZW5zaW9uXSBh
dXRvcmVsZWFzZV0gOiBuaWw7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRGaWx0
ZXIsIGVycm9yKTsKKyAgICB9XTsKIH0KIAogLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5k
bGVyCiB7Ci0gICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29w
eV0pOwotCi0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRl
bnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotCi0gICAgICAg
ICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5tZXNz
YWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgQVNTRVJUKGVycm9yLnZhbHVlKCkgPT0gX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkIHx8IGVycm9yLnZhbHVl
KCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVyc2lvbk1pc21hdGNoKTsK
LSAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46X1dL
VXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6ZXJyb3IudmFsdWUoKSB1c2VySW5mbzp1
c2VySW5mb10pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0
byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3Ig
KikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNv
bnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOwotICAgIH0pOworICAgIFtfY29udGVudEV4dGVu
c2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIg
Y29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmNvbnRlbnRFeHRlbnNpb24s
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIF9XS1VzZXJDb250ZW50RmlsdGVyICpjb250ZW50
RmlsdGVyID0gY29udGVudEV4dGVuc2lvbiA/IFtbW19XS1VzZXJDb250ZW50RmlsdGVyIGFsbG9j
XSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb246Y29udGVudEV4dGVuc2lvbl0gYXV0b3JlbGVh
c2VdIDogbmlsOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RmlsdGVyLCBlcnJv
cik7CisgICAgfV07CiB9CiAKIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0
TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLQotICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6
OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotCi0g
ICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6ICVzIiwgZXJy
b3IubWVzc2FnZSgpLmNfc3RyKCldfTsKLSAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgp
ID09IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7Ci0gICAg
ICAgICAgICByYXdIYW5kbGVyKFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVu
dEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JS
ZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICop
KWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIHJhd0hhbmRsZXIobmlsKTsKLSAgICB9KTsKKyAgICBb
X2NvbnRlbnRFeHRlbnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAog
I3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCiAKIC0gKEFQSTo6
T2JqZWN0JilfYXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTsKKyAgICByZXR1cm4gW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVjdF07CiB9
CiAKIEBlbmQKQEAgLTEzMiwxMiArODYsMjMgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QK
IAogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMKIHsKLSAgICBfdXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygp
OworICAgIFtfY29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
c107CiB9CiAKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklk
ZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgogewotICAgIF91c2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLT5pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oaWRlbnRpZmllcik7
CisgICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9u
VmVyc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07Cit9CisKKy0gKGlkKV9pbml0V2l0aFdL
Q29udGVudEV4dGVuc2lvblN0b3JlOihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSopY29udGVudEV4
dGVuc2lvblN0b3JlCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZSA9
IGNvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKIH0KIAogQGVu
ZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
CShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyMiArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKyNpbXBvcnQgIkFQSUNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlu
bGluZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICp3cmFwcGVyKEFQSTo6VXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSYgc3RvcmUpCi17Ci0gICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkg
aXNLaW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKLSAg
ICByZXR1cm4gKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7
Ci19Ci0KLX0KK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsKIAogQGludGVyZmFjZSBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKLSAg
ICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBfdXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICBSZXRhaW5QdHI8V0tDb250ZW50RXh0ZW5zaW9u
U3RvcmU+IF9jb250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDIxMzY3MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDE2IEBACiAK
ICNpZiBXS19BUElfRU5BQkxFRAogCitAY2xhc3MgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmU7CisK
IEBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAv
LyBGb3IgdGVzdGluZyBvbmx5LgogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7
CiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXI7CiAKKy0gKGlkKV9pbml0V2l0aFdLQ29udGVudEV4dGVu
c2lvblN0b3JlOihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSopY29udGVudEV4dGVuc2lvblN0b3Jl
OworCiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCShyZXZpc2lvbiAy
MTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RmlsdGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxOCArMzUsMjYgQEAKIAogQGltcGxl
bWVudGF0aW9uIF9XS1VzZXJDb250ZW50RmlsdGVyCiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAg
IF91c2VyQ29udGVudEV4dGVuc2lvbi0+flVzZXJDb250ZW50RXh0ZW5zaW9uKCk7CisjcHJhZ21h
IG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAotICAgIFtzdXBlciBkZWFs
bG9jXTsKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuIFtfY29udGVu
dEV4dGVuc2lvbiBfYXBpT2JqZWN0XTsKIH0KIAotI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3Rv
Y29sIGltcGxlbWVudGF0aW9uCitAZW5kCiAKLS0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CitA
aW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIgKFdLUHJpdmF0ZSkKKworLSAoaWQp
X2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOihXS0NvbnRlbnRFeHRlbnNpb24qKWNvbnRlbnRF
eHRlbnNpb24KIHsKLSAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvbjsKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBfY29udGVudEV4dGVuc2lvbiA9IGNvbnRlbnRFeHRlbnNpb247CisgICAgCisgICAg
cmV0dXJuIHNlbGY7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRl
cm5hbC5oCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsMjIgKzI3LDE0IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCi0jaW1wb3J0ICJBUElVc2Vy
Q29udGVudEV4dGVuc2lvbi5oIgorI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2lt
cG9ydCAiV0tPYmplY3QuaCIKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBfV0tVc2Vy
Q29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29u
dGVudEV4dGVuc2lvbikKLXsKLSAgICBBU1NFUlQoW3VzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBw
ZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEZpbHRlciBjbGFzc11dKTsKLSAgICBy
ZXR1cm4gKF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRFeHRlbnNpb24ud3JhcHBl
cigpOwotfQotCi19CitAY2xhc3MgV0tDb250ZW50RXh0ZW5zaW9uOwogCiBAaW50ZXJmYWNlIF9X
S1VzZXJDb250ZW50RmlsdGVyICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKLSAgICBBUEk6Ok9i
amVjdFN0b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gX3VzZXJDb250ZW50RXh0ZW5z
aW9uOworICAgIFJldGFpblB0cjxXS0NvbnRlbnRFeHRlbnNpb24+IF9jb250ZW50RXh0ZW5zaW9u
OwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29u
dGVudEZpbHRlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RmlsdGVyLmg+CisKKyNpZiBX
S19BUElfRU5BQkxFRAorCitAY2xhc3MgV0tVc2VyQ29udGVudEV4dGVuc2lvbjsKKworQGludGVy
ZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoV0tQcml2YXRlKQorCistIChpZClfaW5pdFdpdGhX
S0NvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiopY29udGVudEV4dGVuc2lvbjsK
KworQGVuZAorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcAkocmV2aXNpb24gMjEzNjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmg+CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotI2luY2x1ZGUgIkFQ
SVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5o
IgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgogI2VuZGlmCiAKQEAg
LTk3LDEwICs5NywxMCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQ
CiAgICAgd2ViUHJvY2Vzc1Byb3h5LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKG1lc3NhZ2VI
YW5kbGVycyksIG1faWRlbnRpZmllcik7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhPj4gdXNlckNvbnRlbnRFeHRlbnNpb25zOwotICAgIGZvciAoY29uc3QgYXV0byYgdXNl
ckNvbnRlbnRFeHRlbnNpb24gOiBtX3VzZXJDb250ZW50RXh0ZW5zaW9ucy52YWx1ZXMoKSkKLSAg
ICAgICAgdXNlckNvbnRlbnRFeHRlbnNpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyQ29u
dGVudEV4dGVuc2lvbi0+bmFtZSgpLCB1c2VyQ29udGVudEV4dGVuc2lvbi0+Y29tcGlsZWRFeHRl
bnNpb24oKS5kYXRhKCkpKTsKLSAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50RXh0ZW5z
aW9ucyh1c2VyQ29udGVudEV4dGVuc2lvbnMpLCBtX2lkZW50aWZpZXIpOworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4gY29udGVu
dEV4dGVuc2lvbnM7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50RXh0ZW5zaW9uIDogbV9j
b250ZW50RXh0ZW5zaW9ucy52YWx1ZXMoKSkKKyAgICAgICAgY29udGVudEV4dGVuc2lvbnMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGNvbnRlbnRFeHRlbnNpb24tPm5hbWUoKSwgY29udGVudEV4dGVu
c2lvbi0+Y29tcGlsZWRFeHRlbnNpb24oKS5kYXRhKCkpKTsKKyAgICB3ZWJQcm9jZXNzUHJveHku
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFk
ZENvbnRlbnRFeHRlbnNpb25zKGNvbnRlbnRFeHRlbnNpb25zKSwgbV9pZGVudGlmaWVyKTsKICNl
bmRpZgogfQogCkBAIC0zMzgsMzAgKzMzOCwzMCBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpkaWRQCiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb24o
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYgdXNlckNvbnRlbnRFeHRlbnNpb24pCit2b2lkIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRDb250ZW50RXh0ZW5zaW9uKEFQSTo6Q29u
dGVudEV4dGVuc2lvbiYgY29udGVudEV4dGVuc2lvbikKIHsKLSAgICBtX3VzZXJDb250ZW50RXh0
ZW5zaW9ucy5zZXQodXNlckNvbnRlbnRFeHRlbnNpb24ubmFtZSgpLCAmdXNlckNvbnRlbnRFeHRl
bnNpb24pOworICAgIG1fY29udGVudEV4dGVuc2lvbnMuc2V0KGNvbnRlbnRFeHRlbnNpb24ubmFt
ZSgpLCAmY29udGVudEV4dGVuc2lvbik7CiAKLSAgICBhdXRvIHBhaXIgPSBzdGQ6Om1ha2VfcGFp
cih1c2VyQ29udGVudEV4dGVuc2lvbi5uYW1lKCksIHVzZXJDb250ZW50RXh0ZW5zaW9uLmNvbXBp
bGVkRXh0ZW5zaW9uKCkuZGF0YSgpKTsKKyAgICBhdXRvIHBhaXIgPSBzdGQ6Om1ha2VfcGFpcihj
b250ZW50RXh0ZW5zaW9uLm5hbWUoKSwgY29udGVudEV4dGVuc2lvbi5jb21waWxlZEV4dGVuc2lv
bigpLmRhdGEoKSk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJv
Y2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKHsgcGFpciB9
KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZENvbnRlbnRFeHRlbnNpb25zKHsg
cGFpciB9KSwgbV9pZGVudGlmaWVyKTsKIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQor
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQ29udGVudEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV91c2VyQ29udGVudEV4dGVuc2lvbnMucmVt
b3ZlKG5hbWUpOworICAgIG1fY29udGVudEV4dGVuc2lvbnMucmVtb3ZlKG5hbWUpOwogCiAgICAg
Zm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgcHJv
Y2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6OlJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUpLCBtX2lkZW50aWZpZXIpOworICAg
ICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6UmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKSwgbV9pZGVudGlmaWVyKTsK
IH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQWxsVXNlckNv
bnRlbnRFeHRlbnNpb25zKCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCkKIHsKLSAgICBtX3VzZXJDb250ZW50RXh0ZW5zaW9u
cy5jbGVhcigpOworICAgIG1fY29udGVudEV4dGVuc2lvbnMuY2xlYXIoKTsKIAogICAgIGZvciAo
V2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpS
ZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAg
cHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OlJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCksIG1faWRlbnRpZmllcik7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHJl
dmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsy
Myw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eV9oCi0jZGVmaW5lIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCkBAIC0zOCw4ICszNyw4IEBACiAKIG5hbWVz
cGFjZSBBUEkgewogY2xhc3MgQXJyYXk7CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uOwogY2xhc3Mg
VXNlckNvbnRlbnRXb3JsZDsKLWNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOwogY2xhc3MgVXNl
clNjcmlwdDsKIGNsYXNzIFVzZXJTdHlsZVNoZWV0OwogfQpAQCAtOTIsOSArOTEsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyTWVzc2FnZUhhbmRsZXJzKEFQSTo6VXNlckNvbnRl
bnRXb3JsZCYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFk
ZFVzZXJDb250ZW50RXh0ZW5zaW9uKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mKTsKLSAgICB2
b2lkIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBhZGRDb250ZW50RXh0
ZW5zaW9uKEFQSTo6Q29udGVudEV4dGVuc2lvbiYpOworICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTExNiwxMCArMTE1LDggQEAgcHJpdmF0ZToK
ICAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8QVBJOjpVc2VyQ29udGVudFdvcmxkPj4gbV91c2Vy
Q29udGVudFdvcmxkczsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPj4gbV91c2VyQ29u
dGVudEV4dGVuc2lvbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6OkNvbnRlbnRF
eHRlbnNpb24+PiBtX2NvbnRlbnRFeHRlbnNpb25zOwogI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5X2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE0NSw2ICsxMTQ1LDEzIEBA
CiAJCTVDQjIzNzkyMURGMEUyRUUwMDExN0FBMyAvKiBBUElXZWJzaXRlUG9saWNpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjIzNzhGMURGMEUx
QjgwMDExN0FBMyAvKiBBUElXZWJzaXRlUG9saWNpZXMuaCAqLzsgfTsKIAkJNUNCQzlCOEQxQzY1
Mjc5QzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8q
IE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovOyB9OwogCQk1Q0JDOUI4RTFDNjUyQ0EwMDBBOEZE
Q0YgLyogTmV0d29ya0RhdGFUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0JDOUI4OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNr
LmggKi87IH07CisJCTVDRTM1NENCMUU3MDlGQTgwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTM1
NEM5MUU3MDlGQTAwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTVDRTM1NENDMUU3MEEwNDIwMEJF
RkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTRDQTFFNzA5RkEwMDBCRUZFM0IgLyogV0tDb250ZW50
RXh0ZW5zaW9uLm1tICovOyB9OworCQk1Q0UzNTRDRTFFNzBBMDk5MDBCRUZFM0IgLyogV0tDb250
ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDRTM1NENEMUU3MEEwOTQwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNp
b25JbnRlcm5hbC5oICovOyB9OworCQk1Q0UzNTREMzFFNzBBMkFFMDBCRUZFM0IgLyogV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDRTM1NENGMUU3MEExQkYwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJ
NUNFMzU0RDQxRTcwQTJCMzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFMzU0RDAxRTcw
QTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OworCQk1Q0Uz
NTRENTFFNzBBMkI4MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFMzU0RDEx
RTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAqLzsg
fTsKKwkJNUNFMzU0RDYxRTcwQTJCQzAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNFMzU0RDIxRTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVD
RTg1QjIwMUM4OEU2NEIwMDcwQkZDRSAvKiBQaW5nTG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNFIC8qIFBp
bmdMb2FkLmggKi87IH07CiAJCTVDRkVDQjA0MUUxRUQxQ0MwMEY4ODUwNCAvKiBMZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNGRUNCMDMxRTFFRDFDODAwRjg4NTA0IC8qIExlZ2FjeUN1c3RvbVByb3Rv
Y29sTWFuYWdlci5jcHAgKi87IH07CiAJCTY1MDFCRDFBMTJGMTI0MzQwMEU5RjI0OCAvKiBXS0J1
bmRsZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3Bw
ICovOyB9OwpAQCAtMTE5NSw4ICsxMjAyLDggQEAKIAkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlE
IC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYxRDc2MTkyODAz
QkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CiAJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk3QzM4NzQzNDE3MkY1NjE1MDAx
QkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAg
Ki87IH07Ci0JCTdDM0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDM0EwNkE1MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLmNwcCAqLzsgfTsKLQkJN0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmggKi87IH07CisJCTdDM0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNp
b25TdG9yZS5jcHAgKi87IH07CisJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaCAqLzsgfTsKIAkJN0MzRjhDOTAxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9y
bWF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDM0Y4QzhFMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi87IH07
CiAJCTdDM0Y4QzkxMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjhDOEYxNzNBRjUy
RDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggKi87IH07CiAJCTdDNDY5NEM5MUE0QjRF
QTEwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0QzcxQTRCNEVB
MDAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CkBAIC0xMjI5LDggKzEyMzYsOCBAQAogCQk3Qzg5RDJBMzFBNjc4ODc1MDAzQTVGREUgLyogV0tV
c2VyU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDODlEMkExMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwICov
OyB9OwogCQk3Qzg5RDJBNDFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBMjFBNjc4
ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M4OUQyQTYxQTY3ODlFQTAwM0E1RkRFIC8qIEFQ
SVVzZXJTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0M4OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovOyB9
OwotCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQy
QjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsK
LQkJN0M4OUQyQjQxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMjFB
NkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLzsgfTsKKwkJN0M4
OUQyQjMxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjExQTZCMDY4QzAw
M0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OworCQk3Qzg5RDJCNDFBNkIw
NjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQ
SUNvbnRlbnRFeHRlbnNpb24uaCAqLzsgfTsKIAkJN0M4OUQyQjYxQTZCMEREOTAwM0E1RkRFIC8q
IFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjUxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdDODlEMkI5MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2Vy
Q29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDODlEMkI3MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5t
bSAqLzsgfTsKIAkJN0M4OUQyQkExQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50Rmls
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5
RDJCODFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM1Miw2ICszMzU5LDE0
IEBACiAJCTVDQjIzNzkwMURGMEUxREQwMDExN0FBMyAvKiBBUElXZWJzaXRlUG9saWNpZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJV2Vic2l0ZVBvbGljaWVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCODkxQzY1MjRBNTAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBOZXR3b3JrRGF0YVRhc2suaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZE
Q0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1Q0UzNTRDOTFFNzA5RkEwMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0UzNTRDQTFFNzA5RkEwMDBCRUZFM0IgLyog
V0tDb250ZW50RXh0ZW5zaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tDb250ZW50RXh0ZW5zaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0UzNTRDRDFFNzBBMDk0MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uSW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNFMzU0Q0YxRTcwQTFCRjAw
QkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvblN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDRTM1NEQwMUU3MEExQkYwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0Uz
NTREMTFFNzBBMUJGMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NEQyMUU3MEEx
QkYwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRTM1NEQ3MUU3MEMzQUQwMEJFRkUzQiAv
KiBfV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nTG9hZC5oOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvUGluZ0xvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGRUNCMDMx
RTFFRDFDODAwRjg4NTA0IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFn
ZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQy
QTU1MTZENTg1NjcwMEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRo
ID0gUGx1Z2luU2VydmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zNDEyLDggKzM0MjcsOCBAQAogCQk3QzM2MUQ3NjE5MjgwM0JEMDAzNkE1OUQgLyogV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzM2MUQ3
NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzg3
NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VCYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3QzNBMDZBNTFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNBMDZBNTFBQUI5MDNF
MDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDM0Y4QzhFMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAvKiBQ
bHVnaW5JbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVn
aW5JbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ2OTRDNzFB
NEI0RUEwMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDQ5LDgg
KzM0NjQsOCBAQAogCQk3Qzg5RDJBMTFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVm
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlclNjcmlwdFJl
Zi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkEyMUE2Nzg4NzUwMDNB
NUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tVc2VyU2NyaXB0UmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlE
MkE1MUE2Nzg5RUEwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSVVzZXJTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRF
eHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Qzg5
RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQ
SUNvbnRlbnRFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQVBJQ29udGVudEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNvbnRlbnRFeHRlbnNpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQjUxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50Rmls
dGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNv
bnRlbnRGaWx0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkI4MUE2
QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNTM5OCw2ICs1NDEzLDEzIEBACiAJCTM3QzRDMDgzMTgxNDlDMkEwMDM2
ODhCOSAvKiBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNUNFMzU0Q0YxRTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
LmggKi8sCisJCQkJNUNFMzU0RDAxRTcwQTFCRjAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tICovLAorCQkJCTVDRTM1NEQxMUU3MEExQkYwMEJFRkUzQiAvKiBXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZUludGVybmFsLmggKi8sCisJCQkJNUNFMzU0RDIxRTcwQTFCRjAwQkVGRTNC
IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAorCQkJCTVDRTM1NENEMUU3
MEEwOTQwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oICovLAorCQkJCTVD
RTM1NEM5MUU3MDlGQTAwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLywKKwkJCQk1
Q0UzNTRDQTFFNzA5RkEwMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uLm1tICovLAogCQkJ
CTFBNDNFODI2MTg4RjM4RTIwMDlFNEQzMCAvKiBEZXByZWNhdGVkICovLAogCQkJCTM3QTVFMDEy
MThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5oICovLAogCQkJCTM3
QTVFMDExMThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5tbSAqLywK
QEAgLTU0NTMsNiArNTQ3NSw3IEBACiAJCQkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9X
S1VzZXJDb250ZW50RmlsdGVyLmggKi8sCiAJCQkJN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8q
IF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICovLAogCQkJCTdDODlEMkJCMUE2QjBGNUIwMDNBNUZE
RSAvKiBfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmggKi8sCisJCQkJNUNFMzU0RDcxRTcw
QzNBRDAwQkVGRTNCIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oICovLAogCQkJCTdD
ODgyREYzMUM3RTk5NUUwMDZCRjczMSAvKiBfV0tVc2VyQ29udGVudFdvcmxkLmggKi8sCiAJCQkJ
N0M4ODJERjQxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGQubW0gKi8sCiAJ
CQkJN0M4ODJERjUxQzdFOTk1RTAwNkJGNzMxIC8qIF9XS1VzZXJDb250ZW50V29ybGRJbnRlcm5h
bC5oICovLApAQCAtNjY1NCw2ICs2Njc3LDEwIEBACiAJCQkJQkMxMTFCNDcxMTJGNjE2OTAwMzM3
QkFCIC8qIG1hYyAqLywKIAkJCQk5OUM4MUQ1QjFDMjBFODE3MDA1QzRDODIgLyogQVBJQXV0b21h
dGlvbkNsaWVudC5oICovLAogCQkJCTk5MEQyOEIzMUM2NTI2RDQwMDk4Njk3NyAvKiBBUElBdXRv
bWF0aW9uU2Vzc2lvbkNsaWVudC5oICovLAorCQkJCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAv
KiBBUElDb250ZW50RXh0ZW5zaW9uLmNwcCAqLywKKwkJCQk3Qzg5RDJCMjFBNkIwNjhDMDAzQTVG
REUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5oICovLAorCQkJCTdDM0EwNkE1MUFBQjkwM0UwMDlE
NzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovLAorCQkJCTdDM0EwNkE2MUFB
QjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLywKIAkJCQkwNzZF
ODg0RDFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGllbnQuaCAqLywKIAkJCQk3
QTgyMUY0RjFFMkY3QTVDMDA2MDQ1NzcgLyogQVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
LmggKi8sCiAJCQkJODM4OTFCNjIxQTY4QjM0MjAwMzBGMzg2IC8qIEFQSURpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmggKi8sCkBAIC02Njg5LDEwICs2NzE2LDYgQEAKIAkJCQkxQUZERTY1RjE5NTRF
OUIxMDBDNDhGRkEgLyogQVBJU2Vzc2lvblN0YXRlLmNwcCAqLywKIAkJCQkxQUZERTY2MDE5NTRF
OUIxMDBDNDhGRkEgLyogQVBJU2Vzc2lvblN0YXRlLmggKi8sCiAJCQkJMUE0RDY2NDcxOEEyRDkx
QTAwRDgyRTIxIC8qIEFQSVVJQ2xpZW50LmggKi8sCi0JCQkJN0M4OUQyQjExQTZCMDY4QzAwM0E1
RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcCAqLywKLQkJCQk3Qzg5RDJCMjFBNkIw
NjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLywKLQkJCQk3QzNBMDZB
NTFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgKi8s
Ci0JCQkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaCAqLywKIAkJCQk3Qzg4MkRGQjFDN0U5OUE2MDA2QkY3MzEgLyogQVBJVXNlckNvbnRl
bnRXb3JsZC5jcHAgKi8sCiAJCQkJN0M4ODJERkMxQzdFOTlBNjAwNkJGNzMxIC8qIEFQSVVzZXJD
b250ZW50V29ybGQuaCAqLywKIAkJCQk3Q0IzNjVBRjFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNl
ckluaXRpYXRlZEFjdGlvbi5oICovLApAQCAtODAxMyw4ICs4MDM2LDggQEAKIAkJCQlCQ0RCODZD
MTEyMDBGQjk3MDA3MjU0QkUgLyogQVBJVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UyMzE1
RDEyMkMzMENBMDBENUMzNUEgLyogQVBJVVJMUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkM5MEExRDIxMjJERDU1RTAwQ0M4QzUwIC8qIEFQSVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAq
LywKLQkJCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNp
b24uaCBpbiBIZWFkZXJzICovLAotCQkJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Qzg5RDJCNDFB
NkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJN0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjYxMTNFMjUxMjZDRTE4MjAwNTdEMEE3IC8qIEFQSVVzZXJD
b250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M4ODJERkQxQzdFOTlBODAw
NkJGNzMxIC8qIEFQSVVzZXJDb250ZW50V29ybGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDQjM2
NUIxMUQzMUREMUUwMDcxNThDQSAvKiBBUElVc2VySW5pdGlhdGVkQWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzMDAsNiArODMyMyw3IEBACiAJCQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3
IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNTk0N0E0MTg3QjNCN0QwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDc5RDE4N0IzQjYwMDA0Mzc4NTcg
LyogUmVtb3RlU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNFMzU0Q0UxRTcw
QTA5OTAwQkVGRTNCIC8qIFdLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTVCQTgxRjFCQTI1QjI3MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUJBODI1MUJBMjVDRkIwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTVCQTgx
NzFCQTIzRTEyMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBpbiBIZWFkZXJzICov
LApAQCAtODQzNSw2ICs4NDU5LDcgQEAKIAkJCQkyRDUwMzY3NjFCQ0VEMTlGMDBFMjBCQjMgLyog
V2ViR2VzdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEIzMzFCQzZFOUNEMDBB
QkE1QzIgLyogV2ViSGl0VGVzdFJlc3VsdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMUIy
NEFCMTMyRTA5NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTVDRTM1NEQ1MUU3MEEyQjgwMEJFRkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTgzNDU5MzEzNDUzMkU5MDA5MkI2OTYgLyog
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQwMkY2QTEzMkVD
NzM3MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxMUIyNEE3MTMyRTA5NTcwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2VQcm94eS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04NDQ4LDYgKzg0NzMsNyBAQAogCQkJCTFDOEUyODIwMTI3NUQxNTQw
MEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDMyRDgyMTBG
NDM3OEQwMDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1NUJBODM1MUJBM0U3MEEwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDRTM1NEQzMUU3MEEyQUUwMEJFRkUzQiAvKiBX
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4RTJBMzYxMjc3
ODUyNDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQzhFMjgzNDEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFDQThCOTQ2MTI3Qzg4MkEwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94
eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTg0NzgsNiArODUwNCw3IEBACiAJCQkJODM3
MkRCMjkxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMDYxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VH
cm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyNTIxMkE0M0M5NjAwRDE3NEE0IC8qIFdl
YlBhZ2VHcm91cERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDRTM1NEQ2MUU3MEEyQkMwMEJF
RkUzQiAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDN0I2MjE1MTJBNDIxOUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEYxQTk2Q0JGRjAwMkQyODA3IC8qIFdlYlBhZ2VJbmplY3Rl
ZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDRTcyQTExMjQ3RTcxRDAwQkMw
RUM0IC8qIFdlYlBhZ2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzI1LDYgKzg3NTIs
NyBAQAogCQkJCTJEM0E2NURGMUE3QzNBN0QwMENBQzYzNyAvKiBXS05hdmlnYXRpb25SZXNwb25z
ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4QkUxNzkxNDc0M0U2RjAwQThGQkIyIC8qIFdL
Tm90aWZpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThCRTE3MTE0NzQzREIxMDBBOEZC
QjIgLyogV0tOb3RpZmljYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0UzNTRD
QjFFNzA5RkE4MDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMUEyRUM3NDE0OEQ1OUNBMDA4MTBENzEgLyogV0tOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEyQzBDNEExNDZEREM4QTAwMTZDOTExIC8q
IFdLTm90aWZpY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QzRDMDk0MTgx
NEIzQUYwMDM2ODhCOSAvKiBXS05TQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtOTUzNSw4ICs5
NTYzLDggQEAKIAkJCQkxQUZERTY2MTE5NTRFOUIxMDBDNDhGRkEgLyogQVBJU2Vzc2lvblN0YXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTIzMTVFMTIyQzMwQ0EwMEQ1QzM1QSAvKiBBUElV
UkxSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOTBBMUQzMTIyREQ1NUUwMENDOEM1
MCAvKiBBUElVUkxSZXNwb25zZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3Qzg5RDJCMzFBNkIw
NjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M4OUQyQjMxQTZCMDY4QzAwM0E1RkRFIC8q
IEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0MzQTA2QTcxQUFC
OTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4ODJERkUxQzdFOTlBQzAwNkJG
NzMxIC8qIEFQSVVzZXJDb250ZW50V29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4OUQy
QTYxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05NTg1LDYgKzk2MTMsNyBAQAogCQkJCUNEQzM4MzEwMTcyMTI0NDAwMDhBMkZDMyAvKiBDb29r
aWVTdG9yYWdlU2hpbS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUI4NzhCNjE2MTMzNDI4REMwMDY4
ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE0MjcxRDFD
MjNGOENGMDBENDExODMgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1Q0UzNTRDQzFFNzBBMDQyMDBCRUZFM0IgLyogV0tDb250ZW50RXh0
ZW5zaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk4NEY1ODgxNjRCQTA5NTAwNEJDMEM2IC8q
IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyOTg0RjU3QzE2NEI5MTVGMDA0QkMwQzYgLyogTGVnYWN5Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFF
MzUxRkYxODBGNUQwRjAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTk5MTAsNiArOTkzOSw3IEBACiAJCQkJMUEwRjI5Q0IxMjBCMzcxNjAwNTNEMUI5IC8q
IFZpc2l0ZWRMaW5rVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGNENFRUYxOEJDNDgx
ODAwQkMyRDM0IC8qIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBOEU3RDNDMThDMTUxNDkwMDVBNzAyQSAvKiBWaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0UzNTRENDFFNzBB
MkIzMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDRURBMTJFMjE1MkNEMUFFMDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5NTVBNkVEMUM3OTgwQ0EwMEVCNkE5MyAvKiBXZWJB
dXRvbWF0aW9uU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzBBMTk1NzFDOTAwNjhG
MDBGRTBFQkIgLyogV2ViQXV0b21hdGlvblNlc3Npb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dl
YlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dl
YlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOSwyMiArMzM5
LDIyIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxT
dHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiYgdXNlckNvbnRlbnRFeHRl
bnNpb25zKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZENvbnRlbnRFeHRlbnNp
b25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhPj4mIGNvbnRlbnRFeHRlbnNpb25zKQogewotICAgIGZvciAoY29uc3QgYXV0byYg
dXNlckNvbnRlbnRFeHRlbnNpb24gOiB1c2VyQ29udGVudEV4dGVuc2lvbnMpIHsKLSAgICAgICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50RXh0ZW5zaW9uRGF0YSA9IHVz
ZXJDb250ZW50RXh0ZW5zaW9uLnNlY29uZDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRF
eHRlbnNpb24gOiBjb250ZW50RXh0ZW5zaW9ucykgeworICAgICAgICBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb25EYXRhID0gY29udGVudEV4dGVuc2lvbi5z
ZWNvbmQ7CiAgICAgICAgIFJlZlB0cjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KFdURk1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEpKTsKIAotICAgICAgICBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24uZmly
c3QsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7CisgICAgICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihjb250ZW50RXh0ZW5zaW9uLmZp
cnN0LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwogICAgIH0KIH0KIAotdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBtX2NvbnRlbnRFeHRl
bnNpb25CYWNrZW5kLnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CiB9CiAKLXZvaWQgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKQor
dm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25z
KCkKIHsKICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUFsbENvbnRlbnRFeHRl
bnNpb25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHJldmlz
aW9uIDIxMzY3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlcl9oCi0jZGVmaW5lIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcl9o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
IldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCkBAIC05NSw5ICs5NCw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNvbnN0IFZlY3Rvcjx1
aW50NjRfdD4mKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdm9pZCBh
ZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiYpOwotICAgIHZvaWQgcmVtb3ZlVXNlckNv
bnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIHJlbW92ZUFsbFVz
ZXJDb250ZW50RXh0ZW5zaW9ucygpOworICAgIHZvaWQgYWRkQ29udGVudEV4dGVuc2lvbnMoY29u
c3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE+PiYpOworICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpOworICAgIHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogCiAg
ICAgdm9pZCBhZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYs
IHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXZWJDb3JlOjpVc2VyU2NyaXB0JiYpOwpA
QCAtMTI4LDUgKzEyNywzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjEzNjcw
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAg
bWVzc2FnZXMgLT4gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHsKICAgICBSZW1vdmVBbGxVc2Vy
U2NyaXB0TWVzc2FnZUhhbmRsZXJzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJZGVudGlmaWVycyk7
CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEFkZFVzZXJDb250ZW50RXh0
ZW5zaW9ucyhWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViS2l0OjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhPj4gdXNlckNvbnRlbnRGaWx0ZXJzKTsKLSAgICBSZW1vdmVVc2VyQ29u
dGVudEV4dGVuc2lvbihTdHJpbmcgbmFtZSk7Ci0gICAgUmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRl
bnNpb25zKCk7CisgICAgQWRkQ29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IGNvbnRlbnRGaWx0
ZXJzKTsKKyAgICBSZW1vdmVDb250ZW50RXh0ZW5zaW9uKFN0cmluZyBuYW1lKTsKKyAgICBSZW1v
dmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFcnJvcnNNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRXJy
b3JzTWFjLm1tCShyZXZpc2lvbiAyMTM2NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFcnJvcnNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDcgQEAgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZQogI2lm
IEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIFJlc291cmNlRXJyb3IgYmxvY2tlZEJ5Q29udGVu
dEZpbHRlckVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcihBUEk6OkVycm9yOjp3ZWJLaXRFcnJvckRvbWFpbigpLCBrV0tFcnJv
ckNvZGVGcmFtZUxvYWRCbG9ja2VkQnlDb250ZW50RmlsdGVyLCByZXF1ZXN0LnVybCgpLCBXRUJf
VUlfU1RSSU5HKCJUaGUgVVJMIHdhcyBibG9ja2VkIGJ5IGEgY29udGVudCBmaWx0ZXIiLCAiV2Vi
S2l0RXJyb3JCbG9ja2VkQnlDb250ZW50RmlsdGVyIikpOworICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKEFQSTo6RXJyb3I6OndlYktpdEVycm9yRG9tYWluKCksIGtXS0Vycm9yQ29kZUZyYW1lTG9h
ZEJsb2NrZWRCeUNvbnRlbnRGaWx0ZXIsIHJlcXVlc3QudXJsKCksIFdFQl9VSV9TVFJJTkcoIlRo
ZSBVUkwgd2FzIGJsb2NrZWQgYnkgYSBjb250ZW50IGZpbHRlciIsICJXZWJLaXRFcnJvckZyYW1l
TG9hZEJsb2NrZWRCeUNvbnRlbnRGaWx0ZXIgZGVzY3JpcHRpb24iKSk7CiB9CiAjZW5kaWYKIApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjEzNjcwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTctMDMtMDkgIEJyaWFuIE5pY2hvbHNvbiAgPGJuaWNob2xzb25AbW96aWxs
YS5jb20+IGFuZCBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgRXhwb3NlIHB1YmxpYyBBUElzIGZvciBjb250ZW50IGZpbHRlcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ3OQorCisgICAgICAg
IFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbiBhbmQgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgS2Vl
cCB0aGUgZXhpc3RpbmcgdGVzdHMgdG8gdmVyaWZ5IHRoYXQgSSBtYWRlIHRoZSB3cmFwcGVyIGNs
YXNzZXMgZm9yIHRoZSBvbGQgU1BJIHdvcmsgY29ycmVjdGx5LgorICAgICAgICBBZGQgbmV3IGlk
ZW50aWNhbCB0ZXN0cyBmb3IgdGhlIG5ldyBBUEkgYXJlIGFkZGVkIHdpdGggdGhlIG5ldyBuYW1l
cy4KKyAgICAgICAgV2Ugc2hvdWxkIGtlZXAgYm90aCB1bnRpbCB3ZSBtaWdyYXRlIGZyb20gYW5k
IHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgRW51bSBlcnJvciBjb2RlIHZhbHVlcyBhbmQg
c3RyaW5ncyBoYXZlIGNoYW5nZWQsIGJ1dCB0aGUgQVBJIGlzIHNvdXJjZSBjb21wYXRpYmxlLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tLgor
ICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdDo6U2V0VXApOgorICAgICAg
ICAoVEVTVF9GKToKKyAgICAgICAgKGNoZWNrRG9tYWluKToKKyAgICAgICAgKF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0OjpTZXRVcCk6IERlbGV0ZWQuCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5t
bToKKyAgICAgICAgKGNoZWNrRG9tYWluKToKKwogMjAxNy0wMy0wOSAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDb250ZW50IEV4dGVuc2lv
bnNdIEludHJvZHVjZSBpZi10b3AtdXJsIGFuZCB1bmxlc3MtdG9wLXVybApJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMzY3MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xODgsNiArMTg4LDcgQEAKIAkJNUM5RTU5NDExRDNFQjVBQzAwRTNDNjJFIC8qIEFwcGxpY2F0
aW9uQ2FjaGUuZGIgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUM5RTU5M0UxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIg
Ki87IH07CiAJCTVDOUU1OTQyMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRi
LXNobSBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzlFNTkzRjFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0gKi87
IH07CiAJCTVDOUU1OTQzMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdh
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzlFNTk0MDFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgKi87IH07
CisJCTVDRTM1NEQ5MUU3MERBNUMwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0Uz
NTREODFFNzBEOUMzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICov
OyB9OwogCQk1RTRCMUQyRTFENDA0QzYxMDAwNTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVD
cmFzaC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVF
NEIxRDJDMUQ0MDRDNjEwMDA1MzYyMSAvKiBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tICov
OyB9OwogCQk2QkZEMjk0QzFENUU2QzFEMDA4RUM5NjggLyogSGFzaENvdW50ZWRTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0EzOEQ3RTUxQzc1
MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAqLzsgfTsKIAkJNzU1QTIwQUYxRTZF
Mzg2MzAwOTNDNjlGIC8qIERhdGFiYXNlVHJhY2tlclRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1QTIwQUUxRTZFMzg2MzAwOTNDNjlGIC8q
IERhdGFiYXNlVHJhY2tlclRlc3QuY3BwICovOyB9OwpAQCAtMTA5MCw2ICsxMDkxLDcgQEAKIAkJ
NUM5RTU5M0UxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gQXBw
bGljYXRpb25DYWNoZS5kYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM5RTU5M0Yx
RDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJBcHBsaWNh
dGlvbkNhY2hlLmRiLXNobSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTQw
MUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXdhbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGlj
YXRpb25DYWNoZS5kYi13YWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0UzNTRE
ODFFNzBEOUMzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RTRCMUQyQzFENDA0QzYx
MDAwNTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLU2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gubW07IHBh
dGggPSAuLi9pb3MvV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzU1QTIwQUUxRTZFMzg2MzAwOTNDNjlGIC8qIERhdGFiYXNlVHJhY2tl
clRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YWJhc2VU
cmFja2VyVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1NjA5MTc3MTky
NTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lbW9yeUNhY2hlQWRkSW1hZ2VUb0Nh
Y2hlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY0Niw2ICsxNjQ4LDcg
QEAKIAkJCQkzN0I0N0UyRTFENjRFN0NBMDA1RjRFRkYgLyogV0tPYmplY3QubW0gKi8sCiAJCQkJ
MkQwMDA2NUQxQzFGNTg5NDAwODhFNkE3IC8qIFdLUERGVmlld1Jlc2l6ZUNyYXNoLm1tICovLAog
CQkJCTVFNEIxRDJDMUQ0MDRDNjEwMDA1MzYyMSAvKiBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNo
Lm1tICovLAorCQkJCTVDRTM1NEQ4MUU3MEQ5QzMwMEJFRkUzQiAvKiBXS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0gKi8sCiAJCQkJMkVGRjA2RDYxRDhBRjM0QTAwMDRCQjMwIC8qIFdLV2Vi
Vmlld0NhbmRpZGF0ZVRlc3RzLm1tICovLAogCQkJCTdDNDE3RjMxMUQxOUUxNDgwMEI4RUY1MyAv
KiBXS1dlYlZpZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tICovLAogCQkJCTBGM0I5NEE1
MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8sCkBA
IC0yOTE0LDYgKzI5MTcsNyBAQAogCQkJCTdDQ0U3RjFFMUE0MTFBRTYwMDQ0N0M0QyAvKiBXS1N0
cmluZ0pTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNEZDNTg1MUI4OTczOTEwMEQx
MDdFQiAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M0MTdGMzMxRDE5RTE0ODAwQjhFRjUzIC8qIFdLV2ViVmlld0RlZmF1bHROYXZpZ2F0aW9u
RGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Q0UzNTREOTFFNzBEQTVDMDBCRUZFM0Ig
LyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
Qjk0QTcxQTc3MjY3NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTk5ODRGQUNDMUNGRkFGNjAwMDhEMTk4QyAvKiBXS1dlYlZpZXdU
ZXh0SW5wdXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NjQzMjJENzFCNjFDQ0MzMDAyNEY4MDEg
LyogV29yZEJvdW5kYXJ5VHlwaW5nQXR0cmlidXRlcy5tbSBpbiBTb3VyY2VzICovLApJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjEzNjcw
KQkoZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tOjIxMzY3MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKwor
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitjbGFzcyBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVz
dCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0
VXAoKQorICAgIHsKKyAgICAgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zXTsKKyAgICB9Cit9OworCitzdGF0
aWMgTlNTdHJpbmcgKmJhc2ljRmlsdGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwor
CitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCit7Cisg
ICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNp
Y0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIs
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgCisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIp
OworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGls
aW5nKTsKK30KKworc3RhdGljIE5TU3RyaW5nICppbnZhbGlkRmlsdGVyID0gQCJbIjsKKworc3Rh
dGljIHZvaWQgY2hlY2tEb21haW4oTlNFcnJvciAqZXJyb3IpCit7CisgICAgRVhQRUNUX1NUUkVR
KFtbZXJyb3IgZG9tYWluXSBVVEY4U3RyaW5nXSwgW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0Rv
bWFpbiBVVEY4U3RyaW5nXSk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBp
bGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAg
IAorICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwo
ZXJyb3IpOworICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7CisgICAgICAgIEVYUEVDVF9FUShl
cnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVk
KTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiBG
YWlsZWQgdG8gcGFyc2UgdGhlIEpTT04gU3RyaW5nLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRG
OFN0cmluZ10pOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Cit9CisKK1RFU1RfRihf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQoreworICAgIF9fYmxvY2sg
Ym9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29t
cGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICpl
cnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAg
RVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29u
dGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBF
Q1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAg
ICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQoreworICAgIF9fYmxv
Y2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwo
ZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKyAgICAgICAgY2hlY2tE
b21haW4oZXJyb3IpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkKTsKKyAgICAgICAgRVhQRUNUX1NUUkVR
KCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1
cC4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKyAgICAgICAgCisgICAgICAg
IGRvbmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29t
cGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVu
c2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAgICB7
CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQ
RUNUX05VTEwoZXJyb3IpOworICAgICAgICAKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsK
KworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZh
bGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lv
biJdOworICAgIAorICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7CisgICAg
W1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxl
cjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKQorICAgIHsK
KyAgICAgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9O
T1RfTlVMTChlcnJvcik7CisgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclZlcnNp
b25NaXNtYXRjaCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWls
ZWQ6IFZlcnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVy
LiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworICAgICAgICAKKyAgICAgICAg
ZG9uZUxvb2tpbmdVcCA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lTG9va2luZ1VwKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVUZXN0LCBSZW1vdmFsKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0g
ZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0g
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tV
c2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwor
CisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJl
bW92aW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworVEVTVF9G
KF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJS
ZW1vdmUpCit7CisgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOworICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpe
KE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisgICAg
ICAgIGNoZWNrRG9tYWluKGVycm9yKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7CisgICAgICAgIEVY
UEVDVF9TVFJFUSgiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBk
dXJpbmcgcmVtb3ZlLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworCisgICAg
ICAgIGRvbmVSZW1vdmluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lUmVtb3ZpbmcpOworfQorCisjZW5kaWYKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxMzY3MCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsMjMgKzMwLDIzIEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCi0jaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotY2xhc3MgX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Citj
bGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKICAgICB7Ci0gICAgICAgIFtbX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9uc107CisgICAgICAgIFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0
b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwogICAgIH0KIH07CiAKIHN0YXRpYyBO
U1N0cmluZyAqYmFzaWNGaWx0ZXIgPSBAIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CiAKLVRF
U1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgQ29tcGlsZSkKK1RFU1RfRihX
S0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCiB7CiAgICAgX19ibG9jayBib29s
IGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJU
ZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0
aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0
ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9O
T1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC02MCwxOCAr
NjAsMTggQEAgc3RhdGljIE5TU3RyaW5nICppbnZhbGlkRmlsdGVyID0gQCJbIjsKIAogc3RhdGlj
IHZvaWQgY2hlY2tEb21haW4oTlNFcnJvciAqZXJyb3IpCiB7Ci0gICAgRVhQRUNUX1NUUkVRKFtb
ZXJyb3IgZG9tYWluXSBVVEY4U3RyaW5nXSwgW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFp
biBVVEY4U3RyaW5nXSk7CisgICAgRVhQRUNUX1NUUkVRKFtbZXJyb3IgZG9tYWluXSBVVEY4U3Ry
aW5nXSwgW1dLRXJyb3JEb21haW4gVVRGOFN0cmluZ10pOwogfQogCi1URVNUX0YoX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNpb24pCitURVNUX0YoV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBJbnZhbGlkRXh0ZW5zaW9uKQogewogICAgIF9fYmxvY2sg
Ym9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246aW52YWxpZEZpbHRlciBj
b21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNv
bXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0Nv
bnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAKICAgICAgICAg
RVhQRUNUX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAg
ICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwg
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCk7CisgICAgICAg
IEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGls
ZUZhaWxlZCk7CiAgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZh
aWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmluZy4iLCBbW2Vycm9yIGhlbHBBbmNo
b3JdIFVURjhTdHJpbmddKTsKIAogICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKQEAgLTc5
LDEwICs3OSwxMCBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIH0KIAotVEVTVF9G
KF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBMb29rdXApCitURVNUX0YoV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBMb29rdXApCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVD
b21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVm
YXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0
ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFu
ZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9u
ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVM
TChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC05Miw3ICs5Miw3IEBA
IFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwogCiAgICAgX19ibG9jayBib29sIGRvbmVM
b29raW5nVXAgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVm
YXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRl
bnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRT
dG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9u
IiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9y
ICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAg
ICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtMTAyLDE1ICsxMDIsMTUgQEAgVEVTVF9GKF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZUxvb2tpbmdVcCk7CiB9CiAKLVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQorVEVTVF9GKFdLQ29udGVudEV4
dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQogewogICAgIF9f
YmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpm
aWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRl
cik7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWlu
KGVycm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5j
b2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkKTsKICAgICAgICAg
RVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3Ig
ZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKICAgICAg
ICAgCiAgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOwpAQCAtMTE4LDEwICsxMTgsMTAgQEAg
VEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CiAKLVRFU1RfRihfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQorVEVTVF9GKFdLQ29udGVudEV4
dGVuc2lvblN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQogewogICAgIF9fYmxvY2sgYm9vbCBk
b25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVz
dEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlv
bkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikK
KyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRF
eHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNp
b24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCiAgICAgewogICAgICAgICAKICAgICAgICAgRVhQ
RUNUX05PVF9OVUxMKGZpbHRlcik7CkBAIC0xMzEsMTYgKzEzMSwxNiBAQCBURVNUX0YoX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25G
b3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiJdOworICAgIFtbV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUgZGVmYXVsdFN0b3JlXSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iXTsKICAgICAKICAgICBfX2Jsb2NrIGJvb2wgZG9u
ZUxvb2tpbmdVcCA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRT
dG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9u
IiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9y
ICplcnJvcikKICAgICB7CiAgICAgICAgIAogICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOwog
ICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVja0RvbWFpbihlcnJv
cik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29k
ZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCk7CiAgICAgICAg
IEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFZlcnNpb24gb2YgZmlsZSBk
b2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiIsIFtbZXJyb3IgaGVscEFuY2hv
cl0gVVRGOFN0cmluZ10pOwogICAgICAgICAKICAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7
CkBAIC0xNDgsMTAgKzE0OCwxMCBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsKIH0K
IAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1vdmFsKQorVEVT
VF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVtb3ZhbCkKIHsKICAgICBfX2Jsb2Nr
IGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNv
bXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAq
ZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29t
cGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRl
bnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAKICAgICAgICAgRVhQ
RUNUX05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKQEAgLTE2
MSw3ICsxNjEsNyBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAogICAgIF9fYmxv
Y2sgYm9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsK
KyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxl
cjpeKE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIAogICAg
ICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOwpAQCAtMTY5LDEzICsxNjksMTMgQEAgVEVTVF9GKF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZVJlbW92aW5nKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCitURVNUX0YoV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCiB7CiAgICAg
X19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFu
ZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7
CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNv
ZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7CisgICAg
ICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlUmVt
b3ZlRmFpbGVkKTsKICAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gcmVtb3ZhbCBmYWls
ZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIiwgW1tlcnJvciBoZWxwQW5jaG9y
XSBVVEY4U3RyaW5nXSk7CiAKICAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304011</attachid>
            <date>2017-03-09 16:51:10 -0800</date>
            <delta_ts>2017-03-09 17:47:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20170309165109.patch</filename>
            <type>text/plain</type>
            <size>204585</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTAzLTA5ICBCcmlhbiBO
aWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBm
b3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24gYW5k
IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJp
bmdzOgorCiAyMDE3LTAzLTA5ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBPbmx5IGNvbnNpZGVyIGF1dG9wbGF5IGludGVyZmVyZW5jZSBpbiB0aGUgZmlyc3QgMTAg
c2Vjb25kcyBvZiBwbGF5YmFjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ov
TG9jYWxpemFibGUuc3RyaW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwkod29ya2luZyBjb3B5KQpA
QCAtMTcyLDYgKzE3Miw5IEBACiAvKiBTdWJ0aXRsZSBvZiB0aGUgbGFiZWwgdG8gc2hvdyBvbiBh
IHNuYXBzaG90dGVkIHBsdWctaW4gKi8KICJDbGljayB0byByZXN0YXJ0IiA9ICJDbGljayB0byBy
ZXN0YXJ0IjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQg
ZGVzY3JpcHRpb24gKi8KKyJDb21waWxpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9
ICJDb21waWxpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKwogLyogV2ViS2l0RXJy
b3JDYW5ub3RTaG93TUlNRVR5cGUgZGVzY3JpcHRpb24gKi8KICJDb250ZW50IHdpdGggc3BlY2lm
aWVkIE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3duIiA9ICJDb250ZW50IHdpdGggc3BlY2lmaWVk
IE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3duIjsKIApAQCAtMzU4LDYgKzM2MSwxMiBAQAogLyog
TG9vayBVcCBjb250ZXh0IG1lbnUgaXRlbSB3aXRoIHNlbGVjdGVkIHdvcmQgKi8KICJMb29rIFVw
IOKAnDxzZWxlY3Rpb24+4oCdIiA9ICJMb29rIFVwIOKAnDxzZWxlY3Rpb24+4oCdIjsKIAorLyog
V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLwor
Ikxvb2tpbmcgdXAgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9ICJMb29raW5nIHVwIGEg
V0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCI7CisKKy8qIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9u
U3RvcmVWZXJzaW9uTWlzbWF0Y2ggZGVzY3JpcHRpb24gKi8KKyJMb29raW5nIHVwIGEgV0tDb250
ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIiA9ICJMb29r
aW5nIHVwIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21w
YXRpYmxlIjsKKwogLyogTWVkaWEgTG9vcCBjb250ZXh0IG1lbnUgaXRlbSAqLwogIkxvb3AiID0g
Ikxvb3AiOwogCkBAIC00OTYsNiArNTA1LDkgQEAKIC8qIFJlbG9hZCBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIlJlbG9hZCIgPSAiUmVsb2FkIjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiAqLworIlJlbW92aW5nIGEgV0tDb250ZW50RXh0
ZW5zaW9uIGZhaWxlZCIgPSAiUmVtb3ZpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsK
KwogLyogZGVmYXVsdCBsYWJlbCBmb3IgUmVzZXQgYnV0dG9ucyBpbiBmb3JtcyBvbiB3ZWIgcGFn
ZXMgKi8KICJSZXNldCIgPSAiUmVzZXQiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogdHlwZWRl
ZiB1aW50OF90IERGQUJ5dGVjb2RlOwogCi0vLyBJbmNyZW1lbnQgVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbgorLy8gSW5jcmVtZW50
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lv
bgogLy8gd2hlbiBtYWtpbmcgYW55IG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFuZ2VzIHRv
IHRoZSBieXRlY29kZS4KIC8vIEZJWE1FOiBDaGFuZ2VzIGhlcmUgc2hvdWxkIG5vdCByZXF1aXJl
IGNoYW5nZXMgaW4gV2ViS2l0Mi4gIE1vdmUgYWxsIHZlcnNpb25pbmcgdG8gV2ViQ29yZS4KIGVu
dW0gY2xhc3MgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQ4X3QgewpJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTY0IEBACisyMDE3LTAzLTA5ICBCcmlhbiBOaWNob2xzb24gIDxi
bmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBmb3IgY29udGVudCBm
aWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24gYW5kIEdlb2ZmIEdhcmVu
LgorCisgICAgICAgIFRoaXMgdGFrZXMgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBhbmQg
X1dLVXNlckNvbnRlbnRGaWx0ZXIgYW5kIHR1cm5zIHRoZW0gaW50byB0aGUgY29uc2lzdGVudGx5
LW5hbWVkIHB1YmxpYyBBUEkKKyAgICAgICAgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgYW5kIFdL
Q29udGVudEV4dGVuc2lvbiByZXNwZWN0aXZlbHkgd2l0aCB0aGUgc2FtZSBkZXNpZ24gYW5kIGZ1
bmN0aW9uYWx5IG9mIHRoZSBvcmlnaW5hbCBTUEkuCisgICAgICAgIFdlIGFsc28gYWRkZWQgcHVi
bGljIGZ1bmN0aW9ucyB0byBXS1VzZXJDb250ZW50Q29udHJvbGxlciBjb3JyZXNwb25kaW5nIHRv
IGV4aXN0aW5nIHByaXZhdGUgZnVuY3Rpb25zLgorCisgICAgICAgIFRoZSBvbGQgU1BJIE9iakMg
Y2xhc3NlcyBhcmUgbm93IGp1c3Qgd3JhcHBlcnMgYXJvdW5kIHRoZSBuZXcgT2JqQyBjbGFzc2Vz
LCB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIEMrKyBvYmplY3RzIGluIHRoZSBBUEkgbmFtZXNw
YWNlLgorICAgICAgICAKKyAgICAgICAgVGhlIHBlYWstbWVtb3J5LXJlZHVjaW5nIG9wdGltaXph
dGlvbiBvZiBoYXZpbmcgTlNfUkVMRUFTRVNfQVJHVU1FTlQgaW4gX2NvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllciBpcyBrZXB0IGZvciBTYWZhcmksCisgICAgICAgIGJ1dCB0aGUg
cHVibGljIEFQSSBkb2Vzbid0IG5lZWQgc3VjaCBhbiBvcHRpbWl6YXRpb24uICBUaGUgcHVibGlj
IGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllciB3aWxsIG5vdCBkZWFsbG9jYXRl
IHRoZSBpbnB1dAorICAgICAgICBOU1N0cmluZyBkdXJpbmcgY29tcGlsaW5nLgorICAgICAgICAK
KyAgICAgICAgV2UgbW92ZWQgdGhlIGVycm9yIGNvZGVzIGludG8gdGhlIFdLRXJyb3JEb21haW4s
IHdoaWNoIHJlcXVpcmVzIGNoYW5naW5nIHRoZSB2YWx1ZXMgb2YgdGhlIGVycm9yIGNvZGVzIGFu
ZCBkb21haW4sIGJ1dCBzb3VyY2UKKyAgICAgICAgY29tcGlsZWQgdGhhdCB1c2VzIHRoZSBTUEkg
YmVmb3JlIGFuZCBhZnRlciBzaG91bGQgc3RpbGwgd29yay4gIFVzaW5nIG5ldyBhcHBsaWNhdGlv
bnMgd2l0aCBvbGQgZnJhbWV3b3JrcyBvciB2aWNlIHZlcnNhIHdpbGwKKyAgICAgICAgaGF2ZSB1
bmV4cGVjdGVkIGVycm9yIGNvZGVzLCB0aG91Z2guCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SU9iamVjdC5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoV0tQYWdlR3JvdXBBZGRVc2VyQ29udGVudEZpbHRlcik6CisgICAgICAg
IChXS1BhZ2VHcm91cFJlbW92ZVVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKiBTaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVjdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcDogQ29waWVkIGZy
b20gVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAuCisgICAgICAgIChB
UEk6OkNvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoQVBJOjpD
b250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChBUEk6OlVzZXJD
b250ZW50RXh0ZW5zaW9uOjpVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjp+VXNlckNvbnRlbnRFeHRlbnNpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmguCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOiBDb3BpZWQgZnJv
bSBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwLgorICAgICAg
ICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIChB
UEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aCk6CisgICAgICAgIChBUEk6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q29udGVudEV4dGVuc2lvblN0b3JlKToKKyAgICAgICAg
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjp+Q29udGVudEV4dGVuc2lvblN0b3JlKToKKyAg
ICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUpOgorICAgICAgICAoQVBJOjpjcmVhdGVFeHRlbnNp
b24pOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpy
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0
b3JlOjpzeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNp
b24pOgorICAgICAgICAoQVBJOjpjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KToK
KyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKTog
RGVsZXRlZC4KKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVX
aXRoUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSk6IERl
bGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENv
bnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOiBE
ZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yQ2F0ZWdvcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dEV4dGVuc2lvblN0b3JlLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAoQVBJOjptYWtlX2Vycm9yX2NvZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQ
SUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHA6Cisg
ICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVzZXJDb250ZW50RmlsdGVyKToKKyAg
ICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUdldFR5cGVJRCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlQ29jb2EubW06CisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVs
dFN0b3JlUGF0aCk6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRl
ZmF1bHRTdG9yZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRGaWx0ZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudEV4dGVuc2lvbi5tbTogQ29waWVkIGZyb20gVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlci5tbS4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uIGRlYWxsb2Nd
KToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdKToKKyAgICAgICAg
KC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgZGVhbGxvY10pOiBEZWxldGVkLgorICAgICAgICAoLVtf
V0tVc2VyQ29udGVudEZpbHRlciBfYXBpT2JqZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oOiBDb3BpZWQgZnJv
bSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaC4KKyAg
ICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oOiBDb3BpZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOiBDb3BpZWQgZnJvbSBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0uCisgICAgICAgICgtW1dL
Q29udGVudEV4dGVuc2lvblN0b3JlIGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSk6CisgICAgICAgICgrW1dLQ29udGVudEV4dGVuc2lv
blN0b3JlIHN0b3JlV2l0aFVSTDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZSBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOnJlbGVhc2VzQXJndW1lbnQ6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVj
dF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVu
dEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2ludmFs
aWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgt
W1dLQ29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVhbGxvY10pOiBEZWxldGVkLgor
ICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0pOiBE
ZWxldGVkLgorICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0
aFVSTDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgX2FwaU9iamVjdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOiBEZWxldGVkLgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbnZhbGlkYXRlQ29udGVu
dEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oLgorICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOiBDb3BpZWQgZnJv
bSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tOgorICAgICAgICAobG9jYWxpemVkRGVzY3Jp
cHRpb25Gb3JFcnJvckNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxl
ciBhZGRDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJv
bGxlciByZW1vdmVDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50
Q29udHJvbGxlciByZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAgICAgICAoLVtXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlckNvbnRlbnRGaWx0ZXI6XSk6CisgICAgICAgICgt
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjpdKToKKyAg
ICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJDb250ZW50Rmls
dGVyc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWZhdWx0U3RvcmVdKToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBzdG9yZVdpdGhVUkw6XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9hcGlPYmplY3RdKToK
KyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVu
dEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBf
aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpdKToKKyAgICAg
ICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZTpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYktpdDo6d3JhcHBl
cik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RmlsdGVy
IF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgX2luaXRXaXRo
V0tDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEZpbHRlciBk
ZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlckludGVybmFsLmg6CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQ29udGVudEV4dGVu
c2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2Vy
Q29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwOgorICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudEV4dGVuc2lvbnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUNvbnRl
bnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50
RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RXJyb3JzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpibG9ja2VkQnlDb250ZW50RmlsdGVyRXJy
b3IpOgorCiAyMDE3LTAzLTA5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgV0tVUkxTY2hlbWVIYW5kbGVyIEFQSSBmb3IgaGFuZGxpbmcgY3VzdG9tIHBy
b3RvY29scy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAkocmV2aXNp
b24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgQmFja0Zvcndh
cmRMaXN0SXRlbSwKICAgICAgICAgQ2FjaGVNYW5hZ2VyLAogICAgICAgICBDb2xvclBpY2tlclJl
c3VsdExpc3RlbmVyLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uLAorICAgICAgICBDb250ZW50
RXh0ZW5zaW9uU3RvcmUsCiAgICAgICAgIENvbnRleHRNZW51TGlzdGVuZXIsCiAgICAgICAgIENv
b2tpZU1hbmFnZXIsCiAgICAgICAgIERvd25sb2FkLApAQCAtMTQ2LDggKzE0OCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgVGV4dENoZWNrZXIsCiAgICAgICAgIFVSTFNjaGVtZUhhbmRsZXJUYXNrLAog
ICAgICAgICBVc2VyQ29udGVudENvbnRyb2xsZXIsCi0gICAgICAgIFVzZXJDb250ZW50RXh0ZW5z
aW9uLAotICAgICAgICBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLAogICAgICAgICBVc2VyQ29u
dGVudFdvcmxkLAogICAgICAgICBVc2VySW5pdGlhdGVkQWN0aW9uLAogICAgICAgICBVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2ssCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tE
ZXByZWNhdGVkRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjEzNjg3KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisj
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSURpY3Rpb25hcnku
aCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldLQXJy
YXkuaCIKICNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV0tNdXRhYmxl
RGljdGlvbmFyeS5oIgpAQCAtNTYsMjIgKzU2LDIyIEBAIFdLU3RyaW5nUmVmIFdLUGFnZUdyb3Vw
Q29weUlkZW50aWZpZXIoV0sKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBXS1BhZ2VH
cm91cEFkZFVzZXJDb250ZW50RmlsdGVyKFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tV
c2VyQ29udGVudEZpbHRlclJlZiB1c2VyQ29udGVudEZpbHRlclJlZikKK3ZvaWQgV0tQYWdlR3Jv
dXBBZGRVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLVXNl
ckNvbnRlbnRGaWx0ZXJSZWYgY29udGVudEZpbHRlclJlZikKIHsKICNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKS5hZGRVc2VyQ29udGVudEV4dGVuc2lvbigqdG9JbXBsKHVzZXJDb250ZW50RmlsdGVy
UmVmKSk7CisgICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigp
LmFkZENvbnRlbnRFeHRlbnNpb24oKnRvSW1wbChjb250ZW50RmlsdGVyUmVmKSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VyQ29u
dGVudEZpbHRlclJlZik7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRlbnRGaWx0ZXJSZWYpOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgV0tQYWdlR3JvdXBSZW1vdmVVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIHVzZXJDb250ZW50RmlsdGVyTmFtZVJl
ZikKK3ZvaWQgV0tQYWdlR3JvdXBSZW1vdmVVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIGNvbnRlbnRGaWx0ZXJOYW1lUmVmKQogewogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVz
ZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3Ry
aW5nKHVzZXJDb250ZW50RmlsdGVyTmFtZVJlZikpOworICAgIHRvSW1wbChwYWdlR3JvdXBSZWYp
LT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3Ry
aW5nKGNvbnRlbnRGaWx0ZXJOYW1lUmVmKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdl
R3JvdXBSZWYpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VyQ29udGVudEZpbHRlck5hbWVSZWYpOwor
ICAgIFVOVVNFRF9QQVJBTShjb250ZW50RmlsdGVyTmFtZVJlZik7CiAjZW5kaWYKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4
dGVuc2lvbkludGVybmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS0ZyYW1lSW5mb0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS05TQXJy
YXkuaCIKICNpbXBvcnQgIldLTlNEYXRhLmgiCkBAIC03MSw4ICs3Myw2IEBACiAjaW1wb3J0ICJf
V0tGcmFtZUhhbmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmgiCi0j
aW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKLSNpbXBvcnQg
Il9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50
V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmgiCkBAIC0yMzQsMTIgKzIz
NCwxMiBAQCB2b2lkKiBPYmplY3Q6Om5ld09iamVjdChzaXplX3Qgc2l6ZSwgVHlwCiAgICAgICAg
IHdyYXBwZXIgPSBbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgYWxsb2NdOwogICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb246Ci0gICAgICAgIHdyYXBw
ZXIgPSBbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2NdOworICAgIGNhc2UgVHlwZTo6Q29udGVu
dEV4dGVuc2lvbjoKKyAgICAgICAgd3JhcHBlciA9IFtXS0NvbnRlbnRFeHRlbnNpb24gYWxsb2Nd
OwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZToKLSAgICAgICAgd3JhcHBlciA9IFtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFs
bG9jXTsKKyAgICBjYXNlIFR5cGU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZToKKyAgICAgICAgd3Jh
cHBlciA9IFtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxvY107CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBUeXBlOjpVc2VyQ29udGVudFdvcmxkOgpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAKICNpbmNsdWRlICJBUElBcnJh
eS5oIgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJ
Q29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRl
ICJBUElVc2VyU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0
ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQ
SUNvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwOjIxMzY4NykKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgorCituYW1lc3BhY2UgQVBJIHsKKworVXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKKyAgICA6IG1fbmFt
ZShuYW1lKQorICAgICwgbV9jb21waWxlZEV4dGVuc2lvbihXVEZNb3ZlKGNvbnRlbnRFeHRlbnNp
b24pKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvbjo6flVzZXJDb250ZW50RXh0ZW5zaW9u
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVu
c2lvbi5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIApAQCAtMzIsMTMgKzMy
LDEzIEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1Vc2VyQ29udGVudEV4dGVuc2lvbjo6VXNlckNv
bnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQorQ29udGVudEV4dGVu
c2lvbjo6Q29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCiAgICAg
OiBtX25hbWUobmFtZSkKICAgICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGTW92ZShjb250ZW50
RXh0ZW5zaW9uKSkKIHsKIH0KIAotVXNlckNvbnRlbnRFeHRlbnNpb246On5Vc2VyQ29udGVudEV4
dGVuc2lvbigpCitDb250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4dGVuc2lvbigpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4
dGVuc2lvbi5oCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDoyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lv
bl9oCisjZGVmaW5lIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKKworI2luY2x1ZGUgIkFQSU9i
amVjdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKK30KKworbmFtZXNwYWNl
IEFQSSB7CisKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVj
dEltcGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvbj4geworcHVibGljOgorI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4
dGVuc2lvbj4gY3JlYXRlKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1v
dmUoY29udGVudEV4dGVuc2lvbikpKTsKKyAgICB9CisKKyAgICBVc2VyQ29udGVudEV4dGVuc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uPiYmKTsKKyAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvbigpOworCisg
ICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAg
ICBjb25zdCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRl
bnNpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGVkRXh0ZW5zaW9uLmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgV1RGOjpTdHJpbmcgbV9uYW1lOworICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbj4gbV9jb21waWxlZEV4dGVuc2lvbjsKKyNlbmRpZiAvLyBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRp
ZiAvLyBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKLSNk
ZWZpbmUgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25faAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM1LDE2
ICszNCwxNiBAQCBjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247CiAKIG5hbWVzcGFj
ZSBBUEkgewogCi1jbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBPYmpl
Y3RJbXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHsKK2NsYXNzIENvbnRl
bnRFeHRlbnNpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRl
bnRFeHRlbnNpb24+IHsKIHB1YmxpYzoKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
ICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNv
bnRlbnRFeHRlbnNpb24pCisgICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUo
Y29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSwgV1RGTW92ZShjb250ZW50RXh0ZW5z
aW9uKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0ZW5zaW9uKG5h
bWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpKTsKICAgICB9CiAKLSAgICBVc2VyQ29udGVu
dEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLSAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lv
bigpOworICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJik7CisgICAgdmlydHVhbCB+Q29u
dGVudEV4dGVuc2lvbigpOwogCiAgICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGVkRXh0
ZW5zaW9uLmdldCgpOyB9CkBAIC01Niw1ICs1NSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9uIDIxMzY4NykJKGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoyMTM2ODcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4
dGVuc2lvbkVycm9yLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0
d29ya0NhY2hlOworCituYW1lc3BhY2UgQVBJIHsKKworVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkKK3sKKyAgICBzdGF0
aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVmYXVsdFN0b3JlID0gYWRvcHRSZWYobmV3
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gKmRlZmF1
bHRTdG9yZTsKK30KKworUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0
aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
KHN0b3JlUGF0aCkpOworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlKCkKKyAgICA6IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVs
dFN0b3JlUGF0aCgpKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCisgICAgOiBt
X3N0b3JlUGF0aChzdG9yZVBhdGgpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShXb3JrUXVldWU6OmNy
ZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVl
OjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkKKyAgICAsIG1fcmVtb3Zl
UXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVtb3Zl
IFF1ZXVlIikpCit7Cit9CisKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Vc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlKCkKK3sKK30KKworc3RhdGljIFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgo
Y29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVu
c2lvbi0iICsgV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRpZmllcikpOworfQorCisv
LyBUaGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBkZW5zZWx5IHBhY2tlZCBieXRlcyBpbiB0aGUg
ZmlsZSwgbm90IHNpemVvZiBhbmQgb2Zmc2V0b2YsIHdoaWNoIHdvdWxkCisvLyByZXByZXNlbnQg
dGhlIHNpemUgYW5kIG9mZnNldCBvZiB0aGUgc3RydWN0dXJlIGluIG1lbW9yeSwgcG9zc2libHkg
d2l0aCBjb21waWxlci1hZGRlZCBwYWRkaW5nLgorY29uc3Qgc2l6ZV90IENvbnRlbnRFeHRlbnNp
b25GaWxlSGVhZGVyU2l6ZSA9IDIgKiBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50
NjRfdCk7Citjb25zdCBzaXplX3QgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0ID0g
c2l6ZW9mKHVpbnQzMl90KSArIDQgKiBzaXplb2YodWludDY0X3QpOworCitzdHJ1Y3QgQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9uIHsgVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiB9OworICAg
IHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDY0X3QgY29uZGl0aW9uZWRGaWx0
ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQzMl90IGNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbiB7IGZhbHNlIH07CisgICAgCisgICAgc2l6ZV90IGZpbGVTaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAg
ICAgICAgICsgYWN0aW9uc1NpemUKKyAgICAgICAgICAgICsgZmlsdGVyc1dpdGhvdXRDb25kaXRp
b25zQnl0ZWNvZGVTaXplCisgICAgICAgICAgICArIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlU2l6ZQorICAgICAgICAgICAgKyBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7Cisg
ICAgfQorfTsKKworc3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKGNv
bnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCit7CisgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOworCisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS52ZXJz
aW9uOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYWN0aW9uc1NpemU7CisgICAgZW5jb2RlciA8
PCBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgZW5j
b2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAg
ZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAg
ZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisKKyAgICBB
U1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJT
aXplKTsKKyAgICByZXR1cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7Cit9CisKK3N0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkK
K3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFE
YXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkgeworICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUg
Y29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQorICAgICAgICAvLyBwYXNzZWQg
dG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgorICAgICAg
ICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUp
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRh
LmFjdGlvbnNTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNp
emUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
Y29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlP
bmx5VG9Eb21haW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBzdWNj
ZXNzOworfQorCitzdGF0aWMgYm9vbCBvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihjb25zdCBT
dHJpbmcmIHBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZp
bGVEYXRhKQoreworICAgIGZpbGVEYXRhID0gbWFwRmlsZShXZWJDb3JlOjpmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKKyAgICBpZiAoZmlsZURhdGEuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2RlQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgRGF0
YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIGlmIChXZWJDb3JlOjp3cml0
ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRhdGEsIHNpemUpID09IC0xKSB7CisgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHN1Y2Nlc3M7
Cit9CisKK3N0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3RyaW5nJiYganNv
biwgY29uc3QgU3RyaW5nJiBmaW5hbEZpbGVQYXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczsKKworICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50IGZp
bmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CisgICAgcHVi
bGljOgorICAgICAgICBDb21waWxhdGlvbkNsaWVudChXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKKyAgICAg
ICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVIYW5kbGUpCisgICAgICAgICAgICAsIG1fbWV0YURh
dGEobWV0YURhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuYWN0
aW9uc1NpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0
ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRh
RGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJU
KCFtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHdyaXRlRmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUo
VmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0
ZWNvZGUuc2l6ZSgpOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRh
KCksIGJ5dGVjb2RlLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IHdyaXRlRmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYm
IGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0
aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBtX2ZpbHRlcnNXaXRoQ29u
ZGl0aW9uQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsKKyAgICAgICAgICAgIHdy
aXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB3cml0ZVRvcFVSTEZpbHRlcnNCeXRlY29kZShW
ZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7
CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUu
c2l6ZSgpKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8
U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucywgYm9vbCBjb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW4pIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFt
X2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9hY3Rpb25zV3JpdHRlbik7CisgICAgICAgICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFj
dGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4g
PSBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisgICAgICAgICAgICB3cml0ZVRvRmlsZShE
YXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGZpbmFsaXplKCkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAg
bV9tZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IG1fYWN0aW9uc1dyaXR0ZW47CisgICAgICAgICAgICBt
X21ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IG1fZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0
YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBtX2ZpbHRlcnNXaXRoQ29uZGl0
aW9uQnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5jb25kaXRpb25lZEZp
bHRlcnNCeXRlY29kZVNpemUgPSBtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW47Cisg
ICAgICAgICAgICBtX21ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiA9IG1fY29u
ZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRh
IGhlYWRlciA9IGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtX21ldGFEYXRhKTsKKyAg
ICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgV2ViQ29yZTo6c2Vla0ZpbGUobV9maWxlSGFu
ZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVTZWVrT3JpZ2luOjpTZWVrRnJvbUJlZ2lubmluZykgPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsK
KyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB3cml0ZVRvRmlsZShoZWFkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkgeyByZXR1cm4gbV9maWxlRXJyb3I7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgd3JpdGVUb0ZpbGUoY29uc3QgRGF0YSYg
ZGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiAhd3JpdGVE
YXRhVG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7CisgICAgICAgIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKKyAgICAgICAgc2l6ZV90IG1fZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAgICBzaXplX3QgbV9maWx0
ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1f
Y29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1f
YWN0aW9uc1dyaXR0ZW4geyAwIH07CisgICAgICAgIGJvb2wgbV9jb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW4geyBmYWxzZSB9OworICAgICAgICBib29sIG1fZmlsZUVycm9yIHsgZmFsc2UgfTsK
KyAgICB9OworCisgICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJD
b3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVI
YW5kbGUpOworICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAKKyAgICBjaGFyIGludmFsaWRIZWFkZXJb
Q29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplXTsKKyAgICBtZW1zZXQoaW52YWxpZEhlYWRl
ciwgMHhGRiwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKKyAgICAvLyBUaGlzIGhlYWRlciB3aWxs
IGJlIHJld3JpdHRlbiBpbiBDb21waWxhdGlvbkNsaWVudDo6ZmluYWxpemUuCisgICAgaWYgKFdl
YkNvcmU6OndyaXRlVG9GaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIGludmFsaWRIZWFkZXIsIHNp
emVvZihpbnZhbGlkSGVhZGVyKSkgPT0gLTEpIHsKKyAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxl
KHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgfQorCisgICAgQ29tcGlsYXRpb25D
bGllbnQgY29tcGlsYXRpb25DbGllbnQodGVtcG9yYXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOwor
ICAgIAorICAgIGlmIChhdXRvIGNvbXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGls
YXRpb25DbGllbnQsIFdURk1vdmUoanNvbikpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmls
ZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyRXJyb3I7Cisg
ICAgfQorICAgIGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGluZ1RvRmls
ZSgpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsK
KyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxl
RmFpbGVkOworICAgIH0KKyAgICAKKyAgICBtYXBwZWREYXRhID0gYWRvcHRBbmRNYXBGaWxlKHRl
bXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZpbGVTaXplKCkpOworICAgIGlmIChtYXBw
ZWREYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisKKyAgICBpZiAoIVdlYkNvcmU6Om1vdmVGaWxlKHRl
bXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9u
TWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3sKKyAgICBhdXRvIHNo
YXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50
OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKKyAg
ICAgICAgV1RGTW92ZShzaGFyZWRNZW1vcnkpLAorICAgICAgICBmaWxlRGF0YSwKKyAgICAgICAg
Q29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0LAorICAgICAgICBDb250ZW50RXh0ZW5z
aW9uRmlsZUhlYWRlclNpemUsCisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNTaXplLAorICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEu
YWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5
dGVjb2RlU2l6ZSwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAg
ICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmZp
bHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgbWV0YURhdGEuZmls
dGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9u
RmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKKyAgICAg
ICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplCisg
ICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwK
KyAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCisgICAgKTsK
KyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhKSk7CisgICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVu
dGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOworfQorCit2b2lkIFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRl
bnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
aWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3Rv
cmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3Rl
ZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKKyAgICAgICAgCisgICAgICAgIENvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKKyAgICAgICAgRGF0YSBmaWxlRGF0YTsKKyAgICAg
ICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURh
dGEpKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0ciwgRXJyb3I6Okxvb2t1cEZhaWxlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1ldGFEYXRhLnZl
cnNpb24gIT0gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNp
b25GaWxlVmVyc2lvbikgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpWZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1v
dmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBSZWZQdHI8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVF
eHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29u
dGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcm
JiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwg
c3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9jb21waWxlUXVl
dWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIg
PSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwg
c3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBhdXRv
IHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKKworICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURh
dGE7CisgICAgICAgIGF1dG8gZXJyb3IgPSBjb21waWxlZFRvRmlsZShXVEZNb3ZlKGpzb24pLCBw
YXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyksIGVycm9yID0gV1RGTW92ZShlcnJvciksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyLCBlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3Zl
KGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdU
Rk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSB7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4g
dXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURh
dGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50
RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgp
LCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisKKyAgICAg
ICAgaWYgKCFXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpKSB7CisgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoRXJyb3I6OlJlbW92ZUZhaWxlZCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMoKQoreworICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdl
YkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgsICIqIikpCisgICAgICAgIFdlYkNvcmU6
OmRlbGV0ZUZpbGUocGF0aCk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVu
dGlmaWVyKQoreworICAgIGF1dG8gZmlsZSA9IFdlYkNvcmU6Om9wZW5GaWxlKGNvbnN0cnVjdGVk
UGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7Cisg
ICAgaWYgKGZpbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyOwor
ICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBzaXplb2YoaW52YWxpZEhl
YWRlcikpOworICAgIEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4gPT0g
c2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKKyAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7Cit9
CisgICAgCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JDYXRlZ29yeSgpCit7CisgICAgY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjplcnJvcl9jYXRlZ29yeSB7CisgICAgICAgIGNv
bnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2VwdCBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gInVzZXIgY29udGVudCBleHRlbnNpb24gc3RvcmUiOworICAgICAgICB9CisK
KyAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2RlKSBjb25zdCBmaW5hbAor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7CisgICAgICAgICAgICBjYXNlIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgbG9va3VwLiI7CisgICAgICAgICAg
ICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2gg
dmVyc2lvbiBvZiBpbnRlcnByZXRlci4iOworICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7CisgICAgICAgICAgICBjYXNl
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CisgICAg
cmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OworfQorCit9IC8vIG5hbWVzcGFj
ZSBBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDExICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lv
blN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi0jaW5jbHVkZSAi
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKQEAgLTQ2LDMxICs0Niwz
MSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpOZXR3b3JrQ2FjaGU7CiAKIG5hbWVzcGFjZSBB
UEkgewogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpkZWZhdWx0U3RvcmUoKQorQ29udGVudEV4dGVuc2lvblN0b3JlJiBDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCiB7Ci0gICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVm
YXVsdFN0b3JlID0gYWRvcHRSZWYobmV3IENvbnRlbnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigp
OwogICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOwogfQogCi1SZWY8VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZT4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBX
VEY6OlN0cmluZyYgc3RvcmVQYXRoKQorUmVmPENvbnRlbnRFeHRlbnNpb25TdG9yZT4gQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBh
dGgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZShzdG9yZVBhdGgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0ZW5zaW9u
U3RvcmUoc3RvcmVQYXRoKSk7CiB9CiAKLVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OlVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDogVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZShk
ZWZhdWx0U3RvcmVQYXRoKCkpCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZSgpCisgICAgOiBDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgp
KQogewogfQogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCitDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQog
ICAgIDogbV9zdG9yZVBhdGgoc3RvcmVQYXRoKQotICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgQ29tcGlsZSBRdWV1ZSIsIFdv
cmtRdWV1ZTo6VHlwZTo6Q29uY3VycmVudCkpCi0gICAgLCBtX3JlYWRRdWV1ZShXb3JrUXVldWU6
OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBSZWFkIFF1ZXVlIikpCi0gICAgLCBt
X3JlbW92ZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IFJlbW92ZSBRdWV1ZSIpKQorICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUo
IkNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpD
b25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQorICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVl
dWU6OmNyZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0b3JlIFJlbW92ZSBRdWV1ZSIpKQogewogfQog
Ci1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgp
CitDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Db250ZW50RXh0ZW5zaW9uU3RvcmUoKQogewogfQog
CkBAIC04NSw3ICs4NSw3IEBAIGNvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRl
clMKIGNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQgPSBzaXpl
b2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7CiAKIHN0cnVjdCBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90IHZlcnNpb24geyBVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uIH07CisgICAgdWlu
dDMyX3QgdmVyc2lvbiB7IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRl
bnNpb25GaWxlVmVyc2lvbiB9OwogICAgIHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OwogICAg
IHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKICAg
ICB1aW50NjRfdCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CkBAIC0y
NjAsMTQgKzI2MCwxNCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0
CiAgICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZTsKICAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVu
VGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOwog
ICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6
RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAgICAgCiAgICAgY2hhciBpbnZhbGlkSGVhZGVyW0NvbnRl
bnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07CiAgICAgbWVtc2V0KGludmFsaWRIZWFkZXIsIDB4
RkYsIHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CiAgICAgLy8gVGhpcyBoZWFkZXIgd2lsbCBiZSBy
ZXdyaXR0ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6OmZpbmFsaXplLgogICAgIGlmIChXZWJDb3Jl
Ojp3cml0ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBpbnZhbGlkSGVhZGVyLCBzaXplb2Yo
aW52YWxpZEhlYWRlcikpID09IC0xKSB7CiAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1w
b3JhcnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
blN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKICAgICB9CiAKICAgICBDb21waWxhdGlvbkNs
aWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBtZXRhRGF0YSk7CkBA
IC0yNzgsMjAgKzI3OCwyMCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxl
KFN0CiAgICAgfQogICAgIGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGlu
Z1RvRmlsZSgpKSB7CiAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFu
ZGxlKTsKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpD
b21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6Q29tcGlsZUZhaWxlZDsKICAgICB9CiAgICAgCiAgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5k
TWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAg
ICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKIAogICAgIGlmICghV2ViQ29y
ZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQotICAgICAgICBy
ZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Cisg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKK3N0YXRpYyBSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBhdXRvIHNoYXJlZE1lbW9y
eSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4oZmls
ZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJv
dGVjdGlvbjo6UmVhZE9ubHkpOwogICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKQEAgLTMxNCwxMCAr
MzE0LDEwIEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4KICAgICAg
ICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCiAgICAgKTsKICAgICBh
dXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7
Ci0gICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVudGlmaWVy
LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOworICAgIHJldHVybiBBUEk6OkNv
bnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbikpOwogfQogCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1
cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9u
PHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUp
PiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2
b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5
KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBh
dXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKQEAgLTMz
MSw3ICszMzEsNyBAQCB2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtZXRh
RGF0YS52ZXJzaW9uICE9IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50
RXh0ZW5zaW9uRmlsZVZlcnNpb24pIHsKKyAgICAgICAgaWYgKG1ldGFEYXRhLnZlcnNpb24gIT0g
Q29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9u
KSB7CiAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRjaCk7CiAgICAgICAgICAgICB9KTsKQEAgLTMzOSwx
MyArMzM5LDEzIEBAIHZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ28KICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUo
aWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RG
TW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1
c2VyQ29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0
YSwgZmlsZURhdGEpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRF
eHRlbnNpb24sIHsgfSk7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9u
PiBjb250ZW50RXh0ZW5zaW9uID0gY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRh
LCBmaWxlRGF0YSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RXh0ZW5z
aW9uLCB7IH0pOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAotdm9pZCBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYg
aWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rp
b248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4g
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgbV9jb21waWxlUXVldWUtPmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xh
dGVkQ29weSgpLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9y
ZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3Rl
ZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKQEAgLTM2MSwxMyArMzYxLDEzIEBAIHZvaWQg
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUMKICAgICAgICAgfQogCiAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdU
Rk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVh
dGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICAg
ICAgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiA9IGNyZWF0
ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoY29udGVudEV4dGVuc2lvbiwgeyB9KTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVu
dEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChz
dGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlm
aWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGgg
PSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBwYXRoID0gY29u
c3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CkBAIC0zODUsNDEgKzM4NSw0MSBA
QCB2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvCiAgICAgfSk7CiB9CiAK
LXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250
ZW50RXh0ZW5zaW9ucygpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNS
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRo
IDogV2ViQ29yZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkKICAgICAgICAgV2Vi
Q29yZTo6ZGVsZXRlRmlsZShwYXRoKTsKIH0KIAotdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRl
bnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKQogewogICAg
IGF1dG8gZmlsZSA9IFdlYkNvcmU6Om9wZW5GaWxlKGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0
aCwgaWRlbnRpZmllciksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKGZpbGUgPT0g
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKICAgICAgICAgcmV0dXJuOwotICAg
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyOworICAgIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGF1
dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBzaXplb2YoaW52YWxpZEhlYWRlcikp
OwogICAgIEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4gPT0gc2l6ZW9m
KGludmFsaWRIZWFkZXIpKTsKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7CiB9CiAgICAg
Ci1jb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JDYXRlZ29yeSgpCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9u
U3RvcmVFcnJvckNhdGVnb3J5KCkKIHsKLSAgICBjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVnb3J5IHsKKyAgICBjbGFz
cyBDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3Jf
Y2F0ZWdvcnkgewogICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qgbm9leGNlcHQgZmlu
YWwKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJ1c2VyIGNvbnRlbnQgZXh0ZW5zaW9u
IHN0b3JlIjsKKyAgICAgICAgICAgIHJldHVybiAiY29udGVudCBleHRlbnNpb24gc3RvcmUiOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2RlKSBj
b25zdCBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7Ci0gICAgICAgICAg
ICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I+KGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6TG9va3VwRmFpbGVkOgogICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZp
ZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgorICAgICAgICAgICAgY2FzZSBD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBp
bnRlcnByZXRlci4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gIlVu
c3BlY2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7Ci0gICAgICAgICAgICBjYXNlIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICBj
YXNlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxlZDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIjsKICAgICAg
ICAgICAgIH0KIApAQCAtNDI3LDcgKzQyNyw3IEBAIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkm
IHVzZXJDb250ZW50RXgKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRl
bnNpb25FcnJvckNhdGVnb3J5OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250ZW50RXh0
ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsK
ICAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaAkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDoyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNp
bmNsdWRlIDxzeXN0ZW1fZXJyb3I+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXVEYgeworY2xhc3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgQVBJIHsK
KworY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CisKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAg
ICAgICAgTG9va3VwRmFpbGVkID0gMSwKKyAgICAgICAgVmVyc2lvbk1pc21hdGNoLAorICAgICAg
ICBDb21waWxlRmFpbGVkLAorICAgICAgICBSZW1vdmVGYWlsZWQKKyAgICB9OworICAgIAorICAg
IC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNo
YW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KKyAgICAvLyB0
byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCisgICAgY29uc3Qgc3Rh
dGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA4OworCisg
ICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOworICAg
IHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRoUGF0aChjb25z
dCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKKworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKKyAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNv
bnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHZpcnR1YWwgflVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKKworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3Qg
V1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9p
ZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsK
KyAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBz
dGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0
IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+
KTsKKworICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCisgICAgdm9pZCBzeW5jaHJvbm91c1JlbW92
ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOworCitwcml2YXRlOgor
ICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKKworICAgIGNvbnN0IFdURjo6U3Ry
aW5nIG1fc3RvcmVQYXRoOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7
CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3Jr
UXVldWU+IG1fcmVtb3ZlUXVldWU7Cit9OworCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOworCitpbmxpbmUgc3RkOjpl
cnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
ciBlcnJvcikKK3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQorCit9IC8vIG5hbWVzcGFj
ZSBBUEkKKworbmFtZXNwYWNlIHN0ZCB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3Jf
Y29kZV9lbnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVibGlj
IHRydWVfdHlwZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgV29ya1F1ZXVlOwogCiBuYW1lc3BhY2UgQVBJIHsK
IAotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uOwog
Ci1jbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdElt
cGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiB7CitjbGFzcyBDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZT4gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgRXJyb3Ig
ewotICAgICAgICBMb29rdXBGYWlsZWQgPSAxLAorICAgICAgICBMb29rdXBGYWlsZWQgPSA2LCAv
LyBNaXJyb3JzIHZhbHVlIG9mIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWls
ZWQKICAgICAgICAgVmVyc2lvbk1pc21hdGNoLAogICAgICAgICBDb21waWxlRmFpbGVkLAogICAg
ICAgICBSZW1vdmVGYWlsZWQKQEAgLTUyLDE1ICs1MiwxNSBAQCBwdWJsaWM6CiAgICAgLy8gdG8g
cHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgogICAgIGNvbnN0IHN0YXRp
YyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gODsKIAotICAg
IHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKLSAgICBz
dGF0aWMgUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3Qg
V1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CisgICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgZGVmYXVsdFN0b3JlKCk7CisgICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uU3RvcmU+
IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CiAKLSAgICBleHBs
aWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7Ci0gICAgZXhwbGljaXQgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLSAgICB2aXJ0
dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgQ29udGVudEV4
dGVuc2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0
IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNpb25T
dG9yZSgpOwogCi0gICAgdm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0
cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0
cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOwotICAgIHZv
aWQgbG9va3VwQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwg
RnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJy
b3JfY29kZSk+KTsKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVm
UHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lk
IGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1
bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29k
ZSk+KTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwogCiAgICAgLy8g
Rm9yIHRlc3Rpbmcgb25seS4KQEAgLTc2LDE3ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIFJlZjxX
VEY6OldvcmtRdWV1ZT4gbV9yZW1vdmVRdWV1ZTsKIH07CiAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0
ZWdvcnkmIHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7Citjb25zdCBz
dGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7
CiAKLWlubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yIGVycm9yKQoraW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vy
cm9yX2NvZGUoQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJvcikKIHsKLSAgICByZXR1
cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yQ2F0ZWdvcnkoKSB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4oZXJyb3IpLCBj
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkgfTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgQVBJCiAKIG5hbWVzcGFjZSBzdGQgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9y
X2NvZGVfZW51bTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1Ymxp
YyB0cnVlX3R5cGUgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5z
aW9uLmNwcAkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0j
aW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCi0KLW5hbWVzcGFjZSBBUEkg
ewotCi1Vc2VyQ29udGVudEV4dGVuc2lvbjo6VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4m
JiBjb250ZW50RXh0ZW5zaW9uKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX2NvbXBpbGVk
RXh0ZW5zaW9uKFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpCi17Ci19Ci0KLVVzZXJDb250ZW50
RXh0ZW5zaW9uOjp+VXNlckNvbnRlbnRFeHRlbnNpb24oKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBBUEkKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVu
c2lvbi5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCi0jZGVmaW5l
IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNz
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci0KLWNs
YXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0
OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gewotcHVibGljOgotI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCi0gICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lvbj4gY3Jl
YXRlKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4
dGVuc2lvbikpKTsKLSAgICB9Ci0KLSAgICBVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYm
KTsKLSAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvbigpOwotCi0gICAgY29uc3QgV1RG
OjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiBtX2NvbXBpbGVkRXh0ZW5zaW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
V1RGOjpTdHJpbmcgbV9uYW1lOwotICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4gbV9jb21waWxlZEV4dGVuc2lvbjsKLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBBUElVc2Vy
Q29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQ
SVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJldmlz
aW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MzYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5j
bHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVE
YXRhLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlNo
YXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29k
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OjpOZXR3b3JrQ2FjaGU7Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1Vc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlJiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3Rv
cmUoKQotewotICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKiBkZWZhdWx0U3Rv
cmUgPSBhZG9wdFJlZihuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigpOwot
ICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOwotfQotCi1SZWY8VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6
OlN0cmluZyYgc3RvcmVQYXRoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUoc3RvcmVQYXRoKSk7Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDogVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCi17Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0
b3JlUGF0aCkKLSAgICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKLSAgICAsIG1fY29tcGlsZVF1
ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIENvbXBpbGUg
UXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQotICAgICwgbV9yZWFkUXVldWUo
V29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIp
KQotICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBSZW1vdmUgUXVldWUiKSkKLXsKLX0KLQotVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotewotfQotCi1zdGF0aWMgU3RyaW5n
IGNvbnN0cnVjdGVkUGF0aChjb25zdCBTdHJpbmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllcikKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJh
c2UsICJDb250ZW50RXh0ZW5zaW9uLSIgKyBXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVu
dGlmaWVyKSk7Ci19Ci0KLS8vIFRoZSBzaXplIGFuZCBvZmZzZXQgb2YgdGhlIGRlbnNlbHkgcGFj
a2VkIGJ5dGVzIGluIHRoZSBmaWxlLCBub3Qgc2l6ZW9mIGFuZCBvZmZzZXRvZiwgd2hpY2ggd291
bGQKLS8vIHJlcHJlc2VudCB0aGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBzdHJ1Y3R1cmUgaW4g
bWVtb3J5LCBwb3NzaWJseSB3aXRoIGNvbXBpbGVyLWFkZGVkIHBhZGRpbmcuCi1jb25zdCBzaXpl
X3QgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplID0gMiAqIHNpemVvZih1aW50MzJfdCkg
KyA0ICogc2l6ZW9mKHVpbnQ2NF90KTsKLWNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW5PZmZzZXQgPSBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7
Ci0KLXN0cnVjdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90IHZlcnNp
b24geyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZp
bGVWZXJzaW9uIH07Ci0gICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07Ci0gICAgdWludDY0
X3QgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVpbnQ2
NF90IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRf
dCBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdWludDMyX3QgY29u
ZGl0aW9uc0FwcGx5T25seVRvRG9tYWluIHsgZmFsc2UgfTsKLSAgICAKLSAgICBzaXplX3QgZmls
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25GaWxl
SGVhZGVyU2l6ZQotICAgICAgICAgICAgKyBhY3Rpb25zU2l6ZQotICAgICAgICAgICAgKyBmaWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUKLSAgICAgICAgICAgICsgZmlsdGVyc1dp
dGhDb25kaXRpb25zQnl0ZWNvZGVTaXplCi0gICAgICAgICAgICArIGNvbmRpdGlvbmVkRmlsdGVy
c0J5dGVjb2RlU2l6ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgRGF0YSBlbmNvZGVDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEoY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkK
LXsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7Ci0KLSAgICBlbmNvZGVy
IDw8IG1ldGFEYXRhLnZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6
ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5
dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5
dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbjsKLQotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50RXh0
ZW5zaW9uRmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0
IERhdGEmIGZpbGVEYXRhKQotewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGZpbGVE
YXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJl
IG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCi0g
ICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBk
YXRhIHNpemUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
dmVyc2lvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29u
ZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNv
ZGVTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRh
LmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBt
ZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCi17Ci0gICAgZmlsZURhdGEgPSBtYXBGaWxlKFdlYkNv
cmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmIChmaWxl
RGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEobWV0YURhdGEsIGZpbGVEYXRhKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlRGF0
YVRvRmlsZShjb25zdCBEYXRhJiBmaWxlRGF0YSwgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2Zk
LCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAg
aWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKGZkLCAoY29uc3QgY2hhciopZGF0YSwgc2l6ZSkgPT0g
LTEpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsKLSAgICAKLSAg
ICByZXR1cm4gc3VjY2VzczsKLX0KLQotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRv
RmlsZShTdHJpbmcmJiBqc29uLCBjb25zdCBTdHJpbmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIG1hcHBlZERhdGEpCi17Ci0gICAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOwotCi0gICAgY2xhc3MgQ29t
cGlsYXRpb25DbGllbnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9u
Q2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6
OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhKQotICAgICAgICAgICAgOiBtX2ZpbGVIYW5kbGUoZmlsZUhhbmRsZSkKLSAgICAg
ICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKCFtZXRhRGF0YS5hY3Rpb25zU2l6ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRh
LmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVj
b2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVj
b2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShE
YXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZShWZWN0
b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAg
IG1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgp
OwotICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2Rl
LnNpemUoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdyaXRlVG9wVVJM
RmlsdGVyc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmluYWwKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuICs9
IGJ5dGVjb2RlLnNpemUoKTsKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUu
ZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3Jp
dGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zLCBib29sIGNv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCFtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbik7Ci0gICAg
ICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOwot
ICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOwot
ICAgICAgICAgICAgQVNTRVJUKCFtX2FjdGlvbnNXcml0dGVuKTsKLSAgICAgICAgICAgIG1fYWN0
aW9uc1dyaXR0ZW4gKz0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbnNB
cHBseU9ubHlUb0RvbWFpbiA9IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKLSAgICAgICAg
ICAgIHdyaXRlVG9GaWxlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6ZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmluYWxpemUoKSBmaW5hbAotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX21ldGFEYXRhLmFjdGlvbnNTaXplID0gbV9hY3Rpb25zV3JpdHRl
bjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNv
ZGVTaXplID0gbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW47Ci0gICAg
ICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IG1f
ZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW47Ci0gICAgICAgICAgICBtX21ldGFE
YXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IG1fY29uZGl0aW9uRmlsdGVyc0J5
dGVjb2RlV3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluID0gbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIERhdGEgaGVhZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
KG1fbWV0YURhdGEpOwotICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiBXZWJDb3JlOjpz
ZWVrRmlsZShtX2ZpbGVIYW5kbGUsIDBsbCwgV2ViQ29yZTo6RmlsZVNlZWtPcmlnaW46OlNlZWtG
cm9tQmVnaW5uaW5nKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmls
ZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAgICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7IHJl
dHVybiBtX2ZpbGVFcnJvcjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB3cml0ZVRv
RmlsZShjb25zdCBEYXRhJiBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZmls
ZUVycm9yICYmICF3cml0ZURhdGFUb0ZpbGUoZGF0YSwgbV9maWxlSGFuZGxlKSkgewotICAgICAg
ICAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAg
ICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKLSAg
ICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtX21ldGFEYXRhOwotICAgICAgICBzaXpl
X3QgbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4geyAwIH07Ci0gICAg
ICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuIHsgMCB9Owot
ICAgICAgICBzaXplX3QgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuIHsgMCB9Owot
ICAgICAgICBzaXplX3QgbV9hY3Rpb25zV3JpdHRlbiB7IDAgfTsKLSAgICAgICAgYm9vbCBtX2Nv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9maWxl
RXJyb3IgeyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBhdXRvIHRlbXBvcmFyeUZpbGVIYW5kbGUg
PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotICAgIFN0cmluZyB0ZW1wb3Jh
cnlGaWxlUGF0aCA9IFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9u
IiwgdGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgaWYgKHRlbXBvcmFyeUZpbGVIYW5kbGUgPT0g
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwotICAgIAotICAgIGNo
YXIgaW52YWxpZEhlYWRlcltDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemVdOwotICAgIG1l
bXNldChpbnZhbGlkSGVhZGVyLCAweEZGLCBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIC8v
IFRoaXMgaGVhZGVyIHdpbGwgYmUgcmV3cml0dGVuIGluIENvbXBpbGF0aW9uQ2xpZW50OjpmaW5h
bGl6ZS4KLSAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwg
aW52YWxpZEhlYWRlciwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKSA9PSAtMSkgewotICAgICAgICBX
ZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLSAgICB9Ci0K
LSAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1wb3JhcnlGaWxlSGFu
ZGxlLCBtZXRhRGF0YSk7Ci0gICAgCi0gICAgaWYgKGF1dG8gY29tcGlsZXJFcnJvciA9IGNvbXBp
bGVSdWxlTGlzdChjb21waWxhdGlvbkNsaWVudCwgV1RGTW92ZShqc29uKSkpIHsKLSAgICAgICAg
V2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4g
Y29tcGlsZXJFcnJvcjsKLSAgICB9Ci0gICAgaWYgKGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9y
V2hpbGVXcml0aW5nVG9GaWxlKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBv
cmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0gICAgfQotICAgIAotICAgIG1hcHBlZERhdGEgPSBh
ZG9wdEFuZE1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgMCwgbWV0YURhdGEuZmlsZVNpemUo
KSk7Ci0gICAgaWYgKG1hcHBlZERhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLQotICAgIGlmICghV2Vi
Q29yZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQotICAgICAg
ICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb24+IGNyZWF0ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRh
KQotewotICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0
ZShjb25zdF9jYXN0PHVpbnQ4X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCks
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgYXV0byBj
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhKAotICAgICAgICBXVEZNb3ZlKHNoYXJlZE1lbW9yeSksCi0gICAgICAgIGZp
bGVEYXRhLAotICAgICAgICBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQsCi0gICAg
ICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuYWN0
aW9uc1NpemUsCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQotICAgICAg
ICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmls
ZUhlYWRlclNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKLSAgICAgICAg
ICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAg
ICAgICBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUsCi0gICAgICAg
IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5h
Y3Rpb25zU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlv
bnNCeXRlY29kZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVTaXplLAotICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRl
Y29kZVNpemUKLSAgICApOwotICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2Vi
S2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEpKTsKLSAgICByZXR1cm4gQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKGlkZW50aWZpZXIsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
KSk7Ci19Ci0KLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4
dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQ
dHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwg
c3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8g
cGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwotICAgICAgICAK
LSAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOwotICAgICAgICBEYXRh
IGZpbGVEYXRhOwotICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgs
IG1ldGFEYXRhLCBmaWxlRGF0YSkpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAobWV0YURhdGEudmVyc2lvbiAhPSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJy
ZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uKSB7Ci0gICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRj
aCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciks
IGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0
YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4
dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEp
OwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRFeHRlbnNpb24sIHsg
fSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlm
aWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNv
bnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBtX2NvbXBpbGVRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGpzb24gPSBqc29u
Lmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50
aWZpZXIpOwotCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKLSAg
ICAgICAgRGF0YSBmaWxlRGF0YTsKLSAgICAgICAgYXV0byBlcnJvciA9IGNvbXBpbGVkVG9GaWxl
KFdURk1vdmUoanNvbiksIHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAgICAgIGlmIChl
cnJvcikgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIGVycm9yKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRl
bnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0
YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJD
b250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihp
ZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOwotICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIodXNlckNvbnRlbnRFeHRlbnNpb24sIHsgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJv
cl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgbV9yZW1vdmVRdWV1ZS0+ZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZp
ZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVu
dGlmaWVyKTsKLQotICAgICAgICBpZiAoIVdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCkpIHsKLSAg
ICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihFcnJvcjo6UmVt
b3ZlRmFpbGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCi17Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkK
LSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKTsKLX0KLQotdm9pZCBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29uc3Qg
V1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpCi17Ci0gICAgYXV0byBmaWxlID0gV2ViQ29yZTo6b3Bl
bkZpbGUoY29uc3RydWN0ZWRQYXRoKG1fc3RvcmVQYXRoLCBpZGVudGlmaWVyKSwgV2ViQ29yZTo6
T3BlbkZvcldyaXRlKTsKLSAgICBpZiAoZmlsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
IGludmFsaWRIZWFkZXI7Ci0gICAgYXV0byBieXRlc1dyaXR0ZW4gPSBXZWJDb3JlOjp3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmaW52YWxpZEhlYWRlciks
IHNpemVvZihpbnZhbGlkSGVhZGVyKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChieXRlc1dyaXR0ZW4s
IGJ5dGVzV3JpdHRlbiA9PSBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIFdlYkNvcmU6OmNs
b3NlRmlsZShmaWxlKTsKLX0KLSAgICAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIHVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkKLXsKLSAgICBjbGFzcyBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVn
b3J5IHsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5vZXhjZXB0IGZpbmFsCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAidXNlciBjb250ZW50IGV4dGVuc2lvbiBzdG9y
ZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlKGludCBlcnJvckNv
ZGUpIGNvbnN0IGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+KGVycm9yQ29kZSkpIHsKLSAgICAg
ICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxl
ZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29r
dXAuIjsKLSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OlZlcnNpb25NaXNtYXRjaDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlZlcnNpb24gb2YgZmls
ZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiI7Ci0gICAgICAgICAgICBj
YXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOgotICAg
ICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGNvbXBpbGUuIjsK
LSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92
ZUZhaWxlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmlu
ZyByZW1vdmUuIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3Ry
aW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJy
b3JDYXRlZ29yeTsKLSAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEFQSQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLSNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKLSNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgV29ya1F1ZXVlOwotfQotCi1uYW1lc3Bh
Y2UgQVBJIHsKLQotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247Ci0KLWNsYXNzIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6
OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEVy
cm9yIHsKLSAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKLSAgICAgICAgVmVyc2lvbk1pc21hdGNo
LAotICAgICAgICBDb21waWxlRmFpbGVkLAotICAgICAgICBSZW1vdmVGYWlsZWQKLSAgICB9Owot
ICAgIAotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5j
dGlvbmFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4K
LSAgICAvLyB0byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAg
Y29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24g
PSA4OwotCi0gICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9y
ZSgpOwotICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRo
UGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLQotICAgIGV4cGxpY2l0IFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLSAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwotICAgIHZpcnR1YWwgflVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVu
Y3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3Jf
Y29kZSk+KTsKLSAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7Ci0gICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJy
b3JfY29kZSk+KTsKLQotICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gICAgdm9pZCBzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOwotCi1w
cml2YXRlOgotICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKLQotICAgIGNvbnN0
IFdURjo6U3RyaW5nIG1fc3RvcmVQYXRoOwotICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21w
aWxlUXVldWU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKLSAgICBSZWY8
V1RGOjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7Ci19OwotCi1jb25zdCBzdGQ6OmVycm9yX2Nh
dGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOwotCi1pbmxp
bmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvciBlcnJvcikKLXsKLSAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9y
KSwgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OwotfQotCi19IC8v
IG5hbWVzcGFjZSBBUEkKLQotbmFtZXNwYWNlIHN0ZCB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+
IDogcHVibGljIHRydWVfdHlwZSB7IH07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2Fz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNh
c3QuaAkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9TZXR0aW5ncy5oPgogCiBuYW1lc3BhY2UgQVBJIHsKK2NsYXNzIENvbnRlbnRFeHRl
bnNpb247CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uU3RvcmU7CiBjbGFzcyBFeHBlcmltZW50YWxG
ZWF0dXJlOwogY2xhc3MgRnJhbWVIYW5kbGU7CiBjbGFzcyBGcmFtZUluZm87CkBAIC02Myw4ICs2
NSw2IEBAIGNsYXNzIE9wZW5QYW5lbFBhcmFtZXRlcnM7CiBjbGFzcyBQYWdlQ29uZmlndXJhdGlv
bjsKIGNsYXNzIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjsKIGNsYXNzIFNlc3Npb25TdGF0ZTsK
LWNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOwotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTsKIGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBXZWJzaXRlRGF0YVN0b3JlOwogY2xhc3Mg
V2Vic2l0ZVBvbGljaWVzOwpAQCAtMTYxLDggKzE2MSw4IEBAIFdLX0FERF9BUElfTUFQUElORyhX
S1Jlc291cmNlTG9hZFN0YXRpc3QKIFdLX0FERF9BUElfTUFQUElORyhXS1Nlc3Npb25TdGF0ZVJl
ZiwgQVBJOjpTZXNzaW9uU3RhdGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJl
ZiwgV2ViVGV4dENoZWNrZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudENvbnRy
b2xsZXJSZWYsIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KQotV0tfQUREX0FQSV9NQVBQ
SU5HKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZiwgQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYsIEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb24pCitXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZSkKK1dLX0FERF9B
UElfTUFQUElORyhXS1VzZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb24p
CiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tSZWYsIFVzZXJN
ZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RSZWYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tVc2VyU2NyaXB0UmVmLCBBUEk6OlVzZXJTY3JpcHQpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHAJKHJl
dmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VH
cm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRl
bnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVk
ZSAiQVBJVXNlckNvbnRlbnRXb3JsZC5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNp
bmNsdWRlICJBUElVc2VyU3R5bGVTaGVldC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYu
Y3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVudENvbnRy
b2xsZXJSZWYuaCIKIAotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5j
bHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIK
ICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS5oIgpAQCAtNjIsMTMgKzYyLDEzIEBAIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJSZW1vdmVBbGxVc2UKIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJBZGRVc2VyQ29udGVu
dEZpbHRlcihXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJS
ZWYsIFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYgdXNlckNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9s
bGVyUmVmKS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnRvSW1wbCh1c2VyQ29udGVudEZpbHRl
clJlZikpOworICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xsZXJSZWYpLT5hZGRDb250ZW50
RXh0ZW5zaW9uKCp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJSZWYpKTsKICNlbmRpZgogfQogCiB2
b2lkIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKFdL
VXNlckNvbnRlbnRDb250cm9sbGVyUmVmIHVzZXJDb250ZW50Q29udHJvbGxlclJlZikKIHsKICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRy
b2xsZXJSZWYpLT5yZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB0b0ltcGwo
dXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsK
ICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHJldmlz
aW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUmVmLmgiCiAKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisj
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiBXS1R5cGVJRCBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVHZXRU
eXBlSUQoKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgcmV0dXJuIHRv
QVBJKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6QVBJVHlwZSk7CisgICAgcmV0dXJu
IHRvQVBJKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpBUElUeXBlKTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUNvY29hLm1tCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW5jbHVkZSAiQVBJQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1TdHJpbmcgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCgpCitTdHJpbmcgQ29udGVudEV4dGVu
c2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKCkKIHsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25j
ZV90IG9uY2VUb2tlbjsKICAgICBzdGF0aWMgTlNVUkwgKmNvbnRlbnRFeHRlbnNpb25TdG9yZVVS
TDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLmg6MjEzNjg3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworV0tfQ0xBU1Nf
QVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBfV0tVc2VyQ29u
dGVudEZpbHRlciA6IE5TT2JqZWN0CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDgg
KzI3LDggQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLVdLX0NMQVNTX0FWQUlMQUJMRShtYWNv
c3goMTAuMTEpLCBpb3MoOS4wKSkKLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgOiBO
U09iamVjdAorV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKQorQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gOiBOU09iamVjdAogCiBAZW5k
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06MjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgor
CisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJp
bmc+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEZpbHRlcgorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4dGVuc2lv
bigpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3Qg
cHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sK
KyAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvbjsKK30KKworQGVuZAorCisjZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTM2ODcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjQsMjAgKzI0LDE3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0ICJXS0Nv
bnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5z
aW9uRXJyb3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+CiAKLUBpbXBsZW1lbnRhdGlvbiBfV0tVc2Vy
Q29udGVudEZpbHRlcgorQGltcGxlbWVudGF0aW9uIFdLQ29udGVudEV4dGVuc2lvbgogCiAtICh2
b2lkKWRlYWxsb2MKIHsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4
dGVuc2lvbigpOworICAgIF9jb250ZW50RXh0ZW5zaW9uLT5+Q29udGVudEV4dGVuc2lvbigpOwog
CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNDYsNyArNDMsNyBAQCAtICh2b2lkKWRlYWxs
b2MKIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29u
dGVudEV4dGVuc2lvbjsKKyAgICByZXR1cm4gKl9jb250ZW50RXh0ZW5zaW9uOwogfQogCiBAZW5k
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2ODcpCShm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oOjIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCIKKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgi
CisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworaW5saW5lIF9X
S1VzZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVz
ZXJDb250ZW50RXh0ZW5zaW9uKQoreworICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24u
d3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwor
ICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53
cmFwcGVyKCk7Cit9CisKK30KKworQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoKSA8
V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNv
bnRlbnRFeHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKK30KK0BlbmQKKworI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShy
ZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvbkludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDI2ICsyMywyNiBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIl9XS1VzZXJD
b250ZW50RmlsdGVyLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb24uaCIKIAogI2lmIFdL
X0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1w
b3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250ZW50RXh0ZW5zaW9uKQoraW5saW5lIFdL
Q29udGVudEV4dGVuc2lvbiAqd3JhcHBlcihBUEk6OkNvbnRlbnRFeHRlbnNpb24mIGNvbnRlbnRF
eHRlbnNpb24pCiB7Ci0gICAgQVNTRVJUKFt1c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVyKCkg
aXNLaW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRGaWx0ZXIgY2xhc3NdXSk7Ci0gICAgcmV0dXJu
IChfV0tVc2VyQ29udGVudEZpbHRlciAqKXVzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKTsK
KyAgICBBU1NFUlQoW2NvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dL
Q29udGVudEV4dGVuc2lvbiBjbGFzc11dKTsKKyAgICByZXR1cm4gKFdLQ29udGVudEV4dGVuc2lv
biAqKWNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOwogfQogCiB9CiAKLUBpbnRlcmZhY2UgX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudEV4
dGVuc2lvbiAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdl
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKKyAgICBB
UEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBfY29udGVudEV4dGVuc2lv
bjsKIH0KIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMjEz
Njg3KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaDoyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4K
KworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKKwor
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBl
KWRlZmF1bHRTdG9yZTsKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJs
OworCistICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBOU19S
RUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVt
b3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsK
KworQGVuZAorCitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVu
c2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
RXJyb3JDb2RlKSB7CisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3Vw
RmFpbGVkID0gMSwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9u
TWlzbWF0Y2gsCisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZh
aWxlZCwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQs
Cit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKKworI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lv
biAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVu
dEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI3ICsyNywxOCBAQAogCiAjaWYgV0tfQVBJ
X0VOQUJMRUQKIAotQGNsYXNzIF9XS1VzZXJDb250ZW50RmlsdGVyOworQGNsYXNzIFdLQ29udGVu
dEV4dGVuc2lvbjsKIAotV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjAp
KQotQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKK1dL
X0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAogCiArIChpbnN0YW5j
ZXR5cGUpZGVmYXVsdFN0b3JlOwogKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwg
Kil1cmw7CiAKLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICop
IE5TX1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyOwotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9p
ZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClsb29rdXBDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcjsKIAogQGVuZAogCi1XS19FWFRFUk4gTlNTdHJpbmcgKiBjb25z
dCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
MTAuMTIpLCBpb3MoMTAuMCkpOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb2RlKSB7Ci0gICAgX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkID0gMSwKLSAgICBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gsCi0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCwKLSAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JSZW1vdmVGYWlsZWQsCi19IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwg
aW9zKDEwLjApKTsKLQogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxMzY4NykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOjIxMzY4NykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tFcnJvckludGVy
bmFsLmgiCisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0
IDxzdHJpbmc+CisKK05TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9t
YWluID0gQCJfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4iOworCitAaW1wbGVtZW50YXRp
b24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUo
KTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRT
dG9yZQoreworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7Cit9CisKKysgKGluc3RhbmNldHlwZSlzdG9yZVdp
dGhVUkw6KE5TVVJMICopdXJsCit7CisgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4gc3RvcmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBh
dGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7CisgICAgcmV0dXJu
IFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOworfQorCistICh2b2lkKWNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29t
cGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgU3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24pOworICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lvbiByZWxlYXNlXTsKKyAgICBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24p
LCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRl
bnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBjb21waWxhdGlvbiBmYWlsZWQ6ICVzIiwgZXJyb3IubWVz
c2FnZSgpLmNfc3RyKCldfTsKKworICAgICAgICAgICAgLy8gZXJyb3IudmFsdWUoKSBjb3VsZCBo
YXZlIGEgc3BlY2lmaWMgY29tcGlsZXIgZXJyb3IgdGhhdCBpcyBub3QgZXF1YWwgdG8gX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8v
IFdlIHdhbnQgdG8gdXNlIGVycm9yLm1lc3NhZ2UsIGJ1dCBoZXJlIHdlIHdhbnQgdG8gb25seSBw
YXNzIG9uIENvbXBpbGVGYWlsZWQuCisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJy
b3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQgdXNlckluZm86dXNl
ckluZm9dKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
cmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICop
KWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250
ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClsb29rdXBD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxl
dGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxv
b2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJy
b3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIg
PSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdl
dCgpOworCisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktl
eTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDog
JXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgQVNTRVJUKGVycm9y
LnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVk
IHx8IGVycm9yLnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVy
c2lvbk1pc21hdGNoKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJv
cldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6ZXJyb3IudmFs
dWUoKSB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50Rmls
dGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3SGFuZGxlcihXZWJL
aXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAgIH0pOworfQor
CistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAq
KWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKK3sKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFu
ZGxlciBjb3B5XSk7CisKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVtb3ZlQ29u
dGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2RlIGVycm9y
KSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKworICAgICAgICAgICAgYXV0byB1
c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0
cigpXX07CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxl
cihbTlNFcnJvciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWlu
IGNvZGU6X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkIHVzZXJJ
bmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwor
ICAgICAgICByYXdIYW5kbGVyKG5pbCk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXS09i
amVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9iamVjdCYpX2FwaU9iamVj
dAoreworICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0
ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKworLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNS
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworfQorCistICh2b2lkKV9pbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIK
K3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRl
bnNpb25WZXJzaW9uKGlkZW50aWZpZXIpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElf
RU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTM2ODcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNCw3NiArMjQsODAgQEAKICAqLwogCiAjaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgor
I2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbXBv
cnQgIldLRXJyb3JJbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRl
cm5hbC5oIgotI2ltcG9ydCA8c3RyaW5nPgogCi1OU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uc0RvbWFpbiA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIjsK
LQotQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKK0BpbXBsZW1l
bnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAg
ICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUo
KTsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5+Q29udGVudEV4dGVuc2lvblN0b3JlKCk7
CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICsgKGluc3RhbmNldHlwZSlkZWZhdWx0U3Rv
cmUKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJ
OjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKIH0KIAogKyAoaW5zdGFu
Y2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cmwKIHsKLSAgICBSZWY8QVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6c3RvcmVXaXRoUGF0aCh1cmwuYWJzb2x1dGVVUkwuZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KTsKKyAgICBSZWY8QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlID0gQVBJOjpDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFr
UmVmKCkpOwogfQogCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmlu
ZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShf
V0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2
b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVu
dGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24g
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVu
c2lvbjplbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9u
SGFuZGxlciByZWxlYXNlc0FyZ3VtZW50Ok5PXTsKK30KKworLSAodm9pZClfY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENv
bnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6KEJPT0wpcmVsZWFzZXNBcmd1bWVudAog
ewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsK
IAogICAgIFN0cmluZyBqc29uKGVuY29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb24gcmVsZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24g
PSBuaWw7CisgICAgaWYgKHJlbGVhc2VzQXJndW1lbnQpIHsKKyAgICAgICAgW2VuY29kZWRDb250
ZW50RXh0ZW5zaW9uIHJlbGVhc2VdOworICAgICAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9
IG5pbDsKKyAgICB9CiAKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNv
bnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0
cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9y
X2NvZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVu
dEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBbaGFuZGxlcl0oUmVmUHRyPEFQ
STo6Q29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVy
cm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVy
ID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5n
ZXQoKTsKKyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShXS0NvbnRlbnRF
eHRlbnNpb24gKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVy
cm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CiAKLSAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkg
Y291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRv
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCi0gICAgICAg
ICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRv
IG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWws
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4g
Y29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkIHVzZXJJ
bmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICAvLyBlcnJvci52YWx1ZSgpIGNvdWxkIGhhdmUg
YSBzcGVjaWZpYyBjb21waWxlciBlcnJvciB0aGF0IGlzIG5vdCBlcXVhbCB0byBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8vIFdlIHdhbnQg
dG8gdXNlIGVycm9yLm1lc3NhZ2UsIGJ1dCBoZXJlIHdlIHdhbnQgdG8gb25seSBwYXNzIG9uIENv
bXBpbGVGYWlsZWQgd2l0aCB1c2VySW5mbyBmcm9tIHRoZSBzdGQ6OmVycm9yX2NvZGUuCisgICAg
ICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JE
b21haW4gY29kZTpXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZCB1c2Vy
SW5mbzp1c2VySW5mb10pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5T
RXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQg
KF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAg
ICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwg
bmlsKTsKICAgICB9KTsKIH0KIAotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCist
ICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwogCi0gICAgX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJl
ZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVy
cm9yX2NvZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5sb29rdXBDb250
ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpDb250ZW50RXh0
ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAg
ICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBO
U0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAKICAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBA
e05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVu
c2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0gICAg
ICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JMb29rdXBGYWlsZWQgfHwgZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOwotICAgICAgICAgICAgcmF3SGFuZGxl
cihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNE
b21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAg
ICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9v
a3VwRmFpbGVkIHx8IGVycm9yLnZhbHVlKCkgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3Ig
ZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZv
OnVzZXJJbmZvXSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
V0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKICAgICAgICAg
cmF3SGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwp
OwogICAgIH0pOwogfQpAQCAtMTAyLDEzICsxMDYsMTMgQEAgLSAodm9pZClyZW1vdmVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZgogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldKTsKIAotICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5y
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2Nv
ZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50RXh0
ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAg
ICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAo
XikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogCiAgICAgICAgICAgICBhdXRvIHVzZXJJbmZv
ID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJF
eHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCldfTsK
LSAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7Ci0gICAgICAgICAgICByYXdIYW5kbGVyKFtOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQgdXNlckluZm86dXNl
ckluZm9dKTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxlcihb
TlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMjEsMjMgKzEyNSwzMCBAQCAtICh2b2lkKXJl
bW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmCiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2Jq
ZWN0CiB7Ci0gICAgcmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICByZXR1
cm4gKl9jb250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9u
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKK0BpbXBsZW1lbnRhdGlv
biBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBv
bmx5LgogCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwogewotICAgIF91c2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKCk7CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxD
b250ZW50RXh0ZW5zaW9ucygpOwogfQogCiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKIHsKLSAgICBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uKGlkZW50aWZpZXIpOworICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVD
b250ZW50RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVyKTsKK30KKworLy8gTlNfUkVMRUFTRVNf
QVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCisKKy0gKHZvaWQpX2NvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9u
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNv
ZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciBy
ZWxlYXNlc0FyZ3VtZW50OllFU107CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVy
bmFsLmg6MjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworaW5saW5lIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBzdG9yZSkKK3sKKyAgICBBU1NFUlQoW3N0b3Jl
LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNs
YXNzXV0pOworICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3Jl
LndyYXBwZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAcGFja2FnZQorICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF91c2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OworfQorQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMjYgKzIzLDI2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVBy
aXZhdGUuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAj
aWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oIgorI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAjaW1wb3J0ICJXS09i
amVjdC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBzdG9y
ZSkKK2lubGluZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBlcihBUEk6OkNvbnRlbnRF
eHRlbnNpb25TdG9yZSYgc3RvcmUpCiB7Ci0gICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNL
aW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKLSAgICBy
ZXR1cm4gKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Cisg
ICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAq
KXN0b3JlLndyYXBwZXIoKTsKIH0KIAogfQogCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lv
blN0b3JlICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKLSAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF9j
b250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
Lmg6MjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3IgdGVzdGluZyBvbmx5LgorLSAodm9p
ZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CistICh2b2lkKV9pbnZhbGlkYXRlQ29udGVu
dEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CisK
K0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE2ICsyMywx
OSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLUBpbnRl
cmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorQGludGVyZmFj
ZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBv
bmx5LgogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CiAtICh2b2lkKV9pbnZh
bGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXI7CiAKKy8vIE5TX1JFTEVBU0VTX0FSR1VNRU5UIHRvIGtlZXAgcGVhayBtZW1vcnkg
dXNhZ2UgbG93LgorLSAodm9pZClfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5n
ICopIE5TX1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcjsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMTEgKzM2LDE1IEBAIFdLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IFdLRXJyb3JEb21h
aW4KIAogLyohIEBlbnVtIFdLRXJyb3JDb2RlCiAgQGFic3RyYWN0IENvbnN0YW50cyB1c2VkIGJ5
IE5TRXJyb3IgdG8gaW5kaWNhdGUgZXJyb3JzIGluIHRoZSBXZWJLaXQgZG9tYWluLgotIEBjb25z
dGFudCBXS0Vycm9yVW5rbm93biAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0
aGF0IGFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JXZWJDb250
ZW50UHJvY2Vzc1Rlcm1pbmF0ZWQgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIFdlYiBDb250ZW50
IHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JXZWJWaWV3SW52YWxp
ZGF0ZWQgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIFdLV2ViVmlldyB3YXMgaW52
YWxpZGF0ZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0RXhjZXB0aW9uT2NjdXJyZWQg
ICAgICAgSW5kaWNhdGVzIHRoYXQgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSBA
Y29uc3RhbnQgV0tFcnJvckphdmFTY3JpcHRSZXN1bHRUeXBlSXNVbnN1cHBvcnRlZCBJbmRpY2F0
ZXMgdGhhdCB0aGUgcmVzdWx0IG9mIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvdWxkIG5vdCBiZSBy
ZXR1cm5lZC4KKyBAY29uc3RhbnQgV0tFcnJvclVua25vd24gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbmRpY2F0ZXMgdGhhdCBhbiB1bmtub3duIGVycm9yIG9jY3VycmVkLgorIEBjb25z
dGFudCBXS0Vycm9yV2ViQ29udGVudFByb2Nlc3NUZXJtaW5hdGVkICAgICAgICAgIEluZGljYXRl
cyB0aGF0IHRoZSBXZWIgQ29udGVudCBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkLgorIEBjb25zdGFu
dCBXS0Vycm9yV2ViVmlld0ludmFsaWRhdGVkICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0
aGF0IHRoZSBXS1dlYlZpZXcgd2FzIGludmFsaWRhdGVkLgorIEBjb25zdGFudCBXS0Vycm9ySmF2
YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkICAgICAgICAgIEluZGljYXRlcyB0aGF0IGEgSmF2YVNj
cmlwdCBleGNlcHRpb24gb2NjdXJyZWQuCisgQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0UmVz
dWx0VHlwZUlzVW5zdXBwb3J0ZWQgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdCBvZiBKYXZh
U2NyaXB0IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0dXJuZWQuCisgQGNvbnN0YW50IFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQgICAgSW5kaWNhdGVzIHRoYXQgbG9v
a2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgorIEBjb25zdGFudCBXS0Vy
cm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIEluZGljYXRlcyB0aGF0IGxv
b2tpbmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGFuIGV4dGVuc2lvbiB3aXRo
IGFuIGluY29tcGF0aWJsZSBiaW5hcnkgdmVyc2lvbi4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgICBJbmRpY2F0ZXMgdGhhdCBjb21waWxpbmcg
YSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCAgICBJbmRpY2F0ZXMgdGhhdCByZW1vdmluZyBh
IFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgogICovCiB0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBXS0Vycm9yQ29kZSkgewogICAgIFdLRXJyb3JVbmtub3duID0gMSwKQEAgLTQ4LDYg
KzUyLDEwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLRXJyb3JDb2RlKSAKICAgICBX
S0Vycm9yV2ViVmlld0ludmFsaWRhdGVkLAogICAgIFdLRXJyb3JKYXZhU2NyaXB0RXhjZXB0aW9u
T2NjdXJyZWQsCiAgICAgV0tFcnJvckphdmFTY3JpcHRSZXN1bHRUeXBlSXNVbnN1cHBvcnRlZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKSwKKyAgICBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9u
U3RvcmVWZXJzaW9uTWlzbWF0Y2ggV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBp
bGVGYWlsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKIH0gV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7CiAKIE5TX0FTU1VNRV9OT05O
VUxMX0VORApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9y
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tF
cnJvci5tbQkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0Vycm9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxOCBAQCBOU1N0
cmluZyAqbG9jYWxpemVkRGVzY3JpcHRpb25Gb3JFcnJvckNvCiAKICAgICBjYXNlIFdLRXJyb3JK
YXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQ6CiAgICAgICAgIHJldHVybiBXRUJfVUlf
U1RSSU5HKCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiByZXR1cm5lZCBhIHJlc3VsdCBvZiBhbiB1bnN1
cHBvcnRlZCB0eXBlIiwgIldLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQg
ZGVzY3JpcHRpb24iKTsKKworICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxv
b2t1cEZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkxvb2tpbmcgdXAgYSBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0
b3JlTG9va3VwRmFpbGVkIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RS
SU5HKCJMb29raW5nIHVwIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmb3VuZCBhIGJpbmFyeSB0
aGF0IGlzIGluY29tcGF0aWJsZSIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lv
bk1pc21hdGNoIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb21waWxlRmFpbGVkOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ29t
cGlsaW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRF
eHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgZGVzY3JpcHRpb24iKTsKKworICAgIGNhc2UgV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdF
Ql9VSV9TVFJJTkcoIlJlbW92aW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAi
V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiIpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CiBAY2xhc3MgV0tVc2Vy
U2NyaXB0OwogQHByb3RvY29sIFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI7CiAKQEAgLTcwLDYgKzcx
LDIwIEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4KICAqLwogLSAo
dm9pZClyZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3RyaW5nICopbmFtZTsK
IAorLyohIEBhYnN0cmFjdCBBZGRzIGEgdXNlciBjb250ZW50IGV4dGVuc2lvbi4KKyBAcGFyYW0g
bmFtZSBUaGUgbmFtZSBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVuc2lvbiB0byBhZGQuCisgKi8K
Ky0gKHZvaWQpYWRkQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uICopY29udGVu
dEV4dGVuc2lvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19JT1NfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKworLyohIEBhYnN0cmFjdCBSZW1vdmVzIGEgdXNlciBjb250ZW50IGV4dGVuc2lv
bi4KKyBAcGFyYW0gbmFtZSBUaGUgaWRlbnRpZmllciBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVu
c2lvbiB0byByZW1vdmUuCisgKi8KKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX0lPU19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworCisvKiEgQGFic3RyYWN0IFJlbW92ZXMgYWxsIGFzc29jaWF0ZWQg
dXNlciBjb250ZW50IGV4dGVuc2lvbnMuCisgKi8KKy0gKHZvaWQpcmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfSU9TX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAjaW1wb3J0ICJBUElVc2VyQ29udGVudFdvcmxkLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRl
bnNpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgogI2ltcG9y
dCAiV0tOU0FycmF5LmgiCiAjaW1wb3J0ICJXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCkBAIC05
MSw2ICs5MiwyNyBAQCAtICh2b2lkKXJlbW92ZUFsbFVzZXJTY3JpcHRzCiAgICAgX3VzZXJDb250
ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyU2NyaXB0cygpOwogfQogCistICh2b2lk
KWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiAqKWNvbnRlbnRFeHRlbnNp
b24KK3sKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIF91c2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS0+YWRkQ29udGVudEV4dGVuc2lvbigqY29udGVudEV4dGVuc2lvbi0+X2Nv
bnRlbnRFeHRlbnNpb24pOworI2VuZGlmCit9CisKKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVu
c2lvbjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUNvbnRlbnRFeHRl
bnNpb24oaWRlbnRpZmllcik7CisjZW5kaWYKK30KKworLSAodm9pZClyZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucworeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgX3VzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworI2Vu
ZGlmCit9CisKIGNsYXNzIFNjcmlwdE1lc3NhZ2VIYW5kbGVyRGVsZWdhdGUgZmluYWwgOiBwdWJs
aWMgV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Q2xpZW50IHsKIHB1YmxpYzoKICAg
ICBTY3JpcHRNZXNzYWdlSGFuZGxlckRlbGVnYXRlKFdLVXNlckNvbnRlbnRDb250cm9sbGVyICpj
b250cm9sbGVyLCBpZCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciwgTlNTdHJpbmcg
Km5hbWUpCkBAIC0xNTMsMjEgKzE3NSwyMSBAQCAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU2NyaXB0
c0Fzc29jaWF0ZWRXCiAtICh2b2lkKV9hZGRVc2VyQ29udGVudEZpbHRlcjooX1dLVXNlckNvbnRl
bnRGaWx0ZXIgKil1c2VyQ29udGVudEZpbHRlcgogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29udGVudEV4
dGVuc2lvbigqdXNlckNvbnRlbnRGaWx0ZXItPl91c2VyQ29udGVudEV4dGVuc2lvbik7CisgICAg
X3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50RXh0ZW5zaW9uKCp1c2VyQ29u
dGVudEZpbHRlci0+X2NvbnRlbnRFeHRlbnNpb24tPl9jb250ZW50RXh0ZW5zaW9uKTsKICNlbmRp
ZgogfQogCiAtICh2b2lkKV9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjooTlNTdHJpbmcgKil1c2Vy
Q29udGVudEZpbHRlck5hbWUKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAg
IF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24o
dXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkt
PnJlbW92ZUNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKICNlbmRpZgog
fQogCiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMKIHsKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVt
b3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBXS19DTEFTU19BVkFJTEFC
TEUobWFjb3N4KDEwLjExKSwgaW9zKDkuCiBXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tV
c2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIp
LCBpb3MoMTAuMCkpOwogCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDb2RlKSB7Ci0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yTG9va3VwRmFpbGVkID0gMSwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JMb29rdXBGYWlsZWQgPSA2LCAvLyBNaXJyb3JzIHZhbHVlIG9mIFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQKICAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gsCiAgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yQ29tcGlsZUZhaWxlZCwKICAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
RXJyb3JSZW1vdmVGYWlsZWQsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
LDEwMCArMjgsNTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKKyNpbXBvcnQgIldLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRl
bnRGaWx0ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRl
LmgiCiAjaW1wb3J0IDxzdHJpbmc+CiAKLU5TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25zRG9tYWluID0gQCJfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4iOworTlNT
dHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gPSBAIldLRXJyb3JE
b21haW4iOwogCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQog
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQog
KyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZQogewotICAgIHJldHVybiBXZWJLaXQ6OndyYXBw
ZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CisgICAg
cmV0dXJuIFtbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdIF9pbml0V2l0aFdL
Q29udGVudEV4dGVuc2lvblN0b3JlOltXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdXSBhdXRvcmVsZWFzZV07CiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5T
VVJMICopdXJsCiB7Ci0gICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3Rv
cmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFi
c29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7Ci0gICAgcmV0dXJuIFdlYktpdDo6
d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBbW1tfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTpbV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOnVybF1dIGF1dG9yZWxlYXNlXTsKIH0K
IAogLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVk
Q29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRl
bnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8gaGFu
ZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLQotICAgIFN0cmluZyBq
c29uKGVuY29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2RlZENvbnRlbnRFeHRlbnNp
b24gcmVsZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7Ci0KLSAgICBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRp
ZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktl
eTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFp
bGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0KLSAgICAgICAgICAgIC8vIGVy
cm9yLnZhbHVlKCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMg
bm90IGVxdWFsIHRvIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWls
ZWQuCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVy
ZSB3ZSB3YW50IHRvIG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3
SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVu
c2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxl
RmFpbGVkIHVzZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdl
YktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7Cisg
ICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmVuY29kZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpjb250ZW50
RXh0ZW5zaW9uLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBfV0tVc2VyQ29udGVudEZpbHRl
ciAqY29udGVudEZpbHRlciA9IGNvbnRlbnRFeHRlbnNpb24gPyBbW1tfV0tVc2VyQ29udGVudEZp
bHRlciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOmNvbnRlbnRFeHRlbnNpb25d
IGF1dG9yZWxlYXNlXSA6IG5pbDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEZp
bHRlciwgZXJyb3IpOworICAgIH1dOwogfQogCiAtICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XSk7Ci0KLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4
dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb24+IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAg
ICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShf
V0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1l
c3NhZ2UoKS5jX3N0cigpXX07Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JMb29rdXBGYWlsZWQgfHwgZXJyb3IudmFs
dWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gp
OwotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpf
V0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZv
OnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigq
Y29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7CisgICAgW19jb250ZW50RXh0
ZW5zaW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmll
ciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqY29udGVudEV4dGVuc2lv
biwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmNvbnRl
bnRGaWx0ZXIgPSBjb250ZW50RXh0ZW5zaW9uID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxs
b2NdIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjpjb250ZW50RXh0ZW5zaW9uXSBhdXRvcmVs
ZWFzZV0gOiBuaWw7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRGaWx0ZXIsIGVy
cm9yKTsKKyAgICB9XTsKIH0KIAogLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAgX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKHN0
ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0K
LSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBl
cnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgQVNTRVJUKGVycm9yLnZhbHVl
KCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkKTsKLSAg
ICAgICAgICAgIHJhd0hhbmRsZXIoW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
clJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TRXJyb3Ig
KikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihuaWwpOwotICAgIH0pOworICAg
IFtfY29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOmlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQog
CiAjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAogLSAoQVBJ
OjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlOworICAgIHJldHVybiBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBfYXBpT2JqZWN0XTsK
IH0KIAogQGVuZApAQCAtMTMyLDEyICs4NiwyMyBAQCAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVj
dAogCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwogewotICAgIF91c2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25z
KCk7CisgICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zXTsKIH0KIAogLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVy
KTsKKyAgICBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNp
b25WZXJzaW9uRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKK30KKworLSAoaWQpX2luaXRXaXRo
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmU6KFdLQ29udGVudEV4dGVuc2lvblN0b3JlKiljb250ZW50
RXh0ZW5zaW9uU3RvcmUKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3Jl
ID0gY29udGVudEV4dGVuc2lvblN0b3JlOworICAgIAorICAgIHJldHVybiBzZWxmOwogfQogCiBA
ZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFs
LmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDIyICsyNywxNCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lv
blN0b3JlLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
aW5saW5lIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlJiBzdG9yZSkKLXsKLSAgICBBU1NFUlQoW3N0b3JlLndyYXBwZXIo
KSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOwot
ICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3JlLndyYXBwZXIo
KTsKLX0KLQotfQorQGNsYXNzIFdLQ29udGVudEV4dGVuc2lvblN0b3JlOwogCiBAaW50ZXJmYWNl
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQot
ICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF91
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworICAgIFJldGFpblB0cjxXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZT4gX2NvbnRlbnRFeHRlbnNpb25TdG9yZTsKIH0KIEBlbmQKIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTYgQEAK
IAogI2lmIFdLX0FQSV9FTkFCTEVECiAKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsK
KwogQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCiAK
IC8vIEZvciB0ZXN0aW5nIG9ubHkuCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
czsKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKIAorLSAoaWQpX2luaXRXaXRoV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmU6KFdLQ29udGVudEV4dGVuc2lvblN0b3JlKiljb250ZW50RXh0ZW5zaW9uU3Rv
cmU7CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0JKHJldmlzaW9u
IDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRGaWx0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyNiBAQAogCiBAaW1w
bGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKIAotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uLT5+VXNlckNvbnRlbnRFeHRlbnNpb24oKTsKKyNwcmFn
bWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCi0gICAgW3N1cGVyIGRl
YWxsb2NdOworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gW19jb250
ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdOwogfQogCi0jcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJv
dG9jb2wgaW1wbGVtZW50YXRpb24KK0BlbmQKIAotLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QK
K0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEZpbHRlciAoV0tQcml2YXRlKQorCistIChp
ZClfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiopY29udGVu
dEV4dGVuc2lvbgogewotICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uOworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIF9jb250ZW50RXh0ZW5zaW9uID0gY29udGVudEV4dGVuc2lvbjsKKyAgICAKKyAg
ICByZXR1cm4gc2VsZjsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlcklu
dGVybmFsLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyMiArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAj
aW1wb3J0ICJXS09iamVjdC5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotaW5saW5lIF9XS1Vz
ZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJD
b250ZW50RXh0ZW5zaW9uKQotewotICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24ud3Jh
cHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwotICAg
IHJldHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53cmFw
cGVyKCk7Ci19Ci0KLX0KK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CiAKIEBpbnRlcmZhY2Ug
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6
T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRl
bnNpb247CisgICAgUmV0YWluUHRyPFdLQ29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNp
b247CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJD
b250ZW50RmlsdGVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaD4KKworI2lm
IFdLX0FQSV9FTkFCTEVECisKK0BjbGFzcyBXS1VzZXJDb250ZW50RXh0ZW5zaW9uOworCitAaW50
ZXJmYWNlIF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCisKKy0gKGlkKV9pbml0V2l0
aFdLQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKiljb250ZW50RXh0ZW5zaW9u
OworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkuY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAi
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjZW5kaWYKIApA
QCAtOTcsMTAgKzk3LDEwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFAKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMobWVzc2Fn
ZUhhbmRsZXJzKSwgbV9pZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE+PiB1c2VyQ29udGVudEV4dGVuc2lvbnM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1
c2VyQ29udGVudEV4dGVuc2lvbiA6IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zLnZhbHVlcygpKQot
ICAgICAgICB1c2VyQ29udGVudEV4dGVuc2lvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJD
b250ZW50RXh0ZW5zaW9uLT5uYW1lKCksIHVzZXJDb250ZW50RXh0ZW5zaW9uLT5jb21waWxlZEV4
dGVuc2lvbigpLmRhdGEoKSkpOwotICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRFeHRl
bnNpb25zKHVzZXJDb250ZW50RXh0ZW5zaW9ucyksIG1faWRlbnRpZmllcik7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiBjb250
ZW50RXh0ZW5zaW9uczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRFeHRlbnNpb24gOiBt
X2NvbnRlbnRFeHRlbnNpb25zLnZhbHVlcygpKQorICAgICAgICBjb250ZW50RXh0ZW5zaW9ucy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGVudEV4dGVuc2lvbi0+bmFtZSgpLCBjb250ZW50RXh0
ZW5zaW9uLT5jb21waWxlZEV4dGVuc2lvbigpLmRhdGEoKSkpOworICAgIHdlYlByb2Nlc3NQcm94
eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
QWRkQ29udGVudEV4dGVuc2lvbnMoY29udGVudEV4dGVuc2lvbnMpLCBtX2lkZW50aWZpZXIpOwog
I2VuZGlmCiB9CiAKQEAgLTMzOCwzMCArMzM4LDMwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmRpZFAKIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi12
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lv
bihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24oQVBJOjpD
b250ZW50RXh0ZW5zaW9uJiBjb250ZW50RXh0ZW5zaW9uKQogewotICAgIG1fdXNlckNvbnRlbnRF
eHRlbnNpb25zLnNldCh1c2VyQ29udGVudEV4dGVuc2lvbi5uYW1lKCksICZ1c2VyQ29udGVudEV4
dGVuc2lvbik7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5zZXQoY29udGVudEV4dGVuc2lvbi5u
YW1lKCksICZjb250ZW50RXh0ZW5zaW9uKTsKIAotICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFrZV9w
YWlyKHVzZXJDb250ZW50RXh0ZW5zaW9uLm5hbWUoKSwgdXNlckNvbnRlbnRFeHRlbnNpb24uY29t
cGlsZWRFeHRlbnNpb24oKS5kYXRhKCkpOworICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFrZV9wYWly
KGNvbnRlbnRFeHRlbnNpb24ubmFtZSgpLCBjb250ZW50RXh0ZW5zaW9uLmNvbXBpbGVkRXh0ZW5z
aW9uKCkuZGF0YSgpKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoeyBwYWly
IH0pLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkQ29udGVudEV4dGVuc2lvbnMo
eyBwYWlyIH0pLCBtX2lkZW50aWZpZXIpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUp
Cit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50RXh0ZW5zaW9ucy5y
ZW1vdmUobmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5yZW1vdmUobmFtZSk7CiAKICAg
ICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBw
cm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6UmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSksIG1faWRlbnRpZmllcik7Cisg
ICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpSZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpLCBtX2lkZW50aWZpZXIp
OwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2Vy
Q29udGVudEV4dGVuc2lvbnMoKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6
cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRFeHRlbnNp
b25zLmNsZWFyKCk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogCiAgICAgZm9y
IChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgcHJvY2Vz
cy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OlJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpLCBtX2lkZW50aWZpZXIpOworICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6UmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKSwgbV9pZGVudGlmaWVyKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAko
cmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5X2gKLSNkZWZpbmUgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHlfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3Qu
aCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKQEAgLTM4LDggKzM3LDggQEAKIAogbmFt
ZXNwYWNlIEFQSSB7CiBjbGFzcyBBcnJheTsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb247CiBjbGFz
cyBVc2VyQ29udGVudFdvcmxkOwotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CiBjbGFzcyBV
c2VyU2NyaXB0OwogY2xhc3MgVXNlclN0eWxlU2hlZXQ7CiB9CkBAIC05Miw5ICs5MSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJNZXNzYWdlSGFuZGxlcnMoQVBJOjpVc2VyQ29u
dGVudFdvcmxkJik7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHZvaWQg
YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYpOwotICAg
IHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgdm9p
ZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB2b2lkIGFkZENvbnRlbnRF
eHRlbnNpb24oQVBJOjpDb250ZW50RXh0ZW5zaW9uJik7CisgICAgdm9pZCByZW1vdmVDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVu
c2lvbnMoKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTE2LDEwICsxMTUsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hDb3VudGVkU2V0PFJlZlB0cjxBUEk6OlVzZXJDb250ZW50V29ybGQ+PiBtX3Vz
ZXJDb250ZW50V29ybGRzOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+PiBtX3VzZXJD
b250ZW50RXh0ZW5zaW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6Q29udGVu
dEV4dGVuc2lvbj4+IG1fY29udGVudEV4dGVuc2lvbnM7CiAjZW5kaWYKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlf
aApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA0LDggKzEyMDQsOCBA
QAogCQk3QzM2MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MzNjFENzYxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJN0MzNjFENzkxOTI4
MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYxRDc3MTky
ODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmgg
Ki87IH07CiAJCTdDMzg3NDM0MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzg3NDMzMTcyRjU2
MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLzsgfTsKLQkJN0MzQTA2QTcxQUFCOTAzRTAw
OUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJB
IC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovOyB9OwotCQk3QzNBMDZBODFB
QUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTA2QTYxQUFCOTAzRTAw
OUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLzsgfTsKKwkJN0MzQTA2
QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNBMDZBNTFBQUI5MDNF
MDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLzsgfTsKKwkJN0MzQTA2
QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTA2QTYxQUFCOTAzRTAw
OUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovOyB9OwogCQk3QzNGOEM5MDE3
M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8q
IFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLzsgfTsKIAkJN0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5
IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzNGOEM4RjE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRp
b24uaCAqLzsgfTsKIAkJN0M0Njk0QzkxQTRCNEVBMTAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzQ2OTRDNzFBNEI0RUEwMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTEyMzgsOCArMTIzOCw4IEBACiAJCTdD
ODlEMkEzMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQTExQTY3ODg3NTAwM0E1
RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5jcHAgKi87IH07CiAJCTdDODlEMkE0MUE2Nzg4NzUwMDNB
NUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDODlEMkEyMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRS
ZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
Qzg5RDJBNjFBNjc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBNTFBNjc4OUVBMDAzQTVG
REUgLyogQVBJVXNlclNjcmlwdC5jcHAgKi87IH07Ci0JCTdDODlEMkIzMUE2QjA2OEMwMDNBNUZE
RSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OwotCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUg
LyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29u
dGVudEV4dGVuc2lvbi5oICovOyB9OworCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJ
Q29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lv
bi5jcHAgKi87IH07CisJCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0
ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5oICovOyB9Owog
CQk3Qzg5RDJCNjFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5
RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M4OUQy
QjkxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjcxQTZCMEYyQzAwM0E1
RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICovOyB9OwogCQk3Qzg5RDJCQTFBNkIwRjJD
MDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkI4MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tV
c2VyQ29udGVudEZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zMzc3LDYgKzMzNzcsMTQgQEAKIAkJNUNCMjM3OTAxREYwRTFERDAwMTE3
QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBUElXZWJzaXRlUG9saWNpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1Q0JDOUI4OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVDQkM5QjhCMUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFz
a0NvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRDI4NjQ5MUU3MjJGNDQwMDk0
RkRDOCAvKiBfV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRF
eHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0
ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRDI4NjRCMUU3MjJGNDQw
MDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDRDI4NjRDMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNp
b25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRF
eHRlbnNpb25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY0
RDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMjg2NEUxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDRDI4NjRGMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudEV4
dGVuc2lvblN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNE
Mjg2NTAxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0
MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFBpbmdMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1Q0ZFQ0IwMzFFMUVEMUM4MDBGODg1MDQgLyogTGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vz
cy9DdXN0b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ0NDJBNTUxNkQ1ODU2NzAwQUMzMzMxIC8qIFBsdWdp
blNlcnZpY2UuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MzcsOCArMzQ0NSw4IEBACiAJCTdD
MzYxRDc2MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzYxRDc3MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VC
YW5uZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUJhbm5l
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDM0EwNkE1MUFBQjkwM0UwMDlE
NzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzNBMDZBNjFBQUI5MDNFMDA5RDc0QkEgLyog
QVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDM0EwNkE1MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJQ29u
dGVudEV4dGVuc2lvblN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0Mz
QTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjhDOEUxNzNBRjUyRDAwN0I3RjM5IC8q
IFBsdWdpbkluZm9ybWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBsdWdpbkluZm9ybWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbkluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDNDY5NEM3MUE0QjRFQTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJv
YXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NzQsOCArMzQ4Miw4IEBACiAJCTdDODlEMkExMUE2Nzg4
NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0tVc2VyU2NyaXB0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0M4OUQyQTIxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJTY3JpcHRSZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVz
ZXJTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNl
clNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkIxMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElV
c2VyQ29udGVudEV4dGVuc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElVc2VyQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElDb250ZW50RXh0ZW5zaW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8q
IEFQSUNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QVBJQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5
RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlckNvbnRlbnRDb250cm9sbGVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJCNzFBNkIwRjJD
MDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250
ZW50RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250
ZW50RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDI1LDYgKzU0MzMs
MTQgQEAKIAkJMzdDNEMwODMxODE0OUMyQTAwMzY4OEI5IC8qIENvY29hICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1Q0QyODY0OTFFNzIyRjQ0MDA5NEZE
QzggLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmggKi8sCisJCQkJNUNEMjg2NEExRTcy
MkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbi5oICovLAorCQkJCTVDRDI4NjRCMUU3
MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24ubW0gKi8sCisJCQkJNUNEMjg2NEMx
RTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggKi8sCisJCQkJ
NUNEMjg2NEQxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8s
CisJCQkJNUNEMjg2NEUxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tICovLAorCQkJCTVDRDI4NjRGMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZUludGVybmFsLmggKi8sCisJCQkJNUNEMjg2NTAxRTcyMkY0NDAwOTRGREM4IC8qIFdL
Q29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAogCQkJCTFBNDNFODI2MTg4RjM4RTIw
MDlFNEQzMCAvKiBEZXByZWNhdGVkICovLAogCQkJCTM3QTVFMDEyMThCQkY5MzcwMDBBMDgxRSAv
KiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5oICovLAogCQkJCTM3QTVFMDExMThCQkY5MzcwMDBB
MDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5tbSAqLywKQEAgLTY3MzAsMTAgKzY3NDYs
MTAgQEAKIAkJCQkxQTRENjY0NzE4QTJEOTFBMDBEODJFMjEgLyogQVBJVUlDbGllbnQuaCAqLywK
IAkJCQk1MUQxMjQzODFFNkRGREI5MDAyQjI4MjAgLyogQVBJVVJMU2NoZW1lSGFuZGxlclRhc2su
Y3BwICovLAogCQkJCTUxRDEyNDM5MUU2REZEQjkwMDJCMjgyMCAvKiBBUElVUkxTY2hlbWVIYW5k
bGVyVGFzay5oICovLAotCQkJCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29u
dGVudEV4dGVuc2lvbi5jcHAgKi8sCi0JCQkJN0M4OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQ
SVVzZXJDb250ZW50RXh0ZW5zaW9uLmggKi8sCi0JCQkJN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJB
IC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovLAotCQkJCTdDM0EwNkE2MUFB
QjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCisJCQkJ
N0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwICovLAor
CQkJCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggKi8s
CisJCQkJN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5jcHAgKi8sCisJCQkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oICovLAogCQkJCTdDODgyREZCMUM3RTk5QTYwMDZCRjczMSAvKiBBUElVc2Vy
Q29udGVudFdvcmxkLmNwcCAqLywKIAkJCQk3Qzg4MkRGQzFDN0U5OUE2MDA2QkY3MzEgLyogQVBJ
VXNlckNvbnRlbnRXb3JsZC5oICovLAogCQkJCTdDQjM2NUFGMUQzMUREMUUwMDcxNThDQSAvKiBB
UElVc2VySW5pdGlhdGVkQWN0aW9uLmggKi8sCkBAIC04MDU0LDggKzgwNzAsOCBAQAogCQkJCUJD
REI4NkMxMTIwMEZCOTcwMDcyNTRCRSAvKiBBUElVUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RTIzMTVEMTIyQzMwQ0EwMEQ1QzM1QSAvKiBBUElVUkxSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzkwQTFEMjEyMkRENTVFMDBDQzhDNTAgLyogQVBJVVJMUmVzcG9uc2UuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4
dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8q
IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDODlE
MkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3QzNBMDZBODFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0
b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNjExM0UyNTEyNkNFMTgyMDA1N0QwQTcgLyogQVBJ
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qzg4MkRGRDFDN0U5
OUE4MDA2QkY3MzEgLyogQVBJVXNlckNvbnRlbnRXb3JsZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0NCMzY1QjExRDMxREQxRTAwNzE1OENBIC8qIEFQSVVzZXJJbml0aWF0ZWRBY3Rpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtOTU3OSw4ICs5NTk1LDggQEAKIAkJCQkxQUZERTY2MTE5NTRFOUIxMDBD
NDhGRkEgLyogQVBJU2Vzc2lvblN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTIzMTVF
MTIyQzMwQ0EwMEQ1QzM1QSAvKiBBUElVUkxSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDOTBBMUQzMTIyREQ1NUUwMENDOEM1MCAvKiBBUElVUkxSZXNwb25zZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRl
bnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8q
IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M4
OUQyQjMxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNp
b25TdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQg
LyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4ODJERkUxQzdFOTlBQzAwNkJGNzMxIC8qIEFQSVVzZXJDb250ZW50V29ybGQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4OUQyQTYxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3Jp
cHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzOSwyMiArMzM5LDIyIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVV
c2UKICNlbmRpZgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoY29uc3QgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiYgdXNl
ckNvbnRlbnRFeHRlbnNpb25zKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZENv
bnRlbnRFeHRlbnNpb25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhPj4mIGNvbnRlbnRFeHRlbnNpb25zKQogewotICAgIGZvciAo
Y29uc3QgYXV0byYgdXNlckNvbnRlbnRFeHRlbnNpb24gOiB1c2VyQ29udGVudEV4dGVuc2lvbnMp
IHsKLSAgICAgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50RXh0ZW5z
aW9uRGF0YSA9IHVzZXJDb250ZW50RXh0ZW5zaW9uLnNlY29uZDsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGNvbnRlbnRFeHRlbnNpb24gOiBjb250ZW50RXh0ZW5zaW9ucykgeworICAgICAgICBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb25EYXRhID0gY29udGVu
dEV4dGVuc2lvbi5zZWNvbmQ7CiAgICAgICAgIFJlZlB0cjxXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKFdURk1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEpKTsKIAotICAgICAgICBt
X2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRF
eHRlbnNpb24uZmlyc3QsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7CisgICAg
ICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihjb250ZW50
RXh0ZW5zaW9uLmZpcnN0LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwogICAg
IH0KIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBt
X2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUNvbnRlbnRFeHRlbnNpb24obmFtZSk7CiB9
CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4
dGVuc2lvbnMoKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbENvbnRl
bnRFeHRlbnNpb25zKCkKIHsKICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcl9oCi0jZGVmaW5lIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgogI2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCkBAIC05NSw5ICs5NCw5IEBA
IHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNv
bnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgdm9pZCBhZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoY29uc3QgVmVjdG9yPHN0ZDo6cGFp
cjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiYpOwotICAgIHZvaWQg
cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lk
IHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOworICAgIHZvaWQgYWRkQ29udGVudEV4
dGVuc2lvbnMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGE+PiYpOworICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsK
ICNlbmRpZgogCiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVyLCBXZWJDb3JlOjpVc2Vy
U2NyaXB0JiYpOwpAQCAtMTI4LDUgKzEyNywzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcl9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29u
dHJvbGxlci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkocmV2
aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQw
LDggKzQwLDggQEAgbWVzc2FnZXMgLT4gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyIHsKICAgICBS
ZW1vdmVBbGxVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKFZlY3Rvcjx1aW50NjRfdD4gd29ybGRJ
ZGVudGlmaWVycyk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9ucyhWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4gdXNlckNvbnRlbnRGaWx0ZXJzKTsKLSAgICBS
ZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihTdHJpbmcgbmFtZSk7Ci0gICAgUmVtb3ZlQWxsVXNl
ckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgQWRkQ29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0
ZDo6cGFpcjxTdHJpbmcsIFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+
IGNvbnRlbnRGaWx0ZXJzKTsKKyAgICBSZW1vdmVDb250ZW50RXh0ZW5zaW9uKFN0cmluZyBuYW1l
KTsKKyAgICBSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFcnJvcnNNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViRXJyb3JzTWFjLm1tCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFcnJvcnNNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGlj
eUNoYW5nZQogI2lmIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIFJlc291cmNlRXJyb3IgYmxv
Y2tlZEJ5Q29udGVudEZpbHRlckVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
IHsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihBUEk6OkVycm9yOjp3ZWJLaXRFcnJvckRvbWFp
bigpLCBrV0tFcnJvckNvZGVGcmFtZUxvYWRCbG9ja2VkQnlDb250ZW50RmlsdGVyLCByZXF1ZXN0
LnVybCgpLCBXRUJfVUlfU1RSSU5HKCJUaGUgVVJMIHdhcyBibG9ja2VkIGJ5IGEgY29udGVudCBm
aWx0ZXIiLCAiV2ViS2l0RXJyb3JCbG9ja2VkQnlDb250ZW50RmlsdGVyIikpOworICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKEFQSTo6RXJyb3I6OndlYktpdEVycm9yRG9tYWluKCksIGtXS0Vycm9y
Q29kZUZyYW1lTG9hZEJsb2NrZWRCeUNvbnRlbnRGaWx0ZXIsIHJlcXVlc3QudXJsKCksIFdFQl9V
SV9TVFJJTkcoIlRoZSBVUkwgd2FzIGJsb2NrZWQgYnkgYSBjb250ZW50IGZpbHRlciIsICJXZWJL
aXRFcnJvckZyYW1lTG9hZEJsb2NrZWRCeUNvbnRlbnRGaWx0ZXIgZGVzY3JpcHRpb24iKSk7CiB9
CiAjZW5kaWYKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjEzNjg3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDMtMDkgIEJyaWFuIE5pY2hvbHNvbiAgPGJuaWNo
b2xzb25AbW96aWxsYS5jb20+IGFuZCBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgRXhwb3NlIHB1YmxpYyBBUElzIGZvciBjb250ZW50IGZpbHRl
cnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbiBhbmQgR2VvZmYgR2FyZW4uCisK
KyAgICAgICAgS2VlcCB0aGUgZXhpc3RpbmcgdGVzdHMgdG8gdmVyaWZ5IHRoYXQgSSBtYWRlIHRo
ZSB3cmFwcGVyIGNsYXNzZXMgZm9yIHRoZSBvbGQgU1BJIHdvcmsgY29ycmVjdGx5LgorICAgICAg
ICBBZGQgbmV3IGlkZW50aWNhbCB0ZXN0cyBmb3IgdGhlIG5ldyBBUEkgYXJlIGFkZGVkIHdpdGgg
dGhlIG5ldyBuYW1lcy4KKyAgICAgICAgV2Ugc2hvdWxkIGtlZXAgYm90aCB1bnRpbCB3ZSBtaWdy
YXRlIGZyb20gYW5kIHJlbW92ZSB0aGUgb2xkIFNQSS4KKyAgICAgICAgRW51bSBlcnJvciBjb2Rl
IHZhbHVlcyBhbmQgc3RyaW5ncyBoYXZlIGNoYW5nZWQsIGJ1dCB0aGUgQVBJIGlzIHNvdXJjZSBj
b21wYXRpYmxlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyQ29jb2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOiBDb3BpZWQgZnJvbSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tLgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdDo6U2V0
VXApOgorICAgICAgICAoVEVTVF9GKToKKyAgICAgICAgKGNoZWNrRG9tYWluKToKKyAgICAgICAg
KF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0OjpTZXRVcCk6IERlbGV0ZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbToKKyAgICAgICAgKGNoZWNrRG9tYWluKToKKwogMjAxNy0wMy0wOSAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR1BVOiBCYWNrZW5kIC0g
QnVmZmVycwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMzY4NykKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDcgQEAKIAkJNUM5RTU5NDExRDNFQjVB
QzAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGIgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5M0UxRDNFQjFERTAwRTNDNjJFIC8q
IEFwcGxpY2F0aW9uQ2FjaGUuZGIgKi87IH07CiAJCTVDOUU1OTQyMUQzRUI1QUMwMEUzQzYyRSAv
KiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTkzRjFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGlj
YXRpb25DYWNoZS5kYi1zaG0gKi87IH07CiAJCTVDOUU1OTQzMUQzRUI1QUMwMEUzQzYyRSAvKiBB
cHBsaWNhdGlvbkNhY2hlLmRiLXdhbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzlFNTk0MDFEM0VCMURFMDBFM0M2MkUgLyogQXBwbGljYXRp
b25DYWNoZS5kYi13YWwgKi87IH07CisJCTVDRTM1NEQ5MUU3MERBNUMwMEJFRkUzQiAvKiBXS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0UzNTREODFFNzBEOUMzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk1RTRCMUQyRTFENDA0QzYxMDAwNTM2MjEgLyog
V0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVFNEIxRDJDMUQ0MDRDNjEwMDA1MzYyMSAvKiBXS1Njcm9sbFZp
ZXdEZWxlZ2F0ZUNyYXNoLm1tICovOyB9OwogCQk2QkZEMjk0QzFENUU2QzFEMDA4RUM5NjggLyog
SGFzaENvdW50ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0EzOEQ3RTUxQzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCAq
LzsgfTsKIAkJNzU1QTIwQUYxRTZFMzg2MzAwOTNDNjlGIC8qIERhdGFiYXNlVHJhY2tlclRlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1QTIw
QUUxRTZFMzg2MzAwOTNDNjlGIC8qIERhdGFiYXNlVHJhY2tlclRlc3QuY3BwICovOyB9OwpAQCAt
MTA5Miw2ICsxMDkzLDcgQEAKIAkJNUM5RTU5M0UxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0
aW9uQ2FjaGUuZGIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBmaWxlOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZS5kYjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUM5RTU5M0YxRDNFQjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUu
ZGItc2htICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ZmlsZTsgcGF0aCA9ICJBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVDOUU1OTQwMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hl
LmRiLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi13YWwiOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0UzNTREODFFNzBEOUMzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1RTRCMUQyQzFENDA0QzYxMDAwNTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFz
aC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLU2Nyb2xsVmll
d0RlbGVnYXRlQ3Jhc2gubW07IHBhdGggPSAuLi9pb3MvV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFz
aC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzU1QTIwQUUxRTZFMzg2MzAwOTND
NjlGIC8qIERhdGFiYXNlVHJhY2tlclRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGF0YWJhc2VUcmFja2VyVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc1NjA5MTc3MTkyNTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdl
VG9DYWNoZUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1l
bW9yeUNhY2hlQWRkSW1hZ2VUb0NhY2hlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTY0OCw2ICsxNjUwLDcgQEAKIAkJCQkzN0I0N0UyRTFENjRFN0NBMDA1RjRFRkYgLyog
V0tPYmplY3QubW0gKi8sCiAJCQkJMkQwMDA2NUQxQzFGNTg5NDAwODhFNkE3IC8qIFdLUERGVmll
d1Jlc2l6ZUNyYXNoLm1tICovLAogCQkJCTVFNEIxRDJDMUQ0MDRDNjEwMDA1MzYyMSAvKiBXS1Nj
cm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tICovLAorCQkJCTVDRTM1NEQ4MUU3MEQ5QzMwMEJFRkUz
QiAvKiBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8sCiAJCQkJMkVGRjA2RDYxRDhB
RjM0QTAwMDRCQjMwIC8qIFdLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tICovLAogCQkJCTdDNDE3
RjMxMUQxOUUxNDgwMEI4RUY1MyAvKiBXS1dlYlZpZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRl
Lm1tICovLAogCQkJCTBGM0I5NEE1MUE3NzI2NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0
ZUphdmFTY3JpcHQubW0gKi8sCkBAIC0yOTE4LDYgKzI5MjEsNyBAQAogCQkJCTdDQ0U3RjFFMUE0
MTFBRTYwMDQ0N0M0QyAvKiBXS1N0cmluZ0pTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUExNEZDNTg1MUI4OTczOTEwMEQxMDdFQiAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M0MTdGMzMxRDE5RTE0ODAwQjhFRjUzIC8qIFdLV2Vi
Vmlld0RlZmF1bHROYXZpZ2F0aW9uRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Q0Uz
NTREOTFFNzBEQTVDMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzQjk0QTcxQTc3MjY3NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2
YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk5ODRGQUNDMUNGRkFGNjAw
MDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NjQz
MjJENzFCNjFDQ0MzMDAyNEY4MDEgLyogV29yZEJvdW5kYXJ5VHlwaW5nQXR0cmlidXRlcy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29j
b2EvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbQkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOjIxMzY4NykKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisj
aWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBv
cnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UHJpdmF0ZS5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitjbGFzcyBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgW1tfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25z
XTsKKyAgICB9Cit9OworCitzdGF0aWMgTlNTdHJpbmcgKmJhc2ljRmlsdGVyID0gQCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
Lip3ZWJraXQub3JnXCJ9fV0iOworCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsIENvbXBpbGUpCit7CisgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxz
ZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21w
aWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJD
b250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgCisgICAgICAgIEVY
UEVDVF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisKKyAg
ICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKK30KKworc3RhdGljIE5TU3RyaW5nICppbnZhbGlk
RmlsdGVyID0gQCJbIjsKKworc3RhdGljIHZvaWQgY2hlY2tEb21haW4oTlNFcnJvciAqZXJyb3Ip
Cit7CisgICAgRVhQRUNUX1NUUkVRKFtbZXJyb3IgZG9tYWluXSBVVEY4U3RyaW5nXSwgW19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBVVEY4U3RyaW5nXSk7Cit9CisKK1RFU1RfRihfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikKK3sKKyAgICBf
X2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRG
aWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBO
U0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOworICAg
ICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7
CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JDb21waWxlRmFpbGVkKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24g
Y29tcGlsYXRpb24gZmFpbGVkOiBGYWlsZWQgdG8gcGFyc2UgdGhlIEpTT04gU3RyaW5nLiIsIFtb
ZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworCisgICAgICAgIGRvbmVDb21waWxpbmcg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBp
bGluZyk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9v
a3VwKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRl
ciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05V
TEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVD
b21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNl
OworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1
cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlv
bkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikg
eworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNU
X05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisKK1RFU1Rf
RihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVy
TG9va3VwKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7CisgICAg
W1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVy
Ol4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAK
KyAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVy
cm9yKTsKKyAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOworICAgICAgICBFWFBFQ1RfRVEoZXJy
b3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkKTsK
KyAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogVW5zcGVjaWZp
ZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmdd
KTsKKyAgICAgICAgCisgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisKK1RFU1RfRihf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQoreworICAg
IF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNG
aWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBO
U0Vycm9yICplcnJvcikKKyAgICB7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwo
ZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworICAgICAgICAKKyAgICAgICAg
ZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lQ29tcGlsaW5nKTsKKworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVu
dGlmaWVyOkAiVGVzdEV4dGVuc2lvbiJdOworICAgIAorICAgIF9fYmxvY2sgYm9vbCBkb25lTG9v
a2luZ1VwID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5T
RXJyb3IgKmVycm9yKQorICAgIHsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRl
cik7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisgICAgICAgIGNoZWNrRG9tYWlu
KGVycm9yKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVFcnJvclZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgi
RXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFZlcnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2
ZXJzaW9uIG9mIGludGVycHJldGVyLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10p
OworICAgICAgICAKKyAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7CisgICAgfV07CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsKK30KKworVEVTVF9GKF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1vdmFsKQoreworICAgIF9fYmxvY2sg
Ym9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29t
cGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICpl
cnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAg
RVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAg
ICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklk
ZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lUmVtb3Zp
bmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJl
bW92aW5nKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBO
b25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCit7CisgICAgX19ibG9jayBib29sIGRvbmVSZW1v
dmluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0
IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9O
T1RfTlVMTChlcnJvcik7CisgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvclJlbW92
ZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVk
OiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0g
VVRGOFN0cmluZ10pOworCisgICAgICAgIGRvbmVSZW1vdmluZyA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lUmVtb3ZpbmcpOworfQorCisjZW5kaWYK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9u
IDIxMzY4NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMjMgKzMwLDIzIEBACiAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCi0jaW1wb3J0IDxX
ZWJLaXQvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KIAotY2xhc3MgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJs
aWMgdGVzdGluZzo6VGVzdCB7CitjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkK
ICAgICB7Ci0gICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAgICAgIFtbV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwog
ICAgIH0KIH07CiAKIHN0YXRpYyBOU1N0cmluZyAqYmFzaWNGaWx0ZXIgPSBAIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndl
YmtpdC5vcmdcIn19XSI7CiAKLVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVz
dCwgQ29tcGlsZSkKK1RFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUp
CiB7CiAgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lv
bjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpm
aWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RF
eHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25I
YW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAg
ICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVM
TChlcnJvcik7CkBAIC02MCwxOCArNjAsMTggQEAgc3RhdGljIE5TU3RyaW5nICppbnZhbGlkRmls
dGVyID0gQCJbIjsKIAogc3RhdGljIHZvaWQgY2hlY2tEb21haW4oTlNFcnJvciAqZXJyb3IpCiB7
Ci0gICAgRVhQRUNUX1NUUkVRKFtbZXJyb3IgZG9tYWluXSBVVEY4U3RyaW5nXSwgW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uc0RvbWFpbiBVVEY4U3RyaW5nXSk7CisgICAgRVhQRUNUX1NUUkVRKFtb
ZXJyb3IgZG9tYWluXSBVVEY4U3RyaW5nXSwgW1dLRXJyb3JEb21haW4gVVRGOFN0cmluZ10pOwog
fQogCi1URVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRl
bnNpb24pCitURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBJbnZhbGlkRXh0ZW5z
aW9uKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246aW52YWxpZEZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50Rmls
dGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpA
IlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29t
cGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJy
b3IpIHsKICAgICAKICAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwotICAgICAgICBF
WFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29t
cGlsZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVu
dEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZCk7CiAgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0
ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmlu
Zy4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKIAogICAgICAgICBkb25lQ29t
cGlsaW5nID0gdHJ1ZTsKQEAgLTc5LDEwICs3OSwxMCBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29t
cGlsaW5nKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBM
b29rdXApCitURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBMb29rdXApCiB7CiAg
ICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNp
Y0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIs
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVy
Ol4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAg
ICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJv
cik7CkBAIC05Miw3ICs5Miw3IEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
VGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwogCiAg
ICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudEV4
dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVu
c2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTk9U
X05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtMTAyLDE1ICsx
MDIsMTUgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CiAKLVRFU1RfRihfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3Vw
KQorVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlm
aWVyTG9va3VwKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7Ci0g
ICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5k
bGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAg
ICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4o
V0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAg
ICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7
CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNv
ZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCk7CisgICAg
ICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9v
a3VwRmFpbGVkKTsKICAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxl
ZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhlbHBBbmNob3Jd
IFVURjhTdHJpbmddKTsKICAgICAgICAgCiAgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOwpA
QCAtMTE4LDEwICsxMTgsMTAgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVU
ZXN0LAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CiAK
LVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNo
KQorVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQog
ewogICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246
YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmls
dGVyLCBOU0Vycm9yICplcnJvcikKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVu
c2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCiAgICAgewog
ICAgICAgICAKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CkBAIC0xMzEsMTYgKzEz
MSwxNiBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgfV07
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAotICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiJdOworICAg
IFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfaW52YWxpZGF0ZUNvbnRl
bnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iXTsKICAgICAK
ICAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2Vy
Q29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAgICBbW1dLQ29udGVudEV4
dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVu
c2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKICAgICB7CiAgICAgICAgIAogICAgICAgICBF
WFBFQ1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAg
ICAgICBjaGVja0RvbWFpbihlcnJvcik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOworICAgICAg
ICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNp
b25NaXNtYXRjaCk7CiAgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWls
ZWQ6IFZlcnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVy
LiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogICAgICAgICAKICAgICAgICAg
ZG9uZUxvb2tpbmdVcCA9IHRydWU7CkBAIC0xNDgsMTAgKzE0OCwxMCBAQCBURVNUX0YoX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lTG9va2luZ1VwKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVUZXN0LCBSZW1vdmFsKQorVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVt
b3ZhbCkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0
b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAi
VGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxl
dGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3Ip
IHsKICAgICAKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29t
cGlsaW5nKTsKIAogICAgIF9fYmxvY2sgYm9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKLSAgICBb
W19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVy
Ol4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKIAogICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOwpAQCAtMTY5LDEz
ICsxNjksMTMgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKIH0KIAotVEVTVF9GKF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1v
dmUpCitURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50
aWZpZXJSZW1vdmUpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwot
ICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFu
ZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05v
dEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVY
UEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
clJlbW92ZUZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkKTsKICAgICAgICAgRVhQRUNUX1NUUkVRKCJF
eHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUu
IiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAKICAgICAgICAgZG9uZVJlbW92
aW5nID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304016</attachid>
            <date>2017-03-09 17:47:32 -0800</date>
            <delta_ts>2017-03-09 17:48:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150479-20170309174731.patch</filename>
            <type>text/plain</type>
            <size>211390</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTAzLTA5ICBCcmlhbiBO
aWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBm
b3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24gYW5k
IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJp
bmdzOgorCiAyMDE3LTAzLTA5ICBNYXR0IFJhamNhICA8bXJhamNhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBPbmx5IGNvbnNpZGVyIGF1dG9wbGF5IGludGVyZmVyZW5jZSBpbiB0aGUgZmlyc3QgMTAg
c2Vjb25kcyBvZiBwbGF5YmFjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ov
TG9jYWxpemFibGUuc3RyaW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5ncwkod29ya2luZyBjb3B5KQpA
QCAtMTcyLDYgKzE3Miw5IEBACiAvKiBTdWJ0aXRsZSBvZiB0aGUgbGFiZWwgdG8gc2hvdyBvbiBh
IHNuYXBzaG90dGVkIHBsdWctaW4gKi8KICJDbGljayB0byByZXN0YXJ0IiA9ICJDbGljayB0byBy
ZXN0YXJ0IjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQg
ZGVzY3JpcHRpb24gKi8KKyJDb21waWxpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9
ICJDb21waWxpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKwogLyogV2ViS2l0RXJy
b3JDYW5ub3RTaG93TUlNRVR5cGUgZGVzY3JpcHRpb24gKi8KICJDb250ZW50IHdpdGggc3BlY2lm
aWVkIE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3duIiA9ICJDb250ZW50IHdpdGggc3BlY2lmaWVk
IE1JTUUgdHlwZSBjYW7igJl0IGJlIHNob3duIjsKIApAQCAtMzU4LDYgKzM2MSwxMiBAQAogLyog
TG9vayBVcCBjb250ZXh0IG1lbnUgaXRlbSB3aXRoIHNlbGVjdGVkIHdvcmQgKi8KICJMb29rIFVw
IOKAnDxzZWxlY3Rpb24+4oCdIiA9ICJMb29rIFVwIOKAnDxzZWxlY3Rpb24+4oCdIjsKIAorLyog
V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLwor
Ikxvb2tpbmcgdXAgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9ICJMb29raW5nIHVwIGEg
V0tDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCI7CisKKy8qIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9u
U3RvcmVWZXJzaW9uTWlzbWF0Y2ggZGVzY3JpcHRpb24gKi8KKyJMb29raW5nIHVwIGEgV0tDb250
ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIiA9ICJMb29r
aW5nIHVwIGEgV0tDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21w
YXRpYmxlIjsKKwogLyogTWVkaWEgTG9vcCBjb250ZXh0IG1lbnUgaXRlbSAqLwogIkxvb3AiID0g
Ikxvb3AiOwogCkBAIC00OTYsNiArNTA1LDkgQEAKIC8qIFJlbG9hZCBjb250ZXh0IG1lbnUgaXRl
bSAqLwogIlJlbG9hZCIgPSAiUmVsb2FkIjsKIAorLyogV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiAqLworIlJlbW92aW5nIGEgV0tDb250ZW50RXh0
ZW5zaW9uIGZhaWxlZCIgPSAiUmVtb3ZpbmcgYSBXS0NvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsK
KwogLyogZGVmYXVsdCBsYWJlbCBmb3IgUmVzZXQgYnV0dG9ucyBpbiBmb3JtcyBvbiB3ZWIgcGFn
ZXMgKi8KICJSZXNldCIgPSAiUmVzZXQiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogdHlwZWRl
ZiB1aW50OF90IERGQUJ5dGVjb2RlOwogCi0vLyBJbmNyZW1lbnQgVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbgorLy8gSW5jcmVtZW50
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lv
bgogLy8gd2hlbiBtYWtpbmcgYW55IG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFuZ2VzIHRv
IHRoZSBieXRlY29kZS4KIC8vIEZJWE1FOiBDaGFuZ2VzIGhlcmUgc2hvdWxkIG5vdCByZXF1aXJl
IGNoYW5nZXMgaW4gV2ViS2l0Mi4gIE1vdmUgYWxsIHZlcnNpb25pbmcgdG8gV2ViQ29yZS4KIGVu
dW0gY2xhc3MgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQ4X3QgewpJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTY0IEBACisyMDE3LTAzLTA5ICBCcmlhbiBOaWNob2xzb24gIDxi
bmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMgQVBJcyBmb3IgY29udGVudCBm
aWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24gYW5kIEdlb2ZmIEdhcmVu
LgorCisgICAgICAgIFRoaXMgdGFrZXMgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBhbmQg
X1dLVXNlckNvbnRlbnRGaWx0ZXIgYW5kIHR1cm5zIHRoZW0gaW50byB0aGUgY29uc2lzdGVudGx5
LW5hbWVkIHB1YmxpYyBBUEkKKyAgICAgICAgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgYW5kIFdL
Q29udGVudEV4dGVuc2lvbiByZXNwZWN0aXZlbHkgd2l0aCB0aGUgc2FtZSBkZXNpZ24gYW5kIGZ1
bmN0aW9uYWx5IG9mIHRoZSBvcmlnaW5hbCBTUEkuCisgICAgICAgIFdlIGFsc28gYWRkZWQgcHVi
bGljIGZ1bmN0aW9ucyB0byBXS1VzZXJDb250ZW50Q29udHJvbGxlciBjb3JyZXNwb25kaW5nIHRv
IGV4aXN0aW5nIHByaXZhdGUgZnVuY3Rpb25zLgorCisgICAgICAgIFRoZSBvbGQgU1BJIE9iakMg
Y2xhc3NlcyBhcmUgbm93IGp1c3Qgd3JhcHBlcnMgYXJvdW5kIHRoZSBuZXcgT2JqQyBjbGFzc2Vz
LCB3aGljaCBhcmUgd3JhcHBlcnMgYXJvdW5kIEMrKyBvYmplY3RzIGluIHRoZSBBUEkgbmFtZXNw
YWNlLgorICAgICAgICAKKyAgICAgICAgVGhlIHBlYWstbWVtb3J5LXJlZHVjaW5nIG9wdGltaXph
dGlvbiBvZiBoYXZpbmcgTlNfUkVMRUFTRVNfQVJHVU1FTlQgaW4gX2NvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllciBpcyBrZXB0IGZvciBTYWZhcmksCisgICAgICAgIGJ1dCB0aGUg
cHVibGljIEFQSSBkb2Vzbid0IG5lZWQgc3VjaCBhbiBvcHRpbWl6YXRpb24uICBUaGUgcHVibGlj
IGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllciB3aWxsIG5vdCBkZWFsbG9jYXRl
IHRoZSBpbnB1dAorICAgICAgICBOU1N0cmluZyBkdXJpbmcgY29tcGlsaW5nLgorICAgICAgICAK
KyAgICAgICAgV2UgbW92ZWQgdGhlIGVycm9yIGNvZGVzIGludG8gdGhlIFdLRXJyb3JEb21haW4s
IHdoaWNoIHJlcXVpcmVzIGNoYW5naW5nIHRoZSB2YWx1ZXMgb2YgdGhlIGVycm9yIGNvZGVzIGFu
ZCBkb21haW4sIGJ1dCBzb3VyY2UKKyAgICAgICAgY29tcGlsZWQgdGhhdCB1c2VzIHRoZSBTUEkg
YmVmb3JlIGFuZCBhZnRlciBzaG91bGQgc3RpbGwgd29yay4gIFVzaW5nIG5ldyBhcHBsaWNhdGlv
bnMgd2l0aCBvbGQgZnJhbWV3b3JrcyBvciB2aWNlIHZlcnNhIHdpbGwKKyAgICAgICAgaGF2ZSB1
bmV4cGVjdGVkIGVycm9yIGNvZGVzLCB0aG91Z2guCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQ
SU9iamVjdC5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoV0tQYWdlR3JvdXBBZGRVc2VyQ29udGVudEZpbHRlcik6CisgICAgICAg
IChXS1BhZ2VHcm91cFJlbW92ZVVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKiBTaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tOgorICAgICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVjdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcDogQ29waWVkIGZy
b20gVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAuCisgICAgICAgIChB
UEk6OkNvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoQVBJOjpD
b250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChBUEk6OlVzZXJD
b250ZW50RXh0ZW5zaW9uOjpVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uOjp+VXNlckNvbnRlbnRFeHRlbnNpb24pOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmguCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwOiBDb3BpZWQgZnJv
bSBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwLgorICAgICAg
ICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIChB
UEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aCk6CisgICAgICAgIChBUEk6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q29udGVudEV4dGVuc2lvblN0b3JlKToKKyAgICAgICAg
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjp+Q29udGVudEV4dGVuc2lvblN0b3JlKToKKyAg
ICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUpOgorICAgICAgICAoQVBJOjpjcmVhdGVFeHRlbnNp
b24pOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpy
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0
b3JlOjpzeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNp
b24pOgorICAgICAgICAoQVBJOjpjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KToK
KyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKTog
RGVsZXRlZC4KKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVX
aXRoUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSk6IERl
bGV0ZWQuCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENv
bnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOiBE
ZWxldGVkLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yQ2F0ZWdvcnkpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dEV4dGVuc2lvblN0b3JlLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAoQVBJOjptYWtlX2Vycm9yX2NvZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQ
SUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHA6Cisg
ICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVzZXJDb250ZW50RmlsdGVyKToKKyAg
ICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUdldFR5cGVJRCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlQ29jb2EubW06CisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVs
dFN0b3JlUGF0aCk6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRl
ZmF1bHRTdG9yZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uLmg6IENvcGllZCBmcm9tIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRGaWx0ZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudEV4dGVuc2lvbi5tbTogQ29waWVkIGZyb20gVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlci5tbS4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uIGRlYWxsb2Nd
KToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdKToKKyAgICAgICAg
KC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgZGVhbGxvY10pOiBEZWxldGVkLgorICAgICAgICAoLVtf
V0tVc2VyQ29udGVudEZpbHRlciBfYXBpT2JqZWN0XSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oOiBDb3BpZWQgZnJv
bSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaC4KKyAg
ICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oOiBDb3BpZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOiBDb3BpZWQgZnJvbSBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0uCisgICAgICAgICgtW1dL
Q29udGVudEV4dGVuc2lvblN0b3JlIGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSk6CisgICAgICAgICgrW1dLQ29udGVudEV4dGVuc2lv
blN0b3JlIHN0b3JlV2l0aFVSTDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZSBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOnJlbGVhc2VzQXJndW1lbnQ6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVj
dF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVu
dEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2ludmFs
aWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZpZXI6XSk6CisgICAgICAgICgt
W1dLQ29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAg
ICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVhbGxvY10pOiBEZWxldGVkLgor
ICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0pOiBE
ZWxldGVkLgorICAgICAgICAoK1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0
aFVSTDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
Y29tcGxldGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgX2FwaU9iamVjdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOiBEZWxldGVkLgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbnZhbGlkYXRlQ29udGVu
dEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oOiBDb3Bp
ZWQgZnJvbSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oLgorICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOiBDb3BpZWQgZnJv
bSBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmguCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9yLm1tOgorICAgICAgICAobG9jYWxpemVkRGVzY3Jp
cHRpb25Gb3JFcnJvckNvZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxl
ciBhZGRDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJv
bGxlciByZW1vdmVDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50
Q29udHJvbGxlciByZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAgICAgICAoLVtXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlckNvbnRlbnRGaWx0ZXI6XSk6CisgICAgICAgICgt
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjpdKToKKyAg
ICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJDb250ZW50Rmls
dGVyc10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBkZWZhdWx0U3RvcmVdKToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBzdG9yZVdpdGhVUkw6XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0p
OgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9hcGlPYmplY3RdKToK
KyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVu
dEV4dGVuc2lvbnNdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBf
aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpdKToKKyAgICAg
ICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZTpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYktpdDo6d3JhcHBl
cik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RmlsdGVy
IF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIgX2luaXRXaXRo
V0tDb250ZW50RXh0ZW5zaW9uOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEZpbHRlciBk
ZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlckludGVybmFsLmg6CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQ29udGVudEV4dGVu
c2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2Vy
Q29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxl
dGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwOgorICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudEV4dGVuc2lvbnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUNvbnRl
bnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50
RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RXJyb3JzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpibG9ja2VkQnlDb250ZW50RmlsdGVyRXJy
b3IpOgorCiAyMDE3LTAzLTA5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgV0tVUkxTY2hlbWVIYW5kbGVyIEFQSSBmb3IgaGFuZGxpbmcgY3VzdG9tIHBy
b3RvY29scy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAkocmV2aXNp
b24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAgICAgQmFja0Zvcndh
cmRMaXN0SXRlbSwKICAgICAgICAgQ2FjaGVNYW5hZ2VyLAogICAgICAgICBDb2xvclBpY2tlclJl
c3VsdExpc3RlbmVyLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uLAorICAgICAgICBDb250ZW50
RXh0ZW5zaW9uU3RvcmUsCiAgICAgICAgIENvbnRleHRNZW51TGlzdGVuZXIsCiAgICAgICAgIENv
b2tpZU1hbmFnZXIsCiAgICAgICAgIERvd25sb2FkLApAQCAtMTQ2LDggKzE0OCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgVGV4dENoZWNrZXIsCiAgICAgICAgIFVSTFNjaGVtZUhhbmRsZXJUYXNrLAog
ICAgICAgICBVc2VyQ29udGVudENvbnRyb2xsZXIsCi0gICAgICAgIFVzZXJDb250ZW50RXh0ZW5z
aW9uLAotICAgICAgICBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLAogICAgICAgICBVc2VyQ29u
dGVudFdvcmxkLAogICAgICAgICBVc2VySW5pdGlhdGVkQWN0aW9uLAogICAgICAgICBVc2VyTWVk
aWFQZXJtaXNzaW9uQ2hlY2ssCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tE
ZXByZWNhdGVkRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjEzNjg3KQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisj
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSURpY3Rpb25hcnku
aCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldLQXJy
YXkuaCIKICNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV0tNdXRhYmxl
RGljdGlvbmFyeS5oIgpAQCAtNTYsMjIgKzU2LDIyIEBAIFdLU3RyaW5nUmVmIFdLUGFnZUdyb3Vw
Q29weUlkZW50aWZpZXIoV0sKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBXS1BhZ2VH
cm91cEFkZFVzZXJDb250ZW50RmlsdGVyKFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tV
c2VyQ29udGVudEZpbHRlclJlZiB1c2VyQ29udGVudEZpbHRlclJlZikKK3ZvaWQgV0tQYWdlR3Jv
dXBBZGRVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLVXNl
ckNvbnRlbnRGaWx0ZXJSZWYgY29udGVudEZpbHRlclJlZikKIHsKICNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKS5hZGRVc2VyQ29udGVudEV4dGVuc2lvbigqdG9JbXBsKHVzZXJDb250ZW50RmlsdGVy
UmVmKSk7CisgICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigp
LmFkZENvbnRlbnRFeHRlbnNpb24oKnRvSW1wbChjb250ZW50RmlsdGVyUmVmKSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VyQ29u
dGVudEZpbHRlclJlZik7CisgICAgVU5VU0VEX1BBUkFNKGNvbnRlbnRGaWx0ZXJSZWYpOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgV0tQYWdlR3JvdXBSZW1vdmVVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIHVzZXJDb250ZW50RmlsdGVyTmFtZVJl
ZikKK3ZvaWQgV0tQYWdlR3JvdXBSZW1vdmVVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYsIFdLU3RyaW5nUmVmIGNvbnRlbnRGaWx0ZXJOYW1lUmVmKQogewogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVz
ZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3Ry
aW5nKHVzZXJDb250ZW50RmlsdGVyTmFtZVJlZikpOworICAgIHRvSW1wbChwYWdlR3JvdXBSZWYp
LT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3Ry
aW5nKGNvbnRlbnRGaWx0ZXJOYW1lUmVmKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdl
R3JvdXBSZWYpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VyQ29udGVudEZpbHRlck5hbWVSZWYpOwor
ICAgIFVOVVNFRF9QQVJBTShjb250ZW50RmlsdGVyTmFtZVJlZik7CiAjZW5kaWYKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9s
bGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tDb25uZWN0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4
dGVuc2lvbkludGVybmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS0ZyYW1lSW5mb0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS05TQXJy
YXkuaCIKICNpbXBvcnQgIldLTlNEYXRhLmgiCkBAIC03MSw4ICs3Myw2IEBACiAjaW1wb3J0ICJf
V0tGcmFtZUhhbmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tIaXRUZXN0UmVzdWx0SW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbkludGVybmFsLmgiCi0j
aW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKLSNpbXBvcnQg
Il9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50
V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlckluaXRpYXRlZEFjdGlvbkludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tVc2VyU3R5bGVTaGVldEludGVybmFsLmgiCkBAIC0yMzQsMTIgKzIz
NCwxMiBAQCB2b2lkKiBPYmplY3Q6Om5ld09iamVjdChzaXplX3Qgc2l6ZSwgVHlwCiAgICAgICAg
IHdyYXBwZXIgPSBbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgYWxsb2NdOwogICAgICAgICBicmVh
azsKIAotICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb246Ci0gICAgICAgIHdyYXBw
ZXIgPSBbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2NdOworICAgIGNhc2UgVHlwZTo6Q29udGVu
dEV4dGVuc2lvbjoKKyAgICAgICAgd3JhcHBlciA9IFtXS0NvbnRlbnRFeHRlbnNpb24gYWxsb2Nd
OwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZToKLSAgICAgICAgd3JhcHBlciA9IFtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFs
bG9jXTsKKyAgICBjYXNlIFR5cGU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZToKKyAgICAgICAgd3Jh
cHBlciA9IFtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxvY107CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBUeXBlOjpVc2VyQ29udGVudFdvcmxkOgpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAKICNpbmNsdWRlICJBUElBcnJh
eS5oIgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJ
Q29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRl
ICJBUElVc2VyU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0
ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQ
SUNvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwOjIxMzY4NykKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgorCituYW1lc3BhY2UgQVBJIHsKKworVXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKKyAgICA6IG1fbmFt
ZShuYW1lKQorICAgICwgbV9jb21waWxlZEV4dGVuc2lvbihXVEZNb3ZlKGNvbnRlbnRFeHRlbnNp
b24pKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvbjo6flVzZXJDb250ZW50RXh0ZW5zaW9u
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVu
c2lvbi5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIApAQCAtMzIsMTMgKzMy
LDEzIEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1Vc2VyQ29udGVudEV4dGVuc2lvbjo6VXNlckNv
bnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQorQ29udGVudEV4dGVu
c2lvbjo6Q29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCiAgICAg
OiBtX25hbWUobmFtZSkKICAgICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGTW92ZShjb250ZW50
RXh0ZW5zaW9uKSkKIHsKIH0KIAotVXNlckNvbnRlbnRFeHRlbnNpb246On5Vc2VyQ29udGVudEV4
dGVuc2lvbigpCitDb250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4dGVuc2lvbigpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4
dGVuc2lvbi5oCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDoyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lv
bl9oCisjZGVmaW5lIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKKworI2luY2x1ZGUgIkFQSU9i
amVjdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKK30KKworbmFtZXNwYWNl
IEFQSSB7CisKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVj
dEltcGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvbj4geworcHVibGljOgorI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4
dGVuc2lvbj4gY3JlYXRlKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1v
dmUoY29udGVudEV4dGVuc2lvbikpKTsKKyAgICB9CisKKyAgICBVc2VyQ29udGVudEV4dGVuc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uPiYmKTsKKyAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvbigpOworCisg
ICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAg
ICBjb25zdCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRl
bnNpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGVkRXh0ZW5zaW9uLmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgV1RGOjpTdHJpbmcgbV9uYW1lOworICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbj4gbV9jb21waWxlZEV4dGVuc2lvbjsKKyNlbmRpZiAvLyBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCisKKyNlbmRp
ZiAvLyBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKLSNk
ZWZpbmUgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25faAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM1LDE2
ICszNCwxNiBAQCBjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247CiAKIG5hbWVzcGFj
ZSBBUEkgewogCi1jbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBPYmpl
Y3RJbXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHsKK2NsYXNzIENvbnRl
bnRFeHRlbnNpb24gZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRl
bnRFeHRlbnNpb24+IHsKIHB1YmxpYzoKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
ICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNv
bnRlbnRFeHRlbnNpb24pCisgICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUo
Y29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSwgV1RGTW92ZShjb250ZW50RXh0ZW5z
aW9uKSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0ZW5zaW9uKG5h
bWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpKTsKICAgICB9CiAKLSAgICBVc2VyQ29udGVu
dEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLSAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lv
bigpOworICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJik7CisgICAgdmlydHVhbCB+Q29u
dGVudEV4dGVuc2lvbigpOwogCiAgICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGVkRXh0
ZW5zaW9uLmdldCgpOyB9CkBAIC01Niw1ICs1NSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9uIDIxMzY4NykJKGZyb20gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoyMTM2ODcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4
dGVuc2lvbkVycm9yLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtR
dWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8
d3RmL3BlcnNpc3RlbmNlL0VuY29kZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0
d29ya0NhY2hlOworCituYW1lc3BhY2UgQVBJIHsKKworVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkKK3sKKyAgICBzdGF0
aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVmYXVsdFN0b3JlID0gYWRvcHRSZWYobmV3
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gKmRlZmF1
bHRTdG9yZTsKK30KKworUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0
aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
KHN0b3JlUGF0aCkpOworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlKCkKKyAgICA6IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVs
dFN0b3JlUGF0aCgpKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCisgICAgOiBt
X3N0b3JlUGF0aChzdG9yZVBhdGgpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShXb3JrUXVldWU6OmNy
ZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVl
OjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRl
KCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkKKyAgICAsIG1fcmVtb3Zl
UXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVtb3Zl
IFF1ZXVlIikpCit7Cit9CisKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Vc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlKCkKK3sKK30KKworc3RhdGljIFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgo
Y29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcmV0
dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVu
c2lvbi0iICsgV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRpZmllcikpOworfQorCisv
LyBUaGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBkZW5zZWx5IHBhY2tlZCBieXRlcyBpbiB0aGUg
ZmlsZSwgbm90IHNpemVvZiBhbmQgb2Zmc2V0b2YsIHdoaWNoIHdvdWxkCisvLyByZXByZXNlbnQg
dGhlIHNpemUgYW5kIG9mZnNldCBvZiB0aGUgc3RydWN0dXJlIGluIG1lbW9yeSwgcG9zc2libHkg
d2l0aCBjb21waWxlci1hZGRlZCBwYWRkaW5nLgorY29uc3Qgc2l6ZV90IENvbnRlbnRFeHRlbnNp
b25GaWxlSGVhZGVyU2l6ZSA9IDIgKiBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50
NjRfdCk7Citjb25zdCBzaXplX3QgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0ID0g
c2l6ZW9mKHVpbnQzMl90KSArIDQgKiBzaXplb2YodWludDY0X3QpOworCitzdHJ1Y3QgQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9uIHsgVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiB9OworICAg
IHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBmaWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDY0X3QgY29uZGl0aW9uZWRGaWx0
ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQzMl90IGNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbiB7IGZhbHNlIH07CisgICAgCisgICAgc2l6ZV90IGZpbGVTaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAg
ICAgICAgICsgYWN0aW9uc1NpemUKKyAgICAgICAgICAgICsgZmlsdGVyc1dpdGhvdXRDb25kaXRp
b25zQnl0ZWNvZGVTaXplCisgICAgICAgICAgICArIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlU2l6ZQorICAgICAgICAgICAgKyBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7Cisg
ICAgfQorfTsKKworc3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKGNv
bnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCit7CisgICAgV1RGOjpQZXJz
aXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOworCisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS52ZXJz
aW9uOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYWN0aW9uc1NpemU7CisgICAgZW5jb2RlciA8
PCBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAgZW5j
b2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemU7CisgICAg
ZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAg
ZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisKKyAgICBB
U1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJT
aXplKTsKKyAgICByZXR1cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7Cit9CisKK3N0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkK
K3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBmaWxlRGF0YS5hcHBseShbJm1ldGFE
YXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6
ZSkgeworICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQgaW50byBvbmUg
Y29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQorICAgICAgICAvLyBwYXNzZWQg
dG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgorICAgICAg
ICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUp
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRh
LmFjdGlvbnNTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNp
emUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
Y29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlP
bmx5VG9Eb21haW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBzdWNj
ZXNzOworfQorCitzdGF0aWMgYm9vbCBvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihjb25zdCBT
dHJpbmcmIHBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZp
bGVEYXRhKQoreworICAgIGZpbGVEYXRhID0gbWFwRmlsZShXZWJDb3JlOjpmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsKKyAgICBpZiAoZmlsZURhdGEuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2RlQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgRGF0
YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIGlmIChXZWJDb3JlOjp3cml0
ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRhdGEsIHNpemUpID09IC0xKSB7CisgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHN1Y2Nlc3M7
Cit9CisKK3N0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3RyaW5nJiYganNv
biwgY29uc3QgU3RyaW5nJiBmaW5hbEZpbGVQYXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczsKKworICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50IGZp
bmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CisgICAgcHVi
bGljOgorICAgICAgICBDb21waWxhdGlvbkNsaWVudChXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5k
bGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKKyAgICAg
ICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVIYW5kbGUpCisgICAgICAgICAgICAsIG1fbWV0YURh
dGEobWV0YURhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuYWN0
aW9uc1NpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0
ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRh
RGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJU
KCFtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIHdyaXRlRmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUo
VmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0
ZWNvZGUuc2l6ZSgpOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRh
KCksIGJ5dGVjb2RlLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IHdyaXRlRmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYm
IGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0
aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBtX2ZpbHRlcnNXaXRoQ29u
ZGl0aW9uQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsKKyAgICAgICAgICAgIHdy
aXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB3cml0ZVRvcFVSTEZpbHRlcnNCeXRlY29kZShW
ZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7
CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUu
c2l6ZSgpKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8
U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucywgYm9vbCBjb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW4pIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFt
X2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9hY3Rpb25zV3JpdHRlbik7CisgICAgICAgICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFj
dGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4g
PSBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47CisgICAgICAgICAgICB3cml0ZVRvRmlsZShE
YXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGZpbmFsaXplKCkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAg
bV9tZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IG1fYWN0aW9uc1dyaXR0ZW47CisgICAgICAgICAgICBt
X21ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IG1fZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0
YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBtX2ZpbHRlcnNXaXRoQ29uZGl0
aW9uQnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5jb25kaXRpb25lZEZp
bHRlcnNCeXRlY29kZVNpemUgPSBtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW47Cisg
ICAgICAgICAgICBtX21ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiA9IG1fY29u
ZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRh
IGhlYWRlciA9IGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtX21ldGFEYXRhKTsKKyAg
ICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgV2ViQ29yZTo6c2Vla0ZpbGUobV9maWxlSGFu
ZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVTZWVrT3JpZ2luOjpTZWVrRnJvbUJlZ2lubmluZykgPT0g
LTEpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsK
KyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB3cml0ZVRvRmlsZShoZWFkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkgeyByZXR1cm4gbV9maWxlRXJyb3I7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgd3JpdGVUb0ZpbGUoY29uc3QgRGF0YSYg
ZGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiAhd3JpdGVE
YXRhVG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7CisgICAgICAgIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKKyAgICAgICAgc2l6ZV90IG1fZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAgICBzaXplX3QgbV9maWx0
ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1f
Y29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1f
YWN0aW9uc1dyaXR0ZW4geyAwIH07CisgICAgICAgIGJvb2wgbV9jb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW4geyBmYWxzZSB9OworICAgICAgICBib29sIG1fZmlsZUVycm9yIHsgZmFsc2UgfTsK
KyAgICB9OworCisgICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJD
b3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVI
YW5kbGUpOworICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAKKyAgICBjaGFyIGludmFsaWRIZWFkZXJb
Q29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplXTsKKyAgICBtZW1zZXQoaW52YWxpZEhlYWRl
ciwgMHhGRiwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKKyAgICAvLyBUaGlzIGhlYWRlciB3aWxs
IGJlIHJld3JpdHRlbiBpbiBDb21waWxhdGlvbkNsaWVudDo6ZmluYWxpemUuCisgICAgaWYgKFdl
YkNvcmU6OndyaXRlVG9GaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIGludmFsaWRIZWFkZXIsIHNp
emVvZihpbnZhbGlkSGVhZGVyKSkgPT0gLTEpIHsKKyAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxl
KHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgfQorCisgICAgQ29tcGlsYXRpb25D
bGllbnQgY29tcGlsYXRpb25DbGllbnQodGVtcG9yYXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOwor
ICAgIAorICAgIGlmIChhdXRvIGNvbXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGls
YXRpb25DbGllbnQsIFdURk1vdmUoanNvbikpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmls
ZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyRXJyb3I7Cisg
ICAgfQorICAgIGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGluZ1RvRmls
ZSgpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsK
KyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxl
RmFpbGVkOworICAgIH0KKyAgICAKKyAgICBtYXBwZWREYXRhID0gYWRvcHRBbmRNYXBGaWxlKHRl
bXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZpbGVTaXplKCkpOworICAgIGlmIChtYXBw
ZWREYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisKKyAgICBpZiAoIVdlYkNvcmU6Om1vdmVGaWxlKHRl
bXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgcmV0dXJuIHsg
fTsKK30KKworc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9u
TWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3sKKyAgICBhdXRvIHNo
YXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50
OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKKyAg
ICAgICAgV1RGTW92ZShzaGFyZWRNZW1vcnkpLAorICAgICAgICBmaWxlRGF0YSwKKyAgICAgICAg
Q29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0LAorICAgICAgICBDb250ZW50RXh0ZW5z
aW9uRmlsZUhlYWRlclNpemUsCisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNTaXplLAorICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEu
YWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5
dGVjb2RlU2l6ZSwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAg
ICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmZp
bHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgbWV0YURhdGEuZmls
dGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplLAorICAgICAgICBDb250ZW50RXh0ZW5zaW9u
RmlsZUhlYWRlclNpemUKKyAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKKyAgICAg
ICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplCisg
ICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwK
KyAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCisgICAgKTsK
KyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhKSk7CisgICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVu
dGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOworfQorCit2b2lkIFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRl
bnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
aWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3Rv
cmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3Rl
ZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKKyAgICAgICAgCisgICAgICAgIENvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKKyAgICAgICAgRGF0YSBmaWxlRGF0YTsKKyAgICAg
ICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURh
dGEpKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRo
aXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0ciwgRXJyb3I6Okxvb2t1cEZhaWxlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1ldGFEYXRhLnZl
cnNpb24gIT0gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNp
b25GaWxlVmVyc2lvbikgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpWZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1v
dmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBSZWZQdHI8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVF
eHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29u
dGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcm
JiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwg
c3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9jb21waWxlUXVl
dWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIg
PSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwg
c3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBhdXRv
IHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKKworICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURh
dGE7CisgICAgICAgIGF1dG8gZXJyb3IgPSBjb21waWxlZFRvRmlsZShXVEZNb3ZlKGpzb24pLCBw
YXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJv
dGVjdGVkVGhpcyksIGVycm9yID0gV1RGTW92ZShlcnJvciksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyLCBlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3Zl
KGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdU
Rk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSB7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4g
dXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURh
dGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50
RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgp
LCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisKKyAgICAg
ICAgaWYgKCFXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpKSB7CisgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoRXJyb3I6OlJlbW92ZUZhaWxlZCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMoKQoreworICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdl
YkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgsICIqIikpCisgICAgICAgIFdlYkNvcmU6
OmRlbGV0ZUZpbGUocGF0aCk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVu
dGlmaWVyKQoreworICAgIGF1dG8gZmlsZSA9IFdlYkNvcmU6Om9wZW5GaWxlKGNvbnN0cnVjdGVk
UGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7Cisg
ICAgaWYgKGZpbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyOwor
ICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBzaXplb2YoaW52YWxpZEhl
YWRlcikpOworICAgIEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4gPT0g
c2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKKyAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7Cit9
CisgICAgCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JDYXRlZ29yeSgpCit7CisgICAgY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjplcnJvcl9jYXRlZ29yeSB7CisgICAgICAgIGNv
bnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2VwdCBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gInVzZXIgY29udGVudCBleHRlbnNpb24gc3RvcmUiOworICAgICAgICB9CisK
KyAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2RlKSBjb25zdCBmaW5hbAor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7CisgICAgICAgICAgICBjYXNlIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgbG9va3VwLiI7CisgICAgICAgICAg
ICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2gg
dmVyc2lvbiBvZiBpbnRlcnByZXRlci4iOworICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7CisgICAgICAgICAgICBjYXNl
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CisgICAg
cmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OworfQorCit9IC8vIG5hbWVzcGFj
ZSBBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDExICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lv
blN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi0jaW5jbHVkZSAi
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKQEAgLTQ2LDMxICs0Niwz
MSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpOZXR3b3JrQ2FjaGU7CiAKIG5hbWVzcGFjZSBB
UEkgewogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpkZWZhdWx0U3RvcmUoKQorQ29udGVudEV4dGVuc2lvblN0b3JlJiBDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCiB7Ci0gICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVm
YXVsdFN0b3JlID0gYWRvcHRSZWYobmV3IENvbnRlbnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigp
OwogICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOwogfQogCi1SZWY8VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZT4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBX
VEY6OlN0cmluZyYgc3RvcmVQYXRoKQorUmVmPENvbnRlbnRFeHRlbnNpb25TdG9yZT4gQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBh
dGgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZShzdG9yZVBhdGgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0ZW5zaW9u
U3RvcmUoc3RvcmVQYXRoKSk7CiB9CiAKLVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OlVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDogVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZShk
ZWZhdWx0U3RvcmVQYXRoKCkpCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZSgpCisgICAgOiBDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgp
KQogewogfQogCi1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCitDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQog
ICAgIDogbV9zdG9yZVBhdGgoc3RvcmVQYXRoKQotICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgQ29tcGlsZSBRdWV1ZSIsIFdv
cmtRdWV1ZTo6VHlwZTo6Q29uY3VycmVudCkpCi0gICAgLCBtX3JlYWRRdWV1ZShXb3JrUXVldWU6
OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBSZWFkIFF1ZXVlIikpCi0gICAgLCBt
X3JlbW92ZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IFJlbW92ZSBRdWV1ZSIpKQorICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUo
IkNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpD
b25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQorICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVl
dWU6OmNyZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0b3JlIFJlbW92ZSBRdWV1ZSIpKQogewogfQog
Ci1Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgp
CitDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Db250ZW50RXh0ZW5zaW9uU3RvcmUoKQogewogfQog
CkBAIC04NSw3ICs4NSw3IEBAIGNvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRl
clMKIGNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQgPSBzaXpl
b2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7CiAKIHN0cnVjdCBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90IHZlcnNpb24geyBVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uIH07CisgICAgdWlu
dDMyX3QgdmVyc2lvbiB7IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRl
bnNpb25GaWxlVmVyc2lvbiB9OwogICAgIHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OwogICAg
IHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKICAg
ICB1aW50NjRfdCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CkBAIC0y
NjAsMTQgKzI2MCwxNCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0
CiAgICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZTsKICAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVu
VGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOwog
ICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZp
bGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6
RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAgICAgCiAgICAgY2hhciBpbnZhbGlkSGVhZGVyW0NvbnRl
bnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07CiAgICAgbWVtc2V0KGludmFsaWRIZWFkZXIsIDB4
RkYsIHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CiAgICAgLy8gVGhpcyBoZWFkZXIgd2lsbCBiZSBy
ZXdyaXR0ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6OmZpbmFsaXplLgogICAgIGlmIChXZWJDb3Jl
Ojp3cml0ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBpbnZhbGlkSGVhZGVyLCBzaXplb2Yo
aW52YWxpZEhlYWRlcikpID09IC0xKSB7CiAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1w
b3JhcnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
blN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKICAgICB9CiAKICAgICBDb21waWxhdGlvbkNs
aWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBtZXRhRGF0YSk7CkBA
IC0yNzgsMjAgKzI3OCwyMCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxl
KFN0CiAgICAgfQogICAgIGlmIChjb21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGlu
Z1RvRmlsZSgpKSB7CiAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFu
ZGxlKTsKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpD
b21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6Q29tcGlsZUZhaWxlZDsKICAgICB9CiAgICAgCiAgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5k
TWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAg
ICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKIAogICAgIGlmICghV2ViQ29y
ZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQotICAgICAgICBy
ZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Cisg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKK3N0YXRpYyBSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBhdXRvIHNoYXJlZE1lbW9y
eSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4oZmls
ZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJv
dGVjdGlvbjo6UmVhZE9ubHkpOwogICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKQEAgLTMxNCwxMCAr
MzE0LDEwIEBAIHN0YXRpYyBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4KICAgICAg
ICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCiAgICAgKTsKICAgICBh
dXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7
Ci0gICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVudGlmaWVy
LCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOworICAgIHJldHVybiBBUEk6OkNv
bnRlbnRFeHRlbnNpb246OmNyZWF0ZShpZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbikpOwogfQogCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1
cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9u
PHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUp
PiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2
b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5
KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBh
dXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKQEAgLTMz
MSw3ICszMzEsNyBAQCB2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChtZXRh
RGF0YS52ZXJzaW9uICE9IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50
RXh0ZW5zaW9uRmlsZVZlcnNpb24pIHsKKyAgICAgICAgaWYgKG1ldGFEYXRhLnZlcnNpb24gIT0g
Q29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9u
KSB7CiAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRjaCk7CiAgICAgICAgICAgICB9KTsKQEAgLTMzOSwx
MyArMzM5LDEzIEBAIHZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ28KICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUo
aWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RG
TW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1
c2VyQ29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0
YSwgZmlsZURhdGEpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRF
eHRlbnNpb24sIHsgfSk7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9u
PiBjb250ZW50RXh0ZW5zaW9uID0gY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRh
LCBmaWxlRGF0YSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RXh0ZW5z
aW9uLCB7IH0pOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAotdm9pZCBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYg
aWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rp
b248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4g
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgbV9jb21waWxlUXVldWUtPmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xh
dGVkQ29weSgpLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9y
ZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3Rl
ZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKQEAgLTM2MSwxMyArMzYxLDEzIEBAIHZvaWQg
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUMKICAgICAgICAgfQogCiAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdU
Rk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBjcmVh
dGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICAg
ICAgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiA9IGNyZWF0
ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoY29udGVudEV4dGVuc2lvbiwgeyB9KTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVu
dEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChz
dGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlm
aWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGgg
PSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgYXV0byBwYXRoID0gY29u
c3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CkBAIC0zODUsNDEgKzM4NSw0MSBA
QCB2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvCiAgICAgfSk7CiB9CiAK
LXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250
ZW50RXh0ZW5zaW9ucygpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNS
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRo
IDogV2ViQ29yZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkKICAgICAgICAgV2Vi
Q29yZTo6ZGVsZXRlRmlsZShwYXRoKTsKIH0KIAotdm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIpCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRl
bnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKQogewogICAg
IGF1dG8gZmlsZSA9IFdlYkNvcmU6Om9wZW5GaWxlKGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0
aCwgaWRlbnRpZmllciksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKGZpbGUgPT0g
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKICAgICAgICAgcmV0dXJuOwotICAg
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyOworICAgIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyID0gezAsIDAsIDAsIDAsIDAsIDB9OwogICAgIGF1
dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBzaXplb2YoaW52YWxpZEhlYWRlcikp
OwogICAgIEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4gPT0gc2l6ZW9m
KGludmFsaWRIZWFkZXIpKTsKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7CiB9CiAgICAg
Ci1jb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JDYXRlZ29yeSgpCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9u
U3RvcmVFcnJvckNhdGVnb3J5KCkKIHsKLSAgICBjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVnb3J5IHsKKyAgICBjbGFz
cyBDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3Jf
Y2F0ZWdvcnkgewogICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qgbm9leGNlcHQgZmlu
YWwKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJ1c2VyIGNvbnRlbnQgZXh0ZW5zaW9u
IHN0b3JlIjsKKyAgICAgICAgICAgIHJldHVybiAiY29udGVudCBleHRlbnNpb24gc3RvcmUiOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2RlKSBj
b25zdCBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7Ci0gICAgICAgICAg
ICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6Cisg
ICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I+KGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6TG9va3VwRmFpbGVkOgogICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZp
ZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgorICAgICAgICAgICAgY2FzZSBD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBp
bnRlcnByZXRlci4iOwotICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gIlVu
c3BlY2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7Ci0gICAgICAgICAgICBjYXNlIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICBj
YXNlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxlZDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIjsKICAgICAg
ICAgICAgIH0KIApAQCAtNDI3LDcgKzQyNyw3IEBAIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkm
IHVzZXJDb250ZW50RXgKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRl
bnNpb25FcnJvckNhdGVnb3J5OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250ZW50RXh0
ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsK
ICAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaAkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDoyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNp
bmNsdWRlIDxzeXN0ZW1fZXJyb3I+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXVEYgeworY2xhc3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgQVBJIHsK
KworY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CisKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAg
ICAgICAgTG9va3VwRmFpbGVkID0gMSwKKyAgICAgICAgVmVyc2lvbk1pc21hdGNoLAorICAgICAg
ICBDb21waWxlRmFpbGVkLAorICAgICAgICBSZW1vdmVGYWlsZWQKKyAgICB9OworICAgIAorICAg
IC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNo
YW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KKyAgICAvLyB0
byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCisgICAgY29uc3Qgc3Rh
dGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA4OworCisg
ICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOworICAg
IHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRoUGF0aChjb25z
dCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKKworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKKyAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNv
bnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHZpcnR1YWwgflVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKKworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3Qg
V1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9p
ZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsK
KyAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBz
dGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0
IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+
KTsKKworICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCisgICAgdm9pZCBzeW5jaHJvbm91c1JlbW92
ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOworCitwcml2YXRlOgor
ICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKKworICAgIGNvbnN0IFdURjo6U3Ry
aW5nIG1fc3RvcmVQYXRoOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7
CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3Jr
UXVldWU+IG1fcmVtb3ZlUXVldWU7Cit9OworCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOworCitpbmxpbmUgc3RkOjpl
cnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
ciBlcnJvcikKK3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQorCit9IC8vIG5hbWVzcGFj
ZSBBUEkKKworbmFtZXNwYWNlIHN0ZCB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3Jf
Y29kZV9lbnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVibGlj
IHRydWVfdHlwZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMiArMzcsMTIgQEAgY2xhc3MgV29ya1F1ZXVlOwogCiBuYW1lc3BhY2UgQVBJIHsK
IAotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uOwog
Ci1jbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdElt
cGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiB7CitjbGFzcyBDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZT4gewogcHVibGljOgogICAgIGVudW0gY2xhc3MgRXJyb3Ig
ewotICAgICAgICBMb29rdXBGYWlsZWQgPSAxLAorICAgICAgICBMb29rdXBGYWlsZWQgPSA2LCAv
LyBNaXJyb3JzIHZhbHVlIG9mIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWls
ZWQKICAgICAgICAgVmVyc2lvbk1pc21hdGNoLAogICAgICAgICBDb21waWxlRmFpbGVkLAogICAg
ICAgICBSZW1vdmVGYWlsZWQKQEAgLTUyLDE1ICs1MiwxNSBAQCBwdWJsaWM6CiAgICAgLy8gdG8g
cHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgogICAgIGNvbnN0IHN0YXRp
YyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gODsKIAotICAg
IHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKLSAgICBz
dGF0aWMgUmVmPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3Qg
V1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CisgICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgZGVmYXVsdFN0b3JlKCk7CisgICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uU3RvcmU+
IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CiAKLSAgICBleHBs
aWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7Ci0gICAgZXhwbGljaXQgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLSAgICB2aXJ0
dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgQ29udGVudEV4
dGVuc2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0
IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNpb25T
dG9yZSgpOwogCi0gICAgdm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0
cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0
cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOwotICAgIHZv
aWQgbG9va3VwQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwg
RnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJy
b3JfY29kZSk+KTsKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVm
UHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lk
IGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1
bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29k
ZSk+KTsKICAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwogCiAgICAgLy8g
Rm9yIHRlc3Rpbmcgb25seS4KQEAgLTc2LDE3ICs3NiwxNyBAQCBwcml2YXRlOgogICAgIFJlZjxX
VEY6OldvcmtRdWV1ZT4gbV9yZW1vdmVRdWV1ZTsKIH07CiAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0
ZWdvcnkmIHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7Citjb25zdCBz
dGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7
CiAKLWlubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yIGVycm9yKQoraW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vy
cm9yX2NvZGUoQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJvcikKIHsKLSAgICByZXR1
cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yQ2F0ZWdvcnkoKSB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4oZXJyb3IpLCBj
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkgfTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgQVBJCiAKIG5hbWVzcGFjZSBzdGQgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9y
X2NvZGVfZW51bTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1Ymxp
YyB0cnVlX3R5cGUgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5z
aW9uLmNwcAkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0j
aW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCi0KLW5hbWVzcGFjZSBBUEkg
ewotCi1Vc2VyQ29udGVudEV4dGVuc2lvbjo6VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4m
JiBjb250ZW50RXh0ZW5zaW9uKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX2NvbXBpbGVk
RXh0ZW5zaW9uKFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpCi17Ci19Ci0KLVVzZXJDb250ZW50
RXh0ZW5zaW9uOjp+VXNlckNvbnRlbnRFeHRlbnNpb24oKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBBUEkKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVu
c2lvbi5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCi0jZGVmaW5l
IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNz
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci0KLWNs
YXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0
OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gewotcHVibGljOgotI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCi0gICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lvbj4gY3Jl
YXRlKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4
dGVuc2lvbikpKTsKLSAgICB9Ci0KLSAgICBVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYm
KTsKLSAgICB2aXJ0dWFsIH5Vc2VyQ29udGVudEV4dGVuc2lvbigpOwotCi0gICAgY29uc3QgV1RG
OjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiYgY29tcGlsZWRFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiBtX2NvbXBpbGVkRXh0ZW5zaW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
V1RGOjpTdHJpbmcgbV9uYW1lOwotICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4gbV9jb21waWxlZEV4dGVuc2lvbjsKLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQotfTsKLQotfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBBUElVc2Vy
Q29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQ
SVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJldmlz
aW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MzYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5j
bHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVE
YXRhLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlNo
YXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0RlY29k
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OjpOZXR3b3JrQ2FjaGU7Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1Vc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlJiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3Rv
cmUoKQotewotICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKiBkZWZhdWx0U3Rv
cmUgPSBhZG9wdFJlZihuZXcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigpOwot
ICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOwotfQotCi1SZWY8VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6
OlN0cmluZyYgc3RvcmVQYXRoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUoc3RvcmVQYXRoKSk7Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDogVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCi17Ci19Ci0KLVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0
b3JlUGF0aCkKLSAgICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKLSAgICAsIG1fY29tcGlsZVF1
ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIENvbXBpbGUg
UXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQotICAgICwgbV9yZWFkUXVldWUo
V29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIp
KQotICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBSZW1vdmUgUXVldWUiKSkKLXsKLX0KLQotVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotewotfQotCi1zdGF0aWMgU3RyaW5n
IGNvbnN0cnVjdGVkUGF0aChjb25zdCBTdHJpbmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllcikKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJh
c2UsICJDb250ZW50RXh0ZW5zaW9uLSIgKyBXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVu
dGlmaWVyKSk7Ci19Ci0KLS8vIFRoZSBzaXplIGFuZCBvZmZzZXQgb2YgdGhlIGRlbnNlbHkgcGFj
a2VkIGJ5dGVzIGluIHRoZSBmaWxlLCBub3Qgc2l6ZW9mIGFuZCBvZmZzZXRvZiwgd2hpY2ggd291
bGQKLS8vIHJlcHJlc2VudCB0aGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBzdHJ1Y3R1cmUgaW4g
bWVtb3J5LCBwb3NzaWJseSB3aXRoIGNvbXBpbGVyLWFkZGVkIHBhZGRpbmcuCi1jb25zdCBzaXpl
X3QgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplID0gMiAqIHNpemVvZih1aW50MzJfdCkg
KyA0ICogc2l6ZW9mKHVpbnQ2NF90KTsKLWNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW5PZmZzZXQgPSBzaXplb2YodWludDMyX3QpICsgNCAqIHNpemVvZih1aW50NjRfdCk7
Ci0KLXN0cnVjdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90IHZlcnNp
b24geyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZp
bGVWZXJzaW9uIH07Ci0gICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07Ci0gICAgdWludDY0
X3QgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVpbnQ2
NF90IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRf
dCBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdWludDMyX3QgY29u
ZGl0aW9uc0FwcGx5T25seVRvRG9tYWluIHsgZmFsc2UgfTsKLSAgICAKLSAgICBzaXplX3QgZmls
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25GaWxl
SGVhZGVyU2l6ZQotICAgICAgICAgICAgKyBhY3Rpb25zU2l6ZQotICAgICAgICAgICAgKyBmaWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUKLSAgICAgICAgICAgICsgZmlsdGVyc1dp
dGhDb25kaXRpb25zQnl0ZWNvZGVTaXplCi0gICAgICAgICAgICArIGNvbmRpdGlvbmVkRmlsdGVy
c0J5dGVjb2RlU2l6ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgRGF0YSBlbmNvZGVDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEoY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkK
LXsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7Ci0KLSAgICBlbmNvZGVy
IDw8IG1ldGFEYXRhLnZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6
ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5
dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5
dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbjsKLQotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50RXh0
ZW5zaW9uRmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCks
IGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0
IERhdGEmIGZpbGVEYXRhKQotewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGZpbGVE
YXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJl
IG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCi0g
ICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBk
YXRhIHNpemUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRl
Y29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
dmVyc2lvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29u
ZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNv
ZGVTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRh
LmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBt
ZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCi17Ci0gICAgZmlsZURhdGEgPSBtYXBGaWxlKFdlYkNv
cmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwotICAgIGlmIChmaWxl
RGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEobWV0YURhdGEsIGZpbGVEYXRhKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlRGF0
YVRvRmlsZShjb25zdCBEYXRhJiBmaWxlRGF0YSwgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGZkKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2Zk
LCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAg
aWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKGZkLCAoY29uc3QgY2hhciopZGF0YSwgc2l6ZSkgPT0g
LTEpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9KTsKLSAgICAKLSAg
ICByZXR1cm4gc3VjY2VzczsKLX0KLQotc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRv
RmlsZShTdHJpbmcmJiBqc29uLCBjb25zdCBTdHJpbmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIG1hcHBlZERhdGEpCi17Ci0gICAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOwotCi0gICAgY2xhc3MgQ29t
cGlsYXRpb25DbGllbnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9u
Q2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6
OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhKQotICAgICAgICAgICAgOiBtX2ZpbGVIYW5kbGUoZmlsZUhhbmRsZSkKLSAgICAg
ICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKCFtZXRhRGF0YS5hY3Rpb25zU2l6ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRh
LmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aG91dENv
bmRpdGlvbnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVj
b2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVj
b2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShE
YXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZShWZWN0
b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAg
IG1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgp
OwotICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2Rl
LnNpemUoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdyaXRlVG9wVVJM
RmlsdGVyc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmluYWwKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuICs9
IGJ5dGVjb2RlLnNpemUoKTsKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUu
ZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3Jp
dGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zLCBib29sIGNv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKCFtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbik7Ci0gICAg
ICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOwot
ICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOwot
ICAgICAgICAgICAgQVNTRVJUKCFtX2FjdGlvbnNXcml0dGVuKTsKLSAgICAgICAgICAgIG1fYWN0
aW9uc1dyaXR0ZW4gKz0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbnNB
cHBseU9ubHlUb0RvbWFpbiA9IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKLSAgICAgICAg
ICAgIHdyaXRlVG9GaWxlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6ZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmluYWxpemUoKSBmaW5hbAotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX21ldGFEYXRhLmFjdGlvbnNTaXplID0gbV9hY3Rpb25zV3JpdHRl
bjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNv
ZGVTaXplID0gbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW47Ci0gICAg
ICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IG1f
ZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW47Ci0gICAgICAgICAgICBtX21ldGFE
YXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IG1fY29uZGl0aW9uRmlsdGVyc0J5
dGVjb2RlV3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluID0gbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIERhdGEgaGVhZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
KG1fbWV0YURhdGEpOwotICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiBXZWJDb3JlOjpz
ZWVrRmlsZShtX2ZpbGVIYW5kbGUsIDBsbCwgV2ViQ29yZTo6RmlsZVNlZWtPcmlnaW46OlNlZWtG
cm9tQmVnaW5uaW5nKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmls
ZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAgICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7IHJl
dHVybiBtX2ZpbGVFcnJvcjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB3cml0ZVRv
RmlsZShjb25zdCBEYXRhJiBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZmls
ZUVycm9yICYmICF3cml0ZURhdGFUb0ZpbGUoZGF0YSwgbV9maWxlSGFuZGxlKSkgewotICAgICAg
ICAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAg
ICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKLSAg
ICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtX21ldGFEYXRhOwotICAgICAgICBzaXpl
X3QgbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4geyAwIH07Ci0gICAg
ICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuIHsgMCB9Owot
ICAgICAgICBzaXplX3QgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuIHsgMCB9Owot
ICAgICAgICBzaXplX3QgbV9hY3Rpb25zV3JpdHRlbiB7IDAgfTsKLSAgICAgICAgYm9vbCBtX2Nv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9maWxl
RXJyb3IgeyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBhdXRvIHRlbXBvcmFyeUZpbGVIYW5kbGUg
PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotICAgIFN0cmluZyB0ZW1wb3Jh
cnlGaWxlUGF0aCA9IFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9u
IiwgdGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgaWYgKHRlbXBvcmFyeUZpbGVIYW5kbGUgPT0g
V2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwotICAgIAotICAgIGNo
YXIgaW52YWxpZEhlYWRlcltDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemVdOwotICAgIG1l
bXNldChpbnZhbGlkSGVhZGVyLCAweEZGLCBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIC8v
IFRoaXMgaGVhZGVyIHdpbGwgYmUgcmV3cml0dGVuIGluIENvbXBpbGF0aW9uQ2xpZW50OjpmaW5h
bGl6ZS4KLSAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwg
aW52YWxpZEhlYWRlciwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKSA9PSAtMSkgewotICAgICAgICBX
ZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLSAgICB9Ci0K
LSAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1wb3JhcnlGaWxlSGFu
ZGxlLCBtZXRhRGF0YSk7Ci0gICAgCi0gICAgaWYgKGF1dG8gY29tcGlsZXJFcnJvciA9IGNvbXBp
bGVSdWxlTGlzdChjb21waWxhdGlvbkNsaWVudCwgV1RGTW92ZShqc29uKSkpIHsKLSAgICAgICAg
V2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4g
Y29tcGlsZXJFcnJvcjsKLSAgICB9Ci0gICAgaWYgKGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9y
V2hpbGVXcml0aW5nVG9GaWxlKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBv
cmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0gICAgfQotICAgIAotICAgIG1hcHBlZERhdGEgPSBh
ZG9wdEFuZE1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgMCwgbWV0YURhdGEuZmlsZVNpemUo
KSk7Ci0gICAgaWYgKG1hcHBlZERhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLQotICAgIGlmICghV2Vi
Q29yZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQotICAgICAg
ICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb24+IGNyZWF0ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRh
KQotewotICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0
ZShjb25zdF9jYXN0PHVpbnQ4X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCks
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgYXV0byBj
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhKAotICAgICAgICBXVEZNb3ZlKHNoYXJlZE1lbW9yeSksCi0gICAgICAgIGZp
bGVEYXRhLAotICAgICAgICBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQsCi0gICAg
ICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuYWN0
aW9uc1NpemUsCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQotICAgICAg
ICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmls
ZUhlYWRlclNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKLSAgICAgICAg
ICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAg
ICAgICBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUsCi0gICAgICAg
IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5h
Y3Rpb25zU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlv
bnNCeXRlY29kZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVTaXplLAotICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRl
Y29kZVNpemUKLSAgICApOwotICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2Vi
S2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEpKTsKLSAgICByZXR1cm4gQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKGlkZW50aWZpZXIsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
KSk7Ci19Ci0KLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4
dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQ
dHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwg
c3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8g
cGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwotICAgICAgICAK
LSAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOwotICAgICAgICBEYXRh
IGZpbGVEYXRhOwotICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgs
IG1ldGFEYXRhLCBmaWxlRGF0YSkpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAobWV0YURhdGEudmVyc2lvbiAhPSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJy
ZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uKSB7Ci0gICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRj
aCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciks
IGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0
YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4
dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEp
OwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRFeHRlbnNpb24sIHsg
fSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlm
aWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNv
bnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBtX2NvbXBpbGVRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGpzb24gPSBqc29u
Lmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50
aWZpZXIpOwotCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKLSAg
ICAgICAgRGF0YSBmaWxlRGF0YTsKLSAgICAgICAgYXV0byBlcnJvciA9IGNvbXBpbGVkVG9GaWxl
KFdURk1vdmUoanNvbiksIHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAgICAgIGlmIChl
cnJvcikgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIGVycm9yKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRl
bnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0
YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJD
b250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihp
ZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOwotICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIodXNlckNvbnRlbnRFeHRlbnNpb24sIHsgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJv
cl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgbV9yZW1vdmVRdWV1ZS0+ZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZp
ZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVu
dGlmaWVyKTsKLQotICAgICAgICBpZiAoIVdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCkpIHsKLSAg
ICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihFcnJvcjo6UmVt
b3ZlRmFpbGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKLSAg
ICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCi17Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkK
LSAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKTsKLX0KLQotdm9pZCBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29uc3Qg
V1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpCi17Ci0gICAgYXV0byBmaWxlID0gV2ViQ29yZTo6b3Bl
bkZpbGUoY29uc3RydWN0ZWRQYXRoKG1fc3RvcmVQYXRoLCBpZGVudGlmaWVyKSwgV2ViQ29yZTo6
T3BlbkZvcldyaXRlKTsKLSAgICBpZiAoZmlsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
IGludmFsaWRIZWFkZXI7Ci0gICAgYXV0byBieXRlc1dyaXR0ZW4gPSBXZWJDb3JlOjp3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmaW52YWxpZEhlYWRlciks
IHNpemVvZihpbnZhbGlkSGVhZGVyKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChieXRlc1dyaXR0ZW4s
IGJ5dGVzV3JpdHRlbiA9PSBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIFdlYkNvcmU6OmNs
b3NlRmlsZShmaWxlKTsKLX0KLSAgICAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIHVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkKLXsKLSAgICBjbGFzcyBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVn
b3J5IHsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5vZXhjZXB0IGZpbmFsCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAidXNlciBjb250ZW50IGV4dGVuc2lvbiBzdG9y
ZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OnN0cmluZyBtZXNzYWdlKGludCBlcnJvckNv
ZGUpIGNvbnN0IGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+KGVycm9yQ29kZSkpIHsKLSAgICAg
ICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxl
ZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29r
dXAuIjsKLSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OlZlcnNpb25NaXNtYXRjaDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlZlcnNpb24gb2YgZmls
ZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiI7Ci0gICAgICAgICAgICBj
YXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOgotICAg
ICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGNvbXBpbGUuIjsK
LSAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92
ZUZhaWxlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmlu
ZyByZW1vdmUuIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3Ry
aW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJy
b3JDYXRlZ29yeTsKLSAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEFQSQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLSNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKLSNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgV29ya1F1ZXVlOwotfQotCi1uYW1lc3Bh
Y2UgQVBJIHsKLQotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247Ci0KLWNsYXNzIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6
OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEVy
cm9yIHsKLSAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKLSAgICAgICAgVmVyc2lvbk1pc21hdGNo
LAotICAgICAgICBDb21waWxlRmFpbGVkLAotICAgICAgICBSZW1vdmVGYWlsZWQKLSAgICB9Owot
ICAgIAotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5j
dGlvbmFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4K
LSAgICAvLyB0byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAg
Y29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24g
PSA4OwotCi0gICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9y
ZSgpOwotICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRo
UGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLQotICAgIGV4cGxpY2l0IFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLSAgICBleHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwotICAgIHZpcnR1YWwgflVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVu
Y3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3Jf
Y29kZSk+KTsKLSAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7Ci0gICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJy
b3JfY29kZSk+KTsKLQotICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gICAgdm9pZCBzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOwotCi1w
cml2YXRlOgotICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKLQotICAgIGNvbnN0
IFdURjo6U3RyaW5nIG1fc3RvcmVQYXRoOwotICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21w
aWxlUXVldWU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKLSAgICBSZWY8
V1RGOjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7Ci19OwotCi1jb25zdCBzdGQ6OmVycm9yX2Nh
dGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOwotCi1pbmxp
bmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvciBlcnJvcikKLXsKLSAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9y
KSwgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OwotfQotCi19IC8v
IG5hbWVzcGFjZSBBUEkKLQotbmFtZXNwYWNlIHN0ZCB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
aXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+
IDogcHVibGljIHRydWVfdHlwZSB7IH07Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2Fz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNh
c3QuaAkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9TZXR0aW5ncy5oPgogCiBuYW1lc3BhY2UgQVBJIHsKK2NsYXNzIENvbnRlbnRFeHRl
bnNpb247CitjbGFzcyBDb250ZW50RXh0ZW5zaW9uU3RvcmU7CiBjbGFzcyBFeHBlcmltZW50YWxG
ZWF0dXJlOwogY2xhc3MgRnJhbWVIYW5kbGU7CiBjbGFzcyBGcmFtZUluZm87CkBAIC02Myw4ICs2
NSw2IEBAIGNsYXNzIE9wZW5QYW5lbFBhcmFtZXRlcnM7CiBjbGFzcyBQYWdlQ29uZmlndXJhdGlv
bjsKIGNsYXNzIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjsKIGNsYXNzIFNlc3Npb25TdGF0ZTsK
LWNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOwotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTsKIGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBXZWJzaXRlRGF0YVN0b3JlOwogY2xhc3Mg
V2Vic2l0ZVBvbGljaWVzOwpAQCAtMTYxLDggKzE2MSw4IEBAIFdLX0FERF9BUElfTUFQUElORyhX
S1Jlc291cmNlTG9hZFN0YXRpc3QKIFdLX0FERF9BUElfTUFQUElORyhXS1Nlc3Npb25TdGF0ZVJl
ZiwgQVBJOjpTZXNzaW9uU3RhdGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJl
ZiwgV2ViVGV4dENoZWNrZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudENvbnRy
b2xsZXJSZWYsIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5KQotV0tfQUREX0FQSV9NQVBQ
SU5HKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZiwgQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlKQotV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYsIEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb24pCitXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZSkKK1dLX0FERF9B
UElfTUFQUElORyhXS1VzZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb24p
CiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tSZWYsIFVzZXJN
ZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RSZWYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tVc2VyU2NyaXB0UmVmLCBBUEk6OlVzZXJTY3JpcHQpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHAJKHJl
dmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VH
cm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRl
bnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVk
ZSAiQVBJVXNlckNvbnRlbnRXb3JsZC5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNp
bmNsdWRlICJBUElVc2VyU3R5bGVTaGVldC5oIgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYu
Y3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVudENvbnRy
b2xsZXJSZWYuaCIKIAotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5j
bHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIK
ICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS5oIgpAQCAtNjIsMTMgKzYyLDEzIEBAIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJSZW1vdmVBbGxVc2UKIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJBZGRVc2VyQ29udGVu
dEZpbHRlcihXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJS
ZWYsIFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYgdXNlckNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9s
bGVyUmVmKS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnRvSW1wbCh1c2VyQ29udGVudEZpbHRl
clJlZikpOworICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xsZXJSZWYpLT5hZGRDb250ZW50
RXh0ZW5zaW9uKCp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJSZWYpKTsKICNlbmRpZgogfQogCiB2
b2lkIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKFdL
VXNlckNvbnRlbnRDb250cm9sbGVyUmVmIHVzZXJDb250ZW50Q29udHJvbGxlclJlZikKIHsKICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRy
b2xsZXJSZWYpLT5yZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB0b0ltcGwo
dXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsK
ICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHJldmlz
aW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUmVmLmgiCiAKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisj
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiBXS1R5cGVJRCBXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVHZXRU
eXBlSUQoKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgcmV0dXJuIHRv
QVBJKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6QVBJVHlwZSk7CisgICAgcmV0dXJu
IHRvQVBJKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpBUElUeXBlKTsKICNlbHNlCiAgICAg
cmV0dXJuIDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUNvY29hLm1tCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW5jbHVkZSAiQVBJQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQog
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBBUEkgewogCi1TdHJpbmcgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCgpCitTdHJpbmcgQ29udGVudEV4dGVu
c2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKCkKIHsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25j
ZV90IG9uY2VUb2tlbjsKICAgICBzdGF0aWMgTlNVUkwgKmNvbnRlbnRFeHRlbnNpb25TdG9yZVVS
TDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLmg6MjEzNjg3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworV0tfQ0xBU1Nf
QVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBfV0tVc2VyQ29u
dGVudEZpbHRlciA6IE5TT2JqZWN0CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDgg
KzI3LDggQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLVdLX0NMQVNTX0FWQUlMQUJMRShtYWNv
c3goMTAuMTEpLCBpb3MoOS4wKSkKLUBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRGaWx0ZXIgOiBO
U09iamVjdAorV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKQorQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gOiBOU09iamVjdAogCiBAZW5k
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06MjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgor
CisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJp
bmc+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEZpbHRlcgorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4dGVuc2lv
bigpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3Qg
cHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sK
KyAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvbjsKK30KKworQGVuZAorCisjZW5kaWYg
Ly8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTM2ODcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
bi5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjQsMjAgKzI0LDE3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0ICJXS0Nv
bnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5z
aW9uRXJyb3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+CiAKLUBpbXBsZW1lbnRhdGlvbiBfV0tVc2Vy
Q29udGVudEZpbHRlcgorQGltcGxlbWVudGF0aW9uIFdLQ29udGVudEV4dGVuc2lvbgogCiAtICh2
b2lkKWRlYWxsb2MKIHsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4
dGVuc2lvbigpOworICAgIF9jb250ZW50RXh0ZW5zaW9uLT5+Q29udGVudEV4dGVuc2lvbigpOwog
CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNDYsNyArNDMsNyBAQCAtICh2b2lkKWRlYWxs
b2MKIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29u
dGVudEV4dGVuc2lvbjsKKyAgICByZXR1cm4gKl9jb250ZW50RXh0ZW5zaW9uOwogfQogCiBAZW5k
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2ODcpCShm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oOjIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCIKKwor
I2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgi
CisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworaW5saW5lIF9X
S1VzZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVz
ZXJDb250ZW50RXh0ZW5zaW9uKQoreworICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24u
d3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwor
ICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53
cmFwcGVyKCk7Cit9CisKK30KKworQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoKSA8
V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNv
bnRlbnRFeHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKK30KK0BlbmQKKworI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShy
ZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvbkludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDI2ICsyMywyNiBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQgIl9XS1VzZXJD
b250ZW50RmlsdGVyLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb24uaCIKIAogI2lmIFdL
X0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1w
b3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJDb250ZW50RXh0ZW5zaW9uKQoraW5saW5lIFdL
Q29udGVudEV4dGVuc2lvbiAqd3JhcHBlcihBUEk6OkNvbnRlbnRFeHRlbnNpb24mIGNvbnRlbnRF
eHRlbnNpb24pCiB7Ci0gICAgQVNTRVJUKFt1c2VyQ29udGVudEV4dGVuc2lvbi53cmFwcGVyKCkg
aXNLaW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRGaWx0ZXIgY2xhc3NdXSk7Ci0gICAgcmV0dXJu
IChfV0tVc2VyQ29udGVudEZpbHRlciAqKXVzZXJDb250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKTsK
KyAgICBBU1NFUlQoW2NvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dL
Q29udGVudEV4dGVuc2lvbiBjbGFzc11dKTsKKyAgICByZXR1cm4gKFdLQ29udGVudEV4dGVuc2lv
biAqKWNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpOwogfQogCiB9CiAKLUBpbnRlcmZhY2UgX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudEV4
dGVuc2lvbiAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdl
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IF91c2VyQ29udGVudEV4dGVuc2lvbjsKKyAgICBB
UEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBfY29udGVudEV4dGVuc2lv
bjsKIH0KIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMjEz
Njg3KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaDoyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4K
KworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKKwor
V0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKQorQGludGVyZmFjZSBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKKworKyAoaW5zdGFuY2V0eXBl
KWRlZmF1bHRTdG9yZTsKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJs
OworCistICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBOU19S
RUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVt
b3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsK
KworQGVuZAorCitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVu
c2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
RXJyb3JDb2RlKSB7CisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3Vw
RmFpbGVkID0gMSwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9u
TWlzbWF0Y2gsCisgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZh
aWxlZCwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQs
Cit9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwgaW9zKDEwLjApKTsKKworI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lv
biAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVu
dEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI3ICsyNywxOCBAQAogCiAjaWYgV0tfQVBJ
X0VOQUJMRUQKIAotQGNsYXNzIF9XS1VzZXJDb250ZW50RmlsdGVyOworQGNsYXNzIFdLQ29udGVu
dEV4dGVuc2lvbjsKIAotV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjAp
KQotQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKK1dL
X0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0Bp
bnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAogCiArIChpbnN0YW5j
ZXR5cGUpZGVmYXVsdFN0b3JlOwogKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwg
Kil1cmw7CiAKLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICop
IE5TX1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyOwotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tV
c2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9p
ZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClsb29rdXBDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcjsKIAogQGVuZAogCi1XS19FWFRFUk4gTlNTdHJpbmcgKiBjb25z
dCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
MTAuMTIpLCBpb3MoMTAuMCkpOwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb2RlKSB7Ci0gICAgX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVkID0gMSwKLSAgICBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gsCi0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCwKLSAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JSZW1vdmVGYWlsZWQsCi19IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEyKSwg
aW9zKDEwLjApKTsKLQogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxMzY4NykJKGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOjIxMzY4NykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tFcnJvckludGVy
bmFsLmgiCisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisjaW1wb3J0
IDxzdHJpbmc+CisKK05TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9t
YWluID0gQCJfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4iOworCitAaW1wbGVtZW50YXRp
b24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUo
KTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRT
dG9yZQoreworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7Cit9CisKKysgKGluc3RhbmNldHlwZSlzdG9yZVdp
dGhVUkw6KE5TVVJMICopdXJsCit7CisgICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4gc3RvcmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBh
dGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7CisgICAgcmV0dXJu
IFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOworfQorCistICh2b2lkKWNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29t
cGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgU3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24pOworICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lvbiByZWxlYXNlXTsKKyAgICBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24p
LCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRl
bnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBjb21waWxhdGlvbiBmYWlsZWQ6ICVzIiwgZXJyb3IubWVz
c2FnZSgpLmNfc3RyKCldfTsKKworICAgICAgICAgICAgLy8gZXJyb3IudmFsdWUoKSBjb3VsZCBo
YXZlIGEgc3BlY2lmaWMgY29tcGlsZXIgZXJyb3IgdGhhdCBpcyBub3QgZXF1YWwgdG8gX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8v
IFdlIHdhbnQgdG8gdXNlIGVycm9yLm1lc3NhZ2UsIGJ1dCBoZXJlIHdlIHdhbnQgdG8gb25seSBw
YXNzIG9uIENvbXBpbGVGYWlsZWQuCisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJy
b3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQgdXNlckluZm86dXNl
ckluZm9dKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8g
cmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICop
KWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250
ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClsb29rdXBD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxl
dGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxv
b2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJy
b3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIg
PSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdl
dCgpOworCisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktl
eTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDog
JXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgQVNTRVJUKGVycm9y
LnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yTG9va3VwRmFpbGVk
IHx8IGVycm9yLnZhbHVlKCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVy
c2lvbk1pc21hdGNoKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJv
cldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIGNvZGU6ZXJyb3IudmFs
dWUoKSB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50Rmls
dGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3SGFuZGxlcihXZWJL
aXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAgIH0pOworfQor
CistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAq
KWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKK3sKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFu
ZGxlciBjb3B5XSk7CisKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVtb3ZlQ29u
dGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2RlIGVycm9y
KSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0g
KHZvaWQgKF4pKE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKworICAgICAgICAgICAgYXV0byB1
c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0
cigpXX07CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxl
cihbTlNFcnJvciBlcnJvcldpdGhEb21haW46X1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWlu
IGNvZGU6X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkIHVzZXJJ
bmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwor
ICAgICAgICByYXdIYW5kbGVyKG5pbCk7CisgICAgfSk7Cit9CisKKyNwcmFnbWEgbWFyayBXS09i
amVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9iamVjdCYpX2FwaU9iamVj
dAoreworICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU7Cit9CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0
ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKworLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNS
ZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworfQorCistICh2b2lkKV9pbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIK
K3sKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRl
bnNpb25WZXJzaW9uKGlkZW50aWZpZXIpOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElf
RU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTM2ODcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNCw3NiArMjQsODAgQEAKICAqLwogCiAjaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgor
I2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKICNpbXBv
cnQgIldLRXJyb3JJbnRlcm5hbC5oIgotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRl
cm5hbC5oIgotI2ltcG9ydCA8c3RyaW5nPgogCi1OU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uc0RvbWFpbiA9IEAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25zRG9tYWluIjsK
LQotQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKK0BpbXBsZW1l
bnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAg
ICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUo
KTsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5+Q29udGVudEV4dGVuc2lvblN0b3JlKCk7
CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICsgKGluc3RhbmNldHlwZSlkZWZhdWx0U3Rv
cmUKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJ
OjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKIH0KIAogKyAoaW5zdGFu
Y2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cmwKIHsKLSAgICBSZWY8QVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6c3RvcmVXaXRoUGF0aCh1cmwuYWJzb2x1dGVVUkwuZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KTsKKyAgICBSZWY8QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlID0gQVBJOjpDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFic29sdXRlVVJMLmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbik7CiAgICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFr
UmVmKCkpOwogfQogCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmlu
ZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShf
V0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2
b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVu
dGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24g
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVu
c2lvbjplbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9u
SGFuZGxlciByZWxlYXNlc0FyZ3VtZW50Ok5PXTsKK30KKworLSAodm9pZClfY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENv
bnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6KEJPT0wpcmVsZWFzZXNBcmd1bWVudAog
ewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsK
IAogICAgIFN0cmluZyBqc29uKGVuY29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb24gcmVsZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24g
PSBuaWw7CisgICAgaWYgKHJlbGVhc2VzQXJndW1lbnQpIHsKKyAgICAgICAgW2VuY29kZWRDb250
ZW50RXh0ZW5zaW9uIHJlbGVhc2VdOworICAgICAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9
IG5pbDsKKyAgICB9CiAKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNv
bnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0
cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9y
X2NvZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVu
dEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBbaGFuZGxlcl0oUmVmUHRyPEFQ
STo6Q29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVy
cm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgYXV0byByYXdIYW5kbGVy
ID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5n
ZXQoKTsKKyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShXS0NvbnRlbnRF
eHRlbnNpb24gKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVy
cm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CiAKLSAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkg
Y291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRv
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQuCi0gICAgICAg
ICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRv
IG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWws
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4g
Y29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxlRmFpbGVkIHVzZXJJ
bmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAgICAvLyBlcnJvci52YWx1ZSgpIGNvdWxkIGhhdmUg
YSBzcGVjaWZpYyBjb21waWxlciBlcnJvciB0aGF0IGlzIG5vdCBlcXVhbCB0byBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8vIFdlIHdhbnQg
dG8gdXNlIGVycm9yLm1lc3NhZ2UsIGJ1dCBoZXJlIHdlIHdhbnQgdG8gb25seSBwYXNzIG9uIENv
bXBpbGVGYWlsZWQgd2l0aCB1c2VySW5mbyBmcm9tIHRoZSBzdGQ6OmVycm9yX2NvZGUuCisgICAg
ICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JE
b21haW4gY29kZTpXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZCB1c2Vy
SW5mbzp1c2VySW5mb10pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5T
RXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQg
KF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAgICAg
ICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwg
bmlsKTsKICAgICB9KTsKIH0KIAotLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCist
ICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwogCi0gICAgX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJl
ZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVy
cm9yX2NvZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5sb29rdXBDb250
ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQdHI8QVBJOjpDb250ZW50RXh0
ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAg
ICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBO
U0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CiAKICAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBA
e05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVu
c2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0gICAg
ICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JMb29rdXBGYWlsZWQgfHwgZXJyb3IudmFsdWUoKSA9PSBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOwotICAgICAgICAgICAgcmF3SGFuZGxl
cihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNE
b21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZvOnVzZXJJbmZvXSk7CisgICAgICAgICAg
ICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9v
a3VwRmFpbGVkIHx8IGVycm9yLnZhbHVlKCkgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgW05TRXJyb3Ig
ZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZv
OnVzZXJJbmZvXSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
V0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKICAgICAgICAg
cmF3SGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwp
OwogICAgIH0pOwogfQpAQCAtMTAyLDEzICsxMDYsMTMgQEAgLSAodm9pZClyZW1vdmVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZgogewogICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldKTsKIAotICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5y
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2Nv
ZGUgZXJyb3IpIHsKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50RXh0
ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKICAg
ICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAo
XikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwogCiAgICAgICAgICAgICBhdXRvIHVzZXJJbmZv
ID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJF
eHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSgpLmNfc3RyKCldfTsK
LSAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVFcnJvclJlbW92ZUZhaWxlZCk7Ci0gICAgICAgICAgICByYXdIYW5kbGVyKFtOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQgdXNlckluZm86dXNl
ckluZm9dKTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvci52YWx1ZSgpID09IFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmF3SGFuZGxlcihb
TlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMjEsMjMgKzEyNSwzMCBAQCAtICh2b2lkKXJl
bW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmCiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2Jq
ZWN0CiB7Ci0gICAgcmV0dXJuICpfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICByZXR1
cm4gKl9jb250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9u
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKK0BpbXBsZW1lbnRhdGlv
biBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBv
bmx5LgogCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwogewotICAgIF91c2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKCk7CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxD
b250ZW50RXh0ZW5zaW9ucygpOwogfQogCiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIKIHsKLSAgICBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uKGlkZW50aWZpZXIpOworICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVD
b250ZW50RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVyKTsKK30KKworLy8gTlNfUkVMRUFTRVNf
QVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCisKKy0gKHZvaWQpX2NvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9u
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNv
ZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciBy
ZWxlYXNlc0FyZ3VtZW50OllFU107CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2ODcpCShmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVy
bmFsLmg6MjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworaW5saW5lIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBzdG9yZSkKK3sKKyAgICBBU1NFUlQoW3N0b3Jl
LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNs
YXNzXV0pOworICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3Jl
LndyYXBwZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAcGFja2FnZQorICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF91c2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OworfQorQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJu
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMjYgKzIzLDI2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVBy
aXZhdGUuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAj
aWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oIgorI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCiAjaW1wb3J0ICJXS09i
amVjdC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW5saW5lIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBzdG9y
ZSkKK2lubGluZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBlcihBUEk6OkNvbnRlbnRF
eHRlbnNpb25TdG9yZSYgc3RvcmUpCiB7Ci0gICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNL
aW5kT2ZDbGFzczpbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11dKTsKLSAgICBy
ZXR1cm4gKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Cisg
ICAgQVNTRVJUKFtzdG9yZS53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAq
KXN0b3JlLndyYXBwZXIoKTsKIH0KIAogfQogCi1AaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lv
blN0b3JlICgpIDxXS09iamVjdD4gewogQHBhY2thZ2UKLSAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF9j
b250ZW50RXh0ZW5zaW9uU3RvcmU7CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNjg3KQkoZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
Lmg6MjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3IgdGVzdGluZyBvbmx5LgorLSAodm9p
ZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CistICh2b2lkKV9pbnZhbGlkYXRlQ29udGVu
dEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CisK
K0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE2ICsyMywx
OSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbXBvcnQg
PFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLUBpbnRl
cmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorQGludGVyZmFj
ZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBv
bmx5LgogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CiAtICh2b2lkKV9pbnZh
bGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXI7CiAKKy8vIE5TX1JFTEVBU0VTX0FSR1VNRU5UIHRvIGtlZXAgcGVhayBtZW1vcnkg
dXNhZ2UgbG93LgorLSAodm9pZClfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5n
ICopIE5TX1JFTEVBU0VTX0FSR1VNRU5UIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcjsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMTEgKzM2LDE1IEBAIFdLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IFdLRXJyb3JEb21h
aW4KIAogLyohIEBlbnVtIFdLRXJyb3JDb2RlCiAgQGFic3RyYWN0IENvbnN0YW50cyB1c2VkIGJ5
IE5TRXJyb3IgdG8gaW5kaWNhdGUgZXJyb3JzIGluIHRoZSBXZWJLaXQgZG9tYWluLgotIEBjb25z
dGFudCBXS0Vycm9yVW5rbm93biAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0
aGF0IGFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JXZWJDb250
ZW50UHJvY2Vzc1Rlcm1pbmF0ZWQgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIFdlYiBDb250ZW50
IHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JXZWJWaWV3SW52YWxp
ZGF0ZWQgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIFdLV2ViVmlldyB3YXMgaW52
YWxpZGF0ZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0RXhjZXB0aW9uT2NjdXJyZWQg
ICAgICAgSW5kaWNhdGVzIHRoYXQgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBvY2N1cnJlZC4KLSBA
Y29uc3RhbnQgV0tFcnJvckphdmFTY3JpcHRSZXN1bHRUeXBlSXNVbnN1cHBvcnRlZCBJbmRpY2F0
ZXMgdGhhdCB0aGUgcmVzdWx0IG9mIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvdWxkIG5vdCBiZSBy
ZXR1cm5lZC4KKyBAY29uc3RhbnQgV0tFcnJvclVua25vd24gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbmRpY2F0ZXMgdGhhdCBhbiB1bmtub3duIGVycm9yIG9jY3VycmVkLgorIEBjb25z
dGFudCBXS0Vycm9yV2ViQ29udGVudFByb2Nlc3NUZXJtaW5hdGVkICAgICAgICAgIEluZGljYXRl
cyB0aGF0IHRoZSBXZWIgQ29udGVudCBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkLgorIEBjb25zdGFu
dCBXS0Vycm9yV2ViVmlld0ludmFsaWRhdGVkICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0
aGF0IHRoZSBXS1dlYlZpZXcgd2FzIGludmFsaWRhdGVkLgorIEBjb25zdGFudCBXS0Vycm9ySmF2
YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkICAgICAgICAgIEluZGljYXRlcyB0aGF0IGEgSmF2YVNj
cmlwdCBleGNlcHRpb24gb2NjdXJyZWQuCisgQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0UmVz
dWx0VHlwZUlzVW5zdXBwb3J0ZWQgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdCBvZiBKYXZh
U2NyaXB0IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0dXJuZWQuCisgQGNvbnN0YW50IFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQgICAgSW5kaWNhdGVzIHRoYXQgbG9v
a2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgorIEBjb25zdGFudCBXS0Vy
cm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIEluZGljYXRlcyB0aGF0IGxv
b2tpbmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZvdW5kIGFuIGV4dGVuc2lvbiB3aXRo
IGFuIGluY29tcGF0aWJsZSBiaW5hcnkgdmVyc2lvbi4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgICBJbmRpY2F0ZXMgdGhhdCBjb21waWxpbmcg
YSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZC4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRl
bnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCAgICBJbmRpY2F0ZXMgdGhhdCByZW1vdmluZyBh
IFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgogICovCiB0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBXS0Vycm9yQ29kZSkgewogICAgIFdLRXJyb3JVbmtub3duID0gMSwKQEAgLTQ4LDYg
KzUyLDEwIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFdLRXJyb3JDb2RlKSAKICAgICBX
S0Vycm9yV2ViVmlld0ludmFsaWRhdGVkLAogICAgIFdLRXJyb3JKYXZhU2NyaXB0RXhjZXB0aW9u
T2NjdXJyZWQsCiAgICAgV0tFcnJvckphdmFTY3JpcHRSZXN1bHRUeXBlSXNVbnN1cHBvcnRlZCBX
S19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMSksIGlvcyg5LjApKSwKKyAgICBXS0Vycm9yQ29u
dGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9u
U3RvcmVWZXJzaW9uTWlzbWF0Y2ggV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBp
bGVGYWlsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKIH0gV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7CiAKIE5TX0FTU1VNRV9OT05O
VUxMX0VORApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vycm9y
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tF
cnJvci5tbQkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0Vycm9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxOCBAQCBOU1N0
cmluZyAqbG9jYWxpemVkRGVzY3JpcHRpb25Gb3JFcnJvckNvCiAKICAgICBjYXNlIFdLRXJyb3JK
YXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQ6CiAgICAgICAgIHJldHVybiBXRUJfVUlf
U1RSSU5HKCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiByZXR1cm5lZCBhIHJlc3VsdCBvZiBhbiB1bnN1
cHBvcnRlZCB0eXBlIiwgIldLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQg
ZGVzY3JpcHRpb24iKTsKKworICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxv
b2t1cEZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkxvb2tpbmcgdXAgYSBX
S1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0
b3JlTG9va3VwRmFpbGVkIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RS
SU5HKCJMb29raW5nIHVwIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmb3VuZCBhIGJpbmFyeSB0
aGF0IGlzIGluY29tcGF0aWJsZSIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lv
bk1pc21hdGNoIGRlc2NyaXB0aW9uIik7CisKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb21waWxlRmFpbGVkOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ29t
cGlsaW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRF
eHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgZGVzY3JpcHRpb24iKTsKKworICAgIGNhc2UgV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdF
Ql9VSV9TVFJJTkcoIlJlbW92aW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAi
V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiIpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Vz
ZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIE5TX0FTU1VNRV9O
T05OVUxMX0JFR0lOCiAKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CiBAY2xhc3MgV0tVc2Vy
U2NyaXB0OwogQHByb3RvY29sIFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI7CiAKQEAgLTcwLDYgKzcx
LDIwIEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4KICAqLwogLSAo
dm9pZClyZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3RyaW5nICopbmFtZTsK
IAorLyohIEBhYnN0cmFjdCBBZGRzIGEgdXNlciBjb250ZW50IGV4dGVuc2lvbi4KKyBAcGFyYW0g
bmFtZSBUaGUgbmFtZSBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVuc2lvbiB0byBhZGQuCisgKi8K
Ky0gKHZvaWQpYWRkQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uICopY29udGVu
dEV4dGVuc2lvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19JT1NfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKworLyohIEBhYnN0cmFjdCBSZW1vdmVzIGEgdXNlciBjb250ZW50IGV4dGVuc2lv
bi4KKyBAcGFyYW0gbmFtZSBUaGUgaWRlbnRpZmllciBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVu
c2lvbiB0byByZW1vdmUuCisgKi8KKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX0lPU19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworCisvKiEgQGFic3RyYWN0IFJlbW92ZXMgYWxsIGFzc29jaWF0ZWQg
dXNlciBjb250ZW50IGV4dGVuc2lvbnMuCisgKi8KKy0gKHZvaWQpcmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfSU9TX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIubW0JKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAjaW1wb3J0ICJBUElVc2VyQ29udGVudFdvcmxkLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRl
bnNpb25JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgogI2ltcG9y
dCAiV0tOU0FycmF5LmgiCiAjaW1wb3J0ICJXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCkBAIC05
MSw2ICs5MiwyNyBAQCAtICh2b2lkKXJlbW92ZUFsbFVzZXJTY3JpcHRzCiAgICAgX3VzZXJDb250
ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyU2NyaXB0cygpOwogfQogCistICh2b2lk
KWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiAqKWNvbnRlbnRFeHRlbnNp
b24KK3sKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIF91c2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS0+YWRkQ29udGVudEV4dGVuc2lvbigqY29udGVudEV4dGVuc2lvbi0+X2Nv
bnRlbnRFeHRlbnNpb24pOworI2VuZGlmCit9CisKKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVu
c2lvbjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUNvbnRlbnRFeHRl
bnNpb24oaWRlbnRpZmllcik7CisjZW5kaWYKK30KKworLSAodm9pZClyZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucworeworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgX3VzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworI2Vu
ZGlmCit9CisKIGNsYXNzIFNjcmlwdE1lc3NhZ2VIYW5kbGVyRGVsZWdhdGUgZmluYWwgOiBwdWJs
aWMgV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Q2xpZW50IHsKIHB1YmxpYzoKICAg
ICBTY3JpcHRNZXNzYWdlSGFuZGxlckRlbGVnYXRlKFdLVXNlckNvbnRlbnRDb250cm9sbGVyICpj
b250cm9sbGVyLCBpZCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciwgTlNTdHJpbmcg
Km5hbWUpCkBAIC0xNTMsMjEgKzE3NSwyMSBAQCAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU2NyaXB0
c0Fzc29jaWF0ZWRXCiAtICh2b2lkKV9hZGRVc2VyQ29udGVudEZpbHRlcjooX1dLVXNlckNvbnRl
bnRGaWx0ZXIgKil1c2VyQ29udGVudEZpbHRlcgogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyQ29udGVudEV4
dGVuc2lvbigqdXNlckNvbnRlbnRGaWx0ZXItPl91c2VyQ29udGVudEV4dGVuc2lvbik7CisgICAg
X3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50RXh0ZW5zaW9uKCp1c2VyQ29u
dGVudEZpbHRlci0+X2NvbnRlbnRFeHRlbnNpb24tPl9jb250ZW50RXh0ZW5zaW9uKTsKICNlbmRp
ZgogfQogCiAtICh2b2lkKV9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjooTlNTdHJpbmcgKil1c2Vy
Q29udGVudEZpbHRlck5hbWUKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAg
IF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24o
dXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkt
PnJlbW92ZUNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKICNlbmRpZgog
fQogCiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMKIHsKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVt
b3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LT5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBXS19DTEFTU19BVkFJTEFC
TEUobWFjb3N4KDEwLjExKSwgaW9zKDkuCiBXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tV
c2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIp
LCBpb3MoMTAuMCkpOwogCiB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDb2RlKSB7Ci0gICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yTG9va3VwRmFpbGVkID0gMSwKKyAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlRXJyb3JMb29rdXBGYWlsZWQgPSA2LCAvLyBNaXJyb3JzIHZhbHVlIG9mIFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVMb29rdXBGYWlsZWQKICAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gsCiAgICAgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yQ29tcGlsZUZhaWxlZCwKICAgICBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
RXJyb3JSZW1vdmVGYWlsZWQsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
LDEwMCArMjgsNTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKKyNpbXBvcnQgIldLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRl
bnRGaWx0ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRl
LmgiCiAjaW1wb3J0IDxzdHJpbmc+CiAKLU5TU3RyaW5nICogY29uc3QgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25zRG9tYWluID0gQCJfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4iOworTlNT
dHJpbmcgKiBjb25zdCBfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gPSBAIldLRXJyb3JE
b21haW4iOwogCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQog
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQog
KyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZQogewotICAgIHJldHVybiBXZWJLaXQ6OndyYXBw
ZXIoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CisgICAg
cmV0dXJuIFtbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdIF9pbml0V2l0aFdL
Q29udGVudEV4dGVuc2lvblN0b3JlOltXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3Rv
cmVdXSBhdXRvcmVsZWFzZV07CiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5T
VVJMICopdXJsCiB7Ci0gICAgUmVmPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3Rv
cmUgPSBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgodXJsLmFi
c29sdXRlVVJMLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbik7Ci0gICAgcmV0dXJuIFdlYktpdDo6
d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBbW1tfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTpbV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOnVybF1dIGF1dG9yZWxlYXNlXTsKIH0K
IAogLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVk
Q29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRl
bnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIGF1dG8gaGFu
ZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLQotICAgIFN0cmluZyBq
c29uKGVuY29kZWRDb250ZW50RXh0ZW5zaW9uKTsKLSAgICBbZW5jb2RlZENvbnRlbnRFeHRlbnNp
b24gcmVsZWFzZV07Ci0gICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7Ci0KLSAgICBf
dXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRp
ZmllciwgV1RGTW92ZShqc29uKSwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktl
eTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFp
bGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0KLSAgICAgICAgICAgIC8vIGVy
cm9yLnZhbHVlKCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMg
bm90IGVxdWFsIHRvIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWls
ZWQuCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVy
ZSB3ZSB3YW50IHRvIG9ubHkgcGFzcyBvbiBDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgcmF3
SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVu
c2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDb21waWxl
RmFpbGVkIHVzZXJJbmZvOnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRG
aWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdl
YktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7Cisg
ICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmVuY29kZWRDb250ZW50
RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpjb250ZW50
RXh0ZW5zaW9uLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBfV0tVc2VyQ29udGVudEZpbHRl
ciAqY29udGVudEZpbHRlciA9IGNvbnRlbnRFeHRlbnNpb24gPyBbW1tfV0tVc2VyQ29udGVudEZp
bHRlciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOmNvbnRlbnRFeHRlbnNpb25d
IGF1dG9yZWxlYXNlXSA6IG5pbDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEZp
bHRlciwgZXJyb3IpOworICAgIH1dOwogfQogCiAtICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XSk7Ci0KLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4
dGVuc2lvbihpZGVudGlmaWVyLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb24+IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAg
ICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShf
V0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1l
c3NhZ2UoKS5jX3N0cigpXX07Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IudmFsdWUoKSA9PSBf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JMb29rdXBGYWlsZWQgfHwgZXJyb3IudmFs
dWUoKSA9PSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gp
OwotICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpf
V0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTplcnJvci52YWx1ZSgpIHVzZXJJbmZv
OnVzZXJJbmZvXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOwotICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigq
Y29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7CisgICAgW19jb250ZW50RXh0
ZW5zaW9uU3RvcmUgbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmll
ciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqY29udGVudEV4dGVuc2lv
biwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmNvbnRl
bnRGaWx0ZXIgPSBjb250ZW50RXh0ZW5zaW9uID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxs
b2NdIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjpjb250ZW50RXh0ZW5zaW9uXSBhdXRvcmVs
ZWFzZV0gOiBuaWw7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRGaWx0ZXIsIGVy
cm9yKTsKKyAgICB9XTsKIH0KIAogLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotCi0gICAgX3VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJdKHN0
ZDo6ZXJyb3JfY29kZSBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Ci0K
LSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBl
cnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgQVNTRVJUKGVycm9yLnZhbHVl
KCkgPT0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkKTsKLSAg
ICAgICAgICAgIHJhd0hhbmRsZXIoW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
clJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TRXJyb3Ig
KikpaGFuZGxlci5nZXQoKTsKLSAgICAgICAgcmF3SGFuZGxlcihuaWwpOwotICAgIH0pOworICAg
IFtfY29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOmlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwogfQog
CiAjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAogLSAoQVBJ
OjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlOworICAgIHJldHVybiBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBfYXBpT2JqZWN0XTsK
IH0KIAogQGVuZApAQCAtMTMyLDEyICs4NiwyMyBAQCAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVj
dAogCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwogewotICAgIF91c2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25z
KCk7CisgICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zXTsKIH0KIAogLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPmludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihpZGVudGlmaWVy
KTsKKyAgICBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNp
b25WZXJzaW9uRm9ySWRlbnRpZmllcjppZGVudGlmaWVyXTsKK30KKworLSAoaWQpX2luaXRXaXRo
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmU6KFdLQ29udGVudEV4dGVuc2lvblN0b3JlKiljb250ZW50
RXh0ZW5zaW9uU3RvcmUKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3Jl
ID0gY29udGVudEV4dGVuc2lvblN0b3JlOworICAgIAorICAgIHJldHVybiBzZWxmOwogfQogCiBA
ZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFs
LmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDIyICsyNywxNCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lv
blN0b3JlLmgiCiAjaW1wb3J0ICJXS09iamVjdC5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
aW5saW5lIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlJiBzdG9yZSkKLXsKLSAgICBBU1NFUlQoW3N0b3JlLndyYXBwZXIo
KSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOwot
ICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAqKXN0b3JlLndyYXBwZXIo
KTsKLX0KLQotfQorQGNsYXNzIFdLQ29udGVudEV4dGVuc2lvblN0b3JlOwogCiBAaW50ZXJmYWNl
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQot
ICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IF91
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOworICAgIFJldGFpblB0cjxXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZT4gX2NvbnRlbnRFeHRlbnNpb25TdG9yZTsKIH0KIEBlbmQKIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjEzNjg3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTYgQEAK
IAogI2lmIFdLX0FQSV9FTkFCTEVECiAKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsK
KwogQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCiAK
IC8vIEZvciB0ZXN0aW5nIG9ubHkuCiAtICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
czsKIC0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKIAorLSAoaWQpX2luaXRXaXRoV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmU6KFdLQ29udGVudEV4dGVuc2lvblN0b3JlKiljb250ZW50RXh0ZW5zaW9uU3Rv
cmU7CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0JKHJldmlzaW9u
IDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRGaWx0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDE4ICszNSwyNiBAQAogCiBAaW1w
bGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKIAotLSAodm9pZClkZWFsbG9jCi17Ci0g
ICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uLT5+VXNlckNvbnRlbnRFeHRlbnNpb24oKTsKKyNwcmFn
bWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCi0gICAgW3N1cGVyIGRl
YWxsb2NdOworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gW19jb250
ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdOwogfQogCi0jcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJv
dG9jb2wgaW1wbGVtZW50YXRpb24KK0BlbmQKIAotLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QK
K0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEZpbHRlciAoV0tQcml2YXRlKQorCistIChp
ZClfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiopY29udGVu
dEV4dGVuc2lvbgogewotICAgIHJldHVybiAqX3VzZXJDb250ZW50RXh0ZW5zaW9uOworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIF9jb250ZW50RXh0ZW5zaW9uID0gY29udGVudEV4dGVuc2lvbjsKKyAgICAKKyAg
ICByZXR1cm4gc2VsZjsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlcklu
dGVybmFsLmgJKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywyMiArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCiAj
aW1wb3J0ICJXS09iamVjdC5oIgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotaW5saW5lIF9XS1Vz
ZXJDb250ZW50RmlsdGVyICp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJD
b250ZW50RXh0ZW5zaW9uKQotewotICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24ud3Jh
cHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwotICAg
IHJldHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53cmFw
cGVyKCk7Ci19Ci0KLX0KK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CiAKIEBpbnRlcmZhY2Ug
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6
T2JqZWN0U3RvcmFnZTxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBfdXNlckNvbnRlbnRFeHRl
bnNpb247CisgICAgUmV0YWluUHRyPFdLQ29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNp
b247CiB9CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlclByaXZhdGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJD
b250ZW50RmlsdGVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaD4KKworI2lm
IFdLX0FQSV9FTkFCTEVECisKK0BjbGFzcyBXS1VzZXJDb250ZW50RXh0ZW5zaW9uOworCitAaW50
ZXJmYWNlIF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCisKKy0gKGlkKV9pbml0V2l0
aFdLQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKiljb250ZW50RXh0ZW5zaW9u
OworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkuY3BwCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAi
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjZW5kaWYKIApA
QCAtOTcsMTAgKzk3LDEwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFk
ZFAKICAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMobWVzc2Fn
ZUhhbmRsZXJzKSwgbV9pZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE+PiB1c2VyQ29udGVudEV4dGVuc2lvbnM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB1
c2VyQ29udGVudEV4dGVuc2lvbiA6IG1fdXNlckNvbnRlbnRFeHRlbnNpb25zLnZhbHVlcygpKQot
ICAgICAgICB1c2VyQ29udGVudEV4dGVuc2lvbnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHVzZXJD
b250ZW50RXh0ZW5zaW9uLT5uYW1lKCksIHVzZXJDb250ZW50RXh0ZW5zaW9uLT5jb21waWxlZEV4
dGVuc2lvbigpLmRhdGEoKSkpOwotICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRFeHRl
bnNpb25zKHVzZXJDb250ZW50RXh0ZW5zaW9ucyksIG1faWRlbnRpZmllcik7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE+PiBjb250
ZW50RXh0ZW5zaW9uczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRFeHRlbnNpb24gOiBt
X2NvbnRlbnRFeHRlbnNpb25zLnZhbHVlcygpKQorICAgICAgICBjb250ZW50RXh0ZW5zaW9ucy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoY29udGVudEV4dGVuc2lvbi0+bmFtZSgpLCBjb250ZW50RXh0
ZW5zaW9uLT5jb21waWxlZEV4dGVuc2lvbigpLmRhdGEoKSkpOworICAgIHdlYlByb2Nlc3NQcm94
eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
QWRkQ29udGVudEV4dGVuc2lvbnMoY29udGVudEV4dGVuc2lvbnMpLCBtX2lkZW50aWZpZXIpOwog
I2VuZGlmCiB9CiAKQEAgLTMzOCwzMCArMzM4LDMwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OmRpZFAKIH0KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi12
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lv
bihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24oQVBJOjpD
b250ZW50RXh0ZW5zaW9uJiBjb250ZW50RXh0ZW5zaW9uKQogewotICAgIG1fdXNlckNvbnRlbnRF
eHRlbnNpb25zLnNldCh1c2VyQ29udGVudEV4dGVuc2lvbi5uYW1lKCksICZ1c2VyQ29udGVudEV4
dGVuc2lvbik7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5zZXQoY29udGVudEV4dGVuc2lvbi5u
YW1lKCksICZjb250ZW50RXh0ZW5zaW9uKTsKIAotICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFrZV9w
YWlyKHVzZXJDb250ZW50RXh0ZW5zaW9uLm5hbWUoKSwgdXNlckNvbnRlbnRFeHRlbnNpb24uY29t
cGlsZWRFeHRlbnNpb24oKS5kYXRhKCkpOworICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFrZV9wYWly
KGNvbnRlbnRFeHRlbnNpb24ubmFtZSgpLCBjb250ZW50RXh0ZW5zaW9uLmNvbXBpbGVkRXh0ZW5z
aW9uKCkuZGF0YSgpKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoeyBwYWly
IH0pLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkQ29udGVudEV4dGVuc2lvbnMo
eyBwYWlyIH0pLCBtX2lkZW50aWZpZXIpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUp
Cit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50RXh0ZW5zaW9ucy5y
ZW1vdmUobmFtZSk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5yZW1vdmUobmFtZSk7CiAKICAg
ICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAgICBw
cm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJv
bGxlcjo6UmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSksIG1faWRlbnRpZmllcik7Cisg
ICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpSZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpLCBtX2lkZW50aWZpZXIp
OwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2Vy
Q29udGVudEV4dGVuc2lvbnMoKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6
cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRFeHRlbnNp
b25zLmNsZWFyKCk7CisgICAgbV9jb250ZW50RXh0ZW5zaW9ucy5jbGVhcigpOwogCiAgICAgZm9y
IChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgcHJvY2Vz
cy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6
OlJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpLCBtX2lkZW50aWZpZXIpOworICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6UmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKSwgbV9pZGVudGlmaWVyKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAko
cmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDgg
KzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5X2gKLSNkZWZpbmUgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHlfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3Qu
aCIKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKQEAgLTM4LDggKzM3LDggQEAKIAogbmFt
ZXNwYWNlIEFQSSB7CiBjbGFzcyBBcnJheTsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb247CiBjbGFz
cyBVc2VyQ29udGVudFdvcmxkOwotY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CiBjbGFzcyBV
c2VyU2NyaXB0OwogY2xhc3MgVXNlclN0eWxlU2hlZXQ7CiB9CkBAIC05Miw5ICs5MSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJNZXNzYWdlSGFuZGxlcnMoQVBJOjpVc2VyQ29u
dGVudFdvcmxkJik7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHZvaWQg
YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYpOwotICAg
IHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgdm9p
ZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB2b2lkIGFkZENvbnRlbnRF
eHRlbnNpb24oQVBJOjpDb250ZW50RXh0ZW5zaW9uJik7CisgICAgdm9pZCByZW1vdmVDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlQWxsQ29udGVudEV4dGVu
c2lvbnMoKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTE2LDEwICsxMTUsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hDb3VudGVkU2V0PFJlZlB0cjxBUEk6OlVzZXJDb250ZW50V29ybGQ+PiBtX3Vz
ZXJDb250ZW50V29ybGRzOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+PiBtX3VzZXJD
b250ZW50RXh0ZW5zaW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6Q29udGVu
dEV4dGVuc2lvbj4+IG1fY29udGVudEV4dGVuc2lvbnM7CiAjZW5kaWYKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlf
aApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU0LDYgKzExNTQsMTQg
QEAKIAkJNUNCMjM3OTIxREYwRTJFRTAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMjM3OEYxREYw
RTFCODAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5oICovOyB9OwogCQk1Q0JDOUI4RDFD
NjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0Yg
LyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07CiAJCTVDQkM5QjhFMUM2NTJDQTAwMEE4
RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRh
c2suaCAqLzsgfTsKKwkJNUNEMjg2NTExRTcyMzU5OTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVu
c2lvblN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0QyODY0RDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTVDRDI4NjUy
MUU3MjM1QTYwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzgg
LyogV0tDb250ZW50RXh0ZW5zaW9uLm1tICovOyB9OworCQk1Q0QyODY1MzFFNzIzNUFBMDA5NEZE
QzggLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0QyODY0OTFFNzIyRjQ0MDA5NEZEQzggLyogX1dL
VXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUNEMjg2NTQxRTcyMzVCMTAwOTRGREM4IC8qIFdLQ29udGVu
dEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUNEMjg2NEExRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNUNEMjg2NTUxRTcy
MzVCODAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0QyODY0QzFFNzIyRjQ0MDA5NEZE
QzggLyogV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJNUNEMjg2NTYxRTcy
MzVDNjAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NEUxRTcyMkY0NDAwOTRGREM4
IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OworCQk1Q0QyODY1NzFFNzIzNUM5
MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NEYxRTcyMkY0NDAwOTRG
REM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKKwkJNUNEMjg2
NTgxRTcyMzVEMTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NTAxRTcy
MkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDRTg1QjIwMUM4OEU2
NEIwMDcwQkZDRSAvKiBQaW5nTG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi87
IH07CiAJCTVDRkVDQjA0MUUxRUQxQ0MwMEY4ODUwNCAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNGRUNCMDMxRTFFRDFDODAwRjg4NTA0IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5j
cHAgKi87IH07CiAJCTY1MDFCRDFBMTJGMTI0MzQwMEU5RjI0OCAvKiBXS0J1bmRsZUluc3BlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4
NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovOyB9OwpAQCAt
MTIwNCw4ICsxMjEyLDggQEAKIAkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYxRDc2MTkyODAzQkQwMDM2QTU5RCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CiAJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk3QzM4NzQzNDE3MkY1NjE1MDAxQkQ4OEEgLyogUGFn
ZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi87IH07Ci0JCTdD
M0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0EwNkE1
MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLzsg
fTsKLQkJN0MzQTA2QTgxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
M0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgg
Ki87IH07CisJCTdDM0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAg
Ki87IH07CisJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
M0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLzsg
fTsKIAkJN0MzRjhDOTAxNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Y4QzhFMTcz
QUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi87IH07CiAJCTdDM0Y4Qzkx
MTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjhDOEYxNzNBRjUyRDAwN0I3RjM5IC8q
IFBsdWdpbkluZm9ybWF0aW9uLmggKi87IH07CiAJCTdDNDY5NEM5MUE0QjRFQTEwMEFENTg0NSAv
KiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0QzcxQTRCNEVBMDAwQUQ1ODQ1IC8q
IFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0xMjM4LDgg
KzEyNDYsOCBAQAogCQk3Qzg5RDJBMzFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVm
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlE
MkExMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwICovOyB9OwogCQk3Qzg5
RDJBNDFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBMjFBNjc4ODc1MDAzQTVGREUg
LyogV0tVc2VyU2NyaXB0UmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0M4OUQyQTYxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQy
QTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovOyB9OwotCQk3Qzg5RDJC
MzFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjExQTZCMDY4QzAw
M0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsKLQkJN0M4OUQyQjQx
QTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMjFBNkIwNjhDMDAzQTVG
REUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLzsgfTsKKwkJN0M4OUQyQjMxQTZCMDY4
QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQ
SUNvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OworCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUg
LyogQVBJQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0M4OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRl
bnNpb24uaCAqLzsgfTsKIAkJN0M4OUQyQjYxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNlckNvbnRl
bnRDb250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M4OUQyQjUxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdDODlEMkI5MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlE
MkI3MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLzsgfTsKIAkJ
N0M4OUQyQkExQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCODFBNkIwRjJD
MDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzM3Nyw2ICszMzg1LDE0IEBACiAJCTVDQjIz
NzkwMURGMEUxREQwMDExN0FBMyAvKiBBUElXZWJzaXRlUG9saWNpZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJV2Vic2l0ZVBvbGljaWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdv
cmtEYXRhVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0
YVRhc2suaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29y
a0RhdGFUYXNrQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtEYXRhVGFza0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0Qy
ODY0OTFFNzIyRjQ0MDA5NEZEQzggLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY0QTFFNzIyRjQ0MDA5NEZE
QzggLyogV0tDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY0QzFFNzIyRjQ0MDA5NEZEQzggLyog
V0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNEMjg2NEQxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lv
blN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRDI4NjRFMUU3MjJGNDQw
MDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY0RjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDRDI4NjUwMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBQaW5nTG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvUGluZ0xv
YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNGRUNCMDMxRTFFRDFDODAwRjg4
NTA0IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFu
YWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZENTg1Njcw
MEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1Z2luU2Vy
dmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDM3LDgg
KzM0NTMsOCBAQAogCQk3QzM2MUQ3NjE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzM2MUQ3NzE5MjgwM0JEMDAz
NkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1l
c3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzg3NDMzMTcyRjU2MTUw
MDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhZ2VCYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzNB
MDZBNTFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MzQTA2QTYxQUFC
OTAzRTAwOUQ3NEJBIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzNBMDZBNTFBQUI5MDNFMDA5RDc0QkEgLyog
QVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ29udGVudEV4
dGVuc2lvblN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y4QzhFMTcz
QUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDM0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1h
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ2OTRDNzFBNEI0RUEwMDBBRDU4
NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNDc0LDggKzM0OTAsOCBAQAog
CQk3Qzg5RDJBMTFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlclNjcmlwdFJlZi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkEyMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1Vz
ZXJTY3JpcHRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyU2Ny
aXB0UmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkE1MUE2Nzg5RUEw
MDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEFQSVVzZXJTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRl
bnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3Qzg5RDJCMjFBNkIwNjhD
MDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRl
bnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJQ29udGVu
dEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDODlEMkIyMUE2
QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFQSUNvbnRlbnRFeHRlbnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M4OUQyQjUxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNvbnRlbnRGaWx0ZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkI4MUE2QjBGMkMwMDNBNUZE
RSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTQyNSw2ICs1NDQxLDE0IEBACiAJCTM3QzRDMDgzMTgxNDlDMkEwMDM2ODhCOSAvKiBDb2Nv
YSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNEMjg2
NDkxRTcyMkY0NDAwOTRGREM4IC8qIF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oICovLAor
CQkJCTVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLywK
KwkJCQk1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uLm1tICov
LAorCQkJCTVDRDI4NjRDMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25JbnRl
cm5hbC5oICovLAorCQkJCTVDRDI4NjREMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZS5oICovLAorCQkJCTVDRDI4NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbSAqLywKKwkJCQk1Q0QyODY0RjFFNzIyRjQ0MDA5NEZEQzggLyog
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovLAorCQkJCTVDRDI4NjUwMUU3MjJG
NDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLywKIAkJCQkx
QTQzRTgyNjE4OEYzOEUyMDA5RTREMzAgLyogRGVwcmVjYXRlZCAqLywKIAkJCQkzN0E1RTAxMjE4
QkJGOTM3MDAwQTA4MUUgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm8uaCAqLywKIAkJCQkzN0E1
RTAxMTE4QkJGOTM3MDAwQTA4MUUgLyogX1dLQWN0aXZhdGVkRWxlbWVudEluZm8ubW0gKi8sCkBA
IC02NzMwLDEwICs2NzU0LDEwIEBACiAJCQkJMUE0RDY2NDcxOEEyRDkxQTAwRDgyRTIxIC8qIEFQ
SVVJQ2xpZW50LmggKi8sCiAJCQkJNTFEMTI0MzgxRTZERkRCOTAwMkIyODIwIC8qIEFQSVVSTFNj
aGVtZUhhbmRsZXJUYXNrLmNwcCAqLywKIAkJCQk1MUQxMjQzOTFFNkRGREI5MDAyQjI4MjAgLyog
QVBJVVJMU2NoZW1lSGFuZGxlclRhc2suaCAqLywKLQkJCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVG
REUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwICovLAotCQkJCTdDODlEMkIyMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICovLAotCQkJCTdDM0EwNkE1
MUFBQjkwM0UwMDlENzRCQSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCAqLywK
LQkJCQk3QzNBMDZBNjFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oICovLAorCQkJCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0
ZW5zaW9uLmNwcCAqLywKKwkJCQk3Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVu
dEV4dGVuc2lvbi5oICovLAorCQkJCTdDM0EwNkE1MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovLAorCQkJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAv
KiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLywKIAkJCQk3Qzg4MkRGQjFDN0U5OUE2MDA2
QkY3MzEgLyogQVBJVXNlckNvbnRlbnRXb3JsZC5jcHAgKi8sCiAJCQkJN0M4ODJERkMxQzdFOTlB
NjAwNkJGNzMxIC8qIEFQSVVzZXJDb250ZW50V29ybGQuaCAqLywKIAkJCQk3Q0IzNjVBRjFEMzFE
RDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5oICovLApAQCAtNzk5OSw2ICs4
MDIzLDcgQEAKIAkJCQkyRDg3ODYxRDFCREI1NEJGMDBEMDJBQkIgLyogX1dLVXNlclN0eWxlU2hl
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEODc4NjIwMUJEQjU3RjUwMEQwMkFCQiAvKiBfV0tV
c2VyU3R5bGVTaGVldEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTgxQjM4MTE4QkQ2
NkFEMDAwN0ZEQUMgLyogX1dLVmlzaXRlZExpbmtTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUNEMjg2NTQxRTcyMzVCMTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4MUIzODUxOEJENjczQTAwMDdGREFDIC8qIF9XS1Zpc2l0ZWRMaW5rU3Rv
cmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMjg2NzgxQzdFNzY1MTAwNjlBQzRG
IC8qIF9XS1dlYnNpdGVEYXRhU2l6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMjg2ODAxQzdG
OTJDMDAwNjlBQzRGIC8qIF9XS1dlYnNpdGVEYXRhU2l6ZUludGVybmFsLmggaW4gSGVhZGVycyAq
LywKQEAgLTgwMDcsNiArODAzMiw3IEBACiAJCQkJNUNCMjM3OEMxREYwREU2RTAwMTE3QUEzIC8q
IF9XS1dlYnNpdGVQb2xpY2llcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMjM3OEUxREYwRTBE
MzAwMTE3QUEzIC8qIF9XS1dlYnNpdGVQb2xpY2llc0ludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTE1REM3MjE5MUQ4MkRBMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0QyODY1NzFFNzIzNUM5MDA5NEZEQzggLyogV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE5REQzQzAx
RDA3RDE2ODAwQUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTgyRDVCNTFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0
eUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdENzkyRDgxNzY3Q0NBMzAwODgxQ0JFIC8qIEFj
dGl2aXR5QXNzZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTgwNTQsOCArODA4MCw4IEBACiAJ
CQkJQkNEQjg2QzExMjAwRkI5NzAwNzI1NEJFIC8qIEFQSVVSTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFMjMxNUQxMjJDMzBDQTAwRDVDMzVBIC8qIEFQSVVSTFJlcXVlc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDOTBBMUQyMTIyREQ1NUUwMENDOEM1MCAvKiBBUElVUkxSZXNwb25zZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJN0M4OUQyQjQxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzNBMDZBODFBQUI5MDNFMDA5RDc0
QkEgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
N0M4OUQyQjQxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY2MTEzRTI1MTI2Q0UxODIwMDU3RDBBNyAv
KiBBUElVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDODgyREZE
MUM3RTk5QTgwMDZCRjczMSAvKiBBUElVc2VyQ29udGVudFdvcmxkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3Q0IzNjVCMTFEMzFERDFFMDA3MTU4Q0EgLyogQVBJVXNlckluaXRpYXRlZEFjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCkBAIC04MjYzLDYgKzgyODksNyBAQAogCQkJCTFBMkQ4NDhCMTI3RjZB
NDkwMDFFQjk2MiAvKiBOUElkZW50aWZpZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU0
OTc2ODExRkY2NThFMDA0OEI0NjQgLyogTlBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEyRDgyQTUxMjdGNEVBQjAwMUVCOTYyIC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1Q0QyODY1MTFFNzIzNTk5MDA5NEZEQzggLyogV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ4NDNBMTI3RjY1RDUwMDFFQjk2
MiAvKiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTJEODJBNzEyN0Y0RUFCMDAxRUI5NjIgLyogTlBPYmplY3RQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEyRDgyQTkxMjdGNEVBQjAwMUVCOTYyIC8qIE5QUmVtb3RlT2JqZWN0TWFwLmgg
aW4gSGVhZGVycyAqLywKQEAgLTg2MTksNiArODY0Niw3IEBACiAJCQkJQkNCQUFDRjYxNDUyMzI0
RjAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUUwMEQ0RDE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5k
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jy
b3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0QyODY1
ODFFNzIzNUQxMDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzNzBGMzRBNzE4MjlDRkYzMDA5MDI3QzggLyogV0tCcm93c2luZ0Nv
bnRleHRIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkFBRDBCMTQ1NjBB
NDMwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzdGQzE5NDcxODUwRkJGMjAwOENGQTQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0TG9h
ZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzk4LDYgKzg4MjYsNyBAQAog
CQkJCUJDN0I2MzM3MTJBNDVBQkEwMEQxNzRBNCAvKiBXS1BhZ2VHcm91cC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkQ5RUEzMEQxQTk2Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxl
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFFQzE4NDAwODA5MDBFOUFFNjkgLyog
V0tQYWdlTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0QyODY1MzFFNzIzNUFB
MDA5NEZEQzggLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0JERUIwMTE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5cGVz
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3MzAzNzkxQTdDMkI3NTAwRjhGNDg3IC8q
IFdLUGFnZU5hdmlnYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODkyMCw2ICs4OTQ5
LDcgQEAKIAkJCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NUE4RDJENjE4N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTI4NjdBMUM3RjdC
QTYwMDY5QUM0RiAvKiBXS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1Q0QyODY1NTFFNzIzNUI4MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTcxMDlGMUFCQTAwMjcwMDJGQUJCRSAvKiBXS1dl
YnNpdGVEYXRhU3RvcmVSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDOUU1NjgzMURGN0YxQjMw
MEM5RUUzMyAvKiBXS1dlYnNpdGVQb2xpY2llcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzQ0Mx
NjcxODkwNkFDRjAwMUU2RUQ4IC8qIFdLV2ViVmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTc5
LDggKzk2MDksOCBAQAogCQkJCTFBRkRFNjYxMTk1NEU5QjEwMEM0OEZGQSAvKiBBUElTZXNzaW9u
U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMjMxNUUxMjJDMzBDQTAwRDVDMzVBIC8q
IEFQSVVSTFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MEExRDMxMjJERDU1RTAw
Q0M4QzUwIC8qIEFQSVVSTFJlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDODlEMkIz
MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk3QzNBMDZBNzFBQUI5MDNFMDA5RDc0QkEgLyogQVBJVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVG
REUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzNBMDZB
NzFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDRUZBOTYyMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Qzg4MkRGRTFDN0U5OUFD
MDA2QkY3MzEgLyogQVBJVXNlckNvbnRlbnRXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Qzg5RDJBNjFBNjc4OUVBMDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTk5NzksNiArMTAwMDksNyBAQAogCQkJCUJDODI4Mzk5MTZCNDhEQzAwMEEyNzhGRSAv
KiBXZWJDb250ZW50U2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUE1
MDVGOTE2ODAwMjU1MDBBOTMwRUIgLyogV2ViQ29udGV4dENsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzA5QjhGODE0NzQ2MEY3MDA1RjU2MjUgLyogV2ViQ29udGV4dENvbm5lY3Rpb25D
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNEMjg2NTYxRTcyMzVDNjAwOTRGREM4IC8q
IFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNERTA1OUMx
MUNEQThBRTAwRTQxQUYxIC8qIFdlYkNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTg3MUI1QjEyN0NCODlEMDBGNzYyMzIgLyogV2ViQ29udGV4dE1l
bnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFBNUIxMTJGNEZCQjAwMzM3QkFCIC8qIFdl
YkNvbnRleHRNZW51Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAzOTEsNiArMTA0MjIs
NyBAQAogCQkJCTFBQTJFNTY2MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQ
YXJhbWV0ZXJzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5ODlEODExNjFBN0U1RDAwMEQ0NkQz
IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOEYyRjJBMTYy
NzNBMkMwMDVGQUNCNSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xs
ZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Q0QyODY1MjFFNzIzNUE2MDA5NEZEQzggLyogV0tD
b250ZW50RXh0ZW5zaW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUY3NTA2QUQxODU5MTYxQzAw
RUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUY3NTA2QUUxODU5MTYyMjAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1
bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxRjc1MDZBRjE4NTkxNjI4MDBFQzBGRjcgLyogV0tX
ZWJQcm9jZXNzUGx1Z0luTm9kZUhhbmRsZS5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjEzNjg3KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMjIgKzMzOSwyMiBAQCB2b2lkIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRF
eHRlbnNpb25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhPj4mIHVzZXJDb250ZW50RXh0ZW5zaW9ucykKK3ZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRDb250ZW50RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+JiBjb250ZW50RXh0
ZW5zaW9ucykKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJDb250ZW50RXh0ZW5zaW9uIDog
dXNlckNvbnRlbnRFeHRlbnNpb25zKSB7Ci0gICAgICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEgY29udGVudEV4dGVuc2lvbkRhdGEgPSB1c2VyQ29udGVudEV4dGVuc2lvbi5zZWNv
bmQ7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50RXh0ZW5zaW9uIDogY29udGVudEV4dGVu
c2lvbnMpIHsKKyAgICAgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50
RXh0ZW5zaW9uRGF0YSA9IGNvbnRlbnRFeHRlbnNpb24uc2Vjb25kOwogICAgICAgICBSZWZQdHI8
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRFeHRlbnNp
b25EYXRhKSk7CiAKLSAgICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5hZGRDb250ZW50
RXh0ZW5zaW9uKHVzZXJDb250ZW50RXh0ZW5zaW9uLmZpcnN0LCBXVEZNb3ZlKGNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbikpOworICAgICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFkZENv
bnRlbnRFeHRlbnNpb24oY29udGVudEV4dGVuc2lvbi5maXJzdCwgV1RGTW92ZShjb21waWxlZENv
bnRlbnRFeHRlbnNpb24pKTsKICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lk
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVDb250
ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpCiB7CiAgICAgbV9jb250ZW50RXh0
ZW5zaW9uQmFja2VuZC5yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwogfQpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTM2ODcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJfaAot
I2RlZmluZSBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxl
ci5oIgpAQCAtOTUsOSArOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlclNj
cmlwdE1lc3NhZ2VIYW5kbGVycyhjb25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb25z
KGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhPj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsK
KyAgICB2b2lkIGFkZENvbnRlbnRFeHRlbnNpb25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4mKTsKKyAgICB2b2lkIHJlbW92
ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zKCk7CiAjZW5kaWYKIAogICAgIHZvaWQgYWRkVXNlclNjcmlwdElu
dGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRl
bnRpZmllciwgV2ViQ29yZTo6VXNlclNjcmlwdCYmKTsKQEAgLTEyOCw1ICsxMjcsMyBAQCBwcml2
YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXIubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxMzY4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlVzZXJDb250
ZW50Q29udHJvbGxlciB7CiAgICAgUmVtb3ZlQWxsVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhW
ZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICBBZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0ZDo6cGFp
cjxTdHJpbmcsIFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IHVzZXJD
b250ZW50RmlsdGVycyk7Ci0gICAgUmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oU3RyaW5nIG5h
bWUpOwotICAgIFJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOworICAgIEFkZENvbnRl
bnRFeHRlbnNpb25zKFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJLaXQ6OldlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGE+PiBjb250ZW50RmlsdGVycyk7CisgICAgUmVtb3ZlQ29udGVu
dEV4dGVuc2lvbihTdHJpbmcgbmFtZSk7CisgICAgUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMo
KTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRXJyb3JzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVycm9yc01hYy5tbQkocmV2aXNpb24gMjEz
Njg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RXJyb3JzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIFJlc291cmNlRXJy
b3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2UKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJ
TkcpCiBSZXNvdXJjZUVycm9yIGJsb2NrZWRCeUNvbnRlbnRGaWx0ZXJFcnJvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoQVBJOjpF
cnJvcjo6d2ViS2l0RXJyb3JEb21haW4oKSwga1dLRXJyb3JDb2RlRnJhbWVMb2FkQmxvY2tlZEJ5
Q29udGVudEZpbHRlciwgcmVxdWVzdC51cmwoKSwgV0VCX1VJX1NUUklORygiVGhlIFVSTCB3YXMg
YmxvY2tlZCBieSBhIGNvbnRlbnQgZmlsdGVyIiwgIldlYktpdEVycm9yQmxvY2tlZEJ5Q29udGVu
dEZpbHRlciIpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihBUEk6OkVycm9yOjp3ZWJLaXRF
cnJvckRvbWFpbigpLCBrV0tFcnJvckNvZGVGcmFtZUxvYWRCbG9ja2VkQnlDb250ZW50RmlsdGVy
LCByZXF1ZXN0LnVybCgpLCBXRUJfVUlfU1RSSU5HKCJUaGUgVVJMIHdhcyBibG9ja2VkIGJ5IGEg
Y29udGVudCBmaWx0ZXIiLCAiV2ViS2l0RXJyb3JGcmFtZUxvYWRCbG9ja2VkQnlDb250ZW50Rmls
dGVyIGRlc2NyaXB0aW9uIikpOwogfQogI2VuZGlmCiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzY4NykKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTAzLTA5ICBC
cmlhbiBOaWNob2xzb24gIDxibmljaG9sc29uQG1vemlsbGEuY29tPiBhbmQgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEV4cG9zZSBwdWJsaWMg
QVBJcyBmb3IgY29udGVudCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA0NzkKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRz
b24gYW5kIEdlb2ZmIEdhcmVuLgorCisgICAgICAgIEtlZXAgdGhlIGV4aXN0aW5nIHRlc3RzIHRv
IHZlcmlmeSB0aGF0IEkgbWFkZSB0aGUgd3JhcHBlciBjbGFzc2VzIGZvciB0aGUgb2xkIFNQSSB3
b3JrIGNvcnJlY3RseS4KKyAgICAgICAgQWRkIG5ldyBpZGVudGljYWwgdGVzdHMgZm9yIHRoZSBu
ZXcgQVBJIGFyZSBhZGRlZCB3aXRoIHRoZSBuZXcgbmFtZXMuCisgICAgICAgIFdlIHNob3VsZCBr
ZWVwIGJvdGggdW50aWwgd2UgbWlncmF0ZSBmcm9tIGFuZCByZW1vdmUgdGhlIG9sZCBTUEkuCisg
ICAgICAgIEVudW0gZXJyb3IgY29kZSB2YWx1ZXMgYW5kIHN0cmluZ3MgaGF2ZSBjaGFuZ2VkLCBi
dXQgdGhlIEFQSSBpcyBzb3VyY2UgY29tcGF0aWJsZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbTogQ29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2Ev
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbS4KKyAgICAgICAgKFdLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3Q6OlNldFVwKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgIChj
aGVja0RvbWFpbik6CisgICAgICAgIChfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdDo6
U2V0VXApOiBEZWxldGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNv
Y29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgIChjaGVja0RvbWFp
bik6CisKIDIwMTctMDMtMDkgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYkdQVTogQmFja2VuZCAtIEJ1ZmZlcnMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyMTM2ODcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSw3
IEBACiAJCTVDOUU1OTQxMUQzRUI1QUMwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiIGlu
IENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUU1
OTNFMUQzRUIxREUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovOyB9OwogCQk1QzlF
NTk0MjFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi1zaG0gaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5M0YxRDNF
QjFERTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItc2htICovOyB9OwogCQk1QzlFNTk0
MzFEM0VCNUFDMDBFM0M2MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RTU5NDAxRDNFQjFE
RTAwRTNDNjJFIC8qIEFwcGxpY2F0aW9uQ2FjaGUuZGItd2FsICovOyB9OworCQk1Q0UzNTREOTFF
NzBEQTVDMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNFMzU0RDgxRTcwRDlDMzAw
QkVGRTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKIAkJNUU0QjFE
MkUxRDQwNEM2MTAwMDUzNjIxIC8qIFdLU2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1RTRCMUQyQzFENDA0QzYx
MDAwNTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSAqLzsgfTsKIAkJNkJGRDI5
NEMxRDVFNkMxRDAwOEVDOTY4IC8qIEhhc2hDb3VudGVkU2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAv
KiBIYXNoQ291bnRlZFNldC5jcHAgKi87IH07CiAJCTc1NUEyMEFGMUU2RTM4NjMwMDkzQzY5RiAv
KiBEYXRhYmFzZVRyYWNrZXJUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1NUEyMEFFMUU2RTM4NjMwMDkzQzY5RiAvKiBEYXRhYmFzZVRyYWNr
ZXJUZXN0LmNwcCAqLzsgfTsKQEAgLTEwOTIsNiArMTA5Myw3IEBACiAJCTVDOUU1OTNFMUQzRUIx
REUwMEUzQzYyRSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGUu
ZGI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDOUU1OTNGMUQzRUIxREUwMEUzQzYy
RSAvKiBBcHBsaWNhdGlvbkNhY2hlLmRiLXNobSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiQXBwbGljYXRpb25DYWNoZS5kYi1z
aG0iOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzlFNTk0MDFEM0VCMURFMDBFM0M2
MkUgLyogQXBwbGljYXRpb25DYWNoZS5kYi13YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gIkFwcGxpY2F0aW9uQ2FjaGUuZGIt
d2FsIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNFMzU0RDgxRTcwRDlDMzAwQkVG
RTNCIC8qIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUU0QjFEMkMxRDQwNEM2MTAwMDUzNjIxIC8qIFdL
U2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS1Njcm9sbFZpZXdEZWxlZ2F0ZUNyYXNoLm1tOyBwYXRoID0gLi4vaW9zL1dL
U2Nyb2xsVmlld0RlbGVnYXRlQ3Jhc2gubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc1NUEyMEFFMUU2RTM4NjMwMDkzQzY5RiAvKiBEYXRhYmFzZVRyYWNrZXJUZXN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlVHJhY2tlclRlc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTYwOTE3NzE5MjU5QzU5MDA5RUYwNkUg
LyogTWVtb3J5Q2FjaGVBZGRJbWFnZVRvQ2FjaGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBNZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDgsNiArMTY1MCw3IEBACiAJCQkJMzdCNDdF
MkUxRDY0RTdDQTAwNUY0RUZGIC8qIFdLT2JqZWN0Lm1tICovLAogCQkJCTJEMDAwNjVEMUMxRjU4
OTQwMDg4RTZBNyAvKiBXS1BERlZpZXdSZXNpemVDcmFzaC5tbSAqLywKIAkJCQk1RTRCMUQyQzFE
NDA0QzYxMDAwNTM2MjEgLyogV0tTY3JvbGxWaWV3RGVsZWdhdGVDcmFzaC5tbSAqLywKKwkJCQk1
Q0UzNTREODFFNzBEOUMzMDBCRUZFM0IgLyogV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1t
ICovLAogCQkJCTJFRkYwNkQ2MUQ4QUYzNEEwMDA0QkIzMCAvKiBXS1dlYlZpZXdDYW5kaWRhdGVU
ZXN0cy5tbSAqLywKIAkJCQk3QzQxN0YzMTFEMTlFMTQ4MDBCOEVGNTMgLyogV0tXZWJWaWV3RGVm
YXVsdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbSAqLywKIAkJCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMy
NzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tICovLApAQCAtMjkxOCw2ICsyOTIx
LDcgQEAKIAkJCQk3Q0NFN0YxRTFBNDExQUU2MDA0NDdDNEMgLyogV0tTdHJpbmdKU1N0cmluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTRGQzU4NTFCODk3MzkxMDBEMTA3RUIgLyogV0tXZWJW
aWV3Q29uZmlndXJhdGlvbkV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDNDE3RjMzMUQx
OUUxNDgwMEI4RUY1MyAvKiBXS1dlYlZpZXdEZWZhdWx0TmF2aWdhdGlvbkRlbGVnYXRlLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNUNFMzU0RDkxRTcwREE1QzAwQkVGRTNCIC8qIFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGM0I5NEE3MUE3NzI2NzQw
MERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk5OTg0RkFDQzFDRkZBRjYwMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNzY0MzIyRDcxQjYxQ0NDMzAwMjRGODAxIC8qIFdvcmRCb3VuZGFy
eVR5cGluZ0F0dHJpYnV0ZXMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxMzY4NykJKGZyb20gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbToyMTM2ODcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2Nv
YS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgPFdlYktp
dC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKworY2xhc3MgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVz
dGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7Cisg
ICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1v
dmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAgfQorfTsKKworc3RhdGljIE5TU3RyaW5nICpi
YXNpY0ZpbHRlciA9IEAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dl
clwiOntcInVybC1maWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifX1dIjsKKworVEVTVF9GKF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBDb21waWxlKQoreworICAgIF9fYmxvY2sgYm9v
bCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAi
VGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxl
dGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJv
cikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQ
RUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Cit9CisKK3N0
YXRpYyBOU1N0cmluZyAqaW52YWxpZEZpbHRlciA9IEAiWyI7CisKK3N0YXRpYyB2b2lkIGNoZWNr
RG9tYWluKE5TRXJyb3IgKmVycm9yKQoreworICAgIEVYUEVDVF9TVFJFUShbW2Vycm9yIGRvbWFp
bl0gVVRGOFN0cmluZ10sIFtfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gVVRGOFN0cmlu
Z10pOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFs
aWRFeHRlbnNpb24pCit7CisgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsK
KyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29u
dGVudEV4dGVuc2lvbjppbnZhbGlkRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQ
RUNUX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKyAgICAg
ICAgY2hlY2tEb21haW4oZXJyb3IpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCk7CisgICAgICAgIEVY
UEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNl
IHRoZSBKU09OIFN0cmluZy4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKwor
ICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsIExvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBp
bGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVy
Ol4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAK
KyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVy
cm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworCisgICAgX19ibG9jayBib29s
IGRvbmVMb29raW5nVXAgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRl
c3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZp
bHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZp
bHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lTG9va2lu
Z1VwID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVM
b29raW5nVXApOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3Qs
IE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxv
b2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4
aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5T
RXJyb3IgKmVycm9yKSB7CisgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CisgICAg
ICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsK
KyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvckxvb2t1cEZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxv
b2t1cCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIiwgW1tlcnJvciBo
ZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIAorICAgICAgICBkb25lTG9va2luZ1Vw
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29r
aW5nVXApOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIFZl
cnNpb25NaXNtYXRjaCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNl
OworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRD
b250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCisgICAgeworICAgICAgICAKKyAg
ICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9y
KTsKKyAgICAgICAgCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBbW19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfaW52YWxpZGF0ZUNvbnRlbnRF
eHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iXTsKKyAgICAKKyAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29u
dGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKKyAgICB7CisgICAgICAgIAorICAg
ICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3Ip
OworICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5j
b2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2gpOwor
ICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiBWZXJzaW9uIG9m
IGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iLCBbW2Vycm9yIGhl
bHBBbmNob3JdIFVURjhTdHJpbmddKTsKKyAgICAgICAgCisgICAgICAgIGRvbmVMb29raW5nVXAg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tp
bmdVcCk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVt
b3ZhbCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0
ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9O
VUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25l
Q29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmVDb21waWxpbmcpOworCisgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNl
OworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlv
bkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7
CisKKyAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVSZW1vdmluZyk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQoreworICAg
IF9fYmxvY2sgYm9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjpAIkRvZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJv
cikgeworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworICAgICAgICBjaGVja0RvbWFp
bihlcnJvcik7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQpOworICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4
dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4i
LCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKworICAgICAgICBkb25lUmVtb3Zp
bmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJl
bW92aW5nKTsKK30KKworI2VuZGlmCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDJDb2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTM2ODcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJDb2NvYS9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDIzICszMCwyMyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9y
dCAiVGVzdC5oIgotI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKLWNsYXNzIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworY2xhc3MgV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewogcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBTZXRVcCgpCiAgICAgewotICAgICAgICBbW19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOwor
ICAgICAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zXTsKICAgICB9CiB9OwogCiBzdGF0aWMgTlNTdHJpbmcgKmJhc2lj
RmlsdGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwogCi1URVNUX0YoX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCitURVNUX0YoV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmVUZXN0LCBDb21waWxlKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5n
ID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9y
ZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIg
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6Xihf
V0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lv
bkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpi
YXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVy
KTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtNjAsMTggKzYwLDE4IEBAIHN0YXRp
YyBOU1N0cmluZyAqaW52YWxpZEZpbHRlciA9IEAiWyI7CiAKIHN0YXRpYyB2b2lkIGNoZWNrRG9t
YWluKE5TRXJyb3IgKmVycm9yKQogewotICAgIEVYUEVDVF9TVFJFUShbW2Vycm9yIGRvbWFpbl0g
VVRGOFN0cmluZ10sIFtfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gVVRGOFN0cmluZ10p
OworICAgIEVYUEVDVF9TVFJFUShbW2Vycm9yIGRvbWFpbl0gVVRGOFN0cmluZ10sIFtXS0Vycm9y
RG9tYWluIFVURjhTdHJpbmddKTsKIH0KIAotVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVUZXN0LCBJbnZhbGlkRXh0ZW5zaW9uKQorVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBp
bGluZyA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAg
IFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVu
c2lvbjppbnZhbGlkRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9u
ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OVUxMKGZp
bHRlcik7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9t
YWluKGVycm9yKTsKLSAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWlsZWQpOworICAgICAgICBFWFBFQ1RfRVEoZXJy
b3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQpOwogICAg
ICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBjb21waWxhdGlvbiBmYWlsZWQ6IEZhaWxlZCB0
byBwYXJzZSB0aGUgSlNPTiBTdHJpbmcuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5n
XSk7CiAKICAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CkBAIC03OSwxMCArNzksMTAgQEAg
VEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CiB9CiAKLVRFU1RfRihfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQorVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgTG9va3VwKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFs
c2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29t
cGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2Vy
Q29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklk
ZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0Zp
bHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vy
cm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAg
ICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtOTIsNyArOTIsNyBAQCBURVNUX0YoX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lQ29tcGlsaW5nKTsKIAogICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFs
c2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9v
a3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0
aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhh
bmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKQEAgLTEwMiwxNSArMTAyLDE1IEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5n
VXApOwogfQogCi1URVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4
aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKK1RFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9u
ZUxvb2tpbmdVcCA9IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05v
dEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIs
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0
IiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9y
ICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBF
WFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7Ci0gICAg
ICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JMb29rdXBGYWlsZWQpOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCk7CiAgICAgICAgIEVYUEVDVF9TVFJFUSgi
RXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAu
IiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAgICAgICAgIAogICAgICAgICBk
b25lTG9va2luZ1VwID0gdHJ1ZTsKQEAgLTExOCwxMCArMTE4LDEwIEBAIFRFU1RfRihfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmVMb29raW5nVXApOwogfQogCi1URVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsIFZlcnNpb25NaXNtYXRjaCkKK1RFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QsIFZlcnNpb25NaXNtYXRjaCkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9
IGZhbHNlOwotICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVd
IGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCisgICAgW1tXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2lj
RmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5T
RXJyb3IgKmVycm9yKQogICAgIHsKICAgICAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChm
aWx0ZXIpOwpAQCAtMTMxLDE2ICsxMzEsMTYgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVUZXN0LAogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUNvbXBpbGluZyk7CiAKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVs
dFN0b3JlXSBfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpA
IlRlc3RFeHRlbnNpb24iXTsKKyAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRT
dG9yZV0gX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZpZXI6QCJU
ZXN0RXh0ZW5zaW9uIl07CiAgICAgCiAgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBm
YWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBs
b29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBs
ZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJy
b3IpCisgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhh
bmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCiAgICAg
ewogICAgICAgICAKICAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwotICAgICAgICBF
WFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVy
c2lvbk1pc21hdGNoKTsKKyAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2gpOwogICAgICAgICBFWFBFQ1RfU1RSRVEo
IkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiBWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2gg
dmVyc2lvbiBvZiBpbnRlcnByZXRlci4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmdd
KTsKICAgICAgICAgCiAgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOwpAQCAtMTQ4LDEwICsx
NDgsMTAgQEAgVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7CiB9CiAKLVRFU1RfRihfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVtb3ZhbCkKK1RFU1RfRihXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsIFJlbW92YWwpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVDb21w
aWxpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVs
dFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxl
cjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAg
W1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5z
aW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpm
aWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChm
aWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC0xNjEsNyArMTYxLDcgQEAg
VEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CiAKICAgICBfX2Jsb2NrIGJvb2wgZG9uZVJl
bW92aW5nID0gZmFsc2U7Ci0gICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICpl
cnJvcikgewogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAKICAgICAgICAgZG9uZVJlbW92
aW5nID0gdHJ1ZTsKQEAgLTE2OSwxMyArMTY5LDEzIEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlVGVzdCwKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVSZW1v
dmluZyk7CiB9CiAKLVRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9u
RXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQorVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
VGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQogewogICAgIF9fYmxvY2sgYm9vbCBk
b25lUmVtb3ZpbmcgPSBmYWxzZTsKLSAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkRvZXNO
b3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIkRvZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9y
ICplcnJvcikgewogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVj
a0RvbWFpbihlcnJvcik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQpOworICAgICAgICBFWFBFQ1RfRVEo
ZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCk7CiAg
ICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiBVbnNwZWNpZmll
ZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10p
OwogCiAgICAgICAgIGRvbmVSZW1vdmluZyA9IHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>