<?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>143123</bug_id>
          
          <creation_ts>2015-03-26 18:06:49 -0700</creation_ts>
          <short_desc>[Content Extensions] Flesh out the UserContentExtensionStore</short_desc>
          <delta_ts>2015-04-13 14:39:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080520</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-26 18:06:49 -0700</bug_when>
    <thetext>[Content Extensions] Flesh out the UserContentExtensionStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080610</commentid>
    <comment_count>1</comment_count>
      <attachid>249572</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-27 09:09:40 -0700</bug_when>
    <thetext>Created attachment 249572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080611</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 09:11:38 -0700</bug_when>
    <thetext>Attachment 249572 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:75:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:83:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:65:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:114:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:135:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:128:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:128:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:344:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 13 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>1080676</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-27 11:32:17 -0700</bug_when>
    <thetext>Why is this called UserContentExtensionStore instead of ContentExtensionStore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080682</commentid>
    <comment_count>4</comment_count>
      <attachid>249572</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 11:57:50 -0700</bug_when>
    <thetext>Comment on attachment 249572
Patch

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

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:51
&gt; +    static UserContentExtensionStore* defaultStore = adoptRef(new UserContentExtensionStore).leakRef();

nit: Why not use NeverDestroyed here?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:61
&gt; +UserContentExtensionStore::UserContentExtensionStore(const WTF::String&amp; storePath)

Is WTF:: really needed here?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:101
&gt; +        // The file data should be mapped into one continuous memory segrment so the size

&quot;segment&quot;

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:116
&gt; +        return false;

Why are we returning false here?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:123
&gt; +    int fd = ::open(path.data(), O_RDONLY, 0);

We might want to use our FileSystem abstraction because this method is currently POSIX only and this file does not have POSIX in the name.

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:219
&gt; +        close(temporaryFileHandle);

WebCore::closeFile()

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:224
&gt; +    close(temporaryFileHandle);

WebCore::closeFile()

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:242
&gt; +    m_readQueue-&gt;dispatch([self, identifierCapture, pathCapture, completionHandler] {

Capturing self here does not look safe as RefPtr ref counting is not thread-safe.

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:273
&gt; +void UserContentExtensionStore::compileContentExtension(const WTF::String&amp; identifier, const WTF::String&amp; json, std::function&lt;void(RefPtr&lt;API::UserContentExtension&gt;, std::error_code)&gt; completionHandler)

Do we really need WTF:: ?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:280
&gt; +    m_compileQueue-&gt;dispatch([self, identifierCapture, jsonCapture, pathCapture, completionHandler] {

Capturing self here does not look safe as RefPtr ref counting is not thread-safe.

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:318
&gt; +    m_removeQueue-&gt;dispatch([self, identifierCapture, pathCapture, completionHandler] {

Capturing self here does not look safe as RefPtr ref counting is not thread-safe.

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:321
&gt; +        if (unlink(path.data()) == -1) {

WebCore::deleteFile()

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:54
&gt; +    explicit UserContentExtensionStore(const WTF::String&amp; storePath);

Are all these WTF:: really needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080689</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 12:05:19 -0700</bug_when>
    <thetext>+antti as this is using the NetworkCache code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080693</commentid>
    <comment_count>6</comment_count>
      <attachid>249572</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 12:08:26 -0700</bug_when>
    <thetext>Comment on attachment 249572
Patch

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

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:100
&gt; +    fileData.apply([&amp;metaData, &amp;success, &amp;fileData](const uint8_t* data, size_t size) {

Do we really need this success variable? Why not return the boolean returned by Data::apply() ?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:148
&gt; +    fileData.apply([fd, &amp;success](const uint8_t* data, size_t size) {

Do we really need this success variable? Why not return the boolean returned by Data::apply() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080710</commentid>
    <comment_count>7</comment_count>
      <attachid>249572</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-27 12:51:14 -0700</bug_when>
    <thetext>Comment on attachment 249572
Patch

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

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:35
&gt; +#include &quot;NetworkCacheData.h&quot;
&gt; +#include &quot;NetworkCacheDecoder.h&quot;
&gt; +#include &quot;NetworkCacheEncoder.h&quot;
&gt; +#include &quot;NetworkCacheFileSystemPosix.h&quot;

Uh?

Shouldn&apos;t this move out of NetworkCache?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:75
&gt; +    return WebCore::fileSystemRepresentation(WebCore::pathByAppendingComponent(base, &quot;ContentExtension-&quot; + identifier));

Using the identifier in the filename seems a big risky to me. HFS is notorious for its crazy handling of unicode.

We could have a map identifier-&gt;filename in a separate file.
Alternatively, we could sanitize the identifier names to be a strict subset of ASCII.

&gt;&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:101
&gt;&gt; +        // The file data should be mapped into one continuous memory segrment so the size
&gt; 
&gt; &quot;segment&quot;

Typo: segrment

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:128
&gt; +    if (::fstat(fd, &amp;stat) != 0) {        

WebKit style for checking null values here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080732</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-03-27 13:48:06 -0700</bug_when>
    <thetext>&gt; Capturing self here does not look safe as RefPtr ref counting is not
&gt; thread-safe.

There is nothing non-thread-safe about RefPtr itself. Using it like this is ok as long as as the type uses atomic refcounting (by inheriting ThreadSafeRefCounted for example) and is ok to be destructed in a different thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080737</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-03-27 13:55:00 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Capturing self here does not look safe as RefPtr ref counting is not
&gt; &gt; thread-safe.
&gt; 
&gt; There is nothing non-thread-safe about RefPtr itself. Using it like this is
&gt; ok as long as as the type uses atomic refcounting (by inheriting
&gt; ThreadSafeRefCounted for example) and is ok to be destructed in a different
&gt; thread.

Oh, I see that that it is subclassing ObjectImpl&lt;&gt; which subclasses ThreadSafeRefCounted. Please disregard my comment then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080954</commentid>
    <comment_count>10</comment_count>
      <attachid>249666</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 12:42:55 -0700</bug_when>
    <thetext>Created attachment 249666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080955</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 12:44:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Why is this called UserContentExtensionStore instead of
&gt; ContentExtensionStore?

That is what we are calling it currently at the API/WebKit level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080956</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-28 12:44:42 -0700</bug_when>
    <thetext>Attachment 249666 did not pass style-queue:


ERROR: Source/WebKit2/Shared/WebCompiledContentExtensionData.h:47:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:77:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:85:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:65:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:114:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:135:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:331:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 12 in 21 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>1080957</commentid>
    <comment_count>13</comment_count>
      <attachid>249667</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 12:44:59 -0700</bug_when>
    <thetext>Created attachment 249667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080958</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-28 12:47:44 -0700</bug_when>
    <thetext>Attachment 249667 did not pass style-queue:


ERROR: Source/WebKit2/Shared/WebCompiledContentExtensionData.h:47:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:77:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:85:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:65:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:114:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:135:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:331:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 12 in 21 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>1080959</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 12:48:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 249572 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249572&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:51
&gt; &gt; +    static UserContentExtensionStore* defaultStore = adoptRef(new UserContentExtensionStore).leakRef();
&gt; 
&gt; nit: Why not use NeverDestroyed here?

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:61
&gt; &gt; +UserContentExtensionStore::UserContentExtensionStore(const WTF::String&amp; storePath)
&gt; 
&gt; Is WTF:: really needed here?

Yes. Otherwise, it assumes you mean API::String.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:101
&gt; &gt; +        // The file data should be mapped into one continuous memory segrment so the size
&gt; 
&gt; &quot;segment&quot;

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:116
&gt; &gt; +        return false;
&gt; 
&gt; Why are we returning false here?

This false means don&apos;t continue traversing data segments. In this case, we should only ever traverse a single data segment, but we also don&apos;t want to traverse more than one if something goes wrong.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:123
&gt; &gt; +    int fd = ::open(path.data(), O_RDONLY, 0);
&gt; 
&gt; We might want to use our FileSystem abstraction because this method is
&gt; currently POSIX only and this file does not have POSIX in the name.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:219
&gt; &gt; +        close(temporaryFileHandle);
&gt; 
&gt; WebCore::closeFile()

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:224
&gt; &gt; +    close(temporaryFileHandle);
&gt; 
&gt; WebCore::closeFile()

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:242
&gt; &gt; +    m_readQueue-&gt;dispatch([self, identifierCapture, pathCapture, completionHandler] {
&gt; 
&gt; Capturing self here does not look safe as RefPtr ref counting is not
&gt; thread-safe.

As Antti noted, it&apos;s cool.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:321
&gt; &gt; +        if (unlink(path.data()) == -1) {
&gt; 
&gt; WebCore::deleteFile()

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080960</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 12:49:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 249572 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249572&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:35
&gt; &gt; +#include &quot;NetworkCacheData.h&quot;
&gt; &gt; +#include &quot;NetworkCacheDecoder.h&quot;
&gt; &gt; +#include &quot;NetworkCacheEncoder.h&quot;
&gt; &gt; +#include &quot;NetworkCacheFileSystemPosix.h&quot;
&gt; 
&gt; Uh?
&gt; 
&gt; Shouldn&apos;t this move out of NetworkCache?

We should, and I will move that code soon.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:75
&gt; &gt; +    return WebCore::fileSystemRepresentation(WebCore::pathByAppendingComponent(base, &quot;ContentExtension-&quot; + identifier));
&gt; 
&gt; Using the identifier in the filename seems a big risky to me. HFS is
&gt; notorious for its crazy handling of unicode.
&gt; 
&gt; We could have a map identifier-&gt;filename in a separate file.
&gt; Alternatively, we could sanitize the identifier names to be a strict subset
&gt; of ASCII.

I fixed this to use the WebCore::WebCore::encodeForFileName() function from FileSystem.h that we use elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080961</commentid>
    <comment_count>17</comment_count>
      <attachid>249668</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 13:15:03 -0700</bug_when>
    <thetext>Created attachment 249668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080962</commentid>
    <comment_count>18</comment_count>
      <attachid>249669</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-28 13:16:20 -0700</bug_when>
    <thetext>Created attachment 249669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080963</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-28 13:17:29 -0700</bug_when>
    <thetext>Attachment 249669 did not pass style-queue:


ERROR: Source/WebKit2/Shared/WebCompiledContentExtensionData.h:47:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:75:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.h:83:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:50:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:65:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:114:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/_WKUserContentExtensionStore.mm:135:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:332:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 12 in 21 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>1081085</commentid>
    <comment_count>20</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-29 20:04:32 -0700</bug_when>
    <thetext>I have been thinking a bit about this. I think we should also keep a copy of the original input to have a simpler update path.

If we change anything in the content extension engine, we can just nuke the existing compiled files and compile new ones from scratch.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081209</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-30 10:25:46 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I have been thinking a bit about this. I think we should also keep a copy of
&gt; the original input to have a simpler update path.
&gt; 
&gt; If we change anything in the content extension engine, we can just nuke the
&gt; existing compiled files and compile new ones from scratch.
&gt; 
&gt; What do you think?

Seems reasonable. That said, I would like to do that in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081299</commentid>
    <comment_count>22</comment_count>
      <attachid>249669</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-30 14:27:42 -0700</bug_when>
    <thetext>Comment on attachment 249669
Patch

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

The patch looks good to me.

I have no idea how the public API works but: shouldn&apos;t we make sure we tell all web processes to unload the extension before removing the file? It would be weird to have a WebProcess still executing extensions after they were removed.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:77
&gt; +    if (!oldPathFsRep.data() || oldPathFsRep.data()[0] == &apos;\0&apos;)

CString::length() can tell you that. The terminating \0 is not included in the size returned by length().

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:81
&gt; +    if (!newPathFsRep.data() || newPathFsRep.data()[0] == &apos;\0&apos;)

Ditto.

&gt; Source/WebKit2/Shared/WebCompiledContentExtension.cpp:49
&gt;  Ref&lt;WebCompiledContentExtension&gt; WebCompiledContentExtension::createFromCompiledContentExtensionData(const WebCore::ContentExtensions::CompiledContentExtensionData&amp; compilerData)

Is this one still useful?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:234
&gt; +static RefPtr&lt;API::UserContentExtension&gt; createExtension(const String&amp; identifier, const ContentExtensionMetaData&amp; metaData, const Data&amp; fileData)

createUserContentExtension()?
createUserContentExtensionFromFile()?
createUserContentExtensionFromMappedFile()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081375</commentid>
    <comment_count>23</comment_count>
      <attachid>249669</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-30 16:22:57 -0700</bug_when>
    <thetext>Comment on attachment 249669
Patch

Clearing flags on attachment: 249669

Committed r182161: &lt;http://trac.webkit.org/changeset/182161&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081376</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-30 16:23:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084956</commentid>
    <comment_count>25</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-13 13:56:49 -0700</bug_when>
    <thetext>This patch broke Media controls on Windows. Ugh!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084957</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-13 13:57:49 -0700</bug_when>
    <thetext>It looks like RenderThemeWin (and other sites) call into this new no-op function to locate theme information prior to rendering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084969</commentid>
    <comment_count>27</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-13 14:39:16 -0700</bug_when>
    <thetext>Fixed in r182757: &lt;http://trac.webkit.org/changeset/182757&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249572</attachid>
            <date>2015-03-27 09:09:40 -0700</date>
            <delta_ts>2015-03-28 12:42:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143123-20150327090901.patch</filename>
            <type>text/plain</type>
            <size>48652</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjA2MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDE1LTAzLTI2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxl
c2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIEFkZCBhY2Nlc3NvciBmb3IgdGhlIHByb2Nl
c3NlcyBkZWZhdWx0IHNoYXJlZCBzdG9yZS4KKworICAgICAgICAoQVBJOjpjb25zdHJ1Y3RlZFBh
dGgpOgorICAgICAgICBIZWxwZXIgZm9yIGNvbnN0cnVjdGluZyB0aGUgcGF0aCB0byBhIGZpbGUg
aW4gdGhlIHN0b3JlIGJhc2VkIG9uIGlkZW50aWZpZXIuCisKKyAgICAgICAgKEFQSTo6ZW5jb2Rl
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgSGVscGVycyBmb3IgZW5jb2RpbmcvZGVjb2Rpbmcg
dGhlIGZpbGUgbWV0YWRhdGEgKHZlcnNpb24sIGJ5dGVjb2RlIHNpemUsIGFjdGlvbnMgc2l6ZSku
CisKKyAgICAgICAgKEFQSTo6b3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICBI
ZWxwZXIgdG8gb3BlbiBhbmQgbWFwIGEgZmlsZWQgYmFjayBjb250ZW50IGV4dGVuc2lvbi4KKwor
ICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICBIZWxwZXIgdG8gd3JpdGUg
YSBEYXRhIG9iamVjdCB0byBhIGZpbGUuCisKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUp
OgorICAgICAgICBIZWxwZXIgdG8gcnVuIHRoZSBjb250ZW50IGV4dGVuc2lvbiBjb21waWxlciBh
bmQgd3JpdGUgaXQgdG8gZGlzay4gSXQgZmlyc3QKKyAgICAgICAgd3JpdGVzIGl0IHRvIGEgdGVt
cG9yYXJ5IGZpbGUgYW5kIHRoZW4gZG9lcyBhbiBhdG9taWMgcmVuYW1lIG9wZXJhdGlvbiB0byBw
dXQKKyAgICAgICAgdGhlIGZpbGUgaW4gdGhlIGZpbmFsIGxvY2F0aW9uLiBEb2luZyB0aGlzIG1l
YW5zIHRoYXQgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlcyB3aGlsZQorICAgICAgICB0aGUgY29tcGls
ZSBpcyB0YWtpbmcgcGxhY2UsIHRoZSBwYXJ0aWFsbHkgd3JpdHRlbiBmaWxlIHdvbid0IGVuZCB1
cCBpbiB0aGUgY2FjaGUsIAorICAgICAgICBidXQgcmF0aGVyLCB3aWxsIGJlIGNsZWFuZWQgdXAg
YnkgdGhlIE9TLgorIAorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjps
b29rdXBDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGxvb2t1
cCBhbiBleHRlbnNpb24gdGhhdCBoYXMgYmVlbiBjb21waWxlZCB0byBkaXNrLiBPbiBhIGJhY2tn
cm91bmQgcXVldWUsCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIG9wZW4gYW5kIG1hcCB0aGUgZXh0
ZW5zaW9uIChiYXNlZCBvbiB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCByZXR1cm4gaXQK
KyAgICAgICAgdG8gdGhlIGNhbGxlciB2aWEgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCBp
bi4KKyAgICAgICAgCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNv
bXBpbGVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGNvbXBp
bGUgYW4gZXh0ZW5zaW9uIGFuZCB3cml0ZSBpdCB0byBzdG9yZS4gT24gYSBiYWNrZ3JvdW5kIHF1
ZXVlLCBpdCAKKyAgICAgICAgY29tcGlsZXMgdGhlIGZpbGUgdG8gZGlzayBhbmQgaWYgc3VjY2Vz
c2Z1bCwgcmV0dXJucyB0aGUgbWVtb3J5IG1hcHBlZCBkYXRhIHZpYSB0aGUgY2FsbGJhY2sKKyAg
ICAgICAgZnVuY3Rpb24gcGFzc2VkIGluLgorCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICBBUEkgZW50cnkg
cG9pbnQgdG8gcmVtb3ZlIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBzdG9yZS4gT24gYSBiYWNrZ3Jv
dW5kIHF1ZXVlLCBpdCAKKyAgICAgICAgdW5saW5rcyB0aGUgZXh0ZW5zaW9uIChiYXNlZCBvbiB0
aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCB0ZWxscyB0aGUgY2FsbGVyIGl0IGNvbXBsZXRl
ZAorICAgICAgICB0aGUgYWN0aW9uIHZpYWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCBp
bi4KKworICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJvbm91
c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgSGVscGVyIGZvciB0ZXN0aW5n
IHdoaWNoIHN5bmNocm9ub3VzbHkgdW5saW5rcyBhbGwgdGhlIGZpbGVzIGluIHRoZSBzdG9yZS4K
KworICAgICAgICAoQVBJOjp1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSk6
CisgICAgICAgIHN0ZDo6ZXJyb3JfY29kZSBhZGFwdG9yIGZvciBzb21lIGdlbmVyaWMgZXJyb3Jz
IHRoYXQgY2FuIGhhcHBlbiBpbiB0aGUgc3RvcmUuIFdlIHdpbGwgd2FudAorICAgICAgICB0byBm
bGVzaCB0aGVzZSBvdXQgZnVydGhlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
QVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAgKEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCk6CisgICAgICAg
IEhlbHBlciB0byBnZXQgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHBhdGggZm9yIHRoZSBzdG9yZS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVS
ZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlwZUlEKToK
KyAgICAgICAgQWRkIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpIGd1YXJkcy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWFsbG9jXSk6
CisgICAgICAgICgrW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSk6
CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxvb2t1
cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgorICAg
ICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGluaXRdKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIFNQSSB3cmFwcGVycyBmb3Ig
dGhlIHN0b3JlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDE1LTAzLTI2ICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXNwZWN0IGNhY2hlLWNvbnRyb2wgZGlyZWN0
aXZlcyBpbiByZXF1ZXN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJldmlzaW9u
IDE4MjA2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDQzIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
IgogCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVy
LmgiCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbVBvc2l4LmgiCisjaW5jbHVkZSAi
U2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgor
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0
d29ya0NhY2hlOworCiBuYW1lc3BhY2UgQVBJIHsKIAorVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSYgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkKK3sKKyAgICBzdGF0
aWMgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVmYXVsdFN0b3JlID0gYWRvcHRSZWYobmV3
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYoKTsKKworICAgIHJldHVybiAqZGVm
YXVsdFN0b3JlOworfQorCiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlKCkKKyAgICA6IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVsdFN0
b3JlUGF0aCgpKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCisgICAgOiBtX3N0
b3JlUGF0aChzdG9yZVBhdGgpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVlOjpU
eXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkKKyAgICAsIG1fcmVtb3ZlUXVl
dWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVtb3ZlIFF1
ZXVlIikpCiB7CiB9CiAKQEAgLTM2LDQgKzcwLDMwMCBAQCBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjp+VXNlckNvbnRlbnRFCiB7CiB9CiAKK3N0YXRpYyBDU3RyaW5nIGNvbnN0cnVjdGVkUGF0
aChjb25zdCBTdHJpbmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKFdlYkNvcmU6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVuc2lvbi0iICsgaWRlbnRpZmllcikp
OworfQorCitzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIHsKKyAgICB1aW50MzJfdCB2
ZXJzaW9uOworICAgIHVpbnQ2NF90IGJ5dGVjb2RlT2Zmc2V0OworICAgIHVpbnQ2NF90IGJ5dGVj
b2RlU2l6ZTsKKyAgICB1aW50NjRfdCBhY3Rpb25zT2Zmc2V0OworICAgIHVpbnQ2NF90IGFjdGlv
bnNTaXplOworfTsKKworc3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
KGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCit7CisgICAgV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXIgZW5jb2RlcjsKKworICAgIGVuY29kZXIgPDwgbWV0YURh
dGEudmVyc2lvbjsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZTsKKyAgICBl
bmNvZGVyIDw8IG1ldGFEYXRhLmFjdGlvbnNTaXplOworCisgICAgcmV0dXJuIERhdGEoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworfQorCitzdGF0aWMgYm9vbCBkZWNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRh
RGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCit7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CisgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgLy8gVGhlIGZpbGUgZGF0
YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVvdXMgbWVtb3J5IHNlZ3JtZW50IHNv
IHRoZSBzaXplCisgICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlz
IGVxdWFsIHRoZSBkYXRhIHNpemUuCisgICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
YWN0aW9uc1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtZXRhRGF0
YS5ieXRlY29kZU9mZnNldCA9IGRlY29kZXIuY3VycmVudE9mZnNldCgpOworICAgICAgICBtZXRh
RGF0YS5hY3Rpb25zT2Zmc2V0ID0gbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQgKyBtZXRhRGF0YS5i
eXRlY29kZVNpemU7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBib29sIG9wZW5B
bmRNYXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IENTdHJpbmcmIHBhdGgsIENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZpbGVEYXRhKQoreworICAgIGludCBmZCA9IDo6
b3BlbihwYXRoLmRhdGEoKSwgT19SRE9OTFksIDApOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RydWN0IHN0YXQgc3RhdDsKKyAgICBpZiAoOjpmc3Rh
dChmZCwgJnN0YXQpICE9IDApIHsgICAgICAgIAorICAgICAgICBjbG9zZShmZCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxlRGF0YSA9IG1hcEZpbGUoZmQsIDAsIHN0
YXRpY19jYXN0PHNpemVfdD4oc3RhdC5zdF9zaXplKSk7CisgICAgY2xvc2UoZmQpOworCisgICAg
aWYgKGZpbGVEYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtZXRhRGF0YSwgZmlsZURhdGEpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
d3JpdGVEYXRhVG9GaWxlKERhdGEmIGZpbGVEYXRhLCBpbnQgZmQpCit7CisgICAgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0Zp
bGUoZmQsIChjb25zdCBjaGFyKilkYXRhLCBzaXplKSA9PSAtMSkgeworICAgICAgICAgICAgc3Vj
Y2VzcyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIAorICAgIHJldHVybiBzdWNjZXNzOworfQor
CitzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKGNvbnN0IFN0cmluZyYganNv
biwgY29uc3QgQ1N0cmluZyYgZmluYWxQYXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1l
dGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczsKKworICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50IGZpbmFs
IDogcHVibGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICBDb21waWxhdGlvbkNsaWVudChEYXRhJiBieXRlY29kZURhdGEsIERhdGEmIGFj
dGlvbnNEYXRhKQorICAgICAgICAgICAgOiBtX2J5dGVjb2RlRGF0YShieXRlY29kZURhdGEpCisg
ICAgICAgICAgICAsIG1fYWN0aW9uc0RhdGEoYWN0aW9uc0RhdGEpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxERkFCeXRl
Y29kZT4mJiBieXRlY29kZSkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9ieXRl
Y29kZURhdGEgPSBEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNlcmlhbGl6
ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fYWN0aW9uc0RhdGEgPSBEYXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSk7Cisg
ICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERhdGEmIG1fYnl0ZWNvZGVEYXRhOwor
ICAgICAgICBEYXRhJiBtX2FjdGlvbnNEYXRhOworICAgIH07CisKKyAgICBEYXRhIGJ5dGVjb2Rl
OworICAgIERhdGEgYWN0aW9uczsKKyAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNs
aWVudChieXRlY29kZSwgYWN0aW9ucyk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBjb3BpZXMgdGhl
IGRhdGEuIEluc3RlYWQsIHdlIHNob3VsZCBiZSBwYXNzaW5nIGFuIGludGVyZmFjZQorICAgIC8v
IHRvIHRoZSBjb21waWxlciB0aGF0IGNhbiB3cml0ZSBkaXJlY3RseSB0byBhIGZpbGUuCisKKyAg
ICBhdXRvIGNvbXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQs
IGpzb24pOworICAgIGlmIChjb21waWxlckVycm9yKQorICAgICAgICByZXR1cm4gY29tcGlsZXJF
cnJvcjsKKworICAgIGF1dG8gYnl0ZWNvZGVBbmRBY3Rpb25zID0gY29uY2F0ZW5hdGUoYnl0ZWNv
ZGUsIGFjdGlvbnMpOworCisgICAgbWV0YURhdGEudmVyc2lvbiA9IDE7CisgICAgbWV0YURhdGEu
Ynl0ZWNvZGVTaXplID0gYnl0ZWNvZGUuc2l6ZSgpOworICAgIG1ldGFEYXRhLmFjdGlvbnNTaXpl
ID0gYWN0aW9ucy5zaXplKCk7CisKKyAgICBhdXRvIGVuY29kZWRNZXRhRGF0YSA9IGVuY29kZUNv
bnRlbnRFeHRlbnNpb25NZXRhRGF0YShtZXRhRGF0YSk7CisKKyAgICBtZXRhRGF0YS5ieXRlY29k
ZU9mZnNldCA9IGVuY29kZWRNZXRhRGF0YS5zaXplKCk7CisgICAgbWV0YURhdGEuYWN0aW9uc09m
ZnNldCA9IGVuY29kZWRNZXRhRGF0YS5zaXplKCkgKyBtZXRhRGF0YS5ieXRlY29kZVNpemU7CisK
KyAgICBhdXRvIGRhdGEgPSBjb25jYXRlbmF0ZShlbmNvZGVkTWV0YURhdGEsIGJ5dGVjb2RlQW5k
QWN0aW9ucyk7CisgICAgYXV0byBkYXRhU2l6ZSA9IGRhdGEuc2l6ZSgpOworCisgICAgQVNTRVJU
KG1ldGFEYXRhLmJ5dGVjb2RlT2Zmc2V0ICsgbWV0YURhdGEuYnl0ZWNvZGVTaXplICsgbWV0YURh
dGEuYWN0aW9uc1NpemUgPT0gZGF0YVNpemUpOworCisgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxl
SGFuZGxlIHRlbXBvcmFyeUZpbGVIYW5kbGUgPSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlOworICAgIFN0cmluZyB0ZW1wb3JhcnlGaWxlUGF0aCA9IFdlYkNvcmU6Om9wZW5UZW1w
b3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9uIiwgdGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAg
aWYgKHRlbXBvcmFyeUZpbGVIYW5kbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpD
b21waWxlRmFpbGVkOworCisgICAgaWYgKCF3cml0ZURhdGFUb0ZpbGUoZGF0YSwgdGVtcG9yYXJ5
RmlsZUhhbmRsZSkpIHsKKyAgICAgICAgY2xvc2UodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAg
ICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDsKKyAgICB9CisKKyAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxl
LCAwLCBkYXRhU2l6ZSk7CisgICAgY2xvc2UodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisKKyAgICBp
ZiAobWFwcGVkRGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgYXV0byB0ZW1wb3JhcnlQYXRo
ID0gV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHRlbXBvcmFyeUZpbGVQYXRoKTsK
KyAgICBpZiAocmVuYW1lKHRlbXBvcmFyeVBhdGguZGF0YSgpLCBmaW5hbFBhdGguZGF0YSgpKSA9
PSAtMSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpD
b21waWxlRmFpbGVkOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpsb29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBSZWZQ
dHI8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc2VsZih0aGlzKTsKKyAgICBTdHJpbmdDYXB0
dXJlIGlkZW50aWZpZXJDYXB0dXJlKGlkZW50aWZpZXIpOworICAgIFN0cmluZ0NhcHR1cmUgcGF0
aENhcHR1cmUobV9zdG9yZVBhdGgpOworCisgICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtzZWxm
LCBpZGVudGlmaWVyQ2FwdHVyZSwgcGF0aENhcHR1cmUsIGNvbXBsZXRpb25IYW5kbGVyXSB7Cisg
ICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChwYXRoQ2FwdHVyZS5zdHJpbmcoKSwg
aWRlbnRpZmllckNhcHR1cmUuc3RyaW5nKCkpOworICAgICAgICAKKyAgICAgICAgQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBEYXRhIGZpbGVEYXRhOworICAgICAg
ICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0
YSkpIHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgY29tcGxl
dGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRy
LCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3NlbGYsIGlkZW50aWZpZXJDYXB0dXJlLCBmaWxlRGF0YSwgbWV0YURhdGEsIGNvbXBsZXRp
b25IYW5kbGVyXSB7CisgICAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciA9IGlkZW50aWZpZXJD
YXB0dXJlLnN0cmluZygpOworCisgICAgICAgICAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVGcm9tVk1CdWZmZXIoY29uc3RfY2FzdDx1aW50OF90Kj4o
ZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gY29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSgKKyAgICAgICAgICAgICAgICBzaGFyZWRNZW1vcnksCisgICAgICAgICAgICAg
ICAgbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgbWV0YURhdGEuYnl0
ZWNvZGVTaXplLAorICAgICAgICAgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQsCisgICAg
ICAgICAgICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUKKyAgICAgICAgICAgICk7CisgICAgICAg
ICAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEpKTsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1
c2VyQ29udGVudEV4dGVuc2lvbiA9IEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShp
ZGVudGlmaWVyLCBXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7CisKKyAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpj
b21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgY29u
c3QgV1RGOjpTdHJpbmcmIGpzb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIFJlZlB0cjxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBzZWxmKHRoaXMpOworICAg
IFN0cmluZ0NhcHR1cmUgaWRlbnRpZmllckNhcHR1cmUoaWRlbnRpZmllcik7CisgICAgU3RyaW5n
Q2FwdHVyZSBqc29uQ2FwdHVyZShqc29uKTsKKyAgICBTdHJpbmdDYXB0dXJlIHBhdGhDYXB0dXJl
KG1fc3RvcmVQYXRoKTsKKworICAgIG1fY29tcGlsZVF1ZXVlLT5kaXNwYXRjaChbc2VsZiwgaWRl
bnRpZmllckNhcHR1cmUsIGpzb25DYXB0dXJlLCBwYXRoQ2FwdHVyZSwgY29tcGxldGlvbkhhbmRs
ZXJdIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHBhdGhDYXB0dXJlLnN0
cmluZygpLCBpZGVudGlmaWVyQ2FwdHVyZS5zdHJpbmcoKSk7CisKKyAgICAgICAgQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBEYXRhIGZpbGVEYXRhOworICAgICAg
ICBhdXRvIGVycm9yID0gY29tcGlsZWRUb0ZpbGUoanNvbkNhcHR1cmUuc3RyaW5nKCksIHBhdGgs
IG1ldGFEYXRhLCBmaWxlRGF0YSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBlcnJvciwgY29tcGxldGlvbkhhbmRsZXJd
IHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBlcnJvcik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgaWRlbnRpZmllckNhcHR1cmUsIGZpbGVE
YXRhLCBtZXRhRGF0YSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgIFN0cmluZyBp
ZGVudGlmaWVyID0gaWRlbnRpZmllckNhcHR1cmUuc3RyaW5nKCk7CisKKyAgICAgICAgICAgIGF1
dG8gc2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUZyb21WTUJ1ZmZl
cihjb25zdF9jYXN0PHVpbnQ4X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkp
OworICAgICAgICAgICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViS2l0
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKAorICAgICAgICAgICAgICAgIHNoYXJl
ZE1lbW9yeSwKKyAgICAgICAgICAgICAgICBtZXRhRGF0YS5ieXRlY29kZU9mZnNldCwKKyAgICAg
ICAgICAgICAgICBtZXRhRGF0YS5ieXRlY29kZVNpemUsCisgICAgICAgICAgICAgICAgbWV0YURh
dGEuYWN0aW9uc09mZnNldCwKKyAgICAgICAgICAgICAgICBtZXRhRGF0YS5hY3Rpb25zU2l6ZQor
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
ID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUo
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkpOworICAgICAgICAgICAgUmVmUHRyPEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb24+IHVzZXJDb250ZW50RXh0ZW5zaW9uID0gQVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvbjo6Y3JlYXRlKGlkZW50aWZpZXIsIFdURjo6bW92ZShjb21waWxlZENvbnRl
bnRFeHRlbnNpb24pKTsKKworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRl
bnRFeHRlbnNpb24sIHsgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBSZWZQdHI8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZT4gc2VsZih0aGlzKTsKKyAgICBTdHJpbmdDYXB0dXJlIGlkZW50aWZpZXJDYXB0dXJlKGlkZW50
aWZpZXIpOworICAgIFN0cmluZ0NhcHR1cmUgcGF0aENhcHR1cmUobV9zdG9yZVBhdGgpOworCisg
ICAgbV9yZW1vdmVRdWV1ZS0+ZGlzcGF0Y2goW3NlbGYsIGlkZW50aWZpZXJDYXB0dXJlLCBwYXRo
Q2FwdHVyZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3Ry
dWN0ZWRQYXRoKHBhdGhDYXB0dXJlLnN0cmluZygpLCBpZGVudGlmaWVyQ2FwdHVyZS5zdHJpbmco
KSk7CisKKyAgICAgICAgaWYgKHVubGluayhwYXRoLmRhdGEoKSkgPT0gLTEpIHsKKyAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgY29tcGxldGlvbkhhbmRsZXJdIHsK
KyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihFcnJvcjo6UmVtb3ZlRmFpbGVkKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0gewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVB
bGxDb250ZW50RXh0ZW5zaW9ucygpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2Vi
Q29yZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkKKyAgICAgICAgV2ViQ29yZTo6
ZGVsZXRlRmlsZShwYXRoKTsKK30KKworY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgdXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKQoreworICAgIGNsYXNzIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3JfY2F0ZWdv
cnkgeworICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICJ1c2VyIGNvbnRlbnQgZXh0ZW5zaW9uIHN0
b3JlIjsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWVzc2FnZShp
bnQgZXJyb3JDb2RlKSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNv
ZGUpKSB7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9y
OjpMb29rdXBGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJv
ciBkdXJpbmcgbG9va3VwLiI7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOgorICAgICAgICAgICAgICAgIHJldHVybiAiVW5z
cGVjaWZpZWQgZXJyb3IgZHVyaW5nIGNvbXBpbGUuIjsKKyAgICAgICAgICAgIGNhc2UgVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxlZDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVF
cnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKKyAgICByZXR1cm4g
Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEFQSQor
CisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oCShyZXZpc2lvbiAxODIwNjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTYgKzI2LDYyIEBACiAjaWZuZGVmIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVfaAogI2Rl
ZmluZSBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlX2gKIAorI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCisKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxzeXN0ZW1f
ZXJyb3I+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYg
eworY2xhc3MgV29ya1F1ZXVlOworfQogCiBuYW1lc3BhY2UgQVBJIHsKIAorY2xhc3MgVXNlckNv
bnRlbnRFeHRlbnNpb247CisKIGNsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwg
OiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU+IHsKIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTG9va3VwRmFp
bGVkID0gMSwKKyAgICAgICAgQ29tcGlsZUZhaWxlZCwKKyAgICAgICAgUmVtb3ZlRmFpbGVkCisg
ICAgfTsKKworICAgIHN0YXRpYyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3Rv
cmUoKTsKKwogICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKyAgICBl
eHBsaWNpdCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9y
ZVBhdGgpOwogICAgIHZpcnR1YWwgflVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKworICAg
IHZvaWQgY29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZp
ZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBqc29uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCBs
b29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVy
cm9yX2NvZGUpPik7CisgICAgdm9pZCByZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4p
OworCisgICAgLy8gRm9yIHRlc3Rpbmcgb25seS4KKyAgICB2b2lkIHN5bmNocm9ub3VzUmVtb3Zl
QWxsQ29udGVudEV4dGVuc2lvbnMoKTsKKworcHJpdmF0ZToKKyAgICBXVEY6OlN0cmluZyBkZWZh
dWx0U3RvcmVQYXRoKCk7CisKKyAgICBjb25zdCBXVEY6OlN0cmluZyBtX3N0b3JlUGF0aDsKKyAg
ICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fY29tcGlsZVF1ZXVlOworICAgIFJlZjxXVEY6OldvcmtR
dWV1ZT4gbV9yZWFkUXVldWU7CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlbW92ZVF1ZXVl
OwogfTsKIAorY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgdXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yQ2F0ZWdvcnkoKTsKKworaW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vycm9y
X2NvZGUoVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3IgZXJyb3IpCit7CisgICAgcmV0
dXJuIHsgc3RhdGljX2Nhc3Q8aW50PihlcnJvciksIHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVF
cnJvckNhdGVnb3J5KCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgQVBJCiAKK25hbWVzcGFjZSBz
dGQgeworICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxBUEk6OlVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworfQor
CisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICNlbmRpZiAvLyBBUElVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVS
ZWYuY3BwCShyZXZpc2lvbiAxODIwNjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNSArMzMsOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBXS1R5cGVJRCBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVHZXRUeXBlSUQoKQogeworI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgcmV0dXJuIHRvQVBJKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6QVBJVHlwZSk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUg
IlNhbmRib3hVdGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIEFQSSB7CisKK1N0cmluZyBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKCkKK3sKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBzdGF0aWMgTlNVUkwgKmNvbnRlbnRFeHRlbnNp
b25TdG9yZVVSTDsKKworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAg
TlNVUkwgKnVybCA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gVVJMRm9yRGlyZWN0
b3J5Ok5TTGlicmFyeURpcmVjdG9yeSBpbkRvbWFpbjpOU1VzZXJEb21haW5NYXNrIGFwcHJvcHJp
YXRlRm9yVVJMOm51bGxwdHIgY3JlYXRlOk5PIGVycm9yOm51bGxwdHJdOworICAgICAgICBpZiAo
IXVybCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAg
ICAgdXJsID0gW3VybCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJXZWJLaXQiIGlzRGly
ZWN0b3J5OllFU107CisKKyAgICAgICAgaWYgKCFXZWJLaXQ6OnByb2Nlc3NIYXNDb250YWluZXIo
KSkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIgPSBbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0uYnVuZGxlSWRlbnRpZmllcjsKKyAgICAgICAgICAgIGlmICghYnVuZGxlSWRl
bnRpZmllcikKKyAgICAgICAgICAgICAgICBidW5kbGVJZGVudGlmaWVyID0gW05TUHJvY2Vzc0lu
Zm8gcHJvY2Vzc0luZm9dLnByb2Nlc3NOYW1lOworICAgICAgICAgICAgdXJsID0gW3VybCBVUkxC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6YnVuZGxlSWRlbnRpZmllciBpc0RpcmVjdG9yeTpZRVNd
OworICAgICAgICB9CisKKyAgICAgICAgY29udGVudEV4dGVuc2lvblN0b3JlVVJMID0gW1t1cmwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ29udGVudEV4dGVuc2lvbnMiIGlzRGlyZWN0
b3J5OllFU10gcmV0YWluXTsKKyAgICB9KTsKKworICAgIGlmICghW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFVSTDpjb250ZW50RXh0ZW5zaW9uU3RvcmVV
Ukwgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpu
dWxscHRyXSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAl
QCIsIGNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTCk7CisKKyAgICByZXR1cm4gY29udGVudEV4dGVu
c2lvblN0b3JlVVJMLmFic29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOwor
fQorCit9IC8vIG5hbWVzcGFjZSBBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24g
MTgyMDYxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDE3IEBACiAK
ICNpZiBXS19BUElfRU5BQkxFRAogCitAY2xhc3MgX1dLVXNlckNvbnRlbnRGaWx0ZXI7CisKIFdL
X0NMQVNTX0FWQUlMQUJMRShXS19NQUNfVEJBLCBXS19JT1NfVEJBKQogQGludGVyZmFjZSBfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKIAorKyAoaW5zdGFuY2V0eXBlKWRl
ZmF1bHRTdG9yZTsKKworLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJp
bmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0g
KHZvaWQpbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKwogQGVuZAogCiAj
ZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUubW0JKHJldmlzaW9uIDE4MjA2MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjgsMjMgKzI4LDc4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCisjaW1wb3J0ICJXS0Vy
cm9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIK
KwogQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUKIAotLSAoaW5z
dGFuY2V0eXBlKWluaXQKKy0gKHZvaWQpZGVhbGxvYwogewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOworICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOwogCi0gICAgQVBJOjpPYmplY3Q6
OmNvbnN0cnVjdEluV3JhcHBlcjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+KHNlbGYp
OworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KIAotICAgIHJldHVybiBzZWxmOworKyAoaW5zdGFu
Y2V0eXBlKWRlZmF1bHRTdG9yZQoreworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoQVBJOjpV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CiB9CiAKLS0gKHZvaWQp
ZGVhbGxvYworLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKill
bmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIF91
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOwor
ICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKIAot
ICAgIFtzdXBlciBkZWFsbG9jXTsKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+Y29t
cGlsZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24s
IFtoYW5kbGVyXShSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVu
c2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAg
ICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVy
ICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRklYTUU6IFBhc3MgcmVhbCBlcnJvci4KKyAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBjcmVh
dGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIobmlsLCBl
cnJvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICByYXdIYW5kbGVyKFdlYktpdDo6d3JhcHBlcigq
Y29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpbG9v
a3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2Nv
bXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LT5sb29rdXBDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShSZWZQdHI8QVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2Rl
IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5k
bGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxl
ci5nZXQoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgcmVhbCBlcnJvci4KKyAgICAg
ICAgICAgIGF1dG8gZXJyb3IgPSBjcmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKTsKKyAgICAg
ICAgICAgIHJhd0hhbmRsZXIobmlsLCBlcnJvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICByYXdI
YW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Cisg
ICAgfSk7Cit9CisKKy0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2Nv
bXBsZXRpb25IYW5kbGVyIGNvcHldKTsKKworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtoYW5kbGVyXShzdGQ6OmVycm9y
X2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJh
d0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworCisgICAgICAg
ICAgICAvLyBGSVhNRTogUGFzcyByZWFsIGVycm9yLgorICAgICAgICAgICAgYXV0byBlcnJvciA9
IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOworICAgICAgICAgICAgcmF3SGFuZGxlcihl
cnJvci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAg
ICAgICByYXdIYW5kbGVyKG5pbCk7CisgICAgfSk7CiB9CiAKICNwcmFnbWEgbWFyayBXS09iamVj
dCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgpAQCAtNTYsNCArMTExLDE1IEBAIC0gKEFQSTo6T2Jq
ZWN0JilfYXBpT2JqZWN0CiAKIEBlbmQKIAorQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKworLSAo
dm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMKK3sKKyAgICBfdXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS0+c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworfQor
CitAZW5kCisKICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAxODIwNjEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCAiX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVByaXZhdGUuaCIKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CisKKyNpZiBXS19B
UElfRU5BQkxFRAorCitAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdL
UHJpdmF0ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRl
bnRFeHRlbnNpb25zOworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgyMDYxKQor
KysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTM3LDYgKzExMzcsNyBAQAogCQk3QzhFQjExNzE4REI2QTE5MDA3OTE3
QzIgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDOEVCMTE2MThEQjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdDOUQxNTM3MTg0NTg0REEwMDlEMzkxOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3Vw
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDOUQxNTM2MTg0NTg0REEwMDlEMzkxOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJu
YWwuaCAqLzsgfTsKIAkJN0NBMjU0RUIxODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdDb250
ZXh0UG9saWN5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDQTI1NEVBMTgyOTkzQ0UwMEZDOEE0MSAvKiBXS0Jyb3dzaW5nQ29udGV4dFBv
bGljeURlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJN0NBMzc5M0UxQUMzNzhCMzAwNzlEQzM3IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0EzNzkzRDFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Q0IxNkZFRjE3MjRCQTIzMDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5h
cHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkUyMTcyNEI5QjUwMDdB
MEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgKi87IH07
CiAJCTdDQjE2RkYwMTcyNEJBMjQwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdp
bi5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5h
cHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLzsgfTsKIAkJN0NCMTZGRjExNzI0QkEy
NjAwN0EwQTk1IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiBpbiBDb3B5IFBs
dWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0IxNkZFNDE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29t
bW9uLnNiICovOyB9OwpAQCAtMTE2OCw2ICsxMTY5LDcgQEAKIAkJN0NFNEQyMjAxQTQ5MTRDQTAw
QzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMUUxQTQ5MTRDQTAwQzdGMTUyIC8q
IEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oICovOyB9OwogCQk3Q0U0RDIyNzFBNDkxNkMy
MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMjUxQTQ5MTZDMjAwQzdG
MTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJN0NFNEQy
MjgxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTREMjI2MUE0OTE2QzIwMEM3
RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggKi87IH07CisJCTdDRUZBOTYyMUFDMDk5
OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VGQTk2MDFBQzA5OTkz
MDBCOTEwRkQgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tICovOyB9Owog
CQk3Q0Y0N0ZGNjE3Mjc1QjcxMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkY0MTcyNzVC
NzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwICovOyB9OwogCQk3Q0Y0N0ZGNzE3
Mjc1QjcxMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGNTE3Mjc1QjcxMDA4QUNCOTEgLyog
V0tCdW5kbGVQYWdlQmFubmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkY5MTcy
NzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi87IH07CkBAIC0zMzQzLDYgKzMzNDUsNyBA
QAogCQk3QzhFQjExNjE4REI2QTE5MDA3OTE3QzIgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJlbmNlc1ByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M5RDE1MzYxODQ1ODREQTAwOUQzOTE4IC8q
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdD
b250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3Q0EzNzkzRDFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0NCMTZGRTIxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVj
b25uZWN0LndlYnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuaXN0
LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDQjE2RkUzMTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdp
bi5wbHVnaW4uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gImNvbS5hcHBsZS5RdWlja1RpbWUg
UGx1Z2luLnBsdWdpbi5zYiI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjE2RkU0
MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gImNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiI7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzc1LDYgKzMzNzgsNyBAQAogCQk3Q0U0
RDIxRTFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5oOyBwYXRoID0gVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDsg
c291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQk3Q0U0RDIyNTFBNDkxNkMyMDBDN0YxNTIg
LyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0U0RDIyNjFBNDkxNkMyMDBDN0YxNTIgLyogV2Vi
UHJvY2Vzc1Bvb2xNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
RUZBOTYwMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDRjQ3RkY0MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRjUxNzI3NUI3MTAwOEFDQjkxIC8q
IFdLQnVuZGxlUGFnZUJhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0J1bmRsZVBhZ2VCYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdG
RjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGFnZUJhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTM0MCw2ICs1MzQ0LDcgQEAKIAkJCQk3QzI0MTMwMTFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oICovLAogCQkJCTdDMjQxMzAwMUFBQ0ZBNzUwMEE1OEMx
NSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovLAogCQkJCTdDMjQxMzA0MUFB
Q0ZBOUMwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAq
LywKKwkJCQk3Q0EzNzkzRDFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCAqLywKIAkJCQk3Qzg5RDJCODFBNkIwRjJDMDAzQTVGREUgLyogX1dL
VXNlckNvbnRlbnRGaWx0ZXIuaCAqLywKIAkJCQk3Qzg5RDJCNzFBNkIwRjJDMDAzQTVGREUgLyog
X1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8sCiAJCQkJN0M4OUQyQkIxQTZCMEY1QjAwM0E1RkRF
IC8qIF9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCAqLywKQEAgLTUzNTIsNiArNTM1Nyw3
IEBACiAJCQkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmUu
aCAqLywKIAkJCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogX1dLV2Vic2l0ZURhdGFTdG9y
ZS5tbSAqLywKIAkJCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogX1dLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmggKi8sCisJCQkJN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbSAqLywKIAkJCQkxQTM2MzVBQjFBMzE0NUU1
MDBFRDYxOTcgLyogQVBJV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tICovLAogCQkJCTFBRkRFNjQz
MTk1MTBCNTUwMEM0OEZGQSAvKiBMZWdhY3lCdW5kbGVGb3JDbGFzcy5tbSAqLywKIAkJCQkzN0M0
QzA4QjE4MTRBQzVDMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExpc3QuaCAqLywKQEAgLTc4MDks
NiArNzgxNSw3IEBACiAJCQkJQkM4NzgwRkMxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJv
Y2Vzc0lkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCN0QzMTFFNjUxRTIwMERC
MTM3MSAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQTY3RTBEMTY1QjJBOTkwMDZD
QkE2NiAvKiBQbHVnSW5BdXRvU3RhcnRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NB
Mzc5M0UxQUMzNzhCMzAwNzlEQzM3IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTlGQkE4RDEzRkYwNEU2MDBERUVENjcgLyogUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE1NkYyOTEx
RTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE4RUY0Q0IxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGluIEhl
YWRlcnMgKi8sCkBAIC05NTkyLDYgKzk1OTksNyBAQAogCQkJCTFBMEVDOTA3MTI0QzBBQjgwMDdF
RjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTBFQzkxMDEyNEMwQUY1MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNzg2NUI5MTZDQUM3MTUwMEFDRTgzQSAvKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0NFRkE5NjIxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMkJCNkQwMTQxMTdCNEQwMDBG
MzVENCAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQTJEOTBEMzEyODFDOTY2MDAxRUI5NjIgLyogUGx1Z2luUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUE0NzkyMzEyQTU5RkQ5
MDA4MjM2QzMgLyogUGx1Z2luUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgy
MDYxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTUtMDMtMjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29u
dGVudCBFeHRlbnNpb25zXSBGbGVzaCBvdXQgdGhlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzEyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbTogQWRkZWQuCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS4KKwogMjAxNS0wMy0yNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBMYXlvdXQgdGVzdCByZXN1bHRzIFVSTCBsb2FkcyBpbiBXSzEg
YnV0IG5vdCBXSzIgbWluaWJyb3dzZXIKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxODIwNjEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw3IEBACiAJ
CTdDQ0U3RjREMUE0MTFCOUYwMDQ0N0M0QyAvKiBSZXRhaW5QdHIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyOUIxQjE0ODZCMjU5MDA4MTdEQTkg
LyogUmV0YWluUHRyLm1tICovOyB9OwogCQk3Q0NFN0Y0RTFBNDExQkE0MDA0NDdDNEMgLyogUmV0
YWluUHRyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMDI5QjE2MTQ4NkFENjQwMDgxN0RBOSAvKiBSZXRhaW5QdHIuY3BwICovOyB9OwogCQk3Q0NF
N0Y0RjFBNDExQkE0MDA0NDdDNEMgLyogUmV0YWluUHRySGFzaGluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDk5MUM1MDE0M0M3RDY4MDA3OTk4
RjIgLyogUmV0YWluUHRySGFzaGluZy5jcHAgKi87IH07CisJCTdDRUZBOTY2MUFDMEI5RTIwMEI5
MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8q
IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi87IH07CiAJCTdDRkJDQUU1MTc0MzIz
OEYwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGQkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxM
b2FkX0J1bmRsZS5jcHAgKi87IH07CiAJCTkzMEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBsb3Rz
LW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwg
Ki87IH07CiAJCTkzNjEwMDI5MTREQzk1QTcwMDYxMzc5RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzYxMDAyODE0REM5NTdCMDA2MTM3OUQgLyogbG90cy1vZi1pZnJhbWVzLmh0bWwgKi87IH07CkBA
IC01MzMsNiArNTM0LDcgQEAKIAkJN0NDM0UxRkExOTdFMjM0MTAwQkU2MjUyIC8qIFVzZXJDb250
ZW50Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFVzZXJDb250ZW50Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0NDRTdFOEMxQTQxMTQ0RTAwNDQ3QzRDIC8qIGxpYlRlc3RXZWJLaXRBUEkuYSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gbGliVGVzdFdlYktpdEFQSS5hOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk3Q0NFN0VBMzFBNDExNUNCMDA0NDdDNEMgLyogVGVzdFdl
YktpdEFQSUxpYnJhcnkueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVGVzdFdlYktpdEFQSUxpYnJh
cnkueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRUZBOTY0MUFDMEI5
RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGQkNBREQxNzQzMjM0RjAwQjJC
RkNGIC8qIFdpbGxMb2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdpbGxMb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGQkNBRTMxNzQz
MjM4RTAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXaWxsTG9hZF9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4MUI1MDE5MjE0MEYyMzIzMDBEOUVCNTggLyogU3RyaW5nQnVpbGRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwNSw2ICs4MDcsNyBAQAogCQkxQUJDM0RF
QzE4OTlCRTU1MDA0RjA2MjYgLyogV2ViS2l0MiBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIF9X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8sCiAJCQkJQTFBNEZFNUQxOEREM0RCNzAw
QjVFQThBIC8qIERvd25sb2FkLm1tICovLAogCQkJCTFBQkMzREVEMTg5OUJFNkQwMDRGMDYyNiAv
KiBOYXZpZ2F0aW9uLm1tICovLAogCQkJCUNFQTZDRjIyMTlDQ0Y1QkQwMDY0RjVBNyAvKiBPcGVu
QW5kQ2xvc2VXaW5kb3cubW0gKi8sCkBAIC0xNDA0LDYgKzE0MDcsNyBAQAogCQkJCTdDQ0U3RjIz
MUE0MTFBRjYwMDQ0N0M0QyAvKiBEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUVFMUE0MTFBRTYwMDQ0N0M0QyAvKiBEb3dubG9hZERlY2lkZURlc3RpbmF0aW9uQ3Jhc2guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQkUxQTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNE
ZXZpY2VTY2FsZUZhY3Rvci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDRUZBOTY2MUFDMEI5RTIw
MEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0NDRTdFRTAxQTQxMUE5QTAwNDQ3QzRDIC8qIEVkaXRvckNvbW1hbmRzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFQkYxQTQxMUE3RTAwNDQ3QzRDIC8qIEVsZW1lbnRBdFBvaW50
SW5XZWJGcmFtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUVGMUE0MTFBRTYwMDQ0N0M0
QyAvKiBFcGhlbWVyYWxTZXNzaW9uUHVzaFN0YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
bW0JKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2Nv
YS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0IDxXZWJL
aXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCA8V2ViS2l0L19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNl
ckNvbnRlbnRGaWx0ZXIuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworY2xhc3MgX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIFtbX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9uc107CisgICAgfQorfTsKKworc3RhdGljIE5TU3RyaW5nICpiYXNpY0ZpbHRlciA9IEAi
W3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifX1dIjsKKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVUZXN0LCBDb21waWxlKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5n
ID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9y
ZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIg
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6Xihf
V0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAg
ICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3Ip
OworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAq
aW52YWxpZEZpbHRlciA9IEAiWyI7CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBp
bGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNp
b24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAg
IAorICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwo
ZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Cit9CisKK1RFU1RfRihfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQoreworICAgIF9fYmxvY2sgYm9v
bCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAi
VGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxl
dGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJv
cikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQ
RUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBf
X2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVu
dEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1Rf
Tk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAg
IGRvbmVMb29raW5nVXAgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQoreworICAgIF9fYmxvY2sg
Ym9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwoZmls
dGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lTG9v
a2luZ1VwID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVMb29raW5nVXApOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QsIFJlbW92YWwpCit7CisgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsK
KyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29u
dGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250
ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgCisgICAgICAgIEVYUEVD
VF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisKKyAgICAg
ICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKKworICAgIF9fYmxvY2sgYm9vbCBkb25lUmVtb3Zpbmcg
PSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNv
bXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOworCisgICAgICAgIGRvbmVSZW1vdmluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lUmVtb3ZpbmcpOworfQorCitURVNUX0YoX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllclJlbW92ZSkK
K3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lv
bkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKworICAgICAgICBk
b25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZVJlbW92aW5nKTsKK30KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249666</attachid>
            <date>2015-03-28 12:42:55 -0700</date>
            <delta_ts>2015-03-28 12:44:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143123-20150328124215.patch</filename>
            <type>text/plain</type>
            <size>58886</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAzLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxl
c2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSB2YXJpYW50IG9mIGdldEZpbGVT
aXplKCkgdGhhdCB0YWtlcyBhIFBsYXRmb3JtRmlsZUhhbmRsZS4KKyAgICAgICAgLSBBZGRzIGEg
bmV3IGZpbGUgc3lzdGVtIGZ1bmN0aW9uLCByZW5hbWUoKSB3aGljaCBvcGVyYXRlcyBhcyB0aGUg
UE9TSVgKKyAgICAgICAgICByZW5hbWUgZnVuY3Rpb24gZG9lcy4KKworICAgICAgICAqIHBsYXRm
b3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVuYW1lRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIEFk
ZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW5h
bWVGaWxlKToKKyAgICAgICAgQWRkIHN0dWJzLgorCiAyMDE1LTAzLTI4ICBKb29uZ2h1biBQYXJr
ICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBudWxscHRyIGNsZWFudXAgaW4g
SW5saW5lRm9vQm94IGNsYXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw5IEBAIHN0cnVjdCBGaWxlTWV0YWRh
dGE7CiBXRUJDT1JFX0VYUE9SVCBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiBXRUJD
T1JFX0VYUE9SVCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworV0VCQ09SRV9FWFBP
UlQgYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBu
ZXdQYXRoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwg
bG9uZyBsb25nJiByZXN1bHQpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlU2l6ZShQbGF0
Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90JiByZXN1bHQpOwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlQ3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRp
bWVfdCYgcmVzdWx0KTsgLy8gTm90IGFsbCBwbGF0Zm9ybXMgc3RvcmUgZmlsZSBjcmVhdGlvbiB0
aW1lLgogYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiwgRmlsZU1ldGFkYXRhJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3Bw
CShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5
c3RlbUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAj
aW5jbHVkZSA8Z2xpYi5oPgpAQCAtMTEwLDYgKzExMSwxMiBAQCBib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgCiAgICAgcmV0dXJuIGZpbGVuYW1lID8gZ19ybWRpcihmaWxl
bmFtZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsKIH0KIAorYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0
aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5h
bWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKQEAgLTEyOSw2ICsxMzYsMTIgQEAgYm9vbCBn
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBnZXRGaWxl
Q3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCiB7CiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgd2F5IHRvIHJldHJpZXZlIGZpbGUgY3JlYXRpb24gdGltZSB3aXRoIEd0ayBvbiBw
bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0PwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw2ICs3MSwxOSBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKK2Jvb2wgcmVuYW1l
RmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAg
ICBDU3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRo
KTsKKyAgICBpZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0aEZzUmVwLmRhdGEoKVsw
XSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIG5ld1BhdGhG
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKKyAgICBpZiAoIW5ld1Bh
dGhGc1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgp
LCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKK30KKwogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4Myw2ICsxOTYsMTYg
QEAgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxv
bmcgbG9uZyYgcmVzdWx0KQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChm
c3RhdChoYW5kbGUsICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IGZpbGVJbmZvLnN0X3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgZ2V0
RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewog
I2lmIE9TKERBUldJTikgfHwgT1MoT1BFTkJTRCkgfHwgT1MoTkVUQlNEKSB8fCBPUyhGUkVFQlNE
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMiBAQCBib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uCiAgICAgcmV0dXJuIGdldEZpbGVTaXplRnJv
bUZpbmREYXRhKGZpbmREYXRhLCBzaXplKTsKIH0KIAorYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3Ry
aW5nJiBwYXRoLCB0aW1lX3QmIHRpbWUpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0
YTsKQEAgLTE1NCw2ICsxNjAsMTIgQEAgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBT
dHJpbmcmIAogICAgIHJldHVybiAhIVJlbW92ZURpcmVjdG9yeVcoZmlsZW5hbWUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwogfQogCitib29sIHJlbmFtZUZpbGUoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxV
Q2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkz
IEBACisyMDE1LTAzLTI4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxlc2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMx
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21Db21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YTo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk6CisgICAgICAgIFN3aXRjaCB0
aGUgb3JkZXIgaW4gbWVtb3J5IG9mIGFjdGlvbnMgYW5kIGJ5dGVjb2RlIChhbmQgc3dpdGNoIHRo
ZSBvcmRlciBvZiB0aGUKKyAgICAgICAgdmFyaWFibGVzIGFzIHdlbGwsIHRvIGtlZXAgaXQgY2xl
YXIpLiBUaGlzIHdpbGwgYmVjb21lIG5lY2Vzc2FyeSB3aGVuIHN0cmVhbWluZworICAgICAgICB0
aGUgZGF0YSB0byBkaXNrLCBhcyBhY3Rpb25zIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgYnl0ZWNv
ZGUgYW5kIHdlIHdvdWxkIGhhdmUgdG8ga2VlcCB0aGVtCisgICAgICAgIGluIG1lbW9yeSB1bnRp
bCB0aGUgYnl0ZWNvZGUgd2FzIGZpbmlzaGVkIGNvbXBpbGluZyBpZiB0aGV5IGRpZG4ndCBjb21l
IGJlZm9yZSBpbiB0aGUgZmlsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIEFkZCBhY2Nlc3NvciBmb3IgdGhlIHBy
b2Nlc3NlcyBkZWZhdWx0IHNoYXJlZCBzdG9yZS4KKworICAgICAgICAoQVBJOjpjb25zdHJ1Y3Rl
ZFBhdGgpOgorICAgICAgICBIZWxwZXIgZm9yIGNvbnN0cnVjdGluZyB0aGUgcGF0aCB0byBhIGZp
bGUgaW4gdGhlIHN0b3JlIGJhc2VkIG9uIGlkZW50aWZpZXIuCisKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgSGVscGVycyBmb3IgZW5jb2RpbmcvZGVjb2Rp
bmcgdGhlIGZpbGUgbWV0YWRhdGEgKHZlcnNpb24sIGJ5dGVjb2RlIHNpemUsIGFjdGlvbnMgc2l6
ZSkuCisKKyAgICAgICAgKEFQSTo6b3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24pOgorICAgICAg
ICBIZWxwZXIgdG8gb3BlbiBhbmQgbWFwIGEgZmlsZWQgYmFjayBjb250ZW50IGV4dGVuc2lvbi4K
KworICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICBIZWxwZXIgdG8gd3Jp
dGUgYSBEYXRhIG9iamVjdCB0byBhIGZpbGUuCisKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0Zp
bGUpOgorICAgICAgICBIZWxwZXIgdG8gcnVuIHRoZSBjb250ZW50IGV4dGVuc2lvbiBjb21waWxl
ciBhbmQgd3JpdGUgaXQgdG8gZGlzay4gSXQgZmlyc3QKKyAgICAgICAgd3JpdGVzIGl0IHRvIGEg
dGVtcG9yYXJ5IGZpbGUgYW5kIHRoZW4gZG9lcyBhbiBhdG9taWMgcmVuYW1lIG9wZXJhdGlvbiB0
byBwdXQKKyAgICAgICAgdGhlIGZpbGUgaW4gdGhlIGZpbmFsIGxvY2F0aW9uLiBEb2luZyB0aGlz
IG1lYW5zIHRoYXQgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlcyB3aGlsZQorICAgICAgICB0aGUgY29t
cGlsZSBpcyB0YWtpbmcgcGxhY2UsIHRoZSBwYXJ0aWFsbHkgd3JpdHRlbiBmaWxlIHdvbid0IGVu
ZCB1cCBpbiB0aGUgY2FjaGUsIAorICAgICAgICBidXQgcmF0aGVyLCB3aWxsIGJlIGNsZWFuZWQg
dXAgYnkgdGhlIE9TLgorIAorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Ojpsb29rdXBDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGxv
b2t1cCBhbiBleHRlbnNpb24gdGhhdCBoYXMgYmVlbiBjb21waWxlZCB0byBkaXNrLiBPbiBhIGJh
Y2tncm91bmQgcXVldWUsCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIG9wZW4gYW5kIG1hcCB0aGUg
ZXh0ZW5zaW9uIChiYXNlZCBvbiB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCByZXR1cm4g
aXQKKyAgICAgICAgdG8gdGhlIGNhbGxlciB2aWEgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKyAgICAgICAgCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGNv
bXBpbGUgYW4gZXh0ZW5zaW9uIGFuZCB3cml0ZSBpdCB0byBzdG9yZS4gT24gYSBiYWNrZ3JvdW5k
IHF1ZXVlLCBpdCAKKyAgICAgICAgY29tcGlsZXMgdGhlIGZpbGUgdG8gZGlzayBhbmQgaWYgc3Vj
Y2Vzc2Z1bCwgcmV0dXJucyB0aGUgbWVtb3J5IG1hcHBlZCBkYXRhIHZpYSB0aGUgY2FsbGJhY2sK
KyAgICAgICAgZnVuY3Rpb24gcGFzc2VkIGluLgorCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICBBUEkgZW50
cnkgcG9pbnQgdG8gcmVtb3ZlIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBzdG9yZS4gT24gYSBiYWNr
Z3JvdW5kIHF1ZXVlLCBpdCAKKyAgICAgICAgdW5saW5rcyB0aGUgZXh0ZW5zaW9uIChiYXNlZCBv
biB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCB0ZWxscyB0aGUgY2FsbGVyIGl0IGNvbXBs
ZXRlZAorICAgICAgICB0aGUgYWN0aW9uIHZpYWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKworICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgSGVscGVyIGZvciB0ZXN0
aW5nIHdoaWNoIHN5bmNocm9ub3VzbHkgdW5saW5rcyBhbGwgdGhlIGZpbGVzIGluIHRoZSBzdG9y
ZS4KKworICAgICAgICAoQVBJOjp1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29y
eSk6CisgICAgICAgIHN0ZDo6ZXJyb3JfY29kZSBhZGFwdG9yIGZvciBzb21lIGdlbmVyaWMgZXJy
b3JzIHRoYXQgY2FuIGhhcHBlbiBpbiB0aGUgc3RvcmUuIFdlIHdpbGwgd2FudAorICAgICAgICB0
byBmbGVzaCB0aGVzZSBvdXQgZnVydGhlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCk6CisgICAg
ICAgIEhlbHBlciB0byBnZXQgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHBhdGggZm9yIHRoZSBzdG9y
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVSZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlwZUlE
KToKKyAgICAgICAgQWRkIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpIGd1YXJkcy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWFsbG9j
XSk6CisgICAgICAgICgrW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxv
b2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGluaXRdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIFNQSSB3cmFwcGVycyBm
b3IgdGhlIHN0b3JlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDE1LTAzLTI3ICBHd2FuZyBZb29uIEh3
YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXhNYXBdIFNlcGVyYXRlIEJpdG1h
cFRleHR1cmUgcmVsYXRlZCBjbGFzc2VzIGltcGxlbWVudGF0aW9ucyBmcm9tIFRleHR1cmVNYXBw
ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTUgKzQ5LDE1IEBAIHZvaWQgTGVnYWN5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2wK
IFJlZjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlRnJvbUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoY29uc3QgV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGNvbXBp
bGVyRGF0YSkKIHsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpICsgY29tcGlsZXJE
YXRhLmFjdGlvbnMuc2l6ZSgpKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJl
ZE1lbW9yeS0+ZGF0YSgpKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGlsZXJE
YXRhLmJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFy
ZWRNZW1vcnktPmRhdGEoKSkgKyBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpLCBjb21waWxl
ckRhdGEuYWN0aW9ucy5kYXRhKCksIGNvbXBpbGVyRGF0YS5hY3Rpb25zLnNpemUoKSk7CisgICAg
bWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFyZWRNZW1vcnktPmRhdGEoKSksIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLmRhdGEoKSwgY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLnNpemUoKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGls
ZXJEYXRhLmJ5dGVjb2RlLnNpemUoKSk7CiAKICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGRhdGE7CiAgICAgZGF0YS5kYXRhID0gV1RGOjptb3ZlKHNoYXJlZE1lbW9yeSk7Ci0g
ICAgZGF0YS5ieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgZGF0YS5ieXRlY29kZVNpemUgPSBjb21w
aWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwotICAgIGRhdGEuYWN0aW9uc09mZnNldCA9IGNvbXBp
bGVyRGF0YS5ieXRlY29kZS5zaXplKCk7CisgICAgZGF0YS5hY3Rpb25zT2Zmc2V0ID0gMDsKICAg
ICBkYXRhLmFjdGlvbnNTaXplID0gY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpOworICAgIGRh
dGEuYnl0ZWNvZGVPZmZzZXQgPSBjb21waWxlckRhdGEuYWN0aW9ucy5zaXplKCk7CisgICAgZGF0
YS5ieXRlY29kZVNpemUgPSBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwogCiAgICAgcmV0
dXJuIGNyZWF0ZShXVEY6Om1vdmUoZGF0YSkpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAko
cmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAg
dm9pZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbgogICAgIGRhdGEtPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwogICAgIGVuY29kZXIgPDwg
aGFuZGxlOwogCi0gICAgZW5jb2RlciA8PCBieXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVyIDw8
IGJ5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CiAgICAgZW5jb2Rl
ciA8PCBhY3Rpb25zU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGJ5dGVjb2RlT2Zmc2V0OworICAgIGVu
Y29kZXIgPDwgYnl0ZWNvZGVTaXplOwogfQogCiBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkKQEAg
LTUxLDE1ICs1MSwxNCBAQCBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmRhdGEgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFj
dGlvbnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaAkocmV2aXNpb24gMTgyMTE0KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gZGF0YSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2Rl
U2l6ZSwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUpCisgICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRh
LCB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgOiBkYXRhKGRh
dGEpCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICwg
Ynl0ZWNvZGVTaXplKGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgLCBhY3Rpb25zT2Zmc2V0KGFjdGlv
bnNPZmZzZXQpCiAgICAgICAgICwgYWN0aW9uc1NpemUoYWN0aW9uc1NpemUpCisgICAgICAgICwg
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgYnl0ZWNvZGVTaXplKGJ5
dGVjb2RlU2l6ZSkKICAgICB7CiAgICAgfQogCkBAIC01NywxMCArNTcsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEmKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGRhdGE7
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgYnl0ZWNv
ZGVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQgeyAwIH07CiAgICAgdW5z
aWduZWQgYWN0aW9uc1NpemUgeyAwIH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAw
IH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVTaXplIHsgMCB9OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw5ICsyNiw0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUg
IldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTsKKwogbmFtZXNwYWNlIEFQSSB7CiAKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IGRlZmF1bHRTdG9yZTsK
KyAgICByZXR1cm4gZGVmYXVsdFN0b3JlOworfQorCiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCkKKyAgICA6IFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgpKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBh
dGgpCisgICAgOiBtX3N0b3JlUGF0aChzdG9yZVBhdGgpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShX
b3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVl
IiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkKKyAg
ICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgUmVtb3ZlIFF1ZXVlIikpCiB7CiB9CiAKQEAgLTM2LDQgKzY4LDI4OSBAQCBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFCiB7CiB9CiAKK3N0YXRpYyBTdHJpbmcg
Y29uc3RydWN0ZWRQYXRoKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFz
ZSwgIkNvbnRlbnRFeHRlbnNpb24tIiArIFdlYkNvcmU6OmVuY29kZUZvckZpbGVOYW1lKGlkZW50
aWZpZXIpKTsKK30KKworc3RydWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7CisgICAgdWlu
dDMyX3QgdmVyc2lvbjsKKyAgICB1aW50NjRfdCBhY3Rpb25zT2Zmc2V0OworICAgIHVpbnQ2NF90
IGFjdGlvbnNTaXplOworICAgIHVpbnQ2NF90IGJ5dGVjb2RlT2Zmc2V0OworICAgIHVpbnQ2NF90
IGJ5dGVjb2RlU2l6ZTsKK307CisKK3N0YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YShjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQoreworICAg
IFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyIGVuY29kZXI7CisKKyAgICBlbmNvZGVyIDw8
IG1ldGFEYXRhLnZlcnNpb247CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsK
KyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZTsKKworICAgIHJldHVybiBEYXRh
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKK30KKworc3RhdGljIGJv
b2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0
YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRhKQoreworICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOworICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURh
dGFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIC8vIFRoZSBm
aWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdy
bWVudCBzbyB0aGUgc2l6ZQorICAgICAgICAvLyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxk
IGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXplLgorICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0
YS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU6OkRlY29kZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS52ZXJzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5hY3Rpb25zU2l6ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0
YURhdGEuYnl0ZWNvZGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
bWV0YURhdGEuYWN0aW9uc09mZnNldCA9IGRlY29kZXIuY3VycmVudE9mZnNldCgpOworICAgICAg
ICBtZXRhRGF0YS5ieXRlY29kZU9mZnNldCA9IG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQgKyBtZXRh
RGF0YS5hY3Rpb25zU2l6ZTsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9KTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGJvb2wg
b3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoLCBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBmaWxlRGF0YSkKK3sKKyAgICBhdXRvIGZk
ID0gV2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvclJlYWQpOworICAgIGlm
IChmZCA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemUgPSAwOworICAgIGlmICghV2ViQ29y
ZTo6Z2V0RmlsZVNpemUoZmQsIGZpbGVTaXplKSkgeworICAgICAgICBXZWJDb3JlOjpjbG9zZUZp
bGUoZmQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZmlsZURhdGEgPSBt
YXBGaWxlKGZkLCAwLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGZpbGVTaXplKSk7CisgICAgV2ViQ29y
ZTo6Y2xvc2VGaWxlKGZkKTsKKworICAgIGlmIChmaWxlRGF0YS5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEo
bWV0YURhdGEsIGZpbGVEYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBib29sIHdyaXRlRGF0YVRvRmlsZShEYXRhJiBmaWxlRGF0YSwg
V2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRy
dWU7CisgICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKGZkLCAo
Y29uc3QgY2hhciopZGF0YSwgc2l6ZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICAKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGlj
IHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShjb25zdCBTdHJpbmcmIGpzb24sIGNvbnN0
IFN0cmluZyYgZmluYWxGaWxlUGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0
YSwgRGF0YSYgbWFwcGVkRGF0YSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM7CisKKyAgICBjbGFzcyBDb21waWxhdGlvbkNsaWVudCBmaW5hbCA6IHB1
YmxpYyBDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgQ29tcGlsYXRpb25DbGllbnQoRGF0YSYgYnl0ZWNvZGVEYXRhLCBEYXRhJiBhY3Rpb25z
RGF0YSkKKyAgICAgICAgICAgIDogbV9ieXRlY29kZURhdGEoYnl0ZWNvZGVEYXRhKQorICAgICAg
ICAgICAgLCBtX2FjdGlvbnNEYXRhKGFjdGlvbnNEYXRhKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+
JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnl0ZWNvZGVE
YXRhID0gRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSk7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0
aW9uQnl0ZT4mJiBhY3Rpb25zKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2Fj
dGlvbnNEYXRhID0gRGF0YShhY3Rpb25zLmRhdGEoKSwgYWN0aW9ucy5zaXplKCkpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBEYXRhJiBtX2J5dGVjb2RlRGF0YTsKKyAgICAg
ICAgRGF0YSYgbV9hY3Rpb25zRGF0YTsKKyAgICB9OworCisgICAgRGF0YSBieXRlY29kZTsKKyAg
ICBEYXRhIGFjdGlvbnM7CisgICAgQ29tcGlsYXRpb25DbGllbnQgY29tcGlsYXRpb25DbGllbnQo
Ynl0ZWNvZGUsIGFjdGlvbnMpOworCisgICAgLy8gRklYTUU6IFRoaXMgY29waWVzIHRoZSBkYXRh
LiBJbnN0ZWFkLCB3ZSBzaG91bGQgYmUgcGFzc2luZyBhbiBpbnRlcmZhY2UKKyAgICAvLyB0byB0
aGUgY29tcGlsZXIgdGhhdCBjYW4gd3JpdGUgZGlyZWN0bHkgdG8gYSBmaWxlLgorCisgICAgYXV0
byBjb21waWxlckVycm9yID0gY29tcGlsZVJ1bGVMaXN0KGNvbXBpbGF0aW9uQ2xpZW50LCBqc29u
KTsKKyAgICBpZiAoY29tcGlsZXJFcnJvcikKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyRXJyb3I7
CisKKyAgICBhdXRvIGFjdGlvbnNBbmRCeXRlY29kZSA9IGNvbmNhdGVuYXRlKGFjdGlvbnMsIGJ5
dGVjb2RlKTsKKworICAgIG1ldGFEYXRhLnZlcnNpb24gPSAxOworICAgIG1ldGFEYXRhLmFjdGlv
bnNTaXplID0gYWN0aW9ucy5zaXplKCk7CisgICAgbWV0YURhdGEuYnl0ZWNvZGVTaXplID0gYnl0
ZWNvZGUuc2l6ZSgpOworCisgICAgYXV0byBlbmNvZGVkTWV0YURhdGEgPSBlbmNvZGVDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEobWV0YURhdGEpOworCisgICAgbWV0YURhdGEuYWN0aW9uc09mZnNl
dCA9IGVuY29kZWRNZXRhRGF0YS5zaXplKCk7CisgICAgbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQg
PSBlbmNvZGVkTWV0YURhdGEuc2l6ZSgpICsgbWV0YURhdGEuYWN0aW9uc1NpemU7CisKKyAgICBh
dXRvIGRhdGEgPSBjb25jYXRlbmF0ZShlbmNvZGVkTWV0YURhdGEsIGFjdGlvbnNBbmRCeXRlY29k
ZSk7CisgICAgYXV0byBkYXRhU2l6ZSA9IGRhdGEuc2l6ZSgpOworCisgICAgQVNTRVJUKG1ldGFE
YXRhLmFjdGlvbnNPZmZzZXQgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSArIG1ldGFEYXRhLmJ5dGVj
b2RlU2l6ZSA9PSBkYXRhU2l6ZSk7CisKKyAgICBhdXRvIHRlbXBvcmFyeUZpbGVIYW5kbGUgPSBX
ZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIFN0cmluZyB0ZW1wb3JhcnlG
aWxlUGF0aCA9IFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9uIiwg
dGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAgaWYgKHRlbXBvcmFyeUZpbGVIYW5kbGUgPT0gV2Vi
Q29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgaWYgKCF3cml0
ZURhdGFUb0ZpbGUoZGF0YSwgdGVtcG9yYXJ5RmlsZUhhbmRsZSkpIHsKKyAgICAgICAgV2ViQ29y
ZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgICAgICByZXR1cm4gVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgfQorCisgICAg
bWFwcGVkRGF0YSA9IG1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgMCwgZGF0YVNpemUpOwor
ICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKworICAgIGlmICht
YXBwZWREYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisKKyAgICBpZiAoIVdlYkNvcmU6OnJlbmFtZUZp
bGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQorICAgICAgICByZXR1cm4gVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisKKyAgICByZXR1
cm4geyB9OworfQorCitzdGF0aWMgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IGNy
ZWF0ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRhKQoreworICAgIGF1
dG8gc2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUZyb21WTUJ1ZmZl
cihjb25zdF9jYXN0PHVpbnQ4X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCkp
OworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKKyAgICAgICAgc2hhcmVkTWVtb3J5LAorICAgICAg
ICBtZXRhRGF0YS5hY3Rpb25zT2Zmc2V0LAorICAgICAgICBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwK
KyAgICAgICAgbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgIG1ldGFEYXRhLmJ5dGVj
b2RlU2l6ZQorICAgICk7CisgICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShjb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7CisgICAgcmV0dXJuIEFQSTo6VXNlckNvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZShpZGVudGlmaWVyLCBXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uKSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVu
dEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2
b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4g
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgUmVmUHRyPFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU+IHNlbGYodGhpcyk7CisgICAgU3RyaW5nQ2FwdHVyZSBpZGVudGlmaWVyQ2FwdHVyZShpZGVu
dGlmaWVyKTsKKyAgICBTdHJpbmdDYXB0dXJlIHBhdGhDYXB0dXJlKG1fc3RvcmVQYXRoKTsKKwor
ICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbc2VsZiwgaWRlbnRpZmllckNhcHR1cmUsIHBhdGhD
YXB0dXJlLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1
Y3RlZFBhdGgocGF0aENhcHR1cmUuc3RyaW5nKCksIGlkZW50aWZpZXJDYXB0dXJlLnN0cmluZygp
KTsKKyAgICAgICAgCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsK
KyAgICAgICAgRGF0YSBmaWxlRGF0YTsKKyAgICAgICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudEV4
dGVuc2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpKSB7CisgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwgRXJyb3I6Okxvb2t1cEZhaWxlZCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBpZGVudGlmaWVyQ2FwdHVy
ZSwgZmlsZURhdGEsIG1ldGFEYXRhLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAg
UmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHVzZXJDb250ZW50RXh0ZW5zaW9uID0g
Y3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXJDYXB0dXJlLnN0cmluZygpLCBtZXRhRGF0YSwgZmls
ZURhdGEpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRFeHRlbnNp
b24sIHsgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBp
ZGVudGlmaWVyLCBjb25zdCBXVEY6OlN0cmluZyYganNvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJl
ZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgUmVmUHRyPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHNl
bGYodGhpcyk7CisgICAgU3RyaW5nQ2FwdHVyZSBpZGVudGlmaWVyQ2FwdHVyZShpZGVudGlmaWVy
KTsKKyAgICBTdHJpbmdDYXB0dXJlIGpzb25DYXB0dXJlKGpzb24pOworICAgIFN0cmluZ0NhcHR1
cmUgcGF0aENhcHR1cmUobV9zdG9yZVBhdGgpOworCisgICAgbV9jb21waWxlUXVldWUtPmRpc3Bh
dGNoKFtzZWxmLCBpZGVudGlmaWVyQ2FwdHVyZSwganNvbkNhcHR1cmUsIHBhdGhDYXB0dXJlLCBj
b21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgo
cGF0aENhcHR1cmUuc3RyaW5nKCksIGlkZW50aWZpZXJDYXB0dXJlLnN0cmluZygpKTsKKworICAg
ICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmls
ZURhdGE7CisgICAgICAgIGF1dG8gZXJyb3IgPSBjb21waWxlZFRvRmlsZShqc29uQ2FwdHVyZS5z
dHJpbmcoKSwgcGF0aCwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgaWYgKGVycm9yKSB7
CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGVycm9yLCBjb21w
bGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIsIGVycm9yKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBpZGVudGlmaWVy
Q2FwdHVyZSwgZmlsZURhdGEsIG1ldGFEYXRhLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAg
ICAgICAgUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+IHVzZXJDb250ZW50RXh0ZW5z
aW9uID0gY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXJDYXB0dXJlLnN0cmluZygpLCBtZXRhRGF0
YSwgZmlsZURhdGEpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodXNlckNvbnRlbnRF
eHRlbnNpb24sIHsgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBSZWZQdHI8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4g
c2VsZih0aGlzKTsKKyAgICBTdHJpbmdDYXB0dXJlIGlkZW50aWZpZXJDYXB0dXJlKGlkZW50aWZp
ZXIpOworICAgIFN0cmluZ0NhcHR1cmUgcGF0aENhcHR1cmUobV9zdG9yZVBhdGgpOworCisgICAg
bV9yZW1vdmVRdWV1ZS0+ZGlzcGF0Y2goW3NlbGYsIGlkZW50aWZpZXJDYXB0dXJlLCBwYXRoQ2Fw
dHVyZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0
ZWRQYXRoKHBhdGhDYXB0dXJlLnN0cmluZygpLCBpZGVudGlmaWVyQ2FwdHVyZS5zdHJpbmcoKSk7
CisKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpKSB7CisgICAgICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVyXSB7Cisg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoRXJyb3I6OlJlbW92ZUZhaWxlZCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxs
Q29udGVudEV4dGVuc2lvbnMoKQoreworICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNv
cmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgsICIqIikpCisgICAgICAgIFdlYkNvcmU6OmRl
bGV0ZUZpbGUocGF0aCk7Cit9CisKK2NvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIHVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCkKK3sKKyAgICBjbGFzcyBVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVnb3J5
IHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAidXNlciBjb250ZW50IGV4dGVuc2lvbiBzdG9y
ZSI7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIG1lc3NhZ2UoaW50
IGVycm9yQ29kZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4oZXJyb3JDb2Rl
KSkgeworICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6
TG9va3VwRmFpbGVkOgorICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3Ig
ZHVyaW5nIGxvb2t1cC4iOworICAgICAgICAgICAgY2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3Bl
Y2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgcmVtb3ZlLiI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CisgICAgcmV0dXJuIGNv
bnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OworfQorCiB9IC8vIG5hbWVzcGFjZSBBUEkKKwor
I2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaAkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE2
ICsyNiw2NCBAQAogI2lmbmRlZiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlX2gKICNkZWZp
bmUgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZV9oCiAKKyNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQorCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8c3lzdGVtX2Vy
cm9yPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFdvcmtRdWV1ZTsKK30KIAog
bmFtZXNwYWNlIEFQSSB7CiAKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9uOworCiBjbGFzcyBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0
OjpUeXBlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiB7CisgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+OwogcHVibGljOgorICAgIGVu
dW0gY2xhc3MgRXJyb3IgeworICAgICAgICBMb29rdXBGYWlsZWQgPSAxLAorICAgICAgICBDb21w
aWxlRmFpbGVkLAorICAgICAgICBSZW1vdmVGYWlsZWQKKyAgICB9OworCisgICAgc3RhdGljIFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOworCiAgICAgZXhwbGljaXQg
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CiAgICAgdmlydHVhbCB+
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworCisgICAgdm9pZCBjb21waWxlQ29udGVudEV4
dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgV1RGOjpTdHJpbmcm
IGpzb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lv
bj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lk
IHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIHN0
ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPik7CisKKyAgICAvLyBGb3IgdGVzdGlu
ZyBvbmx5LgorICAgIHZvaWQgc3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygp
OworCitwcml2YXRlOgorICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKKworICAg
IGNvbnN0IFdURjo6U3RyaW5nIG1fc3RvcmVQYXRoOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4g
bV9jb21waWxlUXVldWU7CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKKyAg
ICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7CiB9OwogCitjb25zdCBzdGQ6OmVy
cm9yX2NhdGVnb3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOwor
CitpbmxpbmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvciBlcnJvcikKK3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yKSwgdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQor
CiB9IC8vIG5hbWVzcGFjZSBBUEkKIAorbmFtZXNwYWNlIHN0ZCB7CisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
RXJyb3I+IDogcHVibGljIHRydWVfdHlwZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogI2VuZGlmIC8vIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVf
aApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHJldmlzaW9uIDE4MjEx
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw1ICszMyw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKIFdLVHlwZUlEIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUdl
dFR5cGVJRCgpCiB7CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICByZXR1cm4g
dG9BUEkoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpBUElUeXBlKTsKKyNlbHNlCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUNvY29hLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisKKyNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiU2FuZGJveFV0aWxpdGllcy5oIgor
CituYW1lc3BhY2UgQVBJIHsKKworU3RyaW5nIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRl
ZmF1bHRTdG9yZVBhdGgoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2Vu
OworICAgIHN0YXRpYyBOU1VSTCAqY29udGVudEV4dGVuc2lvblN0b3JlVVJMOworCisgICAgZGlz
cGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBOU1VSTCAqdXJsID0gW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBVUkxGb3JEaXJlY3Rvcnk6TlNMaWJyYXJ5RGlyZWN0b3J5
IGluRG9tYWluOk5TVXNlckRvbWFpbk1hc2sgYXBwcm9wcmlhdGVGb3JVUkw6bnVsbHB0ciBjcmVh
dGU6Tk8gZXJyb3I6bnVsbHB0cl07CisgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICB1cmwgPSBbdXJsIFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAIldlYktpdCIgaXNEaXJlY3Rvcnk6WUVTXTsKKworICAgICAg
ICBpZiAoIVdlYktpdDo6cHJvY2Vzc0hhc0NvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBOU1N0
cmluZyAqYnVuZGxlSWRlbnRpZmllciA9IFtOU0J1bmRsZSBtYWluQnVuZGxlXS5idW5kbGVJZGVu
dGlmaWVyOworICAgICAgICAgICAgaWYgKCFidW5kbGVJZGVudGlmaWVyKQorICAgICAgICAgICAg
ICAgIGJ1bmRsZUlkZW50aWZpZXIgPSBbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10ucHJvY2Vz
c05hbWU7CisgICAgICAgICAgICB1cmwgPSBbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVu
dDpidW5kbGVJZGVudGlmaWVyIGlzRGlyZWN0b3J5OllFU107CisgICAgICAgIH0KKworICAgICAg
ICBjb250ZW50RXh0ZW5zaW9uU3RvcmVVUkwgPSBbW3VybCBVUkxCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6QCJDb250ZW50RXh0ZW5zaW9ucyIgaXNEaXJlY3Rvcnk6WUVTXSByZXRhaW5dOworICAg
IH0pOworCisgICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURp
cmVjdG9yeUF0VVJMOmNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTCB3aXRoSW50ZXJtZWRpYXRlRGly
ZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm51bGxwdHJdKQorICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVAIiwgY29udGVudEV4dGVuc2lvblN0
b3JlVVJMKTsKKworICAgIHJldHVybiBjb250ZW50RXh0ZW5zaW9uU3RvcmVVUkwuYWJzb2x1dGVV
UkwucGF0aC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb247Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQ
SQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsMTcgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
K0BjbGFzcyBfV0tVc2VyQ29udGVudEZpbHRlcjsKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKFdLX01B
Q19UQkEsIFdLX0lPU19UQkEpCiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgOiBOU09iamVjdAogCisrIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlOworCistICh2b2lk
KWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlm
aWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0
ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClsb29rdXBDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyOworLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyOworCiBAZW5kCiAKICNlbmRpZiAvLyBXS19BUElfRU5BQkxF
RApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMTgy
MTE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMyArMjgsNzggQEAKIAog
I2lmIFdLX0FQSV9FTkFCTEVECiAKKyNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgorI2ltcG9y
dCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oIgorCiBAaW1wbGVtZW50YXRpb24gX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdAorLSAodm9p
ZClkZWFsbG9jCiB7Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlKCk7CiAKLSAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQ
STo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4oc2VsZik7CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQogCi0gICAgcmV0dXJuIHNlbGY7CisrIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlCit7
CisgICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OmRlZmF1bHRTdG9yZSgpKTsKIH0KIAotLSAodm9pZClkZWFsbG9jCistICh2b2lkKWNvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9u
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vy
cm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPn5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisgICAgYXV0byBoYW5kbGVyID0gYWRv
cHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwogCi0gICAgW3N1cGVyIGRlYWxsb2NdOwor
ICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihp
ZGVudGlmaWVyLCBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6
OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUg
ZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRs
ZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVy
LmdldCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyByZWFsIGVy
cm9yLgorICAgICAgICAgICAgYXV0byBlcnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25v
d24pOworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIGVycm9yLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lk
ICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Cisg
ICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgp
KSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
Cit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0p
OworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRlbnNp
b24oaWRlbnRpZmllciwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9u
PiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYg
KGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworCisgICAgICAgICAg
ICAvLyBGSVhNRTogUGFzcyByZWFsIGVycm9yLgorICAgICAgICAgICAgYXV0byBlcnJvciA9IGNy
ZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWws
IGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vy
cm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVy
KCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZCly
ZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
Cit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0p
OworCisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNp
b24oaWRlbnRpZmllciwgW2hhbmRsZXJdKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShO
U0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIHJl
YWwgZXJyb3IuCisgICAgICAgICAgICBhdXRvIGVycm9yID0gY3JlYXRlTlNFcnJvcihXS0Vycm9y
VW5rbm93bik7CisgICAgICAgICAgICByYXdIYW5kbGVyKGVycm9yLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lk
ICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIobmlsKTsK
KyAgICB9KTsKIH0KIAogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0
aW9uCkBAIC01Niw0ICsxMTEsMTUgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogQGVu
ZAogCitAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2
YXRlKQorCisvLyBGb3IgdGVzdGluZyBvbmx5LgorCistICh2b2lkKV9yZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucworeworICAgIF91c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91
c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Cit9CisKK0BlbmQKKwogI2VuZGlmIC8vIFdL
X0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUludGVybmFsLmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisj
aW1wb3J0ICJfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tf
QVBJX0VOQUJMRUQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZVByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BpbnRlcmZh
Y2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3IgdGVz
dGluZyBvbmx5LgorLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CisKK0BlbmQK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsNiAr
MTEzOCw3IEBACiAJCTdDOEVCMTE3MThEQjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVuY2VzUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4
RUIxMTYxOERCNkExOTAwNzkxN0MyIC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M5RDE1MzcxODQ1ODRE
QTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5RDE1MzYxODQ1ODREQTAwOUQz
OTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oICovOyB9OwogCQk3Q0EyNTRF
QjE4Mjk5M0NFMDBGQzhBNDEgLyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMjU0RUExODI5
OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3Q0EzNzkzRTFBQzM3
OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQTM3OTNEMUFDMzc4
QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDQjE2RkVGMTcy
NEJBMjMwMDdBMEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4u
c2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NCMTZGRTIxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3Qu
ZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYiAqLzsgfTsKIAkJN0NCMTZGRjAxNzI0QkEyNDAw
N0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBDb3B5IFBs
dWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0IxNkZFMzE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4u
cGx1Z2luLnNiICovOyB9OwogCQk3Q0IxNkZGMTE3MjRCQTI2MDA3QTBBOTUgLyogY29tLmFwcGxl
LldlYktpdC5wbHVnaW4tY29tbW9uLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQjE2RkU0MTcyNEI5QjUwMDdB
MEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IgKi87IH07CkBAIC0xMTY5
LDYgKzExNzAsNyBAQAogCQk3Q0U0RDIyMDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0U0RDIxRTFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmggKi87IH07CiAJCTdDRTREMjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNz
UG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Q0U0RDIyNTFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk3Q0U0RDIyODFBNDkxNkMyMDBDN0YxNTIgLyog
V2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NFNEQyMjYxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29s
TWVzc2FnZXMuaCAqLzsgfTsKKwkJN0NFRkE5NjIxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZBOTYwMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0gKi87IH07CiAJCTdDRjQ3RkY2MTcyNzVCNzEwMDhB
Q0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRjQxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxl
UGFnZUJhbm5lci5jcHAgKi87IH07CiAJCTdDRjQ3RkY3MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1
bmRsZVBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRjQ3RkY1MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0Y0N0ZG
QjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VC
YW5uZXIuaCAqLzsgfTsKQEAgLTMzNDUsNiArMzM0Nyw3IEBACiAJCTdDOEVCMTE2MThEQjZBMTkw
MDc5MTdDMiAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzlEMTUzNjE4NDU4NERBMDA5RDM5MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91
cEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdD
b250ZXh0R3JvdXBJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Ey
NTRFQTE4Mjk5M0NFMDBGQzhBNDEgLyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dFBvbGlj
eURlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDQTM3OTNEMUFDMzc4
QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3MjRCOUI1
MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBs
dWdpbi5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0QjlCNTAw
N0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlja1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNv
bS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAi
Y29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTMzNzcsNiArMzM4MCw3IEBACiAJCTdDRTREMjFFMUE0OTE0Q0EwMEM3RjE1MiAv
KiBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg7IHBhdGggPSBVSVByb2Nlc3Mv
QVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CiAJCTdDRTREMjI1MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQ
cm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDRTREMjI2MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NQb29sTWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZE
IC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2Nv
YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRjQxNzI3NUI3MTAwOEFD
QjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Q0Y0N0ZGNTE3Mjc1QjcxMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyog
UGFnZUJhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQmFubmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzQzLDYgKzUzNDcsNyBAQAogCQkJ
CTdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMxNSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LmggKi8sCiAJCQkJN0MyNDEzMDAxQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0gKi8sCiAJCQkJN0MyNDEzMDQxQUFDRkE5QzAwQTU4QzE1IC8qIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovLAorCQkJCTdDQTM3OTNEMUFDMzc4
QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAog
CQkJCTdDODlEMkI4MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICov
LAogCQkJCTdDODlEMkI3MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5t
bSAqLywKIAkJCQk3Qzg5RDJCQjFBNkIwRjVCMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0
ZXJJbnRlcm5hbC5oICovLApAQCAtNTM1NSw2ICs1MzYwLDcgQEAKIAkJCQk3NUE4RDJDNDE4N0ND
RjlGMDBDMzlDOUUgLyogX1dLV2Vic2l0ZURhdGFTdG9yZS5oICovLAogCQkJCTc1QThEMkM1MTg3
Q0NGOUYwMEMzOUM5RSAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovLAogCQkJCTc1QThEMkQ0
MTg3RDFDMDEwMEMzOUM5RSAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLywKKwkJ
CQk3Q0VGQTk2MDFBQzA5OTkzMDBCOTEwRkQgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZUNvY29hLm1tICovLAogCQkJCTFBMzYzNUFCMUEzMTQ1RTUwMEVENjE5NyAvKiBBUElXZWJzaXRl
RGF0YVN0b3JlQ29jb2EubW0gKi8sCiAJCQkJMUFGREU2NDMxOTUxMEI1NTAwQzQ4RkZBIC8qIExl
Z2FjeUJ1bmRsZUZvckNsYXNzLm1tICovLAogCQkJCTM3QzRDMDhCMTgxNEFDNUMwMDM2ODhCOSAv
KiBXS0JhY2tGb3J3YXJkTGlzdC5oICovLApAQCAtNzgxMyw2ICs3ODE5LDcgQEAKIAkJCQlCQzg3
ODBGQzExNjFDMkI4MDBDQzI3NjggLyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE2RkI3RDMxMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzFBNjdFMEQxNjVCMkE5OTAwNkNCQTY2IC8qIFBsdWdJbkF1dG9TdGFy
dFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcg
LyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBOUZCQThEMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTU2RjI5MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVn
aW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2
N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTk1OTYsNiAr
OTYwMyw3IEBACiAJCQkJMUEwRUM5MDcxMjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMEVDOTEwMTI0QzBBRjUwMDdFRjRB
NSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE3ODY1QjkxNkNBQzcxNTAwQUNFODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Q0VGQTk2MjFBQzA5
OTkzMDBCOTEwRkQgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUEyQkI2RDAxNDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5MEQz
MTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBQTQ3OTIzMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVnaW5Qcm9j
ZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODIxMTQpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wMy0yOCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEZsZXNo
IG91dCB0aGUgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tOiBBZGRlZC4KKyAg
ICAgICAgQWRkIHRlc3RzIGZvciBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLgorCiAyMDE1
LTAzLTI3ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0NNYWtlXSBSZW1vdmUgdW5uZWNlc3NhcnkgSU5DTFVERV9JRl9FWElTVFMgbWFjcm8gCklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgyMTE0KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTIzNSw2ICsyMzUsNyBAQAogCQk3Q0NFN0Y0RDFBNDExQjlGMDA0NDdDNEMg
LyogUmV0YWluUHRyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwMjlCMUIxNDg2QjI1OTAwODE3REE5IC8qIFJldGFpblB0ci5tbSAqLzsgfTsKIAkJ
N0NDRTdGNEUxQTQxMUJBNDAwNDQ3QzRDIC8qIFJldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyOUIxNjE0ODZBRDY0MDA4MTdEQTkg
LyogUmV0YWluUHRyLmNwcCAqLzsgfTsKIAkJN0NDRTdGNEYxQTQxMUJBNDAwNDQ3QzRDIC8qIFJl
dGFpblB0ckhhc2hpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzA5OTFDNTAxNDNDN0Q2ODAwNzk5OEYyIC8qIFJldGFpblB0ckhhc2hpbmcuY3Bw
ICovOyB9OworCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tICovOyB9OwogCQk3Q0ZCQ0FFNTE3NDMyMzhGMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVu
ZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
RkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovOyB9OwogCQk5
MzBBRDQwMjE1MDY5OEQwMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThC
MzAwNjc5NzBGIC8qIGxvdHMtb2YtdGV4dC5odG1sICovOyB9OwogCQk5MzYxMDAyOTE0REM5NUE3
MDA2MTM3OUQgLyogbG90cy1vZi1pZnJhbWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2MTAwMjgxNERDOTU3QjAwNjEzNzlEIC8q
IGxvdHMtb2YtaWZyYW1lcy5odG1sICovOyB9OwpAQCAtNTMzLDYgKzUzNCw3IEBACiAJCTdDQzNF
MUZBMTk3RTIzNDEwMEJFNjI1MiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVc2VyQ29udGVudENvbnRyb2xsZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQ0U3RThDMUE0MTE0NEUwMDQ0N0M0QyAv
KiBsaWJUZXN0V2ViS2l0QVBJLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYlRl
c3RXZWJLaXRBUEkuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0ND
RTdFQTMxQTQxMTVDQjAwNDQ3QzRDIC8qIFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDRkJDQUREMTc0MzIzNEYwMEIyQkZDRiAvKiBXaWxsTG9hZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9hZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9C
dW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbExvYWRf
QnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCNTAxOTIxNDBGMjMy
MzAwRDlFQjU4IC8qIFN0cmluZ0J1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MDUsNiArODA3LDcgQEAKIAkJMUFCQzNERUMxODk5QkU1NTAwNEYwNjI2IC8qIFdlYktp
dDIgQ29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tICovLAogCQkJCUExQTRGRTVEMThERDNEQjcwMEI1RUE4QSAvKiBEb3dubG9hZC5tbSAqLywK
IAkJCQkxQUJDM0RFRDE4OTlCRTZEMDA0RjA2MjYgLyogTmF2aWdhdGlvbi5tbSAqLywKIAkJCQlD
RUE2Q0YyMjE5Q0NGNUJEMDA2NEY1QTcgLyogT3BlbkFuZENsb3NlV2luZG93Lm1tICovLApAQCAt
MTQwNCw2ICsxNDA3LDcgQEAKIAkJCQk3Q0NFN0YyMzFBNDExQUY2MDA0NDdDNEMgLyogRG93bmxv
YWQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRTFBNDExQUU2MDA0NDdDNEMgLyogRG93
bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3
RUJFMUE0MTFBN0UwMDQ0N0M0QyAvKiBEeW5hbWljRGV2aWNlU2NhbGVGYWN0b3IubW0gaW4gU291
cmNlcyAqLywKKwkJCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUUwMUE0MTFBOUEwMDQ0
N0M0QyAvKiBFZGl0b3JDb21tYW5kcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJGMUE0
MTFBN0UwMDQ0N0M0QyAvKiBFbGVtZW50QXRQb2ludEluV2ViRnJhbWUubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VFRjFBNDExQUU2MDA0NDdDNEMgLyogRXBoZW1lcmFsU2Vzc2lvblB1c2hT
dGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2Nv
YS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYg
V0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQg
IlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RmlsdGVyLmg+CisjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CisKK2NsYXNzIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVU
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBT
ZXRVcCgpCisgICAgeworICAgICAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVm
YXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOworICAgIH0KK307CisKK3N0
YXRpYyBOU1N0cmluZyAqYmFzaWNGaWx0ZXIgPSBAIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7
CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgQ29tcGlsZSkKK3sK
KyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJh
c2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRl
ciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRl
cik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5n
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21w
aWxpbmcpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKmludmFsaWRGaWx0ZXIgPSBAIlsiOworCitU
RVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNpb24p
Cit7CisgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW19XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lv
bjppbnZhbGlkRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwoZmls
dGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lQ29t
cGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVDb21waWxpbmcpOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QsIExvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwor
ICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVD
b250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRl
bnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAg
ICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmVDb21waWxpbmcpOworCisgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAg
PSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNv
bXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAq
ZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAg
IEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKKyAg
ICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOworfQor
CitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRl
bnRpZmllckxvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNl
OworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1
cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9u
SGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7
CisgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OT1Rf
TlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2luZ1VwKTsKK30KKworVEVTVF9G
KF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1vdmFsKQoreworICAgIF9fYmxv
Y2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIg
Y29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9y
ICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAg
ICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisK
KyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lUmVt
b3ZpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZVJlbW92aW5nKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0
LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCit7CisgICAgX19ibG9jayBib29sIGRvbmVS
ZW1vdmluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4
aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVD
VF9OT1RfTlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVSZW1vdmluZyk7Cit9CisKKyNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249667</attachid>
            <date>2015-03-28 12:44:59 -0700</date>
            <delta_ts>2015-03-28 13:14:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143123-20150328124419.patch</filename>
            <type>text/plain</type>
            <size>58885</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAzLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxl
c2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSB2YXJpYW50IG9mIGdldEZpbGVT
aXplKCkgdGhhdCB0YWtlcyBhIFBsYXRmb3JtRmlsZUhhbmRsZS4KKyAgICAgICAgLSBBZGRzIGEg
bmV3IGZpbGUgc3lzdGVtIGZ1bmN0aW9uLCByZW5hbWUoKSB3aGljaCBvcGVyYXRlcyBhcyB0aGUg
UE9TSVgKKyAgICAgICAgICByZW5hbWUgZnVuY3Rpb24gZG9lcy4KKworICAgICAgICAqIHBsYXRm
b3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVuYW1lRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIEFk
ZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW5h
bWVGaWxlKToKKyAgICAgICAgQWRkIHN0dWJzLgorCiAyMDE1LTAzLTI4ICBKb29uZ2h1biBQYXJr
ICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBudWxscHRyIGNsZWFudXAgaW4g
SW5saW5lRm9vQm94IGNsYXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw5IEBAIHN0cnVjdCBGaWxlTWV0YWRh
dGE7CiBXRUJDT1JFX0VYUE9SVCBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiBXRUJD
T1JFX0VYUE9SVCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworV0VCQ09SRV9FWFBP
UlQgYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBu
ZXdQYXRoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwg
bG9uZyBsb25nJiByZXN1bHQpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlU2l6ZShQbGF0
Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90JiByZXN1bHQpOwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlQ3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRp
bWVfdCYgcmVzdWx0KTsgLy8gTm90IGFsbCBwbGF0Zm9ybXMgc3RvcmUgZmlsZSBjcmVhdGlvbiB0
aW1lLgogYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiwgRmlsZU1ldGFkYXRhJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3Bw
CShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5
c3RlbUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAj
aW5jbHVkZSA8Z2xpYi5oPgpAQCAtMTEwLDYgKzExMSwxMiBAQCBib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgCiAgICAgcmV0dXJuIGZpbGVuYW1lID8gZ19ybWRpcihmaWxl
bmFtZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsKIH0KIAorYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0
aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5h
bWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKQEAgLTEyOSw2ICsxMzYsMTIgQEAgYm9vbCBn
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBnZXRGaWxl
Q3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCiB7CiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgd2F5IHRvIHJldHJpZXZlIGZpbGUgY3JlYXRpb24gdGltZSB3aXRoIEd0ayBvbiBw
bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0PwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw2ICs3MSwxOSBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKK2Jvb2wgcmVuYW1l
RmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAg
ICBDU3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRo
KTsKKyAgICBpZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0aEZzUmVwLmRhdGEoKVsw
XSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIG5ld1BhdGhG
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKKyAgICBpZiAoIW5ld1Bh
dGhGc1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgp
LCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKK30KKwogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4Myw2ICsxOTYsMTYg
QEAgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxv
bmcgbG9uZyYgcmVzdWx0KQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChm
c3RhdChoYW5kbGUsICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IGZpbGVJbmZvLnN0X3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgZ2V0
RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewog
I2lmIE9TKERBUldJTikgfHwgT1MoT1BFTkJTRCkgfHwgT1MoTkVUQlNEKSB8fCBPUyhGUkVFQlNE
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMiBAQCBib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uCiAgICAgcmV0dXJuIGdldEZpbGVTaXplRnJv
bUZpbmREYXRhKGZpbmREYXRhLCBzaXplKTsKIH0KIAorYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3Ry
aW5nJiBwYXRoLCB0aW1lX3QmIHRpbWUpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0
YTsKQEAgLTE1NCw2ICsxNjAsMTIgQEAgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBT
dHJpbmcmIAogICAgIHJldHVybiAhIVJlbW92ZURpcmVjdG9yeVcoZmlsZW5hbWUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwogfQogCitib29sIHJlbmFtZUZpbGUoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxV
Q2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkz
IEBACisyMDE1LTAzLTI4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxlc2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMx
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21Db21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YTo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk6CisgICAgICAgIFN3aXRjaCB0
aGUgb3JkZXIgaW4gbWVtb3J5IG9mIGFjdGlvbnMgYW5kIGJ5dGVjb2RlIChhbmQgc3dpdGNoIHRo
ZSBvcmRlciBvZiB0aGUKKyAgICAgICAgdmFyaWFibGVzIGFzIHdlbGwsIHRvIGtlZXAgaXQgY2xl
YXIpLiBUaGlzIHdpbGwgYmVjb21lIG5lY2Vzc2FyeSB3aGVuIHN0cmVhbWluZworICAgICAgICB0
aGUgZGF0YSB0byBkaXNrLCBhcyBhY3Rpb25zIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgYnl0ZWNv
ZGUgYW5kIHdlIHdvdWxkIGhhdmUgdG8ga2VlcCB0aGVtCisgICAgICAgIGluIG1lbW9yeSB1bnRp
bCB0aGUgYnl0ZWNvZGUgd2FzIGZpbmlzaGVkIGNvbXBpbGluZyBpZiB0aGV5IGRpZG4ndCBjb21l
IGJlZm9yZSBpbiB0aGUgZmlsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIEFkZCBhY2Nlc3NvciBmb3IgdGhlIHBy
b2Nlc3NlcyBkZWZhdWx0IHNoYXJlZCBzdG9yZS4KKworICAgICAgICAoQVBJOjpjb25zdHJ1Y3Rl
ZFBhdGgpOgorICAgICAgICBIZWxwZXIgZm9yIGNvbnN0cnVjdGluZyB0aGUgcGF0aCB0byBhIGZp
bGUgaW4gdGhlIHN0b3JlIGJhc2VkIG9uIGlkZW50aWZpZXIuCisKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgSGVscGVycyBmb3IgZW5jb2RpbmcvZGVjb2Rp
bmcgdGhlIGZpbGUgbWV0YWRhdGEgKHZlcnNpb24sIGJ5dGVjb2RlIHNpemUsIGFjdGlvbnMgc2l6
ZSkuCisKKyAgICAgICAgKEFQSTo6b3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24pOgorICAgICAg
ICBIZWxwZXIgdG8gb3BlbiBhbmQgbWFwIGEgZmlsZWQgYmFjayBjb250ZW50IGV4dGVuc2lvbi4K
KworICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICBIZWxwZXIgdG8gd3Jp
dGUgYSBEYXRhIG9iamVjdCB0byBhIGZpbGUuCisKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0Zp
bGUpOgorICAgICAgICBIZWxwZXIgdG8gcnVuIHRoZSBjb250ZW50IGV4dGVuc2lvbiBjb21waWxl
ciBhbmQgd3JpdGUgaXQgdG8gZGlzay4gSXQgZmlyc3QKKyAgICAgICAgd3JpdGVzIGl0IHRvIGEg
dGVtcG9yYXJ5IGZpbGUgYW5kIHRoZW4gZG9lcyBhbiBhdG9taWMgcmVuYW1lIG9wZXJhdGlvbiB0
byBwdXQKKyAgICAgICAgdGhlIGZpbGUgaW4gdGhlIGZpbmFsIGxvY2F0aW9uLiBEb2luZyB0aGlz
IG1lYW5zIHRoYXQgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlcyB3aGlsZQorICAgICAgICB0aGUgY29t
cGlsZSBpcyB0YWtpbmcgcGxhY2UsIHRoZSBwYXJ0aWFsbHkgd3JpdHRlbiBmaWxlIHdvbid0IGVu
ZCB1cCBpbiB0aGUgY2FjaGUsIAorICAgICAgICBidXQgcmF0aGVyLCB3aWxsIGJlIGNsZWFuZWQg
dXAgYnkgdGhlIE9TLgorIAorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Ojpsb29rdXBDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGxv
b2t1cCBhbiBleHRlbnNpb24gdGhhdCBoYXMgYmVlbiBjb21waWxlZCB0byBkaXNrLiBPbiBhIGJh
Y2tncm91bmQgcXVldWUsCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIG9wZW4gYW5kIG1hcCB0aGUg
ZXh0ZW5zaW9uIChiYXNlZCBvbiB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCByZXR1cm4g
aXQKKyAgICAgICAgdG8gdGhlIGNhbGxlciB2aWEgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKyAgICAgICAgCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGNv
bXBpbGUgYW4gZXh0ZW5zaW9uIGFuZCB3cml0ZSBpdCB0byBzdG9yZS4gT24gYSBiYWNrZ3JvdW5k
IHF1ZXVlLCBpdCAKKyAgICAgICAgY29tcGlsZXMgdGhlIGZpbGUgdG8gZGlzayBhbmQgaWYgc3Vj
Y2Vzc2Z1bCwgcmV0dXJucyB0aGUgbWVtb3J5IG1hcHBlZCBkYXRhIHZpYSB0aGUgY2FsbGJhY2sK
KyAgICAgICAgZnVuY3Rpb24gcGFzc2VkIGluLgorCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICBBUEkgZW50
cnkgcG9pbnQgdG8gcmVtb3ZlIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBzdG9yZS4gT24gYSBiYWNr
Z3JvdW5kIHF1ZXVlLCBpdCAKKyAgICAgICAgdW5saW5rcyB0aGUgZXh0ZW5zaW9uIChiYXNlZCBv
biB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCB0ZWxscyB0aGUgY2FsbGVyIGl0IGNvbXBs
ZXRlZAorICAgICAgICB0aGUgYWN0aW9uIHZpYWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKworICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgSGVscGVyIGZvciB0ZXN0
aW5nIHdoaWNoIHN5bmNocm9ub3VzbHkgdW5saW5rcyBhbGwgdGhlIGZpbGVzIGluIHRoZSBzdG9y
ZS4KKworICAgICAgICAoQVBJOjp1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29y
eSk6CisgICAgICAgIHN0ZDo6ZXJyb3JfY29kZSBhZGFwdG9yIGZvciBzb21lIGdlbmVyaWMgZXJy
b3JzIHRoYXQgY2FuIGhhcHBlbiBpbiB0aGUgc3RvcmUuIFdlIHdpbGwgd2FudAorICAgICAgICB0
byBmbGVzaCB0aGVzZSBvdXQgZnVydGhlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCk6CisgICAg
ICAgIEhlbHBlciB0byBnZXQgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHBhdGggZm9yIHRoZSBzdG9y
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVSZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlwZUlE
KToKKyAgICAgICAgQWRkIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpIGd1YXJkcy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWFsbG9j
XSk6CisgICAgICAgICgrW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxv
b2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGluaXRdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIFNQSSB3cmFwcGVycyBm
b3IgdGhlIHN0b3JlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDE1LTAzLTI3ICBHd2FuZyBZb29uIEh3
YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXhNYXBdIFNlcGVyYXRlIEJpdG1h
cFRleHR1cmUgcmVsYXRlZCBjbGFzc2VzIGltcGxlbWVudGF0aW9ucyBmcm9tIFRleHR1cmVNYXBw
ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTUgKzQ5LDE1IEBAIHZvaWQgTGVnYWN5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2wK
IFJlZjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlRnJvbUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoY29uc3QgV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGNvbXBp
bGVyRGF0YSkKIHsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpICsgY29tcGlsZXJE
YXRhLmFjdGlvbnMuc2l6ZSgpKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJl
ZE1lbW9yeS0+ZGF0YSgpKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGlsZXJE
YXRhLmJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFy
ZWRNZW1vcnktPmRhdGEoKSkgKyBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpLCBjb21waWxl
ckRhdGEuYWN0aW9ucy5kYXRhKCksIGNvbXBpbGVyRGF0YS5hY3Rpb25zLnNpemUoKSk7CisgICAg
bWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFyZWRNZW1vcnktPmRhdGEoKSksIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLmRhdGEoKSwgY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLnNpemUoKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGls
ZXJEYXRhLmJ5dGVjb2RlLnNpemUoKSk7CiAKICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGRhdGE7CiAgICAgZGF0YS5kYXRhID0gV1RGOjptb3ZlKHNoYXJlZE1lbW9yeSk7Ci0g
ICAgZGF0YS5ieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgZGF0YS5ieXRlY29kZVNpemUgPSBjb21w
aWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwotICAgIGRhdGEuYWN0aW9uc09mZnNldCA9IGNvbXBp
bGVyRGF0YS5ieXRlY29kZS5zaXplKCk7CisgICAgZGF0YS5hY3Rpb25zT2Zmc2V0ID0gMDsKICAg
ICBkYXRhLmFjdGlvbnNTaXplID0gY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpOworICAgIGRh
dGEuYnl0ZWNvZGVPZmZzZXQgPSBjb21waWxlckRhdGEuYWN0aW9ucy5zaXplKCk7CisgICAgZGF0
YS5ieXRlY29kZVNpemUgPSBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwogCiAgICAgcmV0
dXJuIGNyZWF0ZShXVEY6Om1vdmUoZGF0YSkpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAko
cmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAg
dm9pZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbgogICAgIGRhdGEtPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwogICAgIGVuY29kZXIgPDwg
aGFuZGxlOwogCi0gICAgZW5jb2RlciA8PCBieXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVyIDw8
IGJ5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CiAgICAgZW5jb2Rl
ciA8PCBhY3Rpb25zU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGJ5dGVjb2RlT2Zmc2V0OworICAgIGVu
Y29kZXIgPDwgYnl0ZWNvZGVTaXplOwogfQogCiBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkKQEAg
LTUxLDE1ICs1MSwxNCBAQCBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmRhdGEgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFj
dGlvbnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaAkocmV2aXNpb24gMTgyMTE0KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gZGF0YSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2Rl
U2l6ZSwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUpCisgICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRh
LCB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgOiBkYXRhKGRh
dGEpCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICwg
Ynl0ZWNvZGVTaXplKGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgLCBhY3Rpb25zT2Zmc2V0KGFjdGlv
bnNPZmZzZXQpCiAgICAgICAgICwgYWN0aW9uc1NpemUoYWN0aW9uc1NpemUpCisgICAgICAgICwg
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgYnl0ZWNvZGVTaXplKGJ5
dGVjb2RlU2l6ZSkKICAgICB7CiAgICAgfQogCkBAIC01NywxMCArNTcsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEmKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGRhdGE7
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgYnl0ZWNv
ZGVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQgeyAwIH07CiAgICAgdW5z
aWduZWQgYWN0aW9uc1NpemUgeyAwIH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAw
IH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVTaXplIHsgMCB9OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw5ICsyNiw0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUg
IldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdv
cmtDYWNoZTsKKwogbmFtZXNwYWNlIEFQSSB7CiAKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IGRlZmF1bHRTdG9yZTsK
KyAgICByZXR1cm4gZGVmYXVsdFN0b3JlOworfQorCiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCkKKyAgICA6IFVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgpKQoreworfQorCitVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBh
dGgpCisgICAgOiBtX3N0b3JlUGF0aChzdG9yZVBhdGgpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShX
b3JrUXVldWU6OmNyZWF0ZSgiVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVl
IiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1fcmVhZFF1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQgUXVldWUiKSkKKyAg
ICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgUmVtb3ZlIFF1ZXVlIikpCiB7CiB9CiAKQEAgLTM2LDQgKzY4LDI4OSBAQCBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjp+VXNlckNvbnRlbnRFCiB7CiB9CiAKK3N0YXRpYyBTdHJpbmcg
Y29uc3RydWN0ZWRQYXRoKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFz
ZSwgIkNvbnRlbnRFeHRlbnNpb24tIiArIFdlYkNvcmU6OmVuY29kZUZvckZpbGVOYW1lKGlkZW50
aWZpZXIpKTsKK30KKworc3RydWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7CisgICAgdWlu
dDMyX3QgdmVyc2lvbjsKKyAgICB1aW50NjRfdCBhY3Rpb25zT2Zmc2V0OworICAgIHVpbnQ2NF90
IGFjdGlvbnNTaXplOworICAgIHVpbnQ2NF90IGJ5dGVjb2RlT2Zmc2V0OworICAgIHVpbnQ2NF90
IGJ5dGVjb2RlU2l6ZTsKK307CisKK3N0YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YShjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQoreworICAg
IFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbmNvZGVyIGVuY29kZXI7CisKKyAgICBlbmNvZGVyIDw8
IG1ldGFEYXRhLnZlcnNpb247CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsK
KyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZTsKKworICAgIHJldHVybiBEYXRh
KGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKK30KKworc3RhdGljIGJv
b2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0
YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRhKQoreworICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOworICAgIGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURh
dGFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIC8vIFRoZSBm
aWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdt
ZW50IHNvIHRoZSBzaXplCisgICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQg
YWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUuCisgICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRh
LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEsIHNpemUpOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRh
RGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBt
ZXRhRGF0YS5hY3Rpb25zT2Zmc2V0ID0gZGVjb2Rlci5jdXJyZW50T2Zmc2V0KCk7CisgICAgICAg
IG1ldGFEYXRhLmJ5dGVjb2RlT2Zmc2V0ID0gbWV0YURhdGEuYWN0aW9uc09mZnNldCArIG1ldGFE
YXRhLmFjdGlvbnNTaXplOworICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMgYm9vbCBv
cGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZpbGVEYXRhKQoreworICAgIGF1dG8gZmQg
PSBXZWJDb3JlOjpvcGVuRmlsZShwYXRoLCBXZWJDb3JlOjpPcGVuRm9yUmVhZCk7CisgICAgaWYg
KGZkID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZSA9IDA7CisgICAgaWYgKCFXZWJDb3Jl
OjpnZXRGaWxlU2l6ZShmZCwgZmlsZVNpemUpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmls
ZShmZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmaWxlRGF0YSA9IG1h
cEZpbGUoZmQsIDAsIHN0YXRpY19jYXN0PHNpemVfdD4oZmlsZVNpemUpKTsKKyAgICBXZWJDb3Jl
OjpjbG9zZUZpbGUoZmQpOworCisgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSht
ZXRhRGF0YSwgZmlsZURhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKERhdGEmIGZpbGVEYXRhLCBX
ZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmQsIChj
b25zdCBjaGFyKilkYXRhLCBzaXplKSA9PSAtMSkgeworICAgICAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0pOworICAgIAorICAgIHJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMg
c3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKGNvbnN0IFN0cmluZyYganNvbiwgY29uc3Qg
U3RyaW5nJiBmaW5hbEZpbGVQYXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRh
LCBEYXRhJiBtYXBwZWREYXRhKQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczsKKworICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50IGZpbmFsIDogcHVi
bGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICBDb21waWxhdGlvbkNsaWVudChEYXRhJiBieXRlY29kZURhdGEsIERhdGEmIGFjdGlvbnNE
YXRhKQorICAgICAgICAgICAgOiBtX2J5dGVjb2RlRGF0YShieXRlY29kZURhdGEpCisgICAgICAg
ICAgICAsIG1fYWN0aW9uc0RhdGEoYWN0aW9uc0RhdGEpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4m
JiBieXRlY29kZSkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9ieXRlY29kZURh
dGEgPSBEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNlcmlhbGl6ZWRBY3Rp
b25CeXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYWN0
aW9uc0RhdGEgPSBEYXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSk7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERhdGEmIG1fYnl0ZWNvZGVEYXRhOworICAgICAg
ICBEYXRhJiBtX2FjdGlvbnNEYXRhOworICAgIH07CisKKyAgICBEYXRhIGJ5dGVjb2RlOworICAg
IERhdGEgYWN0aW9uczsKKyAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNsaWVudChi
eXRlY29kZSwgYWN0aW9ucyk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBjb3BpZXMgdGhlIGRhdGEu
IEluc3RlYWQsIHdlIHNob3VsZCBiZSBwYXNzaW5nIGFuIGludGVyZmFjZQorICAgIC8vIHRvIHRo
ZSBjb21waWxlciB0aGF0IGNhbiB3cml0ZSBkaXJlY3RseSB0byBhIGZpbGUuCisKKyAgICBhdXRv
IGNvbXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQsIGpzb24p
OworICAgIGlmIChjb21waWxlckVycm9yKQorICAgICAgICByZXR1cm4gY29tcGlsZXJFcnJvcjsK
KworICAgIGF1dG8gYWN0aW9uc0FuZEJ5dGVjb2RlID0gY29uY2F0ZW5hdGUoYWN0aW9ucywgYnl0
ZWNvZGUpOworCisgICAgbWV0YURhdGEudmVyc2lvbiA9IDE7CisgICAgbWV0YURhdGEuYWN0aW9u
c1NpemUgPSBhY3Rpb25zLnNpemUoKTsKKyAgICBtZXRhRGF0YS5ieXRlY29kZVNpemUgPSBieXRl
Y29kZS5zaXplKCk7CisKKyAgICBhdXRvIGVuY29kZWRNZXRhRGF0YSA9IGVuY29kZUNvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YShtZXRhRGF0YSk7CisKKyAgICBtZXRhRGF0YS5hY3Rpb25zT2Zmc2V0
ID0gZW5jb2RlZE1ldGFEYXRhLnNpemUoKTsKKyAgICBtZXRhRGF0YS5ieXRlY29kZU9mZnNldCA9
IGVuY29kZWRNZXRhRGF0YS5zaXplKCkgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKKworICAgIGF1
dG8gZGF0YSA9IGNvbmNhdGVuYXRlKGVuY29kZWRNZXRhRGF0YSwgYWN0aW9uc0FuZEJ5dGVjb2Rl
KTsKKyAgICBhdXRvIGRhdGFTaXplID0gZGF0YS5zaXplKCk7CisKKyAgICBBU1NFUlQobWV0YURh
dGEuYWN0aW9uc09mZnNldCArIG1ldGFEYXRhLmFjdGlvbnNTaXplICsgbWV0YURhdGEuYnl0ZWNv
ZGVTaXplID09IGRhdGFTaXplKTsKKworICAgIGF1dG8gdGVtcG9yYXJ5RmlsZUhhbmRsZSA9IFdl
YkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgU3RyaW5nIHRlbXBvcmFyeUZp
bGVQYXRoID0gV2ViQ29yZTo6b3BlblRlbXBvcmFyeUZpbGUoIkNvbnRlbnRFeHRlbnNpb24iLCB0
ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICBpZiAodGVtcG9yYXJ5RmlsZUhhbmRsZSA9PSBXZWJD
b3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisKKyAgICBpZiAoIXdyaXRl
RGF0YVRvRmlsZShkYXRhLCB0ZW1wb3JhcnlGaWxlSGFuZGxlKSkgeworICAgICAgICBXZWJDb3Jl
OjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAgICAgIHJldHVybiBVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICB9CisKKyAgICBt
YXBwZWREYXRhID0gbWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBkYXRhU2l6ZSk7Cisg
ICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOworCisgICAgaWYgKG1h
cHBlZERhdGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKworICAgIGlmICghV2ViQ29yZTo6cmVuYW1lRmls
ZSh0ZW1wb3JhcnlGaWxlUGF0aCwgZmluYWxGaWxlUGF0aCkpCisgICAgICAgIHJldHVybiBVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKworICAgIHJldHVy
biB7IH07Cit9CisKK3N0YXRpYyBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gY3Jl
YXRlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCit7CisgICAgYXV0
byBzaGFyZWRNZW1vcnkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlRnJvbVZNQnVmZmVy
KGNvbnN0X2Nhc3Q8dWludDhfdCo+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSk7
CisgICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKAorICAgICAgICBzaGFyZWRNZW1vcnksCisgICAgICAg
IG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQsCisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNTaXplLAor
ICAgICAgICBtZXRhRGF0YS5ieXRlY29kZU9mZnNldCwKKyAgICAgICAgbWV0YURhdGEuYnl0ZWNv
ZGVTaXplCisgICAgKTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEpKTsKKyAgICByZXR1cm4gQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKGlkZW50aWZpZXIsIFdURjo6bW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNp
b24pKTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBSZWZQdHI8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZT4gc2VsZih0aGlzKTsKKyAgICBTdHJpbmdDYXB0dXJlIGlkZW50aWZpZXJDYXB0dXJlKGlkZW50
aWZpZXIpOworICAgIFN0cmluZ0NhcHR1cmUgcGF0aENhcHR1cmUobV9zdG9yZVBhdGgpOworCisg
ICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtzZWxmLCBpZGVudGlmaWVyQ2FwdHVyZSwgcGF0aENh
cHR1cmUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVj
dGVkUGF0aChwYXRoQ2FwdHVyZS5zdHJpbmcoKSwgaWRlbnRpZmllckNhcHR1cmUuc3RyaW5nKCkp
OworICAgICAgICAKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOwor
ICAgICAgICBEYXRhIGZpbGVEYXRhOworICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0
ZW5zaW9uKHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSkpIHsKKyAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGlkZW50aWZpZXJDYXB0dXJl
LCBmaWxlRGF0YSwgbWV0YURhdGEsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgICAgICBS
ZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNpb24gPSBj
cmVhdGVFeHRlbnNpb24oaWRlbnRpZmllckNhcHR1cmUuc3RyaW5nKCksIG1ldGFEYXRhLCBmaWxl
RGF0YSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih1c2VyQ29udGVudEV4dGVuc2lv
biwgeyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlk
ZW50aWZpZXIsIGNvbnN0IFdURjo6U3RyaW5nJiBqc29uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVm
UHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBSZWZQdHI8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc2Vs
Zih0aGlzKTsKKyAgICBTdHJpbmdDYXB0dXJlIGlkZW50aWZpZXJDYXB0dXJlKGlkZW50aWZpZXIp
OworICAgIFN0cmluZ0NhcHR1cmUganNvbkNhcHR1cmUoanNvbik7CisgICAgU3RyaW5nQ2FwdHVy
ZSBwYXRoQ2FwdHVyZShtX3N0b3JlUGF0aCk7CisKKyAgICBtX2NvbXBpbGVRdWV1ZS0+ZGlzcGF0
Y2goW3NlbGYsIGlkZW50aWZpZXJDYXB0dXJlLCBqc29uQ2FwdHVyZSwgcGF0aENhcHR1cmUsIGNv
bXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChw
YXRoQ2FwdHVyZS5zdHJpbmcoKSwgaWRlbnRpZmllckNhcHR1cmUuc3RyaW5nKCkpOworCisgICAg
ICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKKyAgICAgICAgRGF0YSBmaWxl
RGF0YTsKKyAgICAgICAgYXV0byBlcnJvciA9IGNvbXBpbGVkVG9GaWxlKGpzb25DYXB0dXJlLnN0
cmluZygpLCBwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAgICAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgZXJyb3IsIGNvbXBs
ZXRpb25IYW5kbGVyXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0
ciwgZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGlkZW50aWZpZXJD
YXB0dXJlLCBmaWxlRGF0YSwgbWV0YURhdGEsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAg
ICAgICBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gdXNlckNvbnRlbnRFeHRlbnNp
b24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllckNhcHR1cmUuc3RyaW5nKCksIG1ldGFEYXRh
LCBmaWxlRGF0YSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih1c2VyQ29udGVudEV4
dGVuc2lvbiwgeyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIFJlZlB0cjxVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPiBz
ZWxmKHRoaXMpOworICAgIFN0cmluZ0NhcHR1cmUgaWRlbnRpZmllckNhcHR1cmUoaWRlbnRpZmll
cik7CisgICAgU3RyaW5nQ2FwdHVyZSBwYXRoQ2FwdHVyZShtX3N0b3JlUGF0aCk7CisKKyAgICBt
X3JlbW92ZVF1ZXVlLT5kaXNwYXRjaChbc2VsZiwgaWRlbnRpZmllckNhcHR1cmUsIHBhdGhDYXB0
dXJlLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3Rl
ZFBhdGgocGF0aENhcHR1cmUuc3RyaW5nKCksIGlkZW50aWZpZXJDYXB0dXJlLnN0cmluZygpKTsK
KworICAgICAgICBpZiAoIVdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCkpIHsKKyAgICAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihFcnJvcjo6UmVtb3ZlRmFpbGVkKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxD
b250ZW50RXh0ZW5zaW9ucygpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2ViQ29y
ZTo6bGlzdERpcmVjdG9yeShtX3N0b3JlUGF0aCwgIioiKSkKKyAgICAgICAgV2ViQ29yZTo6ZGVs
ZXRlRmlsZShwYXRoKTsKK30KKworY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgdXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKQoreworICAgIGNsYXNzIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3JfY2F0ZWdvcnkg
eworICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICJ1c2VyIGNvbnRlbnQgZXh0ZW5zaW9uIHN0b3Jl
IjsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQg
ZXJyb3JDb2RlKSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUp
KSB7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpM
b29rdXBGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBk
dXJpbmcgbG9va3VwLiI7CisgICAgICAgICAgICBjYXNlIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OkVycm9yOjpDb21waWxlRmFpbGVkOgorICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVj
aWZpZWQgZXJyb3IgZHVyaW5nIGNvbXBpbGUuIjsKKyAgICAgICAgICAgIGNhc2UgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxlZDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
ckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKKyAgICByZXR1cm4gY29u
dGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEFQSQorCisj
ZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYg
KzI2LDY0IEBACiAjaWZuZGVmIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVfaAogI2RlZmlu
ZSBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlX2gKIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxzeXN0ZW1fZXJy
b3I+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgV29ya1F1ZXVlOworfQogCiBu
YW1lc3BhY2UgQVBJIHsKIAorY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CisKIGNsYXNzIFVz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6
OlR5cGU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKKyAgICBmcmllbmQgY2xhc3MgTmV2
ZXJEZXN0cm95ZWQ8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT47CiBwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBFcnJvciB7CisgICAgICAgIExvb2t1cEZhaWxlZCA9IDEsCisgICAgICAgIENvbXBp
bGVGYWlsZWQsCisgICAgICAgIFJlbW92ZUZhaWxlZAorICAgIH07CisKKyAgICBzdGF0aWMgVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7CisKICAgICBleHBsaWNpdCBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisgICAgZXhwbGljaXQgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKICAgICB2aXJ0dWFsIH5V
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CisKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0
ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBXVEY6OlN0cmluZyYg
anNvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9u
Piwgc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgbG9va3VwQ29udGVudEV4dGVuc2lvbihj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlZlB0cjxB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQg
cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgc3Rk
OjpmdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+KTsKKworICAgIC8vIEZvciB0ZXN0aW5n
IG9ubHkuCisgICAgdm9pZCBzeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7
CisKK3ByaXZhdGU6CisgICAgV1RGOjpTdHJpbmcgZGVmYXVsdFN0b3JlUGF0aCgpOworCisgICAg
Y29uc3QgV1RGOjpTdHJpbmcgbV9zdG9yZVBhdGg7CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBt
X2NvbXBpbGVRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVhZFF1ZXVlOworICAg
IFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9yZW1vdmVRdWV1ZTsKIH07CiAKK2NvbnN0IHN0ZDo6ZXJy
b3JfY2F0ZWdvcnkmIHVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7CisK
K2lubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OkVycm9yIGVycm9yKQoreworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4o
ZXJyb3IpLCB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpIH07Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEFQSQogCituYW1lc3BhY2Ugc3RkIHsKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBpc19lcnJvcl9jb2RlX2VudW08QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpF
cnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCiAjZW5kaWYgLy8gQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZV9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAkocmV2aXNpb24gMTgyMTE0
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDUgKzMzLDkgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogV0tUeXBlSUQgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0
VHlwZUlEKCkKIHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHJldHVybiB0
b0FQSShBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkFQSVR5cGUpOworI2Vsc2UKKyAg
ICByZXR1cm4gMDsKKyNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJTYW5kYm94VXRpbGl0aWVzLmgiCisK
K25hbWVzcGFjZSBBUEkgeworCitTdHJpbmcgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVm
YXVsdFN0b3JlUGF0aCgpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47
CisgICAgc3RhdGljIE5TVVJMICpjb250ZW50RXh0ZW5zaW9uU3RvcmVVUkw7CisKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIE5TVVJMICp1cmwgPSBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIFVSTEZvckRpcmVjdG9yeTpOU0xpYnJhcnlEaXJlY3Rvcnkg
aW5Eb21haW46TlNVc2VyRG9tYWluTWFzayBhcHByb3ByaWF0ZUZvclVSTDpudWxscHRyIGNyZWF0
ZTpOTyBlcnJvcjpudWxscHRyXTsKKyAgICAgICAgaWYgKCF1cmwpCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIHVybCA9IFt1cmwgVVJMQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OkAiV2ViS2l0IiBpc0RpcmVjdG9yeTpZRVNdOworCisgICAgICAg
IGlmICghV2ViS2l0Ojpwcm9jZXNzSGFzQ29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIE5TU3Ry
aW5nICpidW5kbGVJZGVudGlmaWVyID0gW05TQnVuZGxlIG1haW5CdW5kbGVdLmJ1bmRsZUlkZW50
aWZpZXI7CisgICAgICAgICAgICBpZiAoIWJ1bmRsZUlkZW50aWZpZXIpCisgICAgICAgICAgICAg
ICAgYnVuZGxlSWRlbnRpZmllciA9IFtOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXS5wcm9jZXNz
TmFtZTsKKyAgICAgICAgICAgIHVybCA9IFt1cmwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OmJ1bmRsZUlkZW50aWZpZXIgaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTCA9IFtbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIkNvbnRlbnRFeHRlbnNpb25zIiBpc0RpcmVjdG9yeTpZRVNdIHJldGFpbl07CisgICAg
fSk7CisKKyAgICBpZiAoIVtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGly
ZWN0b3J5QXRVUkw6Y29udGVudEV4dGVuc2lvblN0b3JlVVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJl
Y3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bnVsbHB0cl0pCisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJUAiLCBjb250ZW50RXh0ZW5zaW9uU3Rv
cmVVUkwpOworCisgICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTC5hYnNvbHV0ZVVS
TC5wYXRoLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgQVBJ
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNyBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAor
QGNsYXNzIF9XS1VzZXJDb250ZW50RmlsdGVyOworCiBXS19DTEFTU19BVkFJTEFCTEUoV0tfTUFD
X1RCQSwgV0tfSU9TX1RCQSkKIEBpbnRlcmZhY2UgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSA6IE5TT2JqZWN0CiAKKysgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmU7CisKKy0gKHZvaWQp
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRl
bnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICos
IE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWxvb2t1cENvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXI7CistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3Ig
KikpY29tcGxldGlvbkhhbmRsZXI7CisKIEBlbmQKIAogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAxODIx
MTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDIzICsyOCw3OCBAQAogCiAj
aWYgV0tfQVBJX0VOQUJMRUQKIAorI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgiCisjaW1wb3J0
ICJfV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgiCisKIEBpbXBsZW1lbnRhdGlvbiBfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlCiAKLS0gKGluc3RhbmNldHlwZSlpbml0CistICh2b2lk
KWRlYWxsb2MKIHsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+flVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKIAotICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlPihzZWxmKTsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CiAKLSAgICByZXR1cm4gc2VsZjsKKysgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKK3sK
KyAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6ZGVmYXVsdFN0b3JlKCkpOwogfQogCi0tICh2b2lkKWRlYWxsb2MKKy0gKHZvaWQpY29tcGls
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24g
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJy
b3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS0+flVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9w
dE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7CiAKLSAgICBbc3VwZXIgZGVhbGxvY107Cisg
ICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGlk
ZW50aWZpZXIsIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6
VXNlckNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBl
cnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxl
ciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIu
Z2V0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIHJlYWwgZXJy
b3IuCisgICAgICAgICAgICBhdXRvIGVycm9yID0gY3JlYXRlTlNFcnJvcihXS0Vycm9yVW5rbm93
bik7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwgZXJyb3IuZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQg
KF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAg
ICAgICAgcmF3SGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkp
LCBuaWwpOworICAgIH0pOworfQorCistICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIK
K3sKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7
CisKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4dGVuc2lv
bihpZGVudGlmaWVyLCBbaGFuZGxlcl0oUmVmUHRyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+
IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2Vy
Q29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBQYXNzIHJlYWwgZXJyb3IuCisgICAgICAgICAgICBhdXRvIGVycm9yID0gY3Jl
YXRlTlNFcnJvcihXS0Vycm9yVW5rbm93bik7CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCwg
ZXJyb3IuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJy
b3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3SGFuZGxlcihXZWJLaXQ6OndyYXBwZXIo
KmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAgIH0pOworfQorCistICh2b2lkKXJl
bW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIK
K3sKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XSk7
CisKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS0+cmVtb3ZlQ29udGVudEV4dGVuc2lv
bihpZGVudGlmaWVyLCBbaGFuZGxlcl0oc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgICAg
IGlmIChlcnJvcikgeworICAgICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5T
RXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgcmVh
bCBlcnJvci4KKyAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBjcmVhdGVOU0Vycm9yKFdLRXJyb3JV
bmtub3duKTsKKyAgICAgICAgICAgIHJhd0hhbmRsZXIoZXJyb3IuZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQg
KF4pKE5TRXJyb3IgKikpaGFuZGxlci5nZXQoKTsKKyAgICAgICAgcmF3SGFuZGxlcihuaWwpOwor
ICAgIH0pOwogfQogCiAjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRp
b24KQEAgLTU2LDQgKzExMSwxNSBAQCAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAogCiBAZW5k
CiAKK0BpbXBsZW1lbnRhdGlvbiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZh
dGUpCisKKy8vIEZvciB0ZXN0aW5nIG9ubHkuCisKKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRF
eHRlbnNpb25zCit7CisgICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3Vz
UmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKK30KKworQGVuZAorCiAjZW5kaWYgLy8gV0tf
QVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
SW50ZXJuYWwuaAkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpbXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKyNp
bXBvcnQgIl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgiCiAKICNpZiBXS19B
UElfRU5BQkxFRAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
UHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworQGludGVyZmFj
ZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCisKKy8vIEZvciB0ZXN0
aW5nIG9ubHkuCistICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uczsKKworQGVuZAor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEzOCw2ICsx
MTM4LDcgQEAKIAkJN0M4RUIxMTcxOERCNkExOTAwNzkxN0MyIC8qIFdLUHJlZmVyZW5jZXNQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzhF
QjExNjE4REI2QTE5MDA3OTE3QzIgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzlEMTUzNzE4NDU4NERB
MDA5RDM5MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEMTUzNjE4NDU4NERBMDA5RDM5
MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi87IH07CiAJCTdDQTI1NEVC
MTgyOTkzQ0UwMEZDOEE0MSAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0EyNTRFQTE4Mjk5
M0NFMDBGQzhBNDEgLyogV0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDQTM3OTNFMUFDMzc4
QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMzc5M0QxQUMzNzhC
MzAwNzlEQzM3IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NCMTZGRUYxNzI0
QkEyMzAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5z
YiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlzdC5k
cy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovOyB9OwogCQk3Q0IxNkZGMDE3MjRCQTI0MDA3
QTBBOTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIGluIENvcHkgUGx1
Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDQjE2RkUzMTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5w
bHVnaW4uc2IgKi87IH07CiAJCTdDQjE2RkYxMTcyNEJBMjYwMDdBMEE5NSAvKiBjb20uYXBwbGUu
V2ViS2l0LnBsdWdpbi1jb21tb24uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTQxNzI0QjlCNTAwN0Ew
QTk1IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLzsgfTsKQEAgLTExNjks
NiArMTE3MCw3IEBACiAJCTdDRTREMjIwMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRTREMjFFMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaCAqLzsgfTsKIAkJN0NFNEQyMjcxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQ
b29sTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDRTREMjI1MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1l
c3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTdDRTREMjI4MUE0OTE2QzIwMEM3RjE1MiAvKiBX
ZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Q0U0RDIyNjFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xN
ZXNzYWdlcy5oICovOyB9OworCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQgLyogQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbSAqLzsgfTsKIAkJN0NGNDdGRjYxNzI3NUI3MTAwOEFD
QjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGNDE3Mjc1QjcxMDA4QUNCOTEgLyogV0tCdW5kbGVQ
YWdlQmFubmVyLmNwcCAqLzsgfTsKIAkJN0NGNDdGRjcxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVu
ZGxlUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0NGNDdGRjUxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRjQ3RkZC
MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJh
bm5lci5oICovOyB9OwpAQCAtMzM0NSw2ICszMzQ3LDcgQEAKIAkJN0M4RUIxMTYxOERCNkExOTAw
NzkxN0MyIC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDOUQxNTM2MTg0NTg0REEwMDlEMzkxOCAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3Vw
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCcm93c2luZ0Nv
bnRleHRHcm91cEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQTI1
NEVBMTgyOTkzQ0UwMEZDOEE0MSAvKiBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0UG9saWN5
RGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NBMzc5M0QxQUMzNzhC
MzAwNzlEQzM3IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjE2RkUyMTcyNEI5QjUw
MDdBMEE5NSAvKiBjb20uYXBwbGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLmlzdC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1
Z2luLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0IxNkZFMzE3MjRCOUI1MDA3
QTBBOTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9ICJjb20uYXBwbGUuUXVpY2tUaW1lIFBsdWdpbi5wbHVnaW4uc2IiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0IxNkZFNDE3MjRCOUI1MDA3QTBBOTUgLyogY29t
LmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9ICJj
b20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzM3Nyw2ICszMzgwLDcgQEAKIAkJN0NFNEQyMUUxQTQ5MTRDQTAwQzdGMTUyIC8q
IEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDsgcGF0aCA9IFVJUHJvY2Vzcy9B
UEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKIAkJN0NFNEQyMjUxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBy
b2Nlc3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NFNEQyMjYxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0VGQTk2MDFBQzA5OTkzMDBCOTEwRkQg
LyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGNDE3Mjc1QjcxMDA4QUNC
OTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDRjQ3RkY1MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQ
YWdlQmFubmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VCYW5uZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzNDMsNiArNTM0Nyw3IEBACiAJCQkJ
N0MyNDEzMDExQUFDRkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aCAqLywKIAkJCQk3QzI0MTMwMDFBQUNGQTc1MDBBNThDMTUgLyogX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZS5tbSAqLywKIAkJCQk3QzI0MTMwNDFBQUNGQTlDMDBBNThDMTUgLyogX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggKi8sCisJCQkJN0NBMzc5M0QxQUMzNzhC
MzAwNzlEQzM3IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi8sCiAJ
CQkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLmggKi8s
CiAJCQkJN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1t
ICovLAogCQkJCTdDODlEMkJCMUE2QjBGNUIwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRl
ckludGVybmFsLmggKi8sCkBAIC01MzU1LDYgKzUzNjAsNyBAQAogCQkJCTc1QThEMkM0MTg3Q0NG
OUYwMEMzOUM5RSAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8sCiAJCQkJNzVBOEQyQzUxODdD
Q0Y5RjAwQzM5QzlFIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8sCiAJCQkJNzVBOEQyRDQx
ODdEMUMwMTAwQzM5QzlFIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovLAorCQkJ
CTdDRUZBOTYwMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Q29jb2EubW0gKi8sCiAJCQkJMUEzNjM1QUIxQTMxNDVFNTAwRUQ2MTk3IC8qIEFQSVdlYnNpdGVE
YXRhU3RvcmVDb2NvYS5tbSAqLywKIAkJCQkxQUZERTY0MzE5NTEwQjU1MDBDNDhGRkEgLyogTGVn
YWN5QnVuZGxlRm9yQ2xhc3MubW0gKi8sCiAJCQkJMzdDNEMwOEIxODE0QUM1QzAwMzY4OEI5IC8q
IFdLQmFja0ZvcndhcmRMaXN0LmggKi8sCkBAIC03ODEzLDYgKzc4MTksNyBAQAogCQkJCUJDODc4
MEZDMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTZGQjdEMzExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMUE2N0UwRDE2NUIyQTk5MDA2Q0JBNjYgLyogUGx1Z0luQXV0b1N0YXJ0
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDQTM3OTNFMUFDMzc4QjMwMDc5REMzNyAv
KiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE5RkJBOEQxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBNTZGMjkxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdp
bkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGNENCMTI1MjQwMzcwMEY3MDY3
RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtOTU5Niw2ICs5
NjAzLDcgQEAKIAkJCQkxQTBFQzkwNzEyNEMwQUI4MDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwRUM5MTAxMjRDMEFGNTAwN0VGNEE1
IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTc4NjVCOTE2Q0FDNzE1MDBBQ0U4M0EgLyogUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRUZBOTYyMUFDMDk5
OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQTJCQjZEMDE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRDkwRDMx
MjgxQzk2NjAwMUVCOTYyIC8qIFBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFBNDc5MjMxMkE1OUZEOTAwODIzNkMzIC8qIFBsdWdpblByb2Nl
c3NNYWMubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAzLTI4ICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxlc2gg
b3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMxMjMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0MkNvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW06IEFkZGVkLgorICAg
ICAgICBBZGQgdGVzdHMgZm9yIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuCisKIDIwMTUt
MDMtMjcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBbQ01ha2VdIFJlbW92ZSB1bm5lY2Vzc2FyeSBJTkNMVURFX0lGX0VYSVNUUyBtYWNybyAKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODIxMTQpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSw3IEBACiAJCTdDQ0U3RjREMUE0MTFCOUYwMDQ0N0M0QyAv
KiBSZXRhaW5QdHIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzAyOUIxQjE0ODZCMjU5MDA4MTdEQTkgLyogUmV0YWluUHRyLm1tICovOyB9OwogCQk3
Q0NFN0Y0RTFBNDExQkE0MDA0NDdDNEMgLyogUmV0YWluUHRyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDI5QjE2MTQ4NkFENjQwMDgxN0RBOSAv
KiBSZXRhaW5QdHIuY3BwICovOyB9OwogCQk3Q0NFN0Y0RjFBNDExQkE0MDA0NDdDNEMgLyogUmV0
YWluUHRySGFzaGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMDk5MUM1MDE0M0M3RDY4MDA3OTk4RjIgLyogUmV0YWluUHRySGFzaGluZy5jcHAg
Ki87IH07CisJCTdDRUZBOTY2MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUubW0gKi87IH07CiAJCTdDRkJDQUU1MTc0MzIzOEYwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NG
QkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1bmRsZS5jcHAgKi87IH07CiAJCTkz
MEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzBBRDQwMTE1MDY5OEIz
MDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi87IH07CiAJCTkzNjEwMDI5MTREQzk1QTcw
MDYxMzc5RCAvKiBsb3RzLW9mLWlmcmFtZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzYxMDAyODE0REM5NTdCMDA2MTM3OUQgLyog
bG90cy1vZi1pZnJhbWVzLmh0bWwgKi87IH07CkBAIC01MzMsNiArNTM0LDcgQEAKIAkJN0NDM0Ux
RkExOTdFMjM0MTAwQkU2MjUyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVzZXJDb250ZW50Q29udHJvbGxlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NDRTdFOEMxQTQxMTQ0RTAwNDQ3QzRDIC8q
IGxpYlRlc3RXZWJLaXRBUEkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliVGVz
dFdlYktpdEFQSS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3Q0NF
N0VBMzFBNDExNUNCMDA0NDdDNEMgLyogVGVzdFdlYktpdEFQSUxpYnJhcnkueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gVGVzdFdlYktpdEFQSUxpYnJhcnkueGNjb25maWc7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NGQkNBREQxNzQzMjM0RjAwQjJCRkNGIC8qIFdpbGxMb2FkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxMb2FkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0NGQkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxMb2FkX0J1
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9hZF9C
dW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUI1MDE5MjE0MEYyMzIz
MDBEOUVCNTggLyogU3RyaW5nQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTgwNSw2ICs4MDcsNyBAQAogCQkxQUJDM0RFQzE4OTlCRTU1MDA0RjA2MjYgLyogV2ViS2l0
MiBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
N0NFRkE5NjQxQUMwQjlFMjAwQjkxMEZEIC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUu
bW0gKi8sCiAJCQkJQTFBNEZFNUQxOEREM0RCNzAwQjVFQThBIC8qIERvd25sb2FkLm1tICovLAog
CQkJCTFBQkMzREVEMTg5OUJFNkQwMDRGMDYyNiAvKiBOYXZpZ2F0aW9uLm1tICovLAogCQkJCUNF
QTZDRjIyMTlDQ0Y1QkQwMDY0RjVBNyAvKiBPcGVuQW5kQ2xvc2VXaW5kb3cubW0gKi8sCkBAIC0x
NDA0LDYgKzE0MDcsNyBAQAogCQkJCTdDQ0U3RjIzMUE0MTFBRjYwMDQ0N0M0QyAvKiBEb3dubG9h
ZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUVFMUE0MTFBRTYwMDQ0N0M0QyAvKiBEb3du
bG9hZERlY2lkZURlc3RpbmF0aW9uQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdF
QkUxQTQxMUE3RTAwNDQ3QzRDIC8qIER5bmFtaWNEZXZpY2VTY2FsZUZhY3Rvci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTdDRUZBOTY2MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRTAxQTQxMUE5QTAwNDQ3
QzRDIC8qIEVkaXRvckNvbW1hbmRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQkYxQTQx
MUE3RTAwNDQ3QzRDIC8qIEVsZW1lbnRBdFBvaW50SW5XZWJGcmFtZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RUVGMUE0MTFBRTYwMDQ0N0M0QyAvKiBFcGhlbWVyYWxTZXNzaW9uUHVzaFN0
YXRlTm9IaXN0b3J5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDApCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpZiBX
S19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAi
VGVzdC5oIgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlckNvbnRlbnRGaWx0ZXIuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworY2xhc3MgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNl
dFVwKCkKKyAgICB7CisgICAgICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAgfQorfTsKKworc3Rh
dGljIE5TU3RyaW5nICpiYXNpY0ZpbHRlciA9IEAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifX1dIjsK
KworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBDb21waWxlKQorewor
ICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFz
aWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVy
LCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVy
KTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21waWxpbmcg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBp
bGluZyk7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqaW52YWxpZEZpbHRlciA9IEAiWyI7CisKK1RF
U1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgSW52YWxpZEV4dGVuc2lvbikK
K3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5z
aW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9u
OmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAq
ZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTlVMTChmaWx0
ZXIpOworICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVDb21w
aWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUNvbXBpbGluZyk7Cit9CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVz
dCwgTG9va3VwKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Cisg
ICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRl
bnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVu
dEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1Rf
Tk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAg
IGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9
IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVd
IGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29t
cGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICpl
cnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAg
RVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tpbmdVcCk7Cit9CisK
K1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVu
dGlmaWVyTG9va3VwKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7
CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va3Vw
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25I
YW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsK
KyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9O
VUxMKGVycm9yKTsKKworICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKKyAgICB9XTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOworfQorCitURVNUX0Yo
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIFJlbW92YWwpCit7CisgICAgX19ibG9j
ayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZp
ZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBj
b21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgCisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOworICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKKwor
ICAgIF9fYmxvY2sgYm9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAq
ZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVSZW1v
dmluZyA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
UmVtb3ZpbmcpOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3Qs
IE5vbkV4aXN0aW5nSWRlbnRpZmllclJlbW92ZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJl
bW92aW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhp
c3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249668</attachid>
            <date>2015-03-28 13:15:03 -0700</date>
            <delta_ts>2015-03-28 13:16:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143123-20150328131423.patch</filename>
            <type>text/plain</type>
            <size>90596</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAzLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxl
c2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSB2YXJpYW50IG9mIGdldEZpbGVT
aXplKCkgdGhhdCB0YWtlcyBhIFBsYXRmb3JtRmlsZUhhbmRsZS4KKyAgICAgICAgLSBBZGRzIGEg
bmV3IGZpbGUgc3lzdGVtIGZ1bmN0aW9uLCByZW5hbWUoKSB3aGljaCBvcGVyYXRlcyBhcyB0aGUg
UE9TSVgKKyAgICAgICAgICByZW5hbWUgZnVuY3Rpb24gZG9lcy4KKworICAgICAgICAqIHBsYXRm
b3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVuYW1lRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIEFk
ZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW5h
bWVGaWxlKToKKyAgICAgICAgQWRkIHN0dWJzLgorCiAyMDE1LTAzLTI4ICBKb29uZ2h1biBQYXJr
ICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBudWxscHRyIGNsZWFudXAgaW4g
SW5saW5lRm9vQm94IGNsYXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw5IEBAIHN0cnVjdCBGaWxlTWV0YWRh
dGE7CiBXRUJDT1JFX0VYUE9SVCBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiBXRUJD
T1JFX0VYUE9SVCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworV0VCQ09SRV9FWFBP
UlQgYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBu
ZXdQYXRoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwg
bG9uZyBsb25nJiByZXN1bHQpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlU2l6ZShQbGF0
Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90JiByZXN1bHQpOwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlQ3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRp
bWVfdCYgcmVzdWx0KTsgLy8gTm90IGFsbCBwbGF0Zm9ybXMgc3RvcmUgZmlsZSBjcmVhdGlvbiB0
aW1lLgogYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiwgRmlsZU1ldGFkYXRhJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3Bw
CShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5
c3RlbUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAj
aW5jbHVkZSA8Z2xpYi5oPgpAQCAtMTEwLDYgKzExMSwxMiBAQCBib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgCiAgICAgcmV0dXJuIGZpbGVuYW1lID8gZ19ybWRpcihmaWxl
bmFtZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsKIH0KIAorYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0
aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5h
bWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKQEAgLTEyOSw2ICsxMzYsMTIgQEAgYm9vbCBn
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBnZXRGaWxl
Q3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCiB7CiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgd2F5IHRvIHJldHJpZXZlIGZpbGUgY3JlYXRpb24gdGltZSB3aXRoIEd0ayBvbiBw
bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0PwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw2ICs3MSwxOSBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKK2Jvb2wgcmVuYW1l
RmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAg
ICBDU3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRo
KTsKKyAgICBpZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0aEZzUmVwLmRhdGEoKVsw
XSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIG5ld1BhdGhG
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKKyAgICBpZiAoIW5ld1Bh
dGhGc1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgp
LCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKK30KKwogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4Myw2ICsxOTYsMTYg
QEAgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxv
bmcgbG9uZyYgcmVzdWx0KQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChm
c3RhdChoYW5kbGUsICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IGZpbGVJbmZvLnN0X3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgZ2V0
RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewog
I2lmIE9TKERBUldJTikgfHwgT1MoT1BFTkJTRCkgfHwgT1MoTkVUQlNEKSB8fCBPUyhGUkVFQlNE
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMiBAQCBib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uCiAgICAgcmV0dXJuIGdldEZpbGVTaXplRnJv
bUZpbmREYXRhKGZpbmREYXRhLCBzaXplKTsKIH0KIAorYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3Ry
aW5nJiBwYXRoLCB0aW1lX3QmIHRpbWUpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0
YTsKQEAgLTE1NCw2ICsxNjAsMTIgQEAgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBT
dHJpbmcmIAogICAgIHJldHVybiAhIVJlbW92ZURpcmVjdG9yeVcoZmlsZW5hbWUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwogfQogCitib29sIHJlbmFtZUZpbGUoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxV
Q2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkz
IEBACisyMDE1LTAzLTI4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxlc2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMx
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21Db21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YTo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk6CisgICAgICAgIFN3aXRjaCB0
aGUgb3JkZXIgaW4gbWVtb3J5IG9mIGFjdGlvbnMgYW5kIGJ5dGVjb2RlIChhbmQgc3dpdGNoIHRo
ZSBvcmRlciBvZiB0aGUKKyAgICAgICAgdmFyaWFibGVzIGFzIHdlbGwsIHRvIGtlZXAgaXQgY2xl
YXIpLiBUaGlzIHdpbGwgYmVjb21lIG5lY2Vzc2FyeSB3aGVuIHN0cmVhbWluZworICAgICAgICB0
aGUgZGF0YSB0byBkaXNrLCBhcyBhY3Rpb25zIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgYnl0ZWNv
ZGUgYW5kIHdlIHdvdWxkIGhhdmUgdG8ga2VlcCB0aGVtCisgICAgICAgIGluIG1lbW9yeSB1bnRp
bCB0aGUgYnl0ZWNvZGUgd2FzIGZpbmlzaGVkIGNvbXBpbGluZyBpZiB0aGV5IGRpZG4ndCBjb21l
IGJlZm9yZSBpbiB0aGUgZmlsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIEFkZCBhY2Nlc3NvciBmb3IgdGhlIHBy
b2Nlc3NlcyBkZWZhdWx0IHNoYXJlZCBzdG9yZS4KKworICAgICAgICAoQVBJOjpjb25zdHJ1Y3Rl
ZFBhdGgpOgorICAgICAgICBIZWxwZXIgZm9yIGNvbnN0cnVjdGluZyB0aGUgcGF0aCB0byBhIGZp
bGUgaW4gdGhlIHN0b3JlIGJhc2VkIG9uIGlkZW50aWZpZXIuCisKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgSGVscGVycyBmb3IgZW5jb2RpbmcvZGVjb2Rp
bmcgdGhlIGZpbGUgbWV0YWRhdGEgKHZlcnNpb24sIGJ5dGVjb2RlIHNpemUsIGFjdGlvbnMgc2l6
ZSkuCisKKyAgICAgICAgKEFQSTo6b3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24pOgorICAgICAg
ICBIZWxwZXIgdG8gb3BlbiBhbmQgbWFwIGEgZmlsZWQgYmFjayBjb250ZW50IGV4dGVuc2lvbi4K
KworICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICBIZWxwZXIgdG8gd3Jp
dGUgYSBEYXRhIG9iamVjdCB0byBhIGZpbGUuCisKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0Zp
bGUpOgorICAgICAgICBIZWxwZXIgdG8gcnVuIHRoZSBjb250ZW50IGV4dGVuc2lvbiBjb21waWxl
ciBhbmQgd3JpdGUgaXQgdG8gZGlzay4gSXQgZmlyc3QKKyAgICAgICAgd3JpdGVzIGl0IHRvIGEg
dGVtcG9yYXJ5IGZpbGUgYW5kIHRoZW4gZG9lcyBhbiBhdG9taWMgcmVuYW1lIG9wZXJhdGlvbiB0
byBwdXQKKyAgICAgICAgdGhlIGZpbGUgaW4gdGhlIGZpbmFsIGxvY2F0aW9uLiBEb2luZyB0aGlz
IG1lYW5zIHRoYXQgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlcyB3aGlsZQorICAgICAgICB0aGUgY29t
cGlsZSBpcyB0YWtpbmcgcGxhY2UsIHRoZSBwYXJ0aWFsbHkgd3JpdHRlbiBmaWxlIHdvbid0IGVu
ZCB1cCBpbiB0aGUgY2FjaGUsIAorICAgICAgICBidXQgcmF0aGVyLCB3aWxsIGJlIGNsZWFuZWQg
dXAgYnkgdGhlIE9TLgorIAorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Ojpsb29rdXBDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGxv
b2t1cCBhbiBleHRlbnNpb24gdGhhdCBoYXMgYmVlbiBjb21waWxlZCB0byBkaXNrLiBPbiBhIGJh
Y2tncm91bmQgcXVldWUsCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIG9wZW4gYW5kIG1hcCB0aGUg
ZXh0ZW5zaW9uIChiYXNlZCBvbiB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCByZXR1cm4g
aXQKKyAgICAgICAgdG8gdGhlIGNhbGxlciB2aWEgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKyAgICAgICAgCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGNv
bXBpbGUgYW4gZXh0ZW5zaW9uIGFuZCB3cml0ZSBpdCB0byBzdG9yZS4gT24gYSBiYWNrZ3JvdW5k
IHF1ZXVlLCBpdCAKKyAgICAgICAgY29tcGlsZXMgdGhlIGZpbGUgdG8gZGlzayBhbmQgaWYgc3Vj
Y2Vzc2Z1bCwgcmV0dXJucyB0aGUgbWVtb3J5IG1hcHBlZCBkYXRhIHZpYSB0aGUgY2FsbGJhY2sK
KyAgICAgICAgZnVuY3Rpb24gcGFzc2VkIGluLgorCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICBBUEkgZW50
cnkgcG9pbnQgdG8gcmVtb3ZlIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBzdG9yZS4gT24gYSBiYWNr
Z3JvdW5kIHF1ZXVlLCBpdCAKKyAgICAgICAgdW5saW5rcyB0aGUgZXh0ZW5zaW9uIChiYXNlZCBv
biB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCB0ZWxscyB0aGUgY2FsbGVyIGl0IGNvbXBs
ZXRlZAorICAgICAgICB0aGUgYWN0aW9uIHZpYWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKworICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgSGVscGVyIGZvciB0ZXN0
aW5nIHdoaWNoIHN5bmNocm9ub3VzbHkgdW5saW5rcyBhbGwgdGhlIGZpbGVzIGluIHRoZSBzdG9y
ZS4KKworICAgICAgICAoQVBJOjp1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29y
eSk6CisgICAgICAgIHN0ZDo6ZXJyb3JfY29kZSBhZGFwdG9yIGZvciBzb21lIGdlbmVyaWMgZXJy
b3JzIHRoYXQgY2FuIGhhcHBlbiBpbiB0aGUgc3RvcmUuIFdlIHdpbGwgd2FudAorICAgICAgICB0
byBmbGVzaCB0aGVzZSBvdXQgZnVydGhlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCk6CisgICAg
ICAgIEhlbHBlciB0byBnZXQgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHBhdGggZm9yIHRoZSBzdG9y
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVSZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlwZUlE
KToKKyAgICAgICAgQWRkIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpIGd1YXJkcy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWFsbG9j
XSk6CisgICAgICAgICgrW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxv
b2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGluaXRdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIFNQSSB3cmFwcGVycyBm
b3IgdGhlIHN0b3JlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDE1LTAzLTI3ICBHd2FuZyBZb29uIEh3
YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXhNYXBdIFNlcGVyYXRlIEJpdG1h
cFRleHR1cmUgcmVsYXRlZCBjbGFzc2VzIGltcGxlbWVudGF0aW9ucyBmcm9tIFRleHR1cmVNYXBw
ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTUgKzQ5LDE1IEBAIHZvaWQgTGVnYWN5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2wK
IFJlZjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlRnJvbUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoY29uc3QgV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGNvbXBp
bGVyRGF0YSkKIHsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpICsgY29tcGlsZXJE
YXRhLmFjdGlvbnMuc2l6ZSgpKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJl
ZE1lbW9yeS0+ZGF0YSgpKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGlsZXJE
YXRhLmJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFy
ZWRNZW1vcnktPmRhdGEoKSkgKyBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpLCBjb21waWxl
ckRhdGEuYWN0aW9ucy5kYXRhKCksIGNvbXBpbGVyRGF0YS5hY3Rpb25zLnNpemUoKSk7CisgICAg
bWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFyZWRNZW1vcnktPmRhdGEoKSksIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLmRhdGEoKSwgY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLnNpemUoKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGls
ZXJEYXRhLmJ5dGVjb2RlLnNpemUoKSk7CiAKICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGRhdGE7CiAgICAgZGF0YS5kYXRhID0gV1RGOjptb3ZlKHNoYXJlZE1lbW9yeSk7Ci0g
ICAgZGF0YS5ieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgZGF0YS5ieXRlY29kZVNpemUgPSBjb21w
aWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwotICAgIGRhdGEuYWN0aW9uc09mZnNldCA9IGNvbXBp
bGVyRGF0YS5ieXRlY29kZS5zaXplKCk7CisgICAgZGF0YS5hY3Rpb25zT2Zmc2V0ID0gMDsKICAg
ICBkYXRhLmFjdGlvbnNTaXplID0gY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpOworICAgIGRh
dGEuYnl0ZWNvZGVPZmZzZXQgPSBjb21waWxlckRhdGEuYWN0aW9ucy5zaXplKCk7CisgICAgZGF0
YS5ieXRlY29kZVNpemUgPSBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwogCiAgICAgcmV0
dXJuIGNyZWF0ZShXVEY6Om1vdmUoZGF0YSkpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAko
cmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAg
dm9pZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbgogICAgIGRhdGEtPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwogICAgIGVuY29kZXIgPDwg
aGFuZGxlOwogCi0gICAgZW5jb2RlciA8PCBieXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVyIDw8
IGJ5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CiAgICAgZW5jb2Rl
ciA8PCBhY3Rpb25zU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGJ5dGVjb2RlT2Zmc2V0OworICAgIGVu
Y29kZXIgPDwgYnl0ZWNvZGVTaXplOwogfQogCiBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkKQEAg
LTUxLDE1ICs1MSwxNCBAQCBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmRhdGEgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFj
dGlvbnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaAkocmV2aXNpb24gMTgyMTE0KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gZGF0YSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2Rl
U2l6ZSwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUpCisgICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRh
LCB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgOiBkYXRhKGRh
dGEpCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICwg
Ynl0ZWNvZGVTaXplKGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgLCBhY3Rpb25zT2Zmc2V0KGFjdGlv
bnNPZmZzZXQpCiAgICAgICAgICwgYWN0aW9uc1NpemUoYWN0aW9uc1NpemUpCisgICAgICAgICwg
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgYnl0ZWNvZGVTaXplKGJ5
dGVjb2RlU2l6ZSkKICAgICB7CiAgICAgfQogCkBAIC01NywxMCArNTcsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEmKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGRhdGE7
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgYnl0ZWNv
ZGVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQgeyAwIH07CiAgICAgdW5z
aWduZWQgYWN0aW9uc1NpemUgeyAwIH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAw
IH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVTaXplIHsgMCB9OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw5ICsyNiw0MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUg
IldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKKwogbmFtZXNwYWNlIEFQ
SSB7CiAKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OmRlZmF1bHRTdG9yZSgpCit7CisgICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
KS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpkZWZhdWx0U3RvcmU7Cit9CisKIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQorICAgIDogVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCit7Cit9CisKK1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpT
dHJpbmcmIHN0b3JlUGF0aCkKKyAgICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKKyAgICAsIG1f
Y29tcGlsZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IENvbXBpbGUgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQorICAgICwgbV9y
ZWFkUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVh
ZCBRdWV1ZSIpKQorICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBSZW1vdmUgUXVldWUiKSkKIHsKIH0KIApAQCAtMzYsNCArNjks
Mjg5IEBAIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Vc2VyQ29udGVudEUKIHsKIH0KIAor
c3RhdGljIFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVuc2lvbi0iICsgV2ViQ29yZTo6ZW5jb2RlRm9y
RmlsZU5hbWUoaWRlbnRpZmllcikpOworfQorCitzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9uOworICAgIHVpbnQ2NF90IGFjdGlvbnNPZmZzZXQ7
CisgICAgdWludDY0X3QgYWN0aW9uc1NpemU7CisgICAgdWludDY0X3QgYnl0ZWNvZGVPZmZzZXQ7
CisgICAgdWludDY0X3QgYnl0ZWNvZGVTaXplOworfTsKKworc3RhdGljIERhdGEgZW5jb2RlQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0
YURhdGEpCit7CisgICAgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXIgZW5jb2RlcjsKKwor
ICAgIGVuY29kZXIgPDwgbWV0YURhdGEudmVyc2lvbjsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRh
LmFjdGlvbnNTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYnl0ZWNvZGVTaXplOworCisg
ICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwor
fQorCitzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCit7CisgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1
Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAg
ICAgICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVv
dXMgbWVtb3J5IHNlZ21lbnQgc28gdGhlIHNpemUKKyAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBh
cHBsaWVyIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIGRhdGEgc2l6ZS4KKyAgICAgICAgaWYgKHNp
emUgIT0gZmlsZURhdGEuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lvbikpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0
aW9uc1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQgPSBkZWNvZGVyLmN1cnJlbnRPZmZz
ZXQoKTsKKyAgICAgICAgbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQgPSBtZXRhRGF0YS5hY3Rpb25z
T2Zmc2V0ICsgbWV0YURhdGEuYWN0aW9uc1NpemU7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisK
K3N0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0
aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCit7
CisgICAgYXV0byBmZCA9IFdlYkNvcmU6Om9wZW5GaWxlKHBhdGgsIFdlYkNvcmU6Ok9wZW5Gb3JS
ZWFkKTsKKyAgICBpZiAoZmQgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAg
ICBpZiAoIVdlYkNvcmU6OmdldEZpbGVTaXplKGZkLCBmaWxlU2l6ZSkpIHsKKyAgICAgICAgV2Vi
Q29yZTo6Y2xvc2VGaWxlKGZkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGZpbGVEYXRhID0gbWFwRmlsZShmZCwgMCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaWxlU2l6ZSkp
OworICAgIFdlYkNvcmU6OmNsb3NlRmlsZShmZCk7CisKKyAgICBpZiAoZmlsZURhdGEuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2RlQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoRGF0
YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIGlmIChXZWJDb3JlOjp3cml0
ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRhdGEsIHNpemUpID09IC0xKSB7CisgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHN1Y2Nlc3M7
Cit9CisKK3N0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoY29uc3QgU3RyaW5n
JiBqc29uLCBjb25zdCBTdHJpbmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRh
RGF0YSYgbWV0YURhdGEsIERhdGEmIG1hcHBlZERhdGEpCit7CisgICAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOworCisgICAgY2xhc3MgQ29tcGlsYXRpb25DbGll
bnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIENvbXBpbGF0aW9uQ2xpZW50KERhdGEmIGJ5dGVjb2RlRGF0YSwg
RGF0YSYgYWN0aW9uc0RhdGEpCisgICAgICAgICAgICA6IG1fYnl0ZWNvZGVEYXRhKGJ5dGVjb2Rl
RGF0YSkKKyAgICAgICAgICAgICwgbV9hY3Rpb25zRGF0YShhY3Rpb25zRGF0YSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNvZGUoVmVjdG9y
PERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J5dGVjb2RlRGF0YSA9IERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkp
OworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8
U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9hY3Rpb25zRGF0YSA9IERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6
ZSgpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRGF0YSYgbV9ieXRlY29k
ZURhdGE7CisgICAgICAgIERhdGEmIG1fYWN0aW9uc0RhdGE7CisgICAgfTsKKworICAgIERhdGEg
Ynl0ZWNvZGU7CisgICAgRGF0YSBhY3Rpb25zOworICAgIENvbXBpbGF0aW9uQ2xpZW50IGNvbXBp
bGF0aW9uQ2xpZW50KGJ5dGVjb2RlLCBhY3Rpb25zKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNv
cGllcyB0aGUgZGF0YS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGJlIHBhc3NpbmcgYW4gaW50ZXJmYWNl
CisgICAgLy8gdG8gdGhlIGNvbXBpbGVyIHRoYXQgY2FuIHdyaXRlIGRpcmVjdGx5IHRvIGEgZmls
ZS4KKworICAgIGF1dG8gY29tcGlsZXJFcnJvciA9IGNvbXBpbGVSdWxlTGlzdChjb21waWxhdGlv
bkNsaWVudCwganNvbik7CisgICAgaWYgKGNvbXBpbGVyRXJyb3IpCisgICAgICAgIHJldHVybiBj
b21waWxlckVycm9yOworCisgICAgYXV0byBhY3Rpb25zQW5kQnl0ZWNvZGUgPSBjb25jYXRlbmF0
ZShhY3Rpb25zLCBieXRlY29kZSk7CisKKyAgICBtZXRhRGF0YS52ZXJzaW9uID0gMTsKKyAgICBt
ZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IGFjdGlvbnMuc2l6ZSgpOworICAgIG1ldGFEYXRhLmJ5dGVj
b2RlU2l6ZSA9IGJ5dGVjb2RlLnNpemUoKTsKKworICAgIGF1dG8gZW5jb2RlZE1ldGFEYXRhID0g
ZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1ldGFEYXRhKTsKKworICAgIG1ldGFEYXRh
LmFjdGlvbnNPZmZzZXQgPSBlbmNvZGVkTWV0YURhdGEuc2l6ZSgpOworICAgIG1ldGFEYXRhLmJ5
dGVjb2RlT2Zmc2V0ID0gZW5jb2RlZE1ldGFEYXRhLnNpemUoKSArIG1ldGFEYXRhLmFjdGlvbnNT
aXplOworCisgICAgYXV0byBkYXRhID0gY29uY2F0ZW5hdGUoZW5jb2RlZE1ldGFEYXRhLCBhY3Rp
b25zQW5kQnl0ZWNvZGUpOworICAgIGF1dG8gZGF0YVNpemUgPSBkYXRhLnNpemUoKTsKKworICAg
IEFTU0VSVChtZXRhRGF0YS5hY3Rpb25zT2Zmc2V0ICsgbWV0YURhdGEuYWN0aW9uc1NpemUgKyBt
ZXRhRGF0YS5ieXRlY29kZVNpemUgPT0gZGF0YVNpemUpOworCisgICAgYXV0byB0ZW1wb3JhcnlG
aWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBTdHJp
bmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVu
dEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgIGlmICh0ZW1wb3JhcnlGaWxl
SGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJl
dHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKwor
ICAgIGlmICghd3JpdGVEYXRhVG9GaWxlKGRhdGEsIHRlbXBvcmFyeUZpbGVIYW5kbGUpKSB7Cisg
ICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAg
cmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwor
ICAgIH0KKworICAgIG1hcHBlZERhdGEgPSBtYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAs
IGRhdGFTaXplKTsKKyAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7
CisKKyAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgaWYgKCFXZWJD
b3JlOjpyZW5hbWVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKKyAgICAg
ICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKK3sKKyAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVh
dGVGcm9tVk1CdWZmZXIoY29uc3RfY2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmls
ZURhdGEuc2l6ZSgpKTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgPSBX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoCisgICAgICAgIHNoYXJlZE1l
bW9yeSwKKyAgICAgICAgbWV0YURhdGEuYWN0aW9uc09mZnNldCwKKyAgICAgICAgbWV0YURhdGEu
YWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBt
ZXRhRGF0YS5ieXRlY29kZVNpemUKKyAgICApOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6
Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkpOworICAgIHJldHVybiBBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwgV1RGOjptb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbikpOworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIHN0
ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6
ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFJlZlB0cjxVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlPiBzZWxmKHRoaXMpOworICAgIFN0cmluZ0NhcHR1cmUgaWRlbnRpZmll
ckNhcHR1cmUoaWRlbnRpZmllcik7CisgICAgU3RyaW5nQ2FwdHVyZSBwYXRoQ2FwdHVyZShtX3N0
b3JlUGF0aCk7CisKKyAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3NlbGYsIGlkZW50aWZpZXJD
YXB0dXJlLCBwYXRoQ2FwdHVyZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgYXV0byBw
YXRoID0gY29uc3RydWN0ZWRQYXRoKHBhdGhDYXB0dXJlLnN0cmluZygpLCBpZGVudGlmaWVyQ2Fw
dHVyZS5zdHJpbmcoKSk7CisgICAgICAgIAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURh
dGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURhdGE7CisgICAgICAgIGlmICghb3BlbkFu
ZE1hcENvbnRlbnRFeHRlbnNpb24ocGF0aCwgbWV0YURhdGEsIGZpbGVEYXRhKSkgeworICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0g
eworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpMb29r
dXBGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgaWRl
bnRpZmllckNhcHR1cmUsIGZpbGVEYXRhLCBtZXRhRGF0YSwgY29tcGxldGlvbkhhbmRsZXJdIHsK
KyAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVu
dEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyQ2FwdHVyZS5zdHJpbmcoKSwg
bWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJD
b250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBX
VEY6OlN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgV1RGOjpTdHJpbmcmIGpzb24sIHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3Jf
Y29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFJlZlB0cjxVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlPiBzZWxmKHRoaXMpOworICAgIFN0cmluZ0NhcHR1cmUgaWRlbnRpZmllckNhcHR1
cmUoaWRlbnRpZmllcik7CisgICAgU3RyaW5nQ2FwdHVyZSBqc29uQ2FwdHVyZShqc29uKTsKKyAg
ICBTdHJpbmdDYXB0dXJlIHBhdGhDYXB0dXJlKG1fc3RvcmVQYXRoKTsKKworICAgIG1fY29tcGls
ZVF1ZXVlLT5kaXNwYXRjaChbc2VsZiwgaWRlbnRpZmllckNhcHR1cmUsIGpzb25DYXB0dXJlLCBw
YXRoQ2FwdHVyZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29u
c3RydWN0ZWRQYXRoKHBhdGhDYXB0dXJlLnN0cmluZygpLCBpZGVudGlmaWVyQ2FwdHVyZS5zdHJp
bmcoKSk7CisKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAg
ICAgICBEYXRhIGZpbGVEYXRhOworICAgICAgICBhdXRvIGVycm9yID0gY29tcGlsZWRUb0ZpbGUo
anNvbkNhcHR1cmUuc3RyaW5nKCksIHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSk7CisgICAgICAg
IGlmIChlcnJvcikgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxm
LCBlcnJvciwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyLCBlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2Vs
ZiwgaWRlbnRpZmllckNhcHR1cmUsIGZpbGVEYXRhLCBtZXRhRGF0YSwgY29tcGxldGlvbkhhbmRs
ZXJdIHsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2Vy
Q29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyQ2FwdHVyZS5zdHJp
bmcoKSwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjplcnJv
cl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgUmVmUHRyPFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU+IHNlbGYodGhpcyk7CisgICAgU3RyaW5nQ2FwdHVyZSBpZGVudGlmaWVyQ2Fw
dHVyZShpZGVudGlmaWVyKTsKKyAgICBTdHJpbmdDYXB0dXJlIHBhdGhDYXB0dXJlKG1fc3RvcmVQ
YXRoKTsKKworICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtzZWxmLCBpZGVudGlmaWVyQ2Fw
dHVyZSwgcGF0aENhcHR1cmUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgIGF1dG8gcGF0
aCA9IGNvbnN0cnVjdGVkUGF0aChwYXRoQ2FwdHVyZS5zdHJpbmcoKSwgaWRlbnRpZmllckNhcHR1
cmUuc3RyaW5nKCkpOworCisgICAgICAgIGlmICghV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKSkg
eworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBjb21wbGV0aW9u
SGFuZGxlcl0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEVycm9yOjpSZW1v
dmVGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGNvbXBsZXRpb25I
YW5kbGVyXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHBhdGggOiBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KG1fc3RvcmVQYXRoLCAiKiIpKQorICAgICAg
ICBXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpOworfQorCitjb25zdCBzdGQ6OmVycm9yX2NhdGVn
b3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpCit7CisgICAgY2xh
c3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjpl
cnJvcl9jYXRlZ29yeSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2Vw
dCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gInVzZXIgY29udGVudCBl
eHRlbnNpb24gc3RvcmUiOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmlu
ZyBtZXNzYWdlKGludCBlcnJvckNvZGUpIGNvbnN0IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I+KGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3Bl
Y2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIjsKKyAgICAgICAgICAgIGNhc2UgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgY29tcGlsZS4iOworICAgICAgICAgICAg
Y2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5Owor
ICAgIHJldHVybiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgQVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxNiArMjYsNjIgQEAKICNpZm5kZWYgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZV9oCiAjZGVmaW5lIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVfaAogCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1
ZGUgPHN5c3RlbV9lcnJvcj4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBXb3JrUXVldWU7Cit9CiAKIG5hbWVzcGFjZSBBUEkgewogCitj
bGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbjsKKwogY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZT4gewogcHVibGljOgorICAgIGVudW0gY2xhc3MgRXJyb3IgeworICAgICAg
ICBMb29rdXBGYWlsZWQgPSAxLAorICAgICAgICBDb21waWxlRmFpbGVkLAorICAgICAgICBSZW1v
dmVGYWlsZWQKKyAgICB9OworCisgICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IGRlZmF1bHRTdG9yZSgpOworCiAgICAgZXhwbGljaXQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSgpOworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpT
dHJpbmcmIHN0b3JlUGF0aCk7CiAgICAgdmlydHVhbCB+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSgpOworCisgICAgdm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwgY29uc3QgV1RGOjpTdHJpbmcmIGpzb24sIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsK
KyAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lv
bj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OmVy
cm9yX2NvZGUpPik7CisKKyAgICAvLyBGb3IgdGVzdGluZyBvbmx5LgorICAgIHZvaWQgc3luY2hy
b25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworCitwcml2YXRlOgorICAgIFdURjo6
U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKKworICAgIGNvbnN0IFdURjo6U3RyaW5nIG1fc3Rv
cmVQYXRoOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7CisgICAgUmVm
PFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1f
cmVtb3ZlUXVldWU7CiB9OwogCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOworCitpbmxpbmUgc3RkOjplcnJvcl9jb2Rl
IG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJvcikK
K3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBBUEkKIAor
bmFtZXNwYWNlIHN0ZCB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVt
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVibGljIHRydWVfdHlw
ZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogI2VuZGlm
IC8vIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVfaApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZi5jcHAJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw1ICszMyw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVHlw
ZUlEIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUdldFR5cGVJRCgpCiB7CisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICByZXR1cm4gdG9BUEkoQVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpBUElUeXBlKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
CisjaW5jbHVkZSAiU2FuZGJveFV0aWxpdGllcy5oIgorCituYW1lc3BhY2UgQVBJIHsKKworU3Ry
aW5nIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZVBhdGgoKQoreworICAg
IHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIHN0YXRpYyBOU1VSTCAqY29u
dGVudEV4dGVuc2lvblN0b3JlVVJMOworCisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBe
eworICAgICAgICBOU1VSTCAqdXJsID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBV
UkxGb3JEaXJlY3Rvcnk6TlNMaWJyYXJ5RGlyZWN0b3J5IGluRG9tYWluOk5TVXNlckRvbWFpbk1h
c2sgYXBwcm9wcmlhdGVGb3JVUkw6bnVsbHB0ciBjcmVhdGU6Tk8gZXJyb3I6bnVsbHB0cl07Cisg
ICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKworICAgICAgICB1cmwgPSBbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIldl
YktpdCIgaXNEaXJlY3Rvcnk6WUVTXTsKKworICAgICAgICBpZiAoIVdlYktpdDo6cHJvY2Vzc0hh
c0NvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllciA9
IFtOU0J1bmRsZSBtYWluQnVuZGxlXS5idW5kbGVJZGVudGlmaWVyOworICAgICAgICAgICAgaWYg
KCFidW5kbGVJZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIGJ1bmRsZUlkZW50aWZpZXIgPSBb
TlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10ucHJvY2Vzc05hbWU7CisgICAgICAgICAgICB1cmwg
PSBbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpidW5kbGVJZGVudGlmaWVyIGlzRGly
ZWN0b3J5OllFU107CisgICAgICAgIH0KKworICAgICAgICBjb250ZW50RXh0ZW5zaW9uU3RvcmVV
UkwgPSBbW3VybCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50RXh0ZW5zaW9u
cyIgaXNEaXJlY3Rvcnk6WUVTXSByZXRhaW5dOworICAgIH0pOworCisgICAgaWYgKCFbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOmNvbnRlbnRFeHRl
bnNpb25TdG9yZVVSTCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6
bmlsIGVycm9yOm51bGxwdHJdKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
ZGlyZWN0b3J5ICVAIiwgY29udGVudEV4dGVuc2lvblN0b3JlVVJMKTsKKworICAgIHJldHVybiBj
b250ZW50RXh0ZW5zaW9uU3RvcmVVUkwuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVtUmVwcmVz
ZW50YXRpb247Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
CShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSAr
MjcsMTcgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKK0BjbGFzcyBfV0tVc2VyQ29udGVudEZp
bHRlcjsKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpCiBAaW50
ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAogCisrIChpbnN0
YW5jZXR5cGUpZGVmYXVsdFN0b3JlOworCistICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5z
aW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyOworLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29u
dGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwor
CiBAZW5kCiAKICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwyMyArMjgsNzggQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKKyNp
bXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJ
bnRlcm5hbC5oIgorCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdAorLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgX3VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CiAKLSAgICBB
UEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4oc2VsZik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQogCi0gICAgcmV0dXJuIHNlbGY7
CisrIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlCit7CisgICAgcmV0dXJuIFdlYktpdDo6d3Jh
cHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKIH0K
IAotLSAodm9pZClkZWFsbG9jCistICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihO
U1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKCk7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIg
Y29weV0pOwogCi0gICAgW3N1cGVyIGRlYWxsb2NdOworICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBj
b250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGSVhNRTogUGFzcyByZWFsIGVycm9yLgorICAgICAgICAgICAgYXV0byBl
cnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOworICAgICAgICAgICAgcmF3SGFu
ZGxlcihuaWwsIGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0
Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKwor
LSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJd
KFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6
OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOworCisgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyByZWFsIGVy
cm9yLgorICAgICAgICAgICAgYXV0byBlcnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25v
d24pOworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIGVycm9yLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lk
ICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Cisg
ICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgp
KSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJd
KHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7
CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIHJlYWwgZXJyb3IuCisgICAgICAgICAgICBh
dXRvIGVycm9yID0gY3JlYXRlTlNFcnJvcihXS0Vycm9yVW5rbm93bik7CisgICAgICAgICAgICBy
YXdIYW5kbGVyKGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIu
Z2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIobmlsKTsKKyAgICB9KTsKIH0KIAogI3ByYWdtYSBt
YXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCkBAIC01Niw0ICsxMTEsMTUgQEAg
LSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogQGVuZAogCitAaW1wbGVtZW50YXRpb24gX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3IgdGVzdGluZyBv
bmx5LgorCistICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucworeworICAgIF91c2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKCk7Cit9CisKK0BlbmQKKwogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHJldmlzaW9uIDE4
MjExNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgor
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
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsNiArMTEzOCw3IEBACiAJCTdDOEVCMTE3MThE
QjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4RUIxMTYxOERCNkExOTAwNzkxN0MyIC8q
IFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0M5RDE1MzcxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdD
b250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M5RDE1MzYxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oICovOyB9OwogCQk3Q0EyNTRFQjE4Mjk5M0NFMDBGQzhBNDEgLyogV0tC
cm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3Np
bmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdDQjE2RkVGMTcyNEJBMjMwMDdBMEE5NSAvKiBjb20uYXBw
bGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRi
b3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTIx
NzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdp
bi5zYiAqLzsgfTsKIAkJN0NCMTZGRjAxNzI0QkEyNDAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFMzE3MjRCOUI1MDA3QTBB
OTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiICovOyB9OwogCQk3Q0Ix
NkZGMTE3MjRCQTI2MDA3QTBBOTUgLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNi
IGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQjE2RkU0MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0
LnBsdWdpbi1jb21tb24uc2IgKi87IH07CkBAIC0xMTY5LDYgKzExNzAsNyBAQAogCQk3Q0U0RDIy
MDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIxRTFBNDkxNENB
MDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggKi87IH07CiAJCTdDRTRE
MjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIyNTFB
NDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OwogCQk3Q0U0RDIyODFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMjYx
QTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCAqLzsgfTsKKwkJN0NF
RkE5NjIxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZB
OTYwMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2Eu
bW0gKi87IH07CiAJCTdDRjQ3RkY2MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5u
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NG
NDdGRjQxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgKi87IH07CiAJ
CTdDRjQ3RkY3MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkY1MTcyNzVCNzEw
MDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFn
ZUJhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLzsgfTsKQEAgLTMzNDUs
NiArMzM0Nyw3IEBACiAJCTdDOEVCMTE2MThEQjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzlEMTUzNjE4NDU4NERB
MDA5RDM5MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0EyNTRFQTE4Mjk5M0NFMDBGQzhBNDEgLyog
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlz
dC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNv
bS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxl
LlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNv
bW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4t
Y29tbW9uLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzNzcsNiArMzM4MCw3
IEBACiAJCTdDRTREMjFFMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg7IHBhdGggPSBVSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTdDRTREMjI1MUE0OTE2
QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTREMjI2MUE0OTE2QzIwMEM3
RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NGNDdGRjQxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0J1bmRsZVBhZ2VC
YW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGNTE3Mjc1Qjcx
MDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQmFubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC01MzQzLDYgKzUzNDcsNyBAQAogCQkJCTdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMx
NSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCiAJCQkJN0MyNDEzMDAxQUFD
RkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8sCiAJCQkJ
N0MyNDEzMDQxQUFDRkE5QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oICovLAorCQkJCTdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAogCQkJCTdDODlEMkI4MUE2QjBGMkMwMDNB
NUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovLAogCQkJCTdDODlEMkI3MUE2QjBGMkMw
MDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLywKIAkJCQk3Qzg5RDJCQjFBNkIw
RjVCMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oICovLApAQCAtNTM1
NSw2ICs1MzYwLDcgQEAKIAkJCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogX1dLV2Vic2l0
ZURhdGFTdG9yZS5oICovLAogCQkJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBfV0tXZWJz
aXRlRGF0YVN0b3JlLm1tICovLAogCQkJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBfV0tX
ZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLywKKwkJCQk3Q0VGQTk2MDFBQzA5OTkzMDBCOTEw
RkQgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tICovLAogCQkJCTFBMzYz
NUFCMUEzMTQ1RTUwMEVENjE5NyAvKiBBUElXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gKi8sCiAJ
CQkJMUFGREU2NDMxOTUxMEI1NTAwQzQ4RkZBIC8qIExlZ2FjeUJ1bmRsZUZvckNsYXNzLm1tICov
LAogCQkJCTM3QzRDMDhCMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5oICov
LApAQCAtNzgxMyw2ICs3ODE5LDcgQEAKIAkJCQlCQzg3ODBGQzExNjFDMkI4MDBDQzI3NjggLyog
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RkI3RDMx
MUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBNjdFMEQx
NjVCMkE5OTAwNkNCQTY2IC8qIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOUZCQThEMTNGRjA0RTYwMERF
RUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQTU2RjI5MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclBy
b3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTk1OTYsNiArOTYwMyw3IEBACiAJCQkJMUEwRUM5MDcx
MjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBMEVDOTEwMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3ODY1QjkxNkNBQzcxNTAwQUNF
ODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQgLyogQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyQkI2RDAx
NDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5MEQzMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVn
aW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQTQ3
OTIzMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVnaW5Qcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODIxMTQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxNS0wMy0yOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEZsZXNoIG91dCB0aGUgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzMTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tOiBBZGRlZC4KKyAgICAgICAgQWRkIHRlc3RzIGZvciBfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLgorCiAyMDE1LTAzLTI3ICBHeXV5b3VuZyBLaW0gIDxn
eXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNYWtlXSBSZW1vdmUgdW5uZWNl
c3NhcnkgSU5DTFVERV9JRl9FWElTVFMgbWFjcm8gCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9N
aW5pQnJvd3Nlci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L01pbmlCcm93c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE4MjExNCkKKysrIFRvb2xzL01pbmlCcm93c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDggQEAKIAkJMjU2QUMz
REEwRjRCNkFDMzAwQ0YzMzY5IC8qIEFwcERlbGVnYXRlLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTZBQzNEOTBGNEI2QUMzMDBDRjMzNjkgLyogQXBw
RGVsZWdhdGUubSAqLzsgfTsKIAkJMkRDMzczNDMxOThCNjJEMzAwRUMzM0U5IC8qIFNldHRpbmdz
Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkRDMzczNDIxOThCNjJEMzAwRUMzM0U5IC8qIFNldHRpbmdzQ29udHJvbGxlci5tICovOyB9
OwogCQk1MUUyNDRGQTExRUZDRTA3MDA4MjI4RDEgLyogTUJUb29sYmFySXRlbS5tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMjQ0RjkxMUVGQ0UwNzAw
ODIyOEQxIC8qIE1CVG9vbGJhckl0ZW0ubSAqLzsgfTsKKwkJN0NBMzc5NDIxQUMzODFDMTAwNzlE
QzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0EzNzk0MDFBQzM4MUMxMDA3OURDMzcg
LyogRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIubSAqLzsgfTsKKwkJN0NBMzc5NDMx
QUMzODFDMTAwNzlEQzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLnhpYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMzc5NDEx
QUMzODFDMTAwNzlEQzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLnhpYiAq
LzsgfTsKIAkJOEQxMTA3MkYwNDg2Q0VCODAwRTQ3MDkwIC8qIENvY29hLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDEwNThDN0ExRkVB
NTRGMDExMUNBMkNCQiAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07CiAJCUJDMzI5NDg3MTE2QTky
RTIwMDg2MzVEMCAvKiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzMyOTQ4NjExNkE5MkUyMDA4NjM1RDAgLyogbWFpbi5tICovOyB9OwogCQlC
QzMyOTQ5ODExNkE5NDFCMDA4NjM1RDAgLyogV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzI5NDk3MTE2
QTk0MUIwMDg2MzVEMCAvKiBXSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tICovOyB9OwpAQCAt
NzMsNiArNzUsOSBAQAogCQkyREMzNzM0MjE5OEI2MkQzMDBFQzMzRTkgLyogU2V0dGluZ3NDb250
cm9sbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFNldHRpbmdzQ29u
dHJvbGxlci5tOyBwYXRoID0gbWFjL1NldHRpbmdzQ29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUUyNDRGODExRUZDRTA3MDA4MjI4RDEgLyogTUJUb29sYmFySXRl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNQlRvb2xiYXJJdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTI0NEY5MTFFRkNFMDcwMDgyMjhEMSAvKiBN
QlRvb2xiYXJJdGVtLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IE1CVG9v
bGJhckl0ZW0ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NBMzc5M0YxQUMzODFD
MTAwNzlEQzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVy
Lmg7IHBhdGggPSBtYWMvRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NBMzc5NDAxQUMzODFDMTAwNzlEQzM3IC8qIEV4dGVu
c2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgbmFtZSA9IEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLm07IHBhdGggPSBtYWMv
RXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0NBMzc5NDExQUMzODFDMTAwNzlEQzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5k
b3dDb250cm9sbGVyLnhpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGUueGliOyBuYW1lID0gRXh0ZW5zaW9uTWFu
YWdlcldpbmRvd0NvbnRyb2xsZXIueGliOyBwYXRoID0gbWFjL0V4dGVuc2lvbk1hbmFnZXJXaW5k
b3dDb250cm9sbGVyLnhpYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEQxMTA3MzIw
NDg2Q0VCODAwRTQ3MDkwIC8qIE1pbmlCcm93c2VyLmFwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5hcHBsaWNhdGlvbjsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gTWluaUJyb3dzZXIuYXBwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQlCQzMyOTQ4NjExNkE5MkUyMDA4NjM1RDAgLyogbWFpbi5tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBtYWluLm07IHBhdGggPSBtYWMvbWFpbi5t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMyOTQ5NjExNkE5NDFCMDA4NjM1RDAg
LyogV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIuaDsgcGF0aCA9IG1hYy9XSzJCcm93
c2VyV2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE0
LDE2ICsxMTksMTggQEAKIAkJCQkyNTZBQzNEOTBGNEI2QUMzMDBDRjMzNjkgLyogQXBwRGVsZWdh
dGUubSAqLywKIAkJCQkwRkU2NDM5RjE2MUZBODk0MDA1OUUzRkYgLyogQnJvd3NlcldpbmRvd0Nv
bnRyb2xsZXIuaCAqLywKIAkJCQkwRkU2NDNBMDE2MUZBODk0MDA1OUUzRkYgLyogQnJvd3Nlcldp
bmRvd0NvbnRyb2xsZXIubSAqLywKKwkJCQk3Q0EzNzkzRjFBQzM4MUMxMDA3OURDMzcgLyogRXh0
ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIuaCAqLywKKwkJCQk3Q0EzNzk0MDFBQzM4MUMx
MDA3OURDMzcgLyogRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIubSAqLywKIAkJCQlC
QzcyQjg5QTExRTU3RThBMDAxRUI0RUEgLyogSW5mby5wbGlzdCAqLywKIAkJCQlCQzMyOTQ4NjEx
NkE5MkUyMDA4NjM1RDAgLyogbWFpbi5tICovLAogCQkJCTUxRTI0NEY4MTFFRkNFMDcwMDgyMjhE
MSAvKiBNQlRvb2xiYXJJdGVtLmggKi8sCiAJCQkJNTFFMjQ0RjkxMUVGQ0UwNzAwODIyOEQxIC8q
IE1CVG9vbGJhckl0ZW0ubSAqLywKKwkJCQkyREMzNzM0MTE5OEI2MkQzMDBFQzMzRTkgLyogU2V0
dGluZ3NDb250cm9sbGVyLmggKi8sCisJCQkJMkRDMzczNDIxOThCNjJEMzAwRUMzM0U5IC8qIFNl
dHRpbmdzQ29udHJvbGxlci5tICovLAogCQkJCTBGRTY0M0EyMTYxRkFDNjYwMDU5RTNGRiAvKiBX
SzFCcm93c2VyV2luZG93Q29udHJvbGxlci5oICovLAogCQkJCTBGRTY0M0EzMTYxRkFDNjYwMDU5
RTNGRiAvKiBXSzFCcm93c2VyV2luZG93Q29udHJvbGxlci5tICovLAogCQkJCUJDMzI5NDk2MTE2
QTk0MUIwMDg2MzVEMCAvKiBXSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5oICovLAogCQkJCUJD
MzI5NDk3MTE2QTk0MUIwMDg2MzVEMCAvKiBXSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tICov
LAotCQkJCTJEQzM3MzQxMTk4QjYyRDMwMEVDMzNFOSAvKiBTZXR0aW5nc0NvbnRyb2xsZXIuaCAq
LywKLQkJCQkyREMzNzM0MjE5OEI2MkQzMDBFQzMzRTkgLyogU2V0dGluZ3NDb250cm9sbGVyLm0g
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IE1pbmlCcm93c2VyOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTE4Nyw2ICsxOTQsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQkMzMjk0QTIx
MTZBOTg1MjAwODYzNUQwIC8qIEJyb3dzZXJXaW5kb3cueGliICovLAogCQkJCTFEREQ1ODE1MERB
MUQwQTMwMEIzMjAyOSAvKiBNYWluTWVudS54aWIgKi8sCisJCQkJN0NBMzc5NDExQUMzODFDMTAw
NzlEQzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLnhpYiAqLywKIAkJCSk7
CiAJCQluYW1lID0gUmVzb3VyY2VzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMw
Myw2ICszMTEsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAogCQkJCUJDNzJCODk2MTFFNTdFMEYwMDFFQjRFQSAvKiBCcm93c2VyV2luZG93LnhpYiBp
biBSZXNvdXJjZXMgKi8sCisJCQkJN0NBMzc5NDMxQUMzODFDMTAwNzlEQzM3IC8qIEV4dGVuc2lv
bk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLnhpYiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJQkM3MkI4
OTUxMUU1N0UwNzAwMUVCNEVBIC8qIE1haW5NZW51LnhpYiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0zMjUsNiAr
MzM0LDcgQEAKIAkJCQkyNTZBQzNEQTBGNEI2QUMzMDBDRjMzNjkgLyogQXBwRGVsZWdhdGUubSBp
biBTb3VyY2VzICovLAogCQkJCTBGRTY0M0ExMTYxRkE4OTQwMDU5RTNGRiAvKiBCcm93c2VyV2lu
ZG93Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRDMzczNDMxOThCNjJEMzAwRUMz
M0U5IC8qIFNldHRpbmdzQ29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCisJCQkJN0NBMzc5NDIx
QUMzODFDMTAwNzlEQzM3IC8qIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyLm0gaW4g
U291cmNlcyAqLywKIAkJCQlCQzMyOTQ4NzExNkE5MkUyMDA4NjM1RDAgLyogbWFpbi5tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFFMjQ0RkExMUVGQ0UwNzAwODIyOEQxIC8qIE1CVG9vbGJhckl0ZW0u
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGRTY0M0E0MTYxRkFDNjYwMDU5RTNGRiAvKiBXSzFCcm93
c2VyV2luZG93Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9NaW5pQnJv
d3Nlci9tYWMvQXBwRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9t
YWMvQXBwRGVsZWdhdGUuaAkocmV2aXNpb24gMTgyMTE0KQorKysgVG9vbHMvTWluaUJyb3dzZXIv
bWFjL0FwcERlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDExIEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorQGNsYXNzIEV4dGVuc2lvbk1h
bmFnZXJXaW5kb3dDb250cm9sbGVyOworCiBAaW50ZXJmYWNlIEJyb3dzZXJBcHBEZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxOU0FwcGxpY2F0aW9uRGVsZWdhdGU+IHsKICAgICBOU011dGFibGVTZXQgKl9i
cm93c2VyV2luZG93Q29udHJvbGxlcnM7CisgICAgRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRy
b2xsZXIgKl9leHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlcjsKIAogICAgIElCT3V0bGV0
IE5TTWVudUl0ZW0gKl9uZXdXZWJLaXQxV2luZG93SXRlbTsKICAgICBJQk91dGxldCBOU01lbnVJ
dGVtICpfbmV3V2ViS2l0MldpbmRvd0l0ZW07CkBAIC0zNCw0ICszNyw2IEBAIEBpbnRlcmZhY2Ug
QnJvd3NlckFwcERlbGVnYXRlIDogTlNPYmplY3QKIAogLSAodm9pZClkaWRDaGFuZ2VTZXR0aW5n
czsKIAorQHByb3BlcnR5IChyZWFkb25seSkgV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKnVzZXJD
b250ZW50Q29udG9sbGVyOworCiBAZW5kCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBw
RGVsZWdhdGUubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9tYWMvQXBwRGVsZWdh
dGUubQkocmV2aXNpb24gMTgyMTE0KQorKysgVG9vbHMvTWluaUJyb3dzZXIvbWFjL0FwcERlbGVn
YXRlLm0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNyBAQAogCiAjaW1wb3J0ICJBcHBE
ZWxlZ2F0ZS5oIgogCisjaW1wb3J0ICJFeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5o
IgogI2ltcG9ydCAiU2V0dGluZ3NDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXSzFCcm93c2VyV2lu
ZG93Q29udHJvbGxlci5oIgogI2ltcG9ydCAiV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIuaCIK
ICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENv
bnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlv
blByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9f
V0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLV2Vic2l0ZURhdGFTdG9y
ZS5oPgogCiBlbnVtIHsKQEAgLTQ3LDYgKzUwLDcgQEAgLSAoaWQpaW5pdAogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CiAgICAgaWYgKHNlbGYpIHsKICAgICAgICAgX2Jyb3dzZXJXaW5kb3dDb250
cm9sbGVycyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgX2V4dGVuc2lv
bk1hbmFnZXJXaW5kb3dDb250cm9sbGVyID0gW1tFeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJv
bGxlciBhbGxvY10gaW5pdF07CiAgICAgfQogCiAgICAgcmV0dXJuIHNlbGY7CkBAIC0yMTEsNCAr
MjE1LDE0IEBAIC0gKHZvaWQpX3VwZGF0ZU5ld1dpbmRvd0tleUVxdWl2YWxlbnRzCiAgICAgfQog
fQogCistIChJQkFjdGlvbilzaG93RXh0ZW5zaW9uc01hbmFnZXI6KGlkKXNlbmRlcgoreworICAg
IFtfZXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpzZW5kZXJdOwor
fQorCistIChXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udG9sbGVyCit7
CisgICAgcmV0dXJuIGRlZmF1bHRDb25maWd1cmF0aW9uKCkudXNlckNvbnRlbnRDb250cm9sbGVy
OworfQorCiBAZW5kCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvRXh0ZW5zaW9uTWFuYWdl
cldpbmRvd0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9tYWMv
RXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFRvb2xz
L01pbmlCcm93c2VyL21hYy9FeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxDb2NvYS9D
b2NvYS5oPgorCitAaW50ZXJmYWNlIEV4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVyIDog
TlNXaW5kb3dDb250cm9sbGVyIHsKKyAgICBJQk91dGxldCBOU0FycmF5Q29udHJvbGxlciAqYXJy
YXlDb250cm9sbGVyOworfQorCitAZW5kCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvRXh0
ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5p
QnJvd3Nlci9tYWMvRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIubQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL01pbmlCcm93c2VyL21hYy9FeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJv
bGxlci5tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiQXBw
RGVsZWdhdGUuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmg+CisK
K0BpbXBsZW1lbnRhdGlvbiBFeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlcgorCistIChp
bnN0YW5jZXR5cGUpaW5pdAoreworICAgIHNlbGYgPSBbc2VsZiBpbml0V2l0aFdpbmRvd05pYk5h
bWU6QCJFeHRlbnNpb25NYW5hZ2VyV2luZG93Q29udHJvbGxlciJdOworICAgIGlmIChzZWxmKSB7
CisgICAgICAgIE5TQXJyYXkqIGluc3RhbGxlZENvbnRlbnRFeHRlbnNpb25zID0gW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYXJyYXlGb3JLZXk6QCJJbnN0YWxsZWRDb250
ZW50RXh0ZW5zaW9ucyJdOworICAgICAgICBpZiAoaW5zdGFsbGVkQ29udGVudEV4dGVuc2lvbnMp
IHsKKyAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmlkZW50aWZpZXIgaW4gaW5zdGFsbGVkQ29u
dGVudEV4dGVuc2lvbnMpIHsKKyAgICAgICAgICAgICAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmV4
dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIkV4dGVuc2lvbiBzdG9yZSBnb3Qg
b3V0IG9mIHN5bmMgd2l0aCBzeXN0ZW0gZGVmYXVsdHMuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBCcm93c2VyQXBwRGVsZWdhdGUqIGFwcERlbGVnYXRlID0gKEJyb3dzZXJBcHBEZWxlZ2F0ZSAq
KVtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gZGVsZWdhdGVdOworICAgICAgICAg
ICAgICAgICAgICBbYXBwRGVsZWdhdGUudXNlckNvbnRlbnRDb250b2xsZXIgX2FkZFVzZXJDb250
ZW50RmlsdGVyOmV4dGVuc2lvbl07CisgICAgICAgICAgICAgICAgfV07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpd2luZG93RGlkTG9hZAoreworICAgIFtzdXBlciB3aW5kb3dEaWRMb2FkXTsK
KworICAgIE5TQXJyYXkqIGluc3RhbGxlZENvbnRlbnRFeHRlbnNpb25zID0gW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYXJyYXlGb3JLZXk6QCJJbnN0YWxsZWRDb250ZW50
RXh0ZW5zaW9ucyJdOworICAgIGlmIChpbnN0YWxsZWRDb250ZW50RXh0ZW5zaW9ucykgeworICAg
ICAgICBmb3IgKE5TU3RyaW5nICpleHRlbnNpb24gaW4gaW5zdGFsbGVkQ29udGVudEV4dGVuc2lv
bnMpCisgICAgICAgICAgICBbYXJyYXlDb250cm9sbGVyIGFkZE9iamVjdDpleHRlbnNpb25dOwor
ICAgIH0KK30KKworLSAoSUJBY3Rpb24pYWRkOihpZClzZW5kZXIKK3sKKyAgICBOU09wZW5QYW5l
bCAqb3BlblBhbmVsID0gW1tOU09wZW5QYW5lbCBvcGVuUGFuZWxdIHJldGFpbl07CisgICAgb3Bl
blBhbmVsLmFsbG93ZWRGaWxlVHlwZXMgPSBAWyAoTlNTdHJpbmcgKilrVVRUeXBlSlNPTiBdOwor
ICAgIAorICAgIFtvcGVuUGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93OnNlbGYud2luZG93
IGNvbXBsZXRpb25IYW5kbGVyOl4oTlNJbnRlZ2VyIHJlc3VsdCkgeworICAgICAgICBpZiAocmVz
dWx0ICE9IE5TRmlsZUhhbmRsaW5nUGFuZWxPS0J1dHRvbikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBOU1VSTCAqdXJsID0gW29wZW5QYW5lbC5VUkxzIG9iamVjdEF0SW5kZXg6MF07
CisgICAgICAgIE5TU3RyaW5nICppZGVudGlmaWVyID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50Owor
ICAgICAgICBOU1N0cmluZyAqanNvblN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
Q29udGVudHNPZlVSTDp1cmwgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6bmls
XTsKKworICAgICAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbjpqc29uU3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKmV4dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgTlNBbGVydCAqYWxlcnQg
PSBbTlNBbGVydCBhbGVydFdpdGhFcnJvcjplcnJvcl07CisgICAgICAgICAgICAgICAgW2FsZXJ0
IHJ1bk1vZGFsXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c107CisKKyAgICAgICAgICAgIE5TQXJyYXkqIGluc3RhbGxlZENvbnRl
bnRFeHRlbnNpb25zID0gW2RlZmF1bHRzIGFycmF5Rm9yS2V5OkAiSW5zdGFsbGVkQ29udGVudEV4
dGVuc2lvbnMiXTsKKyAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlSW5zdGFsbGVk
Q29udGVudEV4dGVuc2lvbnM7CisgICAgICAgICAgICBpZiAoaW5zdGFsbGVkQ29udGVudEV4dGVu
c2lvbnMpCisgICAgICAgICAgICAgICAgbXV0YWJsZUluc3RhbGxlZENvbnRlbnRFeHRlbnNpb25z
ID0gW2luc3RhbGxlZENvbnRlbnRFeHRlbnNpb25zIG11dGFibGVDb3B5XTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtdXRhYmxlSW5zdGFsbGVkQ29udGVudEV4dGVuc2lvbnMg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgICAgICAgICAgW211dGFibGVJ
bnN0YWxsZWRDb250ZW50RXh0ZW5zaW9ucyBhZGRPYmplY3Q6aWRlbnRpZmllcl07CisgICAgICAg
ICAgICBbZGVmYXVsdHMgc2V0T2JqZWN0Om11dGFibGVJbnN0YWxsZWRDb250ZW50RXh0ZW5zaW9u
cyBmb3JLZXk6QCJJbnN0YWxsZWRDb250ZW50RXh0ZW5zaW9ucyJdOworCisgICAgICAgICAgICBb
YXJyYXlDb250cm9sbGVyIGFkZE9iamVjdDppZGVudGlmaWVyXTsKKworICAgICAgICAgICAgQnJv
d3NlckFwcERlbGVnYXRlKiBhcHBEZWxlZ2F0ZSA9IChCcm93c2VyQXBwRGVsZWdhdGUgKilbW05T
QXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIGRlbGVnYXRlXTsKKyAgICAgICAgICAgIFth
cHBEZWxlZ2F0ZS51c2VyQ29udGVudENvbnRvbGxlciBfYWRkVXNlckNvbnRlbnRGaWx0ZXI6ZXh0
ZW5zaW9uXTsKKyAgICAgICAgfV07CisgICAgfV07CisKK30KKworLSAoSUJBY3Rpb24pcmVtb3Zl
OihpZClzZW5kZXIKK3sKKyAgICBOU1VJbnRlZ2VyIGluZGV4ID0gW2FycmF5Q29udHJvbGxlciBz
ZWxlY3Rpb25JbmRleF07CisKKyAgICBOU1N0cmluZyAqaWRlbnRpZmllclRvUmVtb3ZlID0gYXJy
YXlDb250cm9sbGVyLmFycmFuZ2VkT2JqZWN0c1tpbmRleF07CisKKyAgICBbW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjppZGVudGlmaWVyVG9SZW1vdmUgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9y
ICplcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIE5TQWxlcnQgKmFs
ZXJ0ID0gW05TQWxlcnQgYWxlcnRXaXRoRXJyb3I6ZXJyb3JdOworICAgICAgICAgICAgW2FsZXJ0
IHJ1bk1vZGFsXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE5T
VXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZh
dWx0c107CisKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmluc3RhbGxlZENvbnRlbnRFeHRlbnNp
b25zID0gW1tkZWZhdWx0cyBhcnJheUZvcktleTpAIkluc3RhbGxlZENvbnRlbnRFeHRlbnNpb25z
Il0gbXV0YWJsZUNvcHldOworICAgICAgICBbaW5zdGFsbGVkQ29udGVudEV4dGVuc2lvbnMgcmVt
b3ZlT2JqZWN0OmlkZW50aWZpZXJUb1JlbW92ZV07CisgICAgICAgIFtkZWZhdWx0cyBzZXRPYmpl
Y3Q6aW5zdGFsbGVkQ29udGVudEV4dGVuc2lvbnMgZm9yS2V5OkAiSW5zdGFsbGVkQ29udGVudEV4
dGVuc2lvbnMiXTsKKworICAgICAgICBbYXJyYXlDb250cm9sbGVyIHJlbW92ZU9iamVjdEF0QXJy
YW5nZWRPYmplY3RJbmRleDppbmRleF07CisgICAgICAgIEJyb3dzZXJBcHBEZWxlZ2F0ZSogYXBw
RGVsZWdhdGUgPSAoQnJvd3NlckFwcERlbGVnYXRlICopW1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFw
cGxpY2F0aW9uXSBkZWxlZ2F0ZV07CisgICAgICAgIFthcHBEZWxlZ2F0ZS51c2VyQ29udGVudENv
bnRvbGxlciBfcmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXI6aWRlbnRpZmllclRvUmVtb3ZlXTsKKyAg
ICB9XTsKK30KKworQGVuZApJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvbWFjL0V4dGVuc2lvbk1h
bmFnZXJXaW5kb3dDb250cm9sbGVyLnhpYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nl
ci9tYWMvRXh0ZW5zaW9uTWFuYWdlcldpbmRvd0NvbnRyb2xsZXIueGliCShyZXZpc2lvbiAwKQor
KysgVG9vbHMvTWluaUJyb3dzZXIvbWFjL0V4dGVuc2lvbk1hbmFnZXJXaW5kb3dDb250cm9sbGVy
LnhpYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cis8ZG9jdW1lbnQgdHlwZT0iY29t
LmFwcGxlLkludGVyZmFjZUJ1aWxkZXIzLkNvY29hLlhJQiIgdmVyc2lvbj0iMy4wIiB0b29sc1Zl
cnNpb249IjgwMTQuMyIgc3lzdGVtVmVyc2lvbj0iMTRDMTA5IiB0YXJnZXRSdW50aW1lPSJNYWNP
U1guQ29jb2EiIHByb3BlcnR5QWNjZXNzQ29udHJvbD0ibm9uZSIgdXNlQXV0b2xheW91dD0iWUVT
Ij4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8cGx1Z0luIGlkZW50aWZpZXI9ImNvbS5h
cHBsZS5JbnRlcmZhY2VCdWlsZGVyLkNvY29hUGx1Z2luIiB2ZXJzaW9uPSI4MDE0LjMiLz4KKyAg
ICA8L2RlcGVuZGVuY2llcz4KKyAgICA8b2JqZWN0cz4KKyAgICAgICAgPGN1c3RvbU9iamVjdCBp
ZD0iLTIiIHVzZXJMYWJlbD0iRmlsZSdzIE93bmVyIiBjdXN0b21DbGFzcz0iRXh0ZW5zaW9uTWFu
YWdlcldpbmRvd0NvbnRyb2xsZXIiPgorICAgICAgICAgICAgPGNvbm5lY3Rpb25zPgorICAgICAg
ICAgICAgICAgIDxvdXRsZXQgcHJvcGVydHk9ImFycmF5Q29udHJvbGxlciIgZGVzdGluYXRpb249
InhlSS1sOS04WHYiIGlkPSJPOGYtZ1ktNUZIIi8+CisgICAgICAgICAgICAgICAgPG91dGxldCBw
cm9wZXJ0eT0id2luZG93IiBkZXN0aW5hdGlvbj0iRjB6LUpYLUN2NSIgaWQ9ImdJcC1Iby04RDki
Lz4KKyAgICAgICAgICAgIDwvY29ubmVjdGlvbnM+CisgICAgICAgIDwvY3VzdG9tT2JqZWN0Pgor
ICAgICAgICA8Y3VzdG9tT2JqZWN0IGlkPSItMSIgdXNlckxhYmVsPSJGaXJzdCBSZXNwb25kZXIi
IGN1c3RvbUNsYXNzPSJGaXJzdFJlc3BvbmRlciIvPgorICAgICAgICA8Y3VzdG9tT2JqZWN0IGlk
PSItMyIgdXNlckxhYmVsPSJBcHBsaWNhdGlvbiIgY3VzdG9tQ2xhc3M9Ik5TT2JqZWN0Ii8+Cisg
ICAgICAgIDx3aW5kb3cgdGl0bGU9IkV4dGVuc2lvbnMgTWFuYWdlciIgYWxsb3dzVG9vbFRpcHNX
aGVuQXBwbGljYXRpb25Jc0luYWN0aXZlPSJOTyIgYXV0b3JlY2FsY3VsYXRlc0tleVZpZXdMb29w
PSJOTyIgb25lU2hvdD0iTk8iIHJlbGVhc2VkV2hlbkNsb3NlZD0iTk8iIGFuaW1hdGlvbkJlaGF2
aW9yPSJkZWZhdWx0IiBpZD0iRjB6LUpYLUN2NSI+CisgICAgICAgICAgICA8d2luZG93U3R5bGVN
YXNrIGtleT0ic3R5bGVNYXNrIiB0aXRsZWQ9IllFUyIgY2xvc2FibGU9IllFUyIgbWluaWF0dXJp
emFibGU9IllFUyIgcmVzaXphYmxlPSJZRVMiIHVuaWZpZWRUaXRsZUFuZFRvb2xiYXI9IllFUyIv
PgorICAgICAgICAgICAgPHdpbmRvd1Bvc2l0aW9uTWFzayBrZXk9ImluaXRpYWxQb3NpdGlvbk1h
c2siIGxlZnRTdHJ1dD0iWUVTIiByaWdodFN0cnV0PSJZRVMiIHRvcFN0cnV0PSJZRVMiIGJvdHRv
bVN0cnV0PSJZRVMiLz4KKyAgICAgICAgICAgIDxyZWN0IGtleT0iY29udGVudFJlY3QiIHg9IjE5
NiIgeT0iMjQwIiB3aWR0aD0iNDgwIiBoZWlnaHQ9IjI3MCIvPgorICAgICAgICAgICAgPHJlY3Qg
a2V5PSJzY3JlZW5SZWN0IiB4PSIwLjAiIHk9IjAuMCIgd2lkdGg9IjI1NjAiIGhlaWdodD0iMTQx
NyIvPgorICAgICAgICAgICAgPHZpZXcga2V5PSJjb250ZW50VmlldyIgaWQ9InNlNS1ncC1Uak8i
PgorICAgICAgICAgICAgICAgIDxyZWN0IGtleT0iZnJhbWUiIHg9IjAuMCIgeT0iMC4wIiB3aWR0
aD0iNDgwIiBoZWlnaHQ9IjI3MCIvPgorICAgICAgICAgICAgICAgIDxhdXRvcmVzaXppbmdNYXNr
IGtleT0iYXV0b3Jlc2l6aW5nTWFzayIvPgorICAgICAgICAgICAgICAgIDxzdWJ2aWV3cz4KKyAg
ICAgICAgICAgICAgICAgICAgPHNjcm9sbFZpZXcgYXV0b2hpZGVzU2Nyb2xsZXJzPSJZRVMiIGhv
cml6b250YWxMaW5lU2Nyb2xsPSIxOSIgaG9yaXpvbnRhbFBhZ2VTY3JvbGw9IjEwIiB2ZXJ0aWNh
bExpbmVTY3JvbGw9IjE5IiB2ZXJ0aWNhbFBhZ2VTY3JvbGw9IjEwIiB1c2VzUHJlZG9taW5hbnRB
eGlzU2Nyb2xsaW5nPSJOTyIgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWlu
dHM9Ik5PIiBpZD0iM1BzLXZ4LTNSaiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBr
ZXk9ImZyYW1lIiB4PSIyMCIgeT0iNTgiIHdpZHRoPSI0NDAiIGhlaWdodD0iMTkyIi8+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8Y2xpcFZpZXcga2V5PSJjb250ZW50VmlldyIgaWQ9IjIyOC1x
Ri1SYzEiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGtleT0iZnJhbWUiIHg9
IjEiIHk9IjE3IiB3aWR0aD0iMjM4IiBoZWlnaHQ9IjExNyIvPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxhdXRvcmVzaXppbmdNYXNrIGtleT0iYXV0b3Jlc2l6aW5nTWFzayIgd2lkdGhT
aXphYmxlPSJZRVMiIGhlaWdodFNpemFibGU9IllFUyIvPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxzdWJ2aWV3cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxl
VmlldyB2ZXJ0aWNhbEh1Z2dpbmdQcmlvcml0eT0iNzUwIiBhbGxvd3NFeHBhbnNpb25Ub29sVGlw
cz0iWUVTIiBjb2x1bW5BdXRvcmVzaXppbmdTdHlsZT0ibGFzdENvbHVtbk9ubHkiIGNvbHVtblJl
b3JkZXJpbmc9Ik5PIiBjb2x1bW5TZWxlY3Rpb249IllFUyIgY29sdW1uUmVzaXppbmc9Ik5PIiBt
dWx0aXBsZVNlbGVjdGlvbj0iTk8iIGF1dG9zYXZlQ29sdW1ucz0iTk8iIHJvd1NpemVTdHlsZT0i
YXV0b21hdGljIiB2aWV3QmFzZWQ9IllFUyIgaWQ9Im1tZC0wdi00aFIiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGF1dG9yZXNpemluZ01hc2sga2V5PSJhdXRvcmVzaXpp
bmdNYXNrIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZSBrZXk9
ImludGVyY2VsbFNwYWNpbmciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxjb2xvciBrZXk9ImJhY2tncm91bmRDb2xvciIgbmFtZT0i
Y29udHJvbEJhY2tncm91bmRDb2xvciIgY2F0YWxvZz0iU3lzdGVtIiBjb2xvclNwYWNlPSJjYXRh
bG9nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Iga2V5PSJn
cmlkQ29sb3IiIG5hbWU9ImdyaWRDb2xvciIgY2F0YWxvZz0iU3lzdGVtIiBjb2xvclNwYWNlPSJj
YXRhbG9nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGVDb2x1
bW5zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZUNvbHVt
biB3aWR0aD0iNDM1IiBtaW5XaWR0aD0iNDAiIG1heFdpZHRoPSIxMDAwIiBpZD0iNlBELWU5LUdm
RCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZUhl
YWRlckNlbGwga2V5PSJoZWFkZXJDZWxsIiBsaW5lQnJlYWtNb2RlPSJ0cnVuY2F0aW5nVGFpbCIg
Ym9yZGVyU3R5bGU9ImJvcmRlciIgYWxpZ25tZW50PSJsZWZ0Ij4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb250IGtleT0iZm9udCIgbWV0YUZvbnQ9
InNtYWxsU3lzdGVtIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8Y29sb3Iga2V5PSJ0ZXh0Q29sb3IiIG5hbWU9ImhlYWRlclRleHRDb2xvciIgY2F0
YWxvZz0iU3lzdGVtIiBjb2xvclNwYWNlPSJjYXRhbG9nIi8+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Iga2V5PSJiYWNrZ3JvdW5kQ29sb3Ii
IG5hbWU9ImhlYWRlckNvbG9yIiBjYXRhbG9nPSJTeXN0ZW0iIGNvbG9yU3BhY2U9ImNhdGFsb2ci
Lz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZUhl
YWRlckNlbGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0
ZXh0RmllbGRDZWxsIGtleT0iZGF0YUNlbGwiIGxpbmVCcmVha01vZGU9InRydW5jYXRpbmdUYWls
IiBzZWxlY3RhYmxlPSJZRVMiIGVkaXRhYmxlPSJZRVMiIGFsaWdubWVudD0ibGVmdCIgdGl0bGU9
IlRleHQgQ2VsbCIgaWQ9IlNxMC11bS1tYVIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGZvbnQga2V5PSJmb250IiBtZXRhRm9udD0ic3lzdGVtIi8+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Ig
a2V5PSJ0ZXh0Q29sb3IiIG5hbWU9ImNvbnRyb2xUZXh0Q29sb3IiIGNhdGFsb2c9IlN5c3RlbSIg
Y29sb3JTcGFjZT0iY2F0YWxvZyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGNvbG9yIGtleT0iYmFja2dyb3VuZENvbG9yIiBuYW1lPSJjb250cm9s
QmFja2dyb3VuZENvbG9yIiBjYXRhbG9nPSJTeXN0ZW0iIGNvbG9yU3BhY2U9ImNhdGFsb2ciLz4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0RmllbGRD
ZWxsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGVD
b2x1bW5SZXNpemluZ01hc2sga2V5PSJyZXNpemluZ01hc2siIHJlc2l6ZVdpdGhUYWJsZT0iWUVT
IiB1c2VyUmVzaXphYmxlPSJZRVMiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPHByb3RvdHlwZUNlbGxWaWV3cz4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZUNlbGxWaWV3IGlkPSJSM1MtN2ktaGtuIj4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVj
dCBrZXk9ImZyYW1lIiB4PSIxIiB5PSIxIiB3aWR0aD0iNDM1IiBoZWlnaHQ9IjE3Ii8+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF1dG9yZXNp
emluZ01hc2sga2V5PSJhdXRvcmVzaXppbmdNYXNrIiB3aWR0aFNpemFibGU9IllFUyIgaGVpZ2h0
U2l6YWJsZT0iWUVTIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPHN1YnZpZXdzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8dGV4dEZpZWxkIHZlcnRpY2FsSHVnZ2luZ1ByaW9yaXR5
PSI3NTAiIGhvcml6b250YWxDb21wcmVzc2lvblJlc2lzdGFuY2VQcmlvcml0eT0iMjUwIiBtaXNw
bGFjZWQ9IllFUyIgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHM9Ik5P
IiBpZD0iRHFBLUVlLU82ZiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBrZXk9ImZyYW1lIiB4PSIwLjAiIHk9IjAuMCIg
d2lkdGg9IjQzNCIgaGVpZ2h0PSIxNyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRGaWVsZENlbGwga2V5PSJjZWxsIiBz
Y3JvbGxhYmxlPSJZRVMiIGxpbmVCcmVha01vZGU9ImNsaXBwaW5nIiBzZW5kc0FjdGlvbk9uRW5k
RWRpdGluZz0iWUVTIiB0aXRsZT0iVGFibGUgVmlldyBDZWxsIiBpZD0ic3lmLUJULVhCZiI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGZvbnQga2V5PSJmb250IiBtZXRhRm9udD0ic3lzdGVtIi8+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9y
IGtleT0idGV4dENvbG9yIiBuYW1lPSJjb250cm9sVGV4dENvbG9yIiBjYXRhbG9nPSJTeXN0ZW0i
IGNvbG9yU3BhY2U9ImNhdGFsb2ciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Iga2V5PSJiYWNrZ3JvdW5kQ29s
b3IiIG5hbWU9ImNvbnRyb2xDb2xvciIgY2F0YWxvZz0iU3lzdGVtIiBjb2xvclNwYWNlPSJjYXRh
bG9nIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8L3RleHRGaWVsZENlbGw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbnM+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJp
bmRpbmcgZGVzdGluYXRpb249IlIzUy03aS1oa24iIG5hbWU9InZhbHVlIiBrZXlQYXRoPSJvYmpl
Y3RWYWx1ZSIgaWQ9InV3QS13Ti1Ud0UiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdGlvbnM+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dEZpZWxk
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
c3Vidmlld3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGNvbnN0cmFpbnRzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8Y29uc3RyYWludCBmaXJzdEF0dHJpYnV0ZT0iYm90dG9tIiBz
ZWNvbmRJdGVtPSJEcUEtRWUtTzZmIiBzZWNvbmRBdHRyaWJ1dGU9ImJvdHRvbSIgaWQ9IkVvYi1B
bS1JdHkiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGNvbnN0cmFpbnQgZmlyc3RJdGVtPSJEcUEtRWUtTzZmIiBmaXJzdEF0dHJpYnV0
ZT0ibGVhZGluZyIgc2Vjb25kSXRlbT0iUjNTLTdpLWhrbiIgc2Vjb25kQXR0cmlidXRlPSJsZWFk
aW5nIiBjb25zdGFudD0iMiIgaWQ9ImFjZy1WOC1qVXIiLz4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbnN0cmFpbnQgZmlyc3RBdHRy
aWJ1dGU9InRyYWlsaW5nIiBzZWNvbmRJdGVtPSJEcUEtRWUtTzZmIiBzZWNvbmRBdHRyaWJ1dGU9
InRyYWlsaW5nIiBjb25zdGFudD0iMiIgaWQ9ImdUai1xTC1BN3IiLz4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbnN0cmFpbnQgZmly
c3RJdGVtPSJEcUEtRWUtTzZmIiBmaXJzdEF0dHJpYnV0ZT0idG9wIiBzZWNvbmRJdGVtPSJSM1Mt
N2ktaGtuIiBzZWNvbmRBdHRyaWJ1dGU9InRvcCIgaWQ9ImxLRi1NOC1objciLz4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbnN0cmFpbnRz
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxj
b25uZWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPG91dGxldCBwcm9wZXJ0eT0idGV4dEZpZWxkIiBkZXN0aW5hdGlvbj0iRHFB
LUVlLU82ZiIgaWQ9ImNwSS1XaC1hdFQiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3Rpb25zPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZUNlbGxWaWV3PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3RvdHlwZUNlbGxWaWV3cz4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlQ29sdW1uPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZUNvbHVtbnM+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbnM+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRpbmcgZGVzdGluYXRpb249InhlSS1s
OS04WHYiIG5hbWU9ImNvbnRlbnQiIGtleVBhdGg9ImFycmFuZ2VkT2JqZWN0cyIgaWQ9InBhSC02
Yi1jeE0iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZGlu
ZyBkZXN0aW5hdGlvbj0ieGVJLWw5LThYdiIgbmFtZT0ic2VsZWN0aW9uSW5kZXhlcyIga2V5UGF0
aD0ic2VsZWN0aW9uSW5kZXhlcyIgcHJldmlvdXNCaW5kaW5nPSJwYUgtNmItY3hNIiBpZD0iTkRw
LU1CLTN1OCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0
aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZVZpZXc+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPC9zdWJ2aWV3cz4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8Y29sb3Iga2V5PSJiYWNrZ3JvdW5kQ29sb3IiIG5hbWU9ImNvbnRyb2xCYWNrZ3Jv
dW5kQ29sb3IiIGNhdGFsb2c9IlN5c3RlbSIgY29sb3JTcGFjZT0iY2F0YWxvZyIvPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPC9jbGlwVmlldz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxz
Y3JvbGxlciBrZXk9Imhvcml6b250YWxTY3JvbGxlciIgaGlkZGVuPSJZRVMiIHZlcnRpY2FsSHVn
Z2luZ1ByaW9yaXR5PSI3NTAiIGhvcml6b250YWw9IllFUyIgaWQ9ImlUYy1sRS1QazYiPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGtleT0iZnJhbWUiIHg9IjEiIHk9IjExOSIg
d2lkdGg9IjIyMyIgaGVpZ2h0PSIxNSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxh
dXRvcmVzaXppbmdNYXNrIGtleT0iYXV0b3Jlc2l6aW5nTWFzayIvPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPC9zY3JvbGxlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JvbGxlciBr
ZXk9InZlcnRpY2FsU2Nyb2xsZXIiIGhpZGRlbj0iWUVTIiB2ZXJ0aWNhbEh1Z2dpbmdQcmlvcml0
eT0iNzUwIiBob3Jpem9udGFsPSJOTyIgaWQ9ImFrMy1RWS1BdkoiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxyZWN0IGtleT0iZnJhbWUiIHg9IjIyNCIgeT0iMTciIHdpZHRoPSIxNSIg
aGVpZ2h0PSIxMDIiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXV0b3Jlc2l6aW5n
TWFzayBrZXk9ImF1dG9yZXNpemluZ01hc2siLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwv
c2Nyb2xsZXI+CisgICAgICAgICAgICAgICAgICAgIDwvc2Nyb2xsVmlldz4KKyAgICAgICAgICAg
ICAgICAgICAgPGJ1dHRvbiB2ZXJ0aWNhbEh1Z2dpbmdQcmlvcml0eT0iNzUwIiB0cmFuc2xhdGVz
QXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cz0iTk8iIGlkPSIyN0gtOGwtWlJyIj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGtleT0iZnJhbWUiIHg9IjIwIiB5PSIyMSIgd2lk
dGg9IjIxIiBoZWlnaHQ9IjIxIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uc3RyYWlu
dHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbnN0cmFpbnQgZmlyc3RBdHRyaWJ1
dGU9IndpZHRoIiBjb25zdGFudD0iMjEiIGlkPSJLdjktUmEtNXhqIi8+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGNvbnN0cmFpbnQgZmlyc3RBdHRyaWJ1dGU9ImhlaWdodCIgY29uc3Rh
bnQ9IjE5IiBpZD0iTm1uLTE0LTFlYSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25z
dHJhaW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25DZWxsIGtleT0iY2VsbCIg
dHlwZT0ic21hbGxTcXVhcmUiIGJlemVsU3R5bGU9InNtYWxsU3F1YXJlIiBpbWFnZT0iTlNBZGRU
ZW1wbGF0ZSIgaW1hZ2VQb3NpdGlvbj0ib3ZlcmxhcHMiIGFsaWdubWVudD0iY2VudGVyIiBsaW5l
QnJlYWtNb2RlPSJ0cnVuY2F0aW5nVGFpbCIgc3RhdGU9Im9uIiBib3JkZXJTdHlsZT0iYm9yZGVy
IiBpbWFnZVNjYWxpbmc9InByb3BvcnRpb25hbGx5RG93biIgaW5zZXQ9IjIiIGlkPSI2VDMtZnUt
bGFPIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmVoYXZpb3Iga2V5PSJiZWhhdmlv
ciIgcHVzaEluPSJZRVMiIGxpZ2h0QnlCYWNrZ3JvdW5kPSJZRVMiIGxpZ2h0QnlHcmF5PSJZRVMi
Lz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9udCBrZXk9ImZvbnQiIG1ldGFGb250
PSJzeXN0ZW0iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uQ2VsbD4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIDxjb25uZWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8YWN0aW9uIHNlbGVjdG9yPSJhZGQ6IiB0YXJnZXQ9Ii0yIiBpZD0ibklnLWlFLXhhRyIv
PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0aW9ucz4KKyAgICAgICAgICAgICAg
ICAgICAgPC9idXR0b24+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdmVydGljYWxIdWdn
aW5nUHJpb3JpdHk9Ijc1MCIgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWlu
dHM9Ik5PIiBpZD0iaTQ2LUFVLWc5VyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBr
ZXk9ImZyYW1lIiB4PSI0MCIgeT0iMjEiIHdpZHRoPSIyMSIgaGVpZ2h0PSIyMSIvPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPGNvbnN0cmFpbnRzPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxjb25zdHJhaW50IGZpcnN0QXR0cmlidXRlPSJ3aWR0aCIgY29uc3RhbnQ9IjIxIiBpZD0i
RUNHLWhJLUVNTCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25zdHJhaW50IGZp
cnN0QXR0cmlidXRlPSJoZWlnaHQiIGNvbnN0YW50PSIxOSIgaWQ9ImIzQS0ySS1mRGMiLz4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDwvY29uc3RyYWludHM+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8YnV0dG9uQ2VsbCBrZXk9ImNlbGwiIHR5cGU9InNtYWxsU3F1YXJlIiBiZXplbFN0eWxl
PSJzbWFsbFNxdWFyZSIgaW1hZ2U9Ik5TUmVtb3ZlVGVtcGxhdGUiIGltYWdlUG9zaXRpb249Im92
ZXJsYXBzIiBhbGlnbm1lbnQ9ImNlbnRlciIgbGluZUJyZWFrTW9kZT0idHJ1bmNhdGluZ1RhaWwi
IHN0YXRlPSJvbiIgYm9yZGVyU3R5bGU9ImJvcmRlciIgaW1hZ2VTY2FsaW5nPSJwcm9wb3J0aW9u
YWxseURvd24iIGluc2V0PSIyIiBpZD0iZ2ZzLXNZLWNCTiI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGJlaGF2aW9yIGtleT0iYmVoYXZpb3IiIHB1c2hJbj0iWUVTIiBsaWdodEJ5QmFj
a2dyb3VuZD0iWUVTIiBsaWdodEJ5R3JheT0iWUVTIi8+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGZvbnQga2V5PSJmb250IiBtZXRhRm9udD0ic3lzdGVtIi8+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8L2J1dHRvbkNlbGw+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVj
dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFjdGlvbiBzZWxlY3Rvcj0icmVt
b3ZlOiIgdGFyZ2V0PSItMiIgaWQ9IkJPVy1GYy1BR3AiLz4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8YmluZGluZyBkZXN0aW5hdGlvbj0ieGVJLWw5LThYdiIgbmFtZT0iZW5hYmxlZCIg
a2V5UGF0aD0iY2FuUmVtb3ZlIiBpZD0icHAxLWQ3LTZHZCIvPgorICAgICAgICAgICAgICAgICAg
ICAgICAgPC9jb25uZWN0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CisgICAg
ICAgICAgICAgICAgPC9zdWJ2aWV3cz4KKyAgICAgICAgICAgICAgICA8Y29uc3RyYWludHM+Cisg
ICAgICAgICAgICAgICAgICAgIDxjb25zdHJhaW50IGZpcnN0QXR0cmlidXRlPSJib3R0b20iIHNl
Y29uZEl0ZW09IjNQcy12eC0zUmoiIHNlY29uZEF0dHJpYnV0ZT0iYm90dG9tIiBjb25zdGFudD0i
NTgiIGlkPSJOZWotWVgtQk1lIi8+CisgICAgICAgICAgICAgICAgICAgIDxjb25zdHJhaW50IGZp
cnN0SXRlbT0iaTQ2LUFVLWc5VyIgZmlyc3RBdHRyaWJ1dGU9ImxlYWRpbmciIHNlY29uZEl0ZW09
InNlNS1ncC1Uak8iIHNlY29uZEF0dHJpYnV0ZT0ibGVhZGluZyIgY29uc3RhbnQ9IjQwIiBpZD0i
U1FTLTRKLU5KRSIvPgorICAgICAgICAgICAgICAgICAgICA8Y29uc3RyYWludCBmaXJzdEF0dHJp
YnV0ZT0iYm90dG9tIiBzZWNvbmRJdGVtPSJpNDYtQVUtZzlXIiBzZWNvbmRBdHRyaWJ1dGU9ImJv
dHRvbSIgY29uc3RhbnQ9IjIyIiBpZD0iVHJpLXlVLWZBNCIvPgorICAgICAgICAgICAgICAgICAg
ICA8Y29uc3RyYWludCBmaXJzdEl0ZW09IjI3SC04bC1aUnIiIGZpcnN0QXR0cmlidXRlPSJsZWFk
aW5nIiBzZWNvbmRJdGVtPSJzZTUtZ3AtVGpPIiBzZWNvbmRBdHRyaWJ1dGU9ImxlYWRpbmciIGNv
bnN0YW50PSIyMCIgaWQ9IlVSQy1mRC1ObzYiLz4KKyAgICAgICAgICAgICAgICAgICAgPGNvbnN0
cmFpbnQgZmlyc3RJdGVtPSIzUHMtdngtM1JqIiBmaXJzdEF0dHJpYnV0ZT0ibGVhZGluZyIgc2Vj
b25kSXRlbT0ic2U1LWdwLVRqTyIgc2Vjb25kQXR0cmlidXRlPSJsZWFkaW5nIiBjb25zdGFudD0i
MjAiIGlkPSJVZG0tRWctRm14Ii8+CisgICAgICAgICAgICAgICAgICAgIDxjb25zdHJhaW50IGZp
cnN0QXR0cmlidXRlPSJib3R0b20iIHNlY29uZEl0ZW09IjI3SC04bC1aUnIiIHNlY29uZEF0dHJp
YnV0ZT0iYm90dG9tIiBjb25zdGFudD0iMjIiIGlkPSJnVkctWVgtb2VYIi8+CisgICAgICAgICAg
ICAgICAgICAgIDxjb25zdHJhaW50IGZpcnN0QXR0cmlidXRlPSJ0cmFpbGluZyIgc2Vjb25kSXRl
bT0iM1BzLXZ4LTNSaiIgc2Vjb25kQXR0cmlidXRlPSJ0cmFpbGluZyIgY29uc3RhbnQ9IjIwIiBp
ZD0iZ2dELW5tLVBEaSIvPgorICAgICAgICAgICAgICAgICAgICA8Y29uc3RyYWludCBmaXJzdEl0
ZW09IjNQcy12eC0zUmoiIGZpcnN0QXR0cmlidXRlPSJ0b3AiIHNlY29uZEl0ZW09InNlNS1ncC1U
ak8iIHNlY29uZEF0dHJpYnV0ZT0idG9wIiBjb25zdGFudD0iMjAiIGlkPSJxaXctd0MtaWdoIi8+
CisgICAgICAgICAgICAgICAgPC9jb25zdHJhaW50cz4KKyAgICAgICAgICAgIDwvdmlldz4KKyAg
ICAgICAgICAgIDxjb25uZWN0aW9ucz4KKyAgICAgICAgICAgICAgICA8b3V0bGV0IHByb3BlcnR5
PSJkZWxlZ2F0ZSIgZGVzdGluYXRpb249Ii0yIiBpZD0iMGJsLTFOLUFZdSIvPgorICAgICAgICAg
ICAgPC9jb25uZWN0aW9ucz4KKyAgICAgICAgPC93aW5kb3c+CisgICAgICAgIDxhcnJheUNvbnRy
b2xsZXIgaWQ9InhlSS1sOS04WHYiLz4KKyAgICA8L29iamVjdHM+CisgICAgPHJlc291cmNlcz4K
KyAgICAgICAgPGltYWdlIG5hbWU9Ik5TQWRkVGVtcGxhdGUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIx
MSIvPgorICAgICAgICA8aW1hZ2UgbmFtZT0iTlNSZW1vdmVUZW1wbGF0ZSIgd2lkdGg9IjExIiBo
ZWlnaHQ9IjExIi8+CisgICAgPC9yZXNvdXJjZXM+Cis8L2RvY3VtZW50PgpJbmRleDogVG9vbHMv
TWluaUJyb3dzZXIvbWFjL01haW5NZW51LnhpYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJv
d3Nlci9tYWMvTWFpbk1lbnUueGliCShyZXZpc2lvbiAxODIxMTQpCisrKyBUb29scy9NaW5pQnJv
d3Nlci9tYWMvTWFpbk1lbnUueGliCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsOCBAQAogPD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Ci08ZG9j
dW1lbnQgdHlwZT0iY29tLmFwcGxlLkludGVyZmFjZUJ1aWxkZXIzLkNvY29hLlhJQiIgdmVyc2lv
bj0iMy4wIiB0b29sc1ZlcnNpb249Ijc1MDQuMiIgc3lzdGVtVmVyc2lvbj0iMTREODkiIHRhcmdl
dFJ1bnRpbWU9Ik1hY09TWC5Db2NvYSIgcHJvcGVydHlBY2Nlc3NDb250cm9sPSJub25lIj4KKzxk
b2N1bWVudCB0eXBlPSJjb20uYXBwbGUuSW50ZXJmYWNlQnVpbGRlcjMuQ29jb2EuWElCIiB2ZXJz
aW9uPSIzLjAiIHRvb2xzVmVyc2lvbj0iODA1Mi40IiBzeXN0ZW1WZXJzaW9uPSIxNUExMzFhIiB0
YXJnZXRSdW50aW1lPSJNYWNPU1guQ29jb2EiIHByb3BlcnR5QWNjZXNzQ29udHJvbD0ibm9uZSI+
CiAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPHBsdWdJbiBpZGVudGlmaWVyPSJjb20uYXBw
bGUuSW50ZXJmYWNlQnVpbGRlci5Db2NvYVBsdWdpbiIgdmVyc2lvbj0iNzUwNC4yIi8+CisgICAg
ICAgIDxkZXBsb3ltZW50IGlkZW50aWZpZXI9Im1hY29zeCIvPgorICAgICAgICA8cGx1Z0luIGlk
ZW50aWZpZXI9ImNvbS5hcHBsZS5JbnRlcmZhY2VCdWlsZGVyLkNvY29hUGx1Z2luIiB2ZXJzaW9u
PSI4MDUyLjQiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8b2JqZWN0cz4KICAgICAgICAg
PGN1c3RvbU9iamVjdCBpZD0iLTIiIHVzZXJMYWJlbD0iRmlsZSdzIE93bmVyIiBjdXN0b21DbGFz
cz0iTlNBcHBsaWNhdGlvbiI+CkBAIC00NzUsNiArNDc2LDEzIEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8YWN0aW9uIHNlbGVjdG9yPSJmZXRjaEFuZENsZWFyV2Vic2l0
ZURhdGE6IiB0YXJnZXQ9Ii0xIiBpZD0iUjA2LWwyLXRQMCIvPgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8L2Nvbm5lY3Rpb25zPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvbWVudUl0ZW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1lbnVJdGVtIGlzU2Vw
YXJhdG9ySXRlbT0iWUVTIiBpZD0idWVmLWtiLXI5biIvPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxtZW51SXRlbSB0aXRsZT0iU2hvdyBFeHRlbnNpb25zIE1hbmFnZXIiIGtleUVxdWl2
YWxlbnQ9Im0iIGlkPSIyZjAtcEgtS1J4Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPG1vZGlmaWVyTWFzayBrZXk9ImtleUVxdWl2YWxlbnRNb2RpZmllck1hc2siIG9wdGlvbj0i
WUVTIiBjb21tYW5kPSJZRVMiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNv
bm5lY3Rpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFjdGlvbiBz
ZWxlY3Rvcj0ic2hvd0V4dGVuc2lvbnNNYW5hZ2VyOiIgdGFyZ2V0PSItMSIgaWQ9Iml5TC0xNy1z
TG8iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0aW9ucz4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8L21lbnVJdGVtPgogICAgICAgICAgICAgICAgICAg
ICAgICAgPC9pdGVtcz4KICAgICAgICAgICAgICAgICAgICAgPC9tZW51PgogICAgICAgICAgICAg
ICAgIDwvbWVudUl0ZW0+CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgy
MTE0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsNyBAQAogCQk3Q0NFN0Y0
RDFBNDExQjlGMDA0NDdDNEMgLyogUmV0YWluUHRyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMjlCMUIxNDg2QjI1OTAwODE3REE5IC8qIFJldGFp
blB0ci5tbSAqLzsgfTsKIAkJN0NDRTdGNEUxQTQxMUJBNDAwNDQ3QzRDIC8qIFJldGFpblB0ci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyOUIx
NjE0ODZBRDY0MDA4MTdEQTkgLyogUmV0YWluUHRyLmNwcCAqLzsgfTsKIAkJN0NDRTdGNEYxQTQx
MUJBNDAwNDQ3QzRDIC8qIFJldGFpblB0ckhhc2hpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzA5OTFDNTAxNDNDN0Q2ODAwNzk5OEYyIC8qIFJl
dGFpblB0ckhhc2hpbmcuY3BwICovOyB9OworCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQgLyog
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk3Q0ZCQ0FFNTE3NDMyMzhGMDBCMkJG
Q0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDRkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5k
bGUuY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMtb2YtdGV4dC5odG1sICovOyB9Owog
CQk5MzYxMDAyOTE0REM5NUE3MDA2MTM3OUQgLyogbG90cy1vZi1pZnJhbWVzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2MTAwMjgx
NERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sICovOyB9OwpAQCAtNTMzLDYg
KzUzNCw3IEBACiAJCTdDQzNFMUZBMTk3RTIzNDEwMEJFNjI1MiAvKiBVc2VyQ29udGVudENvbnRy
b2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVc2VyQ29u
dGVudENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQ0U3RThD
MUE0MTE0NEUwMDQ0N0M0QyAvKiBsaWJUZXN0V2ViS2l0QVBJLmEgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IGxpYlRlc3RXZWJLaXRBUEkuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJN0NDRTdFQTMxQTQxMTVDQjAwNDQ3QzRDIC8qIFRlc3RXZWJLaXRBUElM
aWJyYXJ5LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEw
RkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUREMTc0MzIzNEYwMEIyQkZDRiAvKiBX
aWxsTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9h
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUUzMTc0MzIzOEUwMEIy
QkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2lsbExvYWRfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODFCNTAxOTIxNDBGMjMyMzAwRDlFQjU4IC8qIFN0cmluZ0J1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDUsNiArODA3LDcgQEAKIAkJMUFCQzNERUMxODk5QkU1
NTAwNEYwNjI2IC8qIFdlYktpdDIgQ29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBGRCAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tICovLAogCQkJCUExQTRGRTVEMThERDNEQjcwMEI1RUE4QSAv
KiBEb3dubG9hZC5tbSAqLywKIAkJCQkxQUJDM0RFRDE4OTlCRTZEMDA0RjA2MjYgLyogTmF2aWdh
dGlvbi5tbSAqLywKIAkJCQlDRUE2Q0YyMjE5Q0NGNUJEMDA2NEY1QTcgLyogT3BlbkFuZENsb3Nl
V2luZG93Lm1tICovLApAQCAtMTQwNCw2ICsxNDA3LDcgQEAKIAkJCQk3Q0NFN0YyMzFBNDExQUY2
MDA0NDdDNEMgLyogRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRTFBNDEx
QUU2MDA0NDdDNEMgLyogRG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNyYXNoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDQ0U3RUJFMUE0MTFBN0UwMDQ0N0M0QyAvKiBEeW5hbWljRGV2aWNlU2Nh
bGVGYWN0b3IubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0VGQTk2NjFBQzBCOUUyMDBCOTEwRkQg
LyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdD
Q0U3RUUwMUE0MTFBOUEwMDQ0N0M0QyAvKiBFZGl0b3JDb21tYW5kcy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RUJGMUE0MTFBN0UwMDQ0N0M0QyAvKiBFbGVtZW50QXRQb2ludEluV2ViRnJh
bWUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRjFBNDExQUU2MDA0NDdDNEMgLyogRXBo
ZW1lcmFsU2Vzc2lvblB1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZp
c2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLRm91
bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGls
aXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJDb250ZW50
RmlsdGVyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK2NsYXNzIF9XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBbW19XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNd
OworICAgIH0KK307CisKK3N0YXRpYyBOU1N0cmluZyAqYmFzaWNGaWx0ZXIgPSBAIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIu
KndlYmtpdC5vcmdcIn19XSI7CisKK1RFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
VGVzdCwgQ29tcGlsZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNl
OworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRD
b250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQ
RUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAg
ICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKmludmFsaWRG
aWx0ZXIgPSBAIlsiOworCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3Qs
IEludmFsaWRFeHRlbnNpb24pCit7CisgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBm
YWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBj
b21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNv
ZGVkQ29udGVudEV4dGVuc2lvbjppbnZhbGlkRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dL
VXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAg
ICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsK
KworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworfQorCitURVNUX0YoX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVRlc3QsIExvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNv
bXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRl
bnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5k
bGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAg
ICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworCisgICAgX19ibG9jayBi
b29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpA
IlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIg
KmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxM
KGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lTG9v
a2luZ1VwID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVMb29raW5nVXApOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9u
ZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05v
dEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50RmlsdGVyICpmaWx0ZXIs
IE5TRXJyb3IgKmVycm9yKSB7CisgICAgCisgICAgICAgIEVYUEVDVF9OVUxMKGZpbHRlcik7Cisg
ICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZUxvb2tpbmdVcCA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lTG9va2lu
Z1VwKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBSZW1v
dmFsKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CisgICAgW1tf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tVc2VyQ29udGVudEZpbHRl
ciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAgICBFWFBFQ1RfTk9UX05V
TEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOworCisgICAgICAgIGRvbmVD
b21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5nID0gZmFsc2U7
CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3Zl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9u
SGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsK
KworICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCit7CisgICAg
X19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9y
KSB7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisKKyAgICAgICAgZG9uZVJlbW92
aW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVS
ZW1vdmluZyk7Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249669</attachid>
            <date>2015-03-28 13:16:20 -0700</date>
            <delta_ts>2015-03-30 16:22:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143123-20150328131540.patch</filename>
            <type>text/plain</type>
            <size>58862</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAzLTI4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxl
c2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMxMjMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgYSB2YXJpYW50IG9mIGdldEZpbGVT
aXplKCkgdGhhdCB0YWtlcyBhIFBsYXRmb3JtRmlsZUhhbmRsZS4KKyAgICAgICAgLSBBZGRzIGEg
bmV3IGZpbGUgc3lzdGVtIGZ1bmN0aW9uLCByZW5hbWUoKSB3aGljaCBvcGVyYXRlcyBhcyB0aGUg
UE9TSVgKKyAgICAgICAgICByZW5hbWUgZnVuY3Rpb24gZG9lcy4KKworICAgICAgICAqIHBsYXRm
b3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgQWRkIG5ldyBmdW5jdGlvbnMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cmVuYW1lRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIEFk
ZCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEZpbGVTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyZW5h
bWVGaWxlKToKKyAgICAgICAgQWRkIHN0dWJzLgorCiAyMDE1LTAzLTI4ICBKb29uZ2h1biBQYXJr
ICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBudWxscHRyIGNsZWFudXAgaW4g
SW5saW5lRm9vQm94IGNsYXNzZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw5IEBAIHN0cnVjdCBGaWxlTWV0YWRh
dGE7CiBXRUJDT1JFX0VYUE9SVCBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiBXRUJD
T1JFX0VYUE9SVCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7CiBXRUJDT1JFX0VYUE9S
VCBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworV0VCQ09SRV9FWFBP
UlQgYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBu
ZXdQYXRoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwg
bG9uZyBsb25nJiByZXN1bHQpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlU2l6ZShQbGF0
Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wg
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90JiByZXN1bHQpOwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRGaWxlQ3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRp
bWVfdCYgcmVzdWx0KTsgLy8gTm90IGFsbCBwbGF0Zm9ybXMgc3RvcmUgZmlsZSBjcmVhdGlvbiB0
aW1lLgogYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiwgRmlsZU1ldGFkYXRhJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3Bw
CShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5
c3RlbUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVVSUQuaCIKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CiAj
aW5jbHVkZSA8Z2xpYi5oPgpAQCAtMTEwLDYgKzExMSwxMiBAQCBib29sIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgCiAgICAgcmV0dXJuIGZpbGVuYW1lID8gZ19ybWRpcihmaWxl
bmFtZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsKIH0KIAorYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0
aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5h
bWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKQEAgLTEyOSw2ICsxMzYsMTIgQEAgYm9vbCBn
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBnZXRGaWxl
Q3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCiB7CiAgICAgLy8gRklYTUU6IElz
IHRoZXJlIGEgd2F5IHRvIHJldHJpZXZlIGZpbGUgY3JlYXRpb24gdGltZSB3aXRoIEd0ayBvbiBw
bGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0PwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw2ICs3MSwxOSBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgIHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKK2Jvb2wgcmVuYW1l
RmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAg
ICBDU3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRo
KTsKKyAgICBpZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0aEZzUmVwLmRhdGEoKVsw
XSA9PSAnXDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIG5ld1BhdGhG
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKKyAgICBpZiAoIW5ld1Bh
dGhGc1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgp
LCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKK30KKwogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxl
KGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgQ1N0cmluZyBm
c1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKQEAgLTE4Myw2ICsxOTYsMTYg
QEAgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxv
bmcgbG9uZyYgcmVzdWx0KQoreworICAgIHN0cnVjdCBzdGF0IGZpbGVJbmZvOworICAgIGlmIChm
c3RhdChoYW5kbGUsICZmaWxlSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IGZpbGVJbmZvLnN0X3NpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgZ2V0
RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewog
I2lmIE9TKERBUldJTikgfHwgT1MoT1BFTkJTRCkgfHwgT1MoTkVUQlNEKSB8fCBPUyhGUkVFQlNE
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cAkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVT
eXN0ZW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCwxMiBAQCBib29sIGdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uCiAgICAgcmV0dXJuIGdldEZpbGVTaXplRnJv
bUZpbmREYXRhKGZpbmREYXRhLCBzaXplKTsKIH0KIAorYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3Ry
aW5nJiBwYXRoLCB0aW1lX3QmIHRpbWUpCiB7CiAgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRGF0
YTsKQEAgLTE1NCw2ICsxNjAsMTIgQEAgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBT
dHJpbmcmIAogICAgIHJldHVybiAhIVJlbW92ZURpcmVjdG9yeVcoZmlsZW5hbWUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwogfQogCitib29sIHJlbmFtZUZpbGUoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQogewogICAgIFZlY3RvcjxV
Q2hhcj4gYnVmZmVyKE1BWF9QQVRIKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjExNCkK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkz
IEBACisyMDE1LTAzLTI4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0NvbnRlbnQgRXh0ZW5zaW9uc10gRmxlc2ggb3V0IHRoZSBVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMx
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21Db21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YTo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk6CisgICAgICAgIFN3aXRjaCB0
aGUgb3JkZXIgaW4gbWVtb3J5IG9mIGFjdGlvbnMgYW5kIGJ5dGVjb2RlIChhbmQgc3dpdGNoIHRo
ZSBvcmRlciBvZiB0aGUKKyAgICAgICAgdmFyaWFibGVzIGFzIHdlbGwsIHRvIGtlZXAgaXQgY2xl
YXIpLiBUaGlzIHdpbGwgYmVjb21lIG5lY2Vzc2FyeSB3aGVuIHN0cmVhbWluZworICAgICAgICB0
aGUgZGF0YSB0byBkaXNrLCBhcyBhY3Rpb25zIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgYnl0ZWNv
ZGUgYW5kIHdlIHdvdWxkIGhhdmUgdG8ga2VlcCB0aGVtCisgICAgICAgIGluIG1lbW9yeSB1bnRp
bCB0aGUgYnl0ZWNvZGUgd2FzIGZpbmlzaGVkIGNvbXBpbGluZyBpZiB0aGV5IGRpZG4ndCBjb21l
IGJlZm9yZSBpbiB0aGUgZmlsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6CisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSk6CisgICAgICAgIEFkZCBhY2Nlc3NvciBmb3IgdGhlIHBy
b2Nlc3NlcyBkZWZhdWx0IHNoYXJlZCBzdG9yZS4KKworICAgICAgICAoQVBJOjpjb25zdHJ1Y3Rl
ZFBhdGgpOgorICAgICAgICBIZWxwZXIgZm9yIGNvbnN0cnVjdGluZyB0aGUgcGF0aCB0byBhIGZp
bGUgaW4gdGhlIHN0b3JlIGJhc2VkIG9uIGlkZW50aWZpZXIuCisKKyAgICAgICAgKEFQSTo6ZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgSGVscGVycyBmb3IgZW5jb2RpbmcvZGVjb2Rp
bmcgdGhlIGZpbGUgbWV0YWRhdGEgKHZlcnNpb24sIGJ5dGVjb2RlIHNpemUsIGFjdGlvbnMgc2l6
ZSkuCisKKyAgICAgICAgKEFQSTo6b3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24pOgorICAgICAg
ICBIZWxwZXIgdG8gb3BlbiBhbmQgbWFwIGEgZmlsZWQgYmFjayBjb250ZW50IGV4dGVuc2lvbi4K
KworICAgICAgICAoQVBJOjp3cml0ZURhdGFUb0ZpbGUpOgorICAgICAgICBIZWxwZXIgdG8gd3Jp
dGUgYSBEYXRhIG9iamVjdCB0byBhIGZpbGUuCisKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0Zp
bGUpOgorICAgICAgICBIZWxwZXIgdG8gcnVuIHRoZSBjb250ZW50IGV4dGVuc2lvbiBjb21waWxl
ciBhbmQgd3JpdGUgaXQgdG8gZGlzay4gSXQgZmlyc3QKKyAgICAgICAgd3JpdGVzIGl0IHRvIGEg
dGVtcG9yYXJ5IGZpbGUgYW5kIHRoZW4gZG9lcyBhbiBhdG9taWMgcmVuYW1lIG9wZXJhdGlvbiB0
byBwdXQKKyAgICAgICAgdGhlIGZpbGUgaW4gdGhlIGZpbmFsIGxvY2F0aW9uLiBEb2luZyB0aGlz
IG1lYW5zIHRoYXQgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlcyB3aGlsZQorICAgICAgICB0aGUgY29t
cGlsZSBpcyB0YWtpbmcgcGxhY2UsIHRoZSBwYXJ0aWFsbHkgd3JpdHRlbiBmaWxlIHdvbid0IGVu
ZCB1cCBpbiB0aGUgY2FjaGUsIAorICAgICAgICBidXQgcmF0aGVyLCB3aWxsIGJlIGNsZWFuZWQg
dXAgYnkgdGhlIE9TLgorIAorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Ojpsb29rdXBDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGxv
b2t1cCBhbiBleHRlbnNpb24gdGhhdCBoYXMgYmVlbiBjb21waWxlZCB0byBkaXNrLiBPbiBhIGJh
Y2tncm91bmQgcXVldWUsCisgICAgICAgIGl0IGF0dGVtcHRzIHRvIG9wZW4gYW5kIG1hcCB0aGUg
ZXh0ZW5zaW9uIChiYXNlZCBvbiB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCByZXR1cm4g
aXQKKyAgICAgICAgdG8gdGhlIGNhbGxlciB2aWEgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKyAgICAgICAgCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgQVBJIGVudHJ5IHBvaW50IHRvIGNv
bXBpbGUgYW4gZXh0ZW5zaW9uIGFuZCB3cml0ZSBpdCB0byBzdG9yZS4gT24gYSBiYWNrZ3JvdW5k
IHF1ZXVlLCBpdCAKKyAgICAgICAgY29tcGlsZXMgdGhlIGZpbGUgdG8gZGlzayBhbmQgaWYgc3Vj
Y2Vzc2Z1bCwgcmV0dXJucyB0aGUgbWVtb3J5IG1hcHBlZCBkYXRhIHZpYSB0aGUgY2FsbGJhY2sK
KyAgICAgICAgZnVuY3Rpb24gcGFzc2VkIGluLgorCisgICAgICAgIChBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICBBUEkgZW50
cnkgcG9pbnQgdG8gcmVtb3ZlIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBzdG9yZS4gT24gYSBiYWNr
Z3JvdW5kIHF1ZXVlLCBpdCAKKyAgICAgICAgdW5saW5rcyB0aGUgZXh0ZW5zaW9uIChiYXNlZCBv
biB0aGUgaWRlbnRpZmllciBwYXNzZWQgaW4pIGFuZCB0ZWxscyB0aGUgY2FsbGVyIGl0IGNvbXBs
ZXRlZAorICAgICAgICB0aGUgYWN0aW9uIHZpYWwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3Nl
ZCBpbi4KKworICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgSGVscGVyIGZvciB0ZXN0
aW5nIHdoaWNoIHN5bmNocm9ub3VzbHkgdW5saW5rcyBhbGwgdGhlIGZpbGVzIGluIHRoZSBzdG9y
ZS4KKworICAgICAgICAoQVBJOjp1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29y
eSk6CisgICAgICAgIHN0ZDo6ZXJyb3JfY29kZSBhZGFwdG9yIGZvciBzb21lIGdlbmVyaWMgZXJy
b3JzIHRoYXQgY2FuIGhhcHBlbiBpbiB0aGUgc3RvcmUuIFdlIHdpbGwgd2FudAorICAgICAgICB0
byBmbGVzaCB0aGVzZSBvdXQgZnVydGhlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCk6CisgICAg
ICAgIEhlbHBlciB0byBnZXQgdGhlIHBsYXRmb3JtIHNwZWNpZmljIHBhdGggZm9yIHRoZSBzdG9y
ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVSZWYuY3BwOgorICAgICAgICAoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlR2V0VHlwZUlE
KToKKyAgICAgICAgQWRkIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpIGd1YXJkcy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWFsbG9j
XSk6CisgICAgICAgICgrW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3Jl
XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxv
b2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc10pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGluaXRdKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIFNQSSB3cmFwcGVycyBm
b3IgdGhlIHN0b3JlLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDE1LTAzLTI3ICBHd2FuZyBZb29uIEh3
YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtUZXhNYXBdIFNlcGVyYXRlIEJpdG1h
cFRleHR1cmUgcmVsYXRlZCBjbGFzc2VzIGltcGxlbWVudGF0aW9ucyBmcm9tIFRleHR1cmVNYXBw
ZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDksMTUgKzQ5LDE1IEBAIHZvaWQgTGVnYWN5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2wK
IFJlZjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlRnJvbUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoY29uc3QgV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGNvbXBp
bGVyRGF0YSkKIHsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpICsgY29tcGlsZXJE
YXRhLmFjdGlvbnMuc2l6ZSgpKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJl
ZE1lbW9yeS0+ZGF0YSgpKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGlsZXJE
YXRhLmJ5dGVjb2RlLnNpemUoKSk7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFy
ZWRNZW1vcnktPmRhdGEoKSkgKyBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpLCBjb21waWxl
ckRhdGEuYWN0aW9ucy5kYXRhKCksIGNvbXBpbGVyRGF0YS5hY3Rpb25zLnNpemUoKSk7CisgICAg
bWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihzaGFyZWRNZW1vcnktPmRhdGEoKSksIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLmRhdGEoKSwgY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpKTsKKyAgICBt
ZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIGNvbXBpbGVy
RGF0YS5hY3Rpb25zLnNpemUoKSwgY29tcGlsZXJEYXRhLmJ5dGVjb2RlLmRhdGEoKSwgY29tcGls
ZXJEYXRhLmJ5dGVjb2RlLnNpemUoKSk7CiAKICAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGRhdGE7CiAgICAgZGF0YS5kYXRhID0gV1RGOjptb3ZlKHNoYXJlZE1lbW9yeSk7Ci0g
ICAgZGF0YS5ieXRlY29kZU9mZnNldCA9IDA7Ci0gICAgZGF0YS5ieXRlY29kZVNpemUgPSBjb21w
aWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwotICAgIGRhdGEuYWN0aW9uc09mZnNldCA9IGNvbXBp
bGVyRGF0YS5ieXRlY29kZS5zaXplKCk7CisgICAgZGF0YS5hY3Rpb25zT2Zmc2V0ID0gMDsKICAg
ICBkYXRhLmFjdGlvbnNTaXplID0gY29tcGlsZXJEYXRhLmFjdGlvbnMuc2l6ZSgpOworICAgIGRh
dGEuYnl0ZWNvZGVPZmZzZXQgPSBjb21waWxlckRhdGEuYWN0aW9ucy5zaXplKCk7CisgICAgZGF0
YS5ieXRlY29kZVNpemUgPSBjb21waWxlckRhdGEuYnl0ZWNvZGUuc2l6ZSgpOwogCiAgICAgcmV0
dXJuIGNyZWF0ZShXVEY6Om1vdmUoZGF0YSkpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAko
cmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAg
dm9pZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbgogICAgIGRhdGEtPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwogICAgIGVuY29kZXIgPDwg
aGFuZGxlOwogCi0gICAgZW5jb2RlciA8PCBieXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVyIDw8
IGJ5dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7CiAgICAgZW5jb2Rl
ciA8PCBhY3Rpb25zU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGJ5dGVjb2RlT2Zmc2V0OworICAgIGVu
Y29kZXIgPDwgYnl0ZWNvZGVTaXplOwogfQogCiBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkKQEAg
LTUxLDE1ICs1MSwxNCBAQCBib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmRhdGEgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmJ5dGVjb2RlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFj
dGlvbnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmJ5dGVjb2RlT2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5ieXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaAkocmV2aXNpb24gMTgyMTE0KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gZGF0YSwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2Rl
U2l6ZSwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1NpemUpCisgICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRh
LCB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgOiBkYXRhKGRh
dGEpCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICwg
Ynl0ZWNvZGVTaXplKGJ5dGVjb2RlU2l6ZSkKICAgICAgICAgLCBhY3Rpb25zT2Zmc2V0KGFjdGlv
bnNPZmZzZXQpCiAgICAgICAgICwgYWN0aW9uc1NpemUoYWN0aW9uc1NpemUpCisgICAgICAgICwg
Ynl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgYnl0ZWNvZGVTaXplKGJ5
dGVjb2RlU2l6ZSkKICAgICB7CiAgICAgfQogCkBAIC01NywxMCArNTcsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYsIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEmKTsKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IGRhdGE7
Ci0gICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgYnl0ZWNv
ZGVTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQgeyAwIH07CiAgICAgdW5z
aWduZWQgYWN0aW9uc1NpemUgeyAwIH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgeyAw
IH07CisgICAgdW5zaWduZWQgYnl0ZWNvZGVTaXplIHsgMCB9OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw5ICsyNiw0MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKIAorI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZUZpbGVTeXN0ZW1Qb3NpeC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUg
IldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKKwogbmFtZXNwYWNlIEFQ
SSB7CiAKK1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmU6OmRlZmF1bHRTdG9yZSgpCit7CisgICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
KS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpkZWZhdWx0U3RvcmU7Cit9CisKIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQorICAgIDogVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCit7Cit9CisKK1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpT
dHJpbmcmIHN0b3JlUGF0aCkKKyAgICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKKyAgICAsIG1f
Y29tcGlsZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
IENvbXBpbGUgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQorICAgICwgbV9y
ZWFkUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVh
ZCBRdWV1ZSIpKQorICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZSBSZW1vdmUgUXVldWUiKSkKIHsKIH0KIApAQCAtMzYsNCArNjks
Mjg5IEBAIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Vc2VyQ29udGVudEUKIHsKIH0KIAor
c3RhdGljIFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVuc2lvbi0iICsgV2ViQ29yZTo6ZW5jb2RlRm9y
RmlsZU5hbWUoaWRlbnRpZmllcikpOworfQorCitzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9uOworICAgIHVpbnQ2NF90IGFjdGlvbnNPZmZzZXQ7
CisgICAgdWludDY0X3QgYWN0aW9uc1NpemU7CisgICAgdWludDY0X3QgYnl0ZWNvZGVPZmZzZXQ7
CisgICAgdWludDY0X3QgYnl0ZWNvZGVTaXplOworfTsKKworc3RhdGljIERhdGEgZW5jb2RlQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0
YURhdGEpCit7CisgICAgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OkVuY29kZXIgZW5jb2RlcjsKKwor
ICAgIGVuY29kZXIgPDwgbWV0YURhdGEudmVyc2lvbjsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRh
LmFjdGlvbnNTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYnl0ZWNvZGVTaXplOworCisg
ICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwor
fQorCitzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoQ29udGVudEV4
dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCit7CisgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1
Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAg
ICAgICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVv
dXMgbWVtb3J5IHNlZ21lbnQgc28gdGhlIHNpemUKKyAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBh
cHBsaWVyIHNob3VsZCBhbHdheXMgZXF1YWwgdGhlIGRhdGEgc2l6ZS4KKyAgICAgICAgaWYgKHNp
emUgIT0gZmlsZURhdGEuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIFdlYktpdDo6TmV0d29ya0NhY2hlOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lvbikpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0
aW9uc1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQgPSBkZWNvZGVyLmN1cnJlbnRPZmZz
ZXQoKTsKKyAgICAgICAgbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQgPSBtZXRhRGF0YS5hY3Rpb25z
T2Zmc2V0ICsgbWV0YURhdGEuYWN0aW9uc1NpemU7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisK
K3N0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0
aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCit7
CisgICAgYXV0byBmZCA9IFdlYkNvcmU6Om9wZW5GaWxlKHBhdGgsIFdlYkNvcmU6Ok9wZW5Gb3JS
ZWFkKTsKKyAgICBpZiAoZmQgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsKKyAg
ICBpZiAoIVdlYkNvcmU6OmdldEZpbGVTaXplKGZkLCBmaWxlU2l6ZSkpIHsKKyAgICAgICAgV2Vi
Q29yZTo6Y2xvc2VGaWxlKGZkKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGZpbGVEYXRhID0gbWFwRmlsZShmZCwgMCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaWxlU2l6ZSkp
OworICAgIFdlYkNvcmU6OmNsb3NlRmlsZShmZCk7CisKKyAgICBpZiAoZmlsZURhdGEuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2RlQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoRGF0
YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKK3sKKyAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworICAgIGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7CisgICAgICAgIGlmIChXZWJDb3JlOjp3cml0
ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRhdGEsIHNpemUpID09IC0xKSB7CisgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHN1Y2Nlc3M7
Cit9CisKK3N0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoY29uc3QgU3RyaW5n
JiBqc29uLCBjb25zdCBTdHJpbmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRh
RGF0YSYgbWV0YURhdGEsIERhdGEmIG1hcHBlZERhdGEpCit7CisgICAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOworCisgICAgY2xhc3MgQ29tcGlsYXRpb25DbGll
bnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIENvbXBpbGF0aW9uQ2xpZW50KERhdGEmIGJ5dGVjb2RlRGF0YSwg
RGF0YSYgYWN0aW9uc0RhdGEpCisgICAgICAgICAgICA6IG1fYnl0ZWNvZGVEYXRhKGJ5dGVjb2Rl
RGF0YSkKKyAgICAgICAgICAgICwgbV9hY3Rpb25zRGF0YShhY3Rpb25zRGF0YSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNvZGUoVmVjdG9y
PERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J5dGVjb2RlRGF0YSA9IERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkp
OworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8
U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9hY3Rpb25zRGF0YSA9IERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6
ZSgpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRGF0YSYgbV9ieXRlY29k
ZURhdGE7CisgICAgICAgIERhdGEmIG1fYWN0aW9uc0RhdGE7CisgICAgfTsKKworICAgIERhdGEg
Ynl0ZWNvZGU7CisgICAgRGF0YSBhY3Rpb25zOworICAgIENvbXBpbGF0aW9uQ2xpZW50IGNvbXBp
bGF0aW9uQ2xpZW50KGJ5dGVjb2RlLCBhY3Rpb25zKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNv
cGllcyB0aGUgZGF0YS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGJlIHBhc3NpbmcgYW4gaW50ZXJmYWNl
CisgICAgLy8gdG8gdGhlIGNvbXBpbGVyIHRoYXQgY2FuIHdyaXRlIGRpcmVjdGx5IHRvIGEgZmls
ZS4KKworICAgIGF1dG8gY29tcGlsZXJFcnJvciA9IGNvbXBpbGVSdWxlTGlzdChjb21waWxhdGlv
bkNsaWVudCwganNvbik7CisgICAgaWYgKGNvbXBpbGVyRXJyb3IpCisgICAgICAgIHJldHVybiBj
b21waWxlckVycm9yOworCisgICAgYXV0byBhY3Rpb25zQW5kQnl0ZWNvZGUgPSBjb25jYXRlbmF0
ZShhY3Rpb25zLCBieXRlY29kZSk7CisKKyAgICBtZXRhRGF0YS52ZXJzaW9uID0gMTsKKyAgICBt
ZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IGFjdGlvbnMuc2l6ZSgpOworICAgIG1ldGFEYXRhLmJ5dGVj
b2RlU2l6ZSA9IGJ5dGVjb2RlLnNpemUoKTsKKworICAgIGF1dG8gZW5jb2RlZE1ldGFEYXRhID0g
ZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1ldGFEYXRhKTsKKworICAgIG1ldGFEYXRh
LmFjdGlvbnNPZmZzZXQgPSBlbmNvZGVkTWV0YURhdGEuc2l6ZSgpOworICAgIG1ldGFEYXRhLmJ5
dGVjb2RlT2Zmc2V0ID0gZW5jb2RlZE1ldGFEYXRhLnNpemUoKSArIG1ldGFEYXRhLmFjdGlvbnNT
aXplOworCisgICAgYXV0byBkYXRhID0gY29uY2F0ZW5hdGUoZW5jb2RlZE1ldGFEYXRhLCBhY3Rp
b25zQW5kQnl0ZWNvZGUpOworICAgIGF1dG8gZGF0YVNpemUgPSBkYXRhLnNpemUoKTsKKworICAg
IEFTU0VSVChtZXRhRGF0YS5hY3Rpb25zT2Zmc2V0ICsgbWV0YURhdGEuYWN0aW9uc1NpemUgKyBt
ZXRhRGF0YS5ieXRlY29kZVNpemUgPT0gZGF0YVNpemUpOworCisgICAgYXV0byB0ZW1wb3JhcnlG
aWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBTdHJp
bmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVu
dEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgIGlmICh0ZW1wb3JhcnlGaWxl
SGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJl
dHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKwor
ICAgIGlmICghd3JpdGVEYXRhVG9GaWxlKGRhdGEsIHRlbXBvcmFyeUZpbGVIYW5kbGUpKSB7Cisg
ICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAg
cmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwor
ICAgIH0KKworICAgIG1hcHBlZERhdGEgPSBtYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAs
IGRhdGFTaXplKTsKKyAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7
CisKKyAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworCisgICAgaWYgKCFXZWJD
b3JlOjpyZW5hbWVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKKyAgICAg
ICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50
RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25z
dCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0
YSkKK3sKKyAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVh
dGVGcm9tVk1CdWZmZXIoY29uc3RfY2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmls
ZURhdGEuc2l6ZSgpKTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgPSBX
ZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoCisgICAgICAgIHNoYXJlZE1l
bW9yeSwKKyAgICAgICAgbWV0YURhdGEuYWN0aW9uc09mZnNldCwKKyAgICAgICAgbWV0YURhdGEu
YWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBt
ZXRhRGF0YS5ieXRlY29kZVNpemUKKyAgICApOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6
Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkpOworICAgIHJldHVybiBBUEk6OlVz
ZXJDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwgV1RGOjptb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbikpOworfQorCit2b2lkIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6
Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIHN0
ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6
ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFJlZlB0cjxVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlPiBzZWxmKHRoaXMpOworICAgIFN0cmluZ0NhcHR1cmUgaWRlbnRpZmll
ckNhcHR1cmUoaWRlbnRpZmllcik7CisgICAgU3RyaW5nQ2FwdHVyZSBwYXRoQ2FwdHVyZShtX3N0
b3JlUGF0aCk7CisKKyAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3NlbGYsIGlkZW50aWZpZXJD
YXB0dXJlLCBwYXRoQ2FwdHVyZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgYXV0byBw
YXRoID0gY29uc3RydWN0ZWRQYXRoKHBhdGhDYXB0dXJlLnN0cmluZygpLCBpZGVudGlmaWVyQ2Fw
dHVyZS5zdHJpbmcoKSk7CisgICAgICAgIAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURh
dGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURhdGE7CisgICAgICAgIGlmICghb3BlbkFu
ZE1hcENvbnRlbnRFeHRlbnNpb24ocGF0aCwgbWV0YURhdGEsIGZpbGVEYXRhKSkgeworICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0g
eworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpMb29r
dXBGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2VsZiwgaWRl
bnRpZmllckNhcHR1cmUsIGZpbGVEYXRhLCBtZXRhRGF0YSwgY29tcGxldGlvbkhhbmRsZXJdIHsK
KyAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2VyQ29udGVu
dEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyQ2FwdHVyZS5zdHJpbmcoKSwg
bWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHVzZXJD
b250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBX
VEY6OlN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgV1RGOjpTdHJpbmcmIGpzb24sIHN0ZDo6ZnVu
Y3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3Jf
Y29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFJlZlB0cjxVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlPiBzZWxmKHRoaXMpOworICAgIFN0cmluZ0NhcHR1cmUgaWRlbnRpZmllckNhcHR1
cmUoaWRlbnRpZmllcik7CisgICAgU3RyaW5nQ2FwdHVyZSBqc29uQ2FwdHVyZShqc29uKTsKKyAg
ICBTdHJpbmdDYXB0dXJlIHBhdGhDYXB0dXJlKG1fc3RvcmVQYXRoKTsKKworICAgIG1fY29tcGls
ZVF1ZXVlLT5kaXNwYXRjaChbc2VsZiwgaWRlbnRpZmllckNhcHR1cmUsIGpzb25DYXB0dXJlLCBw
YXRoQ2FwdHVyZSwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29u
c3RydWN0ZWRQYXRoKHBhdGhDYXB0dXJlLnN0cmluZygpLCBpZGVudGlmaWVyQ2FwdHVyZS5zdHJp
bmcoKSk7CisKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAg
ICAgICBEYXRhIGZpbGVEYXRhOworICAgICAgICBhdXRvIGVycm9yID0gY29tcGlsZWRUb0ZpbGUo
anNvbkNhcHR1cmUuc3RyaW5nKCksIHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSk7CisgICAgICAg
IGlmIChlcnJvcikgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxm
LCBlcnJvciwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyLCBlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2Vs
ZiwgaWRlbnRpZmllckNhcHR1cmUsIGZpbGVEYXRhLCBtZXRhRGF0YSwgY29tcGxldGlvbkhhbmRs
ZXJdIHsKKyAgICAgICAgICAgIFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiB1c2Vy
Q29udGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyQ2FwdHVyZS5zdHJp
bmcoKSwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHVzZXJDb250ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoc3RkOjplcnJv
cl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgUmVmUHRyPFVzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmU+IHNlbGYodGhpcyk7CisgICAgU3RyaW5nQ2FwdHVyZSBpZGVudGlmaWVyQ2Fw
dHVyZShpZGVudGlmaWVyKTsKKyAgICBTdHJpbmdDYXB0dXJlIHBhdGhDYXB0dXJlKG1fc3RvcmVQ
YXRoKTsKKworICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtzZWxmLCBpZGVudGlmaWVyQ2Fw
dHVyZSwgcGF0aENhcHR1cmUsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgIGF1dG8gcGF0
aCA9IGNvbnN0cnVjdGVkUGF0aChwYXRoQ2FwdHVyZS5zdHJpbmcoKSwgaWRlbnRpZmllckNhcHR1
cmUuc3RyaW5nKCkpOworCisgICAgICAgIGlmICghV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKSkg
eworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzZWxmLCBjb21wbGV0aW9u
SGFuZGxlcl0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKEVycm9yOjpSZW1v
dmVGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3NlbGYsIGNvbXBsZXRpb25I
YW5kbGVyXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKwordm9pZCBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHBhdGggOiBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KG1fc3RvcmVQYXRoLCAiKiIpKQorICAgICAg
ICBXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpOworfQorCitjb25zdCBzdGQ6OmVycm9yX2NhdGVn
b3J5JiB1c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpCit7CisgICAgY2xh
c3MgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjpl
cnJvcl9jYXRlZ29yeSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2Vw
dCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gInVzZXIgY29udGVudCBl
eHRlbnNpb24gc3RvcmUiOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGQ6OnN0cmlu
ZyBtZXNzYWdlKGludCBlcnJvckNvZGUpIGNvbnN0IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I+KGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3Bl
Y2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIjsKKyAgICAgICAgICAgIGNhc2UgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgY29tcGlsZS4iOworICAgICAgICAgICAg
Y2FzZSBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5Owor
ICAgIHJldHVybiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgQVBJCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxNiArMjYsNjIgQEAKICNpZm5kZWYgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZV9oCiAjZGVmaW5lIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVfaAogCisjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKKwogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1
ZGUgPHN5c3RlbV9lcnJvcj4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBXb3JrUXVldWU7Cit9CiAKIG5hbWVzcGFjZSBBUEkgewogCitj
bGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbjsKKwogY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZT4gewogcHVibGljOgorICAgIGVudW0gY2xhc3MgRXJyb3IgeworICAgICAg
ICBMb29rdXBGYWlsZWQgPSAxLAorICAgICAgICBDb21waWxlRmFpbGVkLAorICAgICAgICBSZW1v
dmVGYWlsZWQKKyAgICB9OworCisgICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IGRlZmF1bHRTdG9yZSgpOworCiAgICAgZXhwbGljaXQgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSgpOworICAgIGV4cGxpY2l0IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpT
dHJpbmcmIHN0b3JlUGF0aCk7CiAgICAgdmlydHVhbCB+VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZSgpOworCisgICAgdm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmlu
ZyYgaWRlbnRpZmllciwgY29uc3QgV1RGOjpTdHJpbmcmIGpzb24sIHN0ZDo6ZnVuY3Rpb248dm9p
ZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsK
KyAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lv
bj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZChzdGQ6OmVy
cm9yX2NvZGUpPik7CisKKyAgICAvLyBGb3IgdGVzdGluZyBvbmx5LgorICAgIHZvaWQgc3luY2hy
b25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworCitwcml2YXRlOgorICAgIFdURjo6
U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKKworICAgIGNvbnN0IFdURjo6U3RyaW5nIG1fc3Rv
cmVQYXRoOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7CisgICAgUmVm
PFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1f
cmVtb3ZlUXVldWU7CiB9OwogCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiB1c2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOworCitpbmxpbmUgc3RkOjplcnJvcl9jb2Rl
IG1ha2VfZXJyb3JfY29kZShVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJvcikK
K3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgdXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBBUEkKIAor
bmFtZXNwYWNlIHN0ZCB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVt
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+IDogcHVibGljIHRydWVfdHlw
ZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogI2VuZGlm
IC8vIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVfaApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlZi5jcHAJKHJldmlzaW9uIDE4MjExNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw1ICszMyw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVHlw
ZUlEIFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUdldFR5cGVJRCgpCiB7CisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKICAgICByZXR1cm4gdG9BUEkoQVBJOjpVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlOjpBUElUeXBlKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
CisjaW5jbHVkZSAiU2FuZGJveFV0aWxpdGllcy5oIgorCituYW1lc3BhY2UgQVBJIHsKKworU3Ry
aW5nIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZVBhdGgoKQoreworICAg
IHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIHN0YXRpYyBOU1VSTCAqY29u
dGVudEV4dGVuc2lvblN0b3JlVVJMOworCisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBe
eworICAgICAgICBOU1VSTCAqdXJsID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBV
UkxGb3JEaXJlY3Rvcnk6TlNMaWJyYXJ5RGlyZWN0b3J5IGluRG9tYWluOk5TVXNlckRvbWFpbk1h
c2sgYXBwcm9wcmlhdGVGb3JVUkw6bnVsbHB0ciBjcmVhdGU6Tk8gZXJyb3I6bnVsbHB0cl07Cisg
ICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKworICAgICAgICB1cmwgPSBbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIldl
YktpdCIgaXNEaXJlY3Rvcnk6WUVTXTsKKworICAgICAgICBpZiAoIVdlYktpdDo6cHJvY2Vzc0hh
c0NvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllciA9
IFtOU0J1bmRsZSBtYWluQnVuZGxlXS5idW5kbGVJZGVudGlmaWVyOworICAgICAgICAgICAgaWYg
KCFidW5kbGVJZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIGJ1bmRsZUlkZW50aWZpZXIgPSBb
TlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10ucHJvY2Vzc05hbWU7CisgICAgICAgICAgICB1cmwg
PSBbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpidW5kbGVJZGVudGlmaWVyIGlzRGly
ZWN0b3J5OllFU107CisgICAgICAgIH0KKworICAgICAgICBjb250ZW50RXh0ZW5zaW9uU3RvcmVV
UkwgPSBbW3VybCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50RXh0ZW5zaW9u
cyIgaXNEaXJlY3Rvcnk6WUVTXSByZXRhaW5dOworICAgIH0pOworCisgICAgaWYgKCFbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOmNvbnRlbnRFeHRl
bnNpb25TdG9yZVVSTCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6
bmlsIGVycm9yOm51bGxwdHJdKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
ZGlyZWN0b3J5ICVAIiwgY29udGVudEV4dGVuc2lvblN0b3JlVVJMKTsKKworICAgIHJldHVybiBj
b250ZW50RXh0ZW5zaW9uU3RvcmVVUkwuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVtUmVwcmVz
ZW50YXRpb247Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
CShyZXZpc2lvbiAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSAr
MjcsMTcgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKK0BjbGFzcyBfV0tVc2VyQ29udGVudEZp
bHRlcjsKKwogV0tfQ0xBU1NfQVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpCiBAaW50
ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAogCisrIChpbnN0
YW5jZXR5cGUpZGVmYXVsdFN0b3JlOworCistICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5z
aW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyOworLSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29u
dGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwor
CiBAZW5kCiAKICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMTgyMTE0KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwyMyArMjgsNzggQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKKyNp
bXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRGaWx0ZXJJ
bnRlcm5hbC5oIgorCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdAorLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgX3VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlKCk7CiAKLSAgICBB
UEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZT4oc2VsZik7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQogCi0gICAgcmV0dXJuIHNlbGY7
CisrIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlCit7CisgICAgcmV0dXJuIFdlYktpdDo6d3Jh
cHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpKTsKIH0K
IAotLSAodm9pZClkZWFsbG9jCistICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihO
U1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgX3VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUtPn5Vc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlKCk7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIg
Y29weV0pOwogCi0gICAgW3N1cGVyIGRlYWxsb2NdOworICAgIF91c2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiwgW2hhbmRsZXJdKFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBj
b250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgICAgICBhdXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNv
bnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSloYW5kbGVyLmdldCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGSVhNRTogUGFzcyByZWFsIGVycm9yLgorICAgICAgICAgICAgYXV0byBl
cnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOworICAgICAgICAgICAgcmF3SGFu
ZGxlcihuaWwsIGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0
Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICB9KTsKK30KKwor
LSAodm9pZClsb29rdXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tVc2VyQ29udGVudEZpbHRl
ciAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJd
KFJlZlB0cjxBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6
OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBh
dXRvIHJhd0hhbmRsZXIgPSAodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJv
ciAqKSloYW5kbGVyLmdldCgpOworCisgICAgICAgICAgICAvLyBGSVhNRTogUGFzcyByZWFsIGVy
cm9yLgorICAgICAgICAgICAgYXV0byBlcnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25v
d24pOworICAgICAgICAgICAgcmF3SGFuZGxlcihuaWwsIGVycm9yLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lk
ICheKShfV0tVc2VyQ29udGVudEZpbHRlciAqLCBOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7Cisg
ICAgICAgIHJhd0hhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgp
KSwgbmlsKTsKKyAgICB9KTsKK30KKworLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworCisgICAgX3VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUtPnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2hhbmRsZXJd
KHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIuZ2V0KCk7
CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIHJlYWwgZXJyb3IuCisgICAgICAgICAgICBh
dXRvIGVycm9yID0gY3JlYXRlTlNFcnJvcihXS0Vycm9yVW5rbm93bik7CisgICAgICAgICAgICBy
YXdIYW5kbGVyKGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gcmF3SGFuZGxlciA9ICh2b2lkICheKShOU0Vycm9yICopKWhhbmRsZXIu
Z2V0KCk7CisgICAgICAgIHJhd0hhbmRsZXIobmlsKTsKKyAgICB9KTsKIH0KIAogI3ByYWdtYSBt
YXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCkBAIC01Niw0ICsxMTEsMTUgQEAg
LSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogQGVuZAogCitAaW1wbGVtZW50YXRpb24gX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3IgdGVzdGluZyBv
bmx5LgorCistICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucworeworICAgIF91c2Vy
Q29udGVudEV4dGVuc2lvblN0b3JlLT5zeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKCk7Cit9CisKK0BlbmQKKwogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHJldmlzaW9uIDE4
MjExNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgor
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
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CisKK0BlbmQKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxODIxMTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsNiArMTEzOCw3IEBACiAJCTdDOEVCMTE3MThE
QjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4RUIxMTYxOERCNkExOTAwNzkxN0MyIC8q
IFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0M5RDE1MzcxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdD
b250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M5RDE1MzYxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0
R3JvdXBJbnRlcm5hbC5oICovOyB9OwogCQk3Q0EyNTRFQjE4Mjk5M0NFMDBGQzhBNDEgLyogV0tC
cm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NBMjU0RUExODI5OTNDRTAwRkM4QTQxIC8qIFdLQnJvd3Np
bmdDb250ZXh0UG9saWN5RGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTdDQjE2RkVGMTcyNEJBMjMwMDdBMEE5NSAvKiBjb20uYXBw
bGUuaXN0LmRzLmFwcGxlY29ubmVjdC53ZWJwbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRi
b3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCMTZGRTIx
NzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdp
bi5zYiAqLzsgfTsKIAkJN0NCMTZGRjAxNzI0QkEyNDAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxNkZFMzE3MjRCOUI1MDA3QTBB
OTUgLyogY29tLmFwcGxlLlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiICovOyB9OwogCQk3Q0Ix
NkZGMTE3MjRCQTI2MDA3QTBBOTUgLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNi
IGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDQjE2RkU0MTcyNEI5QjUwMDdBMEE5NSAvKiBjb20uYXBwbGUuV2ViS2l0
LnBsdWdpbi1jb21tb24uc2IgKi87IH07CkBAIC0xMTY5LDYgKzExNzAsNyBAQAogCQk3Q0U0RDIy
MDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIxRTFBNDkxNENB
MDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggKi87IH07CiAJCTdDRTRE
MjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIyNTFB
NDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OwogCQk3Q0U0RDIyODFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMjYx
QTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCAqLzsgfTsKKwkJN0NF
RkE5NjIxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZB
OTYwMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2Eu
bW0gKi87IH07CiAJCTdDRjQ3RkY2MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5u
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NG
NDdGRjQxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgKi87IH07CiAJ
CTdDRjQ3RkY3MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkY1MTcyNzVCNzEw
MDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFn
ZUJhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLzsgfTsKQEAgLTMzNDUs
NiArMzM0Nyw3IEBACiAJCTdDOEVCMTE2MThEQjZBMTkwMDc5MTdDMiAvKiBXS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzlEMTUzNjE4NDU4NERB
MDA5RDM5MTggLyogV0tCcm93c2luZ0NvbnRleHRHcm91cEludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0EyNTRFQTE4Mjk5M0NFMDBGQzhBNDEgLyog
V0tCcm93c2luZ0NvbnRleHRQb2xpY3lEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS0Jyb3dzaW5nQ29udGV4dFBvbGljeURlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0IxNkZFMjE3MjRCOUI1MDA3QTBBOTUgLyogY29tLmFwcGxlLmlz
dC5kcy5hcHBsZWNvbm5lY3Qud2VicGx1Z2luLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNv
bS5hcHBsZS5pc3QuZHMuYXBwbGVjb25uZWN0LndlYnBsdWdpbi5zYjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NCMTZGRTMxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5RdWlj
a1RpbWUgUGx1Z2luLnBsdWdpbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxl
LlF1aWNrVGltZSBQbHVnaW4ucGx1Z2luLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0NCMTZGRTQxNzI0QjlCNTAwN0EwQTk1IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNv
bW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4t
Y29tbW9uLnNiIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzNzcsNiArMzM4MCw3
IEBACiAJCTdDRTREMjFFMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmg7IHBhdGggPSBVSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTdDRTREMjI1MUE0OTE2
QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTREMjI2MUE0OTE2QzIwMEM3
RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NGNDdGRjQxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS0J1bmRsZVBhZ2VC
YW5uZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGNTE3Mjc1Qjcx
MDA4QUNCOTEgLyogV0tCdW5kbGVQYWdlQmFubmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLQnVuZGxlUGFnZUJhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQmFubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC01MzQzLDYgKzUzNDcsNyBAQAogCQkJCTdDMjQxMzAxMUFBQ0ZBNzUwMEE1OEMx
NSAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmggKi8sCiAJCQkJN0MyNDEzMDAxQUFD
RkE3NTAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8sCiAJCQkJ
N0MyNDEzMDQxQUFDRkE5QzAwQTU4QzE1IC8qIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oICovLAorCQkJCTdDQTM3OTNEMUFDMzc4QjMwMDc5REMzNyAvKiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovLAogCQkJCTdDODlEMkI4MUE2QjBGMkMwMDNB
NUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovLAogCQkJCTdDODlEMkI3MUE2QjBGMkMw
MDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLywKIAkJCQk3Qzg5RDJCQjFBNkIw
RjVCMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oICovLApAQCAtNTM1
NSw2ICs1MzYwLDcgQEAKIAkJCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogX1dLV2Vic2l0
ZURhdGFTdG9yZS5oICovLAogCQkJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBfV0tXZWJz
aXRlRGF0YVN0b3JlLm1tICovLAogCQkJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBfV0tX
ZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLywKKwkJCQk3Q0VGQTk2MDFBQzA5OTkzMDBCOTEw
RkQgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tICovLAogCQkJCTFBMzYz
NUFCMUEzMTQ1RTUwMEVENjE5NyAvKiBBUElXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gKi8sCiAJ
CQkJMUFGREU2NDMxOTUxMEI1NTAwQzQ4RkZBIC8qIExlZ2FjeUJ1bmRsZUZvckNsYXNzLm1tICov
LAogCQkJCTM3QzRDMDhCMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdC5oICov
LApAQCAtNzgxMyw2ICs3ODE5LDcgQEAKIAkJCQlCQzg3ODBGQzExNjFDMkI4MDBDQzI3NjggLyog
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RkI3RDMx
MUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBNjdFMEQx
NjVCMkE5OTAwNkNCQTY2IC8qIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3Q0EzNzkzRTFBQzM3OEIzMDA3OURDMzcgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNp
b25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOUZCQThEMTNGRjA0RTYwMERF
RUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQTU2RjI5MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclBy
b3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTk1OTYsNiArOTYwMyw3IEBACiAJCQkJMUEwRUM5MDcx
MjRDMEFCODAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBMEVDOTEwMTI0QzBBRjUwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzQ29ubmVj
dGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3ODY1QjkxNkNBQzcxNTAwQUNF
ODNBIC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQgLyogQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyQkI2RDAx
NDExN0I0RDAwMEYzNUQ0IC8qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5MEQzMTI4MUM5NjYwMDFFQjk2MiAvKiBQbHVn
aW5Qcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQTQ3
OTIzMTJBNTlGRDkwMDgyMzZDMyAvKiBQbHVnaW5Qcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODIxMTQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxNS0wMy0yOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEZsZXNoIG91dCB0aGUgVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzMTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLm1tOiBBZGRlZC4KKyAgICAgICAgQWRkIHRlc3RzIGZvciBfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLgorCiAyMDE1LTAzLTI3ICBHeXV5b3VuZyBLaW0gIDxn
eXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNYWtlXSBSZW1vdmUgdW5uZWNl
c3NhcnkgSU5DTFVERV9JRl9FWElTVFMgbWFjcm8gCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTgyMTE0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUs
NyBAQAogCQk3Q0NFN0Y0RDFBNDExQjlGMDA0NDdDNEMgLyogUmV0YWluUHRyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMjlCMUIxNDg2QjI1OTAw
ODE3REE5IC8qIFJldGFpblB0ci5tbSAqLzsgfTsKIAkJN0NDRTdGNEUxQTQxMUJBNDAwNDQ3QzRD
IC8qIFJldGFpblB0ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzAyOUIxNjE0ODZBRDY0MDA4MTdEQTkgLyogUmV0YWluUHRyLmNwcCAqLzsgfTsK
IAkJN0NDRTdGNEYxQTQxMUJBNDAwNDQ3QzRDIC8qIFJldGFpblB0ckhhc2hpbmcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzA5OTFDNTAxNDNDN0Q2
ODAwNzk5OEYyIC8qIFJldGFpblB0ckhhc2hpbmcuY3BwICovOyB9OworCQk3Q0VGQTk2NjFBQzBC
OUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRUZBOTY0MUFDMEI5RTIwMEI5
MTBGRCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovOyB9OwogCQk3Q0ZCQ0FF
NTE3NDMyMzhGMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAv
KiBXaWxsTG9hZF9CdW5kbGUuY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3MEYg
LyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMtb2YtdGV4
dC5odG1sICovOyB9OwogCQk5MzYxMDAyOTE0REM5NUE3MDA2MTM3OUQgLyogbG90cy1vZi1pZnJh
bWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM2MTAwMjgxNERDOTU3QjAwNjEzNzlEIC8qIGxvdHMtb2YtaWZyYW1lcy5odG1sICov
OyB9OwpAQCAtNTMzLDYgKzUzNCw3IEBACiAJCTdDQzNFMUZBMTk3RTIzNDEwMEJFNjI1MiAvKiBV
c2VyQ29udGVudENvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBVc2VyQ29udGVudENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDQ0U3RThDMUE0MTE0NEUwMDQ0N0M0QyAvKiBsaWJUZXN0V2ViS2l0QVBJLmEgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYlRlc3RXZWJLaXRBUEkuYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0NDRTdFQTMxQTQxMTVDQjAwNDQ3QzRDIC8q
IFRlc3RXZWJLaXRBUElMaWJyYXJ5LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRlc3RXZWJLaXRB
UElMaWJyYXJ5LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0VGQTk2
NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJDQUREMTc0MzIz
NEYwMEIyQkZDRiAvKiBXaWxsTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXaWxsTG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRkJD
QUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbExvYWRfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODFCNTAxOTIxNDBGMjMyMzAwRDlFQjU4IC8qIFN0cmluZ0J1aWxk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQnVpbGRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDUsNiArODA3LDcgQEAKIAkJ
MUFCQzNERUMxODk5QkU1NTAwNEYwNjI2IC8qIFdlYktpdDIgQ29jb2EgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdDRUZBOTY0MUFDMEI5RTIwMEI5MTBG
RCAvKiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tICovLAogCQkJCUExQTRGRTVEMThE
RDNEQjcwMEI1RUE4QSAvKiBEb3dubG9hZC5tbSAqLywKIAkJCQkxQUJDM0RFRDE4OTlCRTZEMDA0
RjA2MjYgLyogTmF2aWdhdGlvbi5tbSAqLywKIAkJCQlDRUE2Q0YyMjE5Q0NGNUJEMDA2NEY1QTcg
LyogT3BlbkFuZENsb3NlV2luZG93Lm1tICovLApAQCAtMTQwNCw2ICsxNDA3LDcgQEAKIAkJCQk3
Q0NFN0YyMzFBNDExQUY2MDA0NDdDNEMgLyogRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0NFN0VFRTFBNDExQUU2MDA0NDdDNEMgLyogRG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbkNy
YXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJFMUE0MTFBN0UwMDQ0N0M0QyAvKiBE
eW5hbWljRGV2aWNlU2NhbGVGYWN0b3IubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0VGQTk2NjFB
QzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDQ0U3RUUwMUE0MTFBOUEwMDQ0N0M0QyAvKiBFZGl0b3JDb21tYW5kcy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUJGMUE0MTFBN0UwMDQ0N0M0QyAvKiBFbGVtZW50
QXRQb2ludEluV2ViRnJhbWUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VFRjFBNDExQUU2
MDA0NDdDNEMgLyogRXBoZW1lcmFsU2Vzc2lvblB1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
Q29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLm1tCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9y
dCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktp
dC9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L19XS1VzZXJDb250ZW50RmlsdGVyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK2Ns
YXNzIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRl
c3QgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBb
W19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29u
dGVudEV4dGVuc2lvbnNdOworICAgIH0KK307CisKK3N0YXRpYyBOU1N0cmluZyAqYmFzaWNGaWx0
ZXIgPSBAIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CisKK1RFU1RfRihfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlVGVzdCwgQ29tcGlsZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZUNv
bXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRl
bnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5k
bGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAg
ICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxM
KGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworfQorCitzdGF0aWMgTlNT
dHJpbmcgKmludmFsaWRGaWx0ZXIgPSBAIlsiOworCitURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVRlc3QsIEludmFsaWRFeHRlbnNpb24pCit7CisgICAgX19ibG9jayBib29sIGRv
bmVDb21waWxpbmcgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0
RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjppbnZhbGlkRmlsdGVyIGNvbXBsZXRp
b25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05P
VF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOworfQorCitURVNU
X0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIExvb2t1cCkKK3sKKyAgICBfX2Js
b2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVy
IGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAg
ICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwor
CisgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsKKyAgICBbW19XS1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rdXBDb250ZW50RXh0ZW5zaW9u
Rm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAKKyAgICAgICAg
RVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKwor
ICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOworfQorCitURVNUX0YoX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKK3sKKyAgICBf
X2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOworICAgIFtbX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKF9XS1VzZXJDb250ZW50
RmlsdGVyICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgCisgICAgICAgIEVYUEVDVF9O
VUxMKGZpbHRlcik7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisKKyAgICAgICAg
ZG9uZUxvb2tpbmdVcCA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lTG9va2luZ1VwKTsKK30KKworVEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVUZXN0LCBSZW1vdmFsKQoreworICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0g
ZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0g
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihfV0tV
c2VyQ29udGVudEZpbHRlciAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIAorICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKKyAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwor
CisgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CisKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZVJl
bW92aW5nID0gZmFsc2U7CisgICAgW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1
bHRTdG9yZV0gcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5z
aW9uIiBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKKworICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOworICAgIH1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKK30KKworVEVTVF9G
KF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJS
ZW1vdmUpCit7CisgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOworICAgIFtb
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpe
KE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CisKKyAg
ICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmVSZW1vdmluZyk7Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>