<?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>132024</bug_id>
          
          <creation_ts>2014-04-22 14:33:32 -0700</creation_ts>
          <short_desc>[iOS] WebKit2 File Upload Support</short_desc>
          <delta_ts>2014-05-02 12:29:42 -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>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>enrica</cc>
    
    <cc>joepeck</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1003064</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-22 14:33:32 -0700</bug_when>
    <thetext>iOS File Upload support (&lt;input type=&quot;file&quot;&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003065</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-22 14:33:52 -0700</bug_when>
    <thetext>&lt;rdar://problem/16420629&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003070</commentid>
    <comment_count>2</comment_count>
      <attachid>229913</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-22 14:57:32 -0700</bug_when>
    <thetext>Created attachment 229913
[PATCH] Proposed Fix

This is a faithful implementation matching iOS WK1 very closely while at the same time moving off of deprecated / incomplete APIs and reducing unnecessary complexity.

I expect plenty of comments, so don&apos;t hold back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003073</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-22 14:58:58 -0700</bug_when>
    <thetext>Attachment 229913 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:490:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:510:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:560:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 22 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>1003907</commentid>
    <comment_count>4</comment_count>
      <attachid>229913</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-24 17:30:24 -0700</bug_when>
    <thetext>Comment on attachment 229913
[PATCH] Proposed Fix

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

&gt; Source/WebCore/English.lproj/Localizable.strings:5
&gt; +&quot;# Photos and # Videos (file upload on page label for image and videos&quot; = &quot;%@ and %@&quot;;

Missing end parenthesis in comment.

&gt; Source/WebCore/English.lproj/Localizable.strings:8
&gt; +&quot;# Videos (file upload on page label for multiple videos&quot; = &quot;%@ Videos&quot;;

Missing end parenthesis in comment.

&gt; Source/WebCore/English.lproj/Localizable.strings:71
&gt; +&quot;1 Video (file upload on page label for one video&quot; = &quot;1 Video&quot;;

Missing end parenthesis in comment.

&gt; Source/WebKit2/Shared/WebOpenPanelParameters.h:46
&gt; -    bool allowMultipleFiles() const { return m_settings.allowsMultipleFiles; } 
&gt; +    bool allowMultipleFiles() const { return m_settings.allowsMultipleFiles; }

Do we really need this whitespace change in an otherwise untouched file in the patch?

&gt; Source/WebKit2/UIProcess/PageClient.h:256
&gt; +    virtual void handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, WebOpenPanelParameters*, WebOpenPanelResultListenerProxy*) = 0;

Do these all have to be pointers? Can’t they be references?

&gt; Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp:48
&gt; +static Vector&lt;String&gt; filePathsFromFileURLs(API::Array* fileURLs)

Can this take a reference instead of a pointer?

&gt; Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp:59
&gt;              URL url(URL(), apiURL-&gt;string());
&gt;              filePaths.uncheckedAppend(url.fileSystemPath());

Not sure this needs a local variable. Just write it like this:

    filePaths.uncheckedAppend(URL(URL(), apiURL-&gt;string()).fileSystemPath());

&gt; Source/WebKit2/UIProcess/WebOpenPanelResultListenerProxy.cpp:83
&gt; +    Vector&lt;String&gt; filePaths = filePathsFromFileURLs(fileURLsArray);
&gt;      m_page-&gt;didChooseFilesForOpenPanel(filePaths);

Not sure we need a local variable here.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:3022
&gt; +#if !PLATFORM(IOS)
&gt;      if (!m_uiClient-&gt;runOpenPanel(this, frame, parameters.get(), m_openPanelResultListener.get()))
&gt;          didCancelForOpenPanel();
&gt; +#else
&gt; +    m_pageClient.handleRunOpenPanel(this, frame, parameters.get(), m_openPanelResultListener.get());
&gt; +#endif

Do we really need this dichotomy?

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.h:26
&gt; +#if PLATFORM(IOS)

Do we really need this in an iOS-specific header?

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:216
&gt; +    RetainPtr&lt;CGImageRef&gt; imageRef = [generator copyCGImageAtTime:kCMTimeZero actualTime:nil error:&amp;error];

I think this leaks, because there is no adoptNS.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:585
&gt; +        RetainPtr&lt;_WKFileUploadItem&gt; item = adoptNS([[_WKVideoFileUploadItem alloc] initWithFilePath:filePath mediaURL:mediaURL]);

I don’t think we need a local variable here. I suggest just doing the adoptNS.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:602
&gt; +            static NSString *kTemporaryDirectoryName = @&quot;WKWebFileUpload&quot;;
&gt; +            static NSString *kUploadImageName = @&quot;image.jpg&quot;;

These should be const or static const rather than static.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:638
&gt; +            RetainPtr&lt;_WKFileUploadItem&gt; item = adoptNS([[_WKImageFileUploadItem alloc] initWithFilePath:filePath originalImage:originalImage]);

I don’t think we need a local variable here. I suggest just doing the adoptNS.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:696
&gt; +        title = [NSString stringWithFormat:WEB_UI_STRING_KEY(&quot;%@ and %@&quot;, &quot;# Photos and # Videos (file upload on page label for image and videos&quot;, &quot;File Upload images and videos label&quot;), imageString, videoString];

Combining the two localization strings here with “and” does not seem good for localization. We should always build a whole string. Maybe it always worked this way, but it’s normally not acceptable to do that. We should have four different combinations.

&gt; Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.h:48
&gt; +    void didChooseFilesWithDisplayStringAndIcon(const Vector&lt;String&gt;&amp;, const String&amp; displayString, WebCore::Icon*);

Can this take a reference instead of a pointer?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:3005
&gt; +#if USE(CG)

Why this #if? When would PLATFORM(IOS) be true, but USE(CG) false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003941</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-24 19:19:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 229913 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229913&amp;action=review

&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:3022
&gt; &gt; +#if !PLATFORM(IOS)
&gt; &gt;      if (!m_uiClient-&gt;runOpenPanel(this, frame, parameters.get(), m_openPanelResultListener.get()))
&gt; &gt;          didCancelForOpenPanel();
&gt; &gt; +#else
&gt; &gt; +    m_pageClient.handleRunOpenPanel(this, frame, parameters.get(), m_openPanelResultListener.get());
&gt; &gt; +#endif
&gt; 
&gt; Do we really need this dichotomy?

On iOS WebKit I don&apos;t think it makes sense to let a client handle the file open dialog. iOS wants to do its own handling in WebKit2. So I think it does make sense to ignore the client and do default handling.

An alternative could be always trying both the uiclient, falling back to the page client, and then falling back to canceling. I will look into that.


&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.h:26
&gt; &gt; +#if PLATFORM(IOS)
&gt; 
&gt; Do we really need this in an iOS-specific header?

This is the dominating pattern right now.

All Mac and iOS files are included in the same Xcode project and included in both builds. Inside each file there is an #if PLATFORM if it really is for one platform or the other. Despite this being in an &quot;ios&quot; directory it is included in the Mac build.

Maybe we should find a cleaner way to specify which files are included in which builds.


&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:216
&gt; &gt; +    RetainPtr&lt;CGImageRef&gt; imageRef = [generator copyCGImageAtTime:kCMTimeZero actualTime:nil error:&amp;error];
&gt; 
&gt; I think this leaks, because there is no adoptNS.

Good catch.


&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:696
&gt; &gt; +        title = [NSString stringWithFormat:WEB_UI_STRING_KEY(&quot;%@ and %@&quot;, &quot;# Photos and # Videos (file upload on page label for image and videos&quot;, &quot;File Upload images and videos label&quot;), imageString, videoString];
&gt; 
&gt; Combining the two localization strings here with “and” does not seem good for localization. We should always build a whole string. Maybe it always worked this way, but it’s normally not acceptable to do that. We should have four different combinations.

So you are suggesting a new string for the complete combination?

    &quot;%@ Photos and %@ Videos&quot;


&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.h:48
&gt; &gt; +    void didChooseFilesWithDisplayStringAndIcon(const Vector&lt;String&gt;&amp;, const String&amp; displayString, WebCore::Icon*);
&gt; 
&gt; Can this take a reference instead of a pointer?

It would be valid to pass a null icon here, that would just tell WebCore there is no display icon. We should always under normal circumstances have an icon, but it could be possible (e.g. failing to produce a thumbnail image somehow in the UIProcess) and null is handled gracefully in WebCore (by just not showing an icon).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005064</commentid>
    <comment_count>6</comment_count>
      <attachid>230403</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-29 12:42:37 -0700</bug_when>
    <thetext>Created attachment 230403
[PATCH] Addressed Comments

This addresses the majority of Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005087</commentid>
    <comment_count>7</comment_count>
      <attachid>230403</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-04-29 13:30:27 -0700</bug_when>
    <thetext>Comment on attachment 230403
[PATCH] Addressed Comments

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

Just one initial comment.

&gt; Source/WebKit2/ChangeLog:9
&gt; +        Include MobileCoreServices on iOS for kUTTypeImage/kUTTypeMovie.

Couldn&apos;t you soft link MobileCoreServices? We already do that in WebCore and I think it would be more performant.

&gt; Source/WebKit2/Configurations/WebKit2.xcconfig:34
&gt;  FRAMEWORK_AND_LIBRARY_LDFLAGS_iphoneos = $(FRAMEWORK_AND_LIBRARY_LDFLAGS_iphonesimulator) -framework IOSurface;

See my comment in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005095</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-29 13:51:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 230403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230403&amp;action=review
&gt; 
&gt; Just one initial comment.
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:9
&gt; &gt; +        Include MobileCoreServices on iOS for kUTTypeImage/kUTTypeMovie.
&gt; 
&gt; Couldn&apos;t you soft link MobileCoreServices? We already do that in WebCore and I think it would be more performant.
&gt; 
&gt; &gt; Source/WebKit2/Configurations/WebKit2.xcconfig:34
&gt; &gt;  FRAMEWORK_AND_LIBRARY_LDFLAGS_iphoneos = $(FRAMEWORK_AND_LIBRARY_LDFLAGS_iphonesimulator) -framework IOSurface;
&gt; 
&gt; See my comment in the ChangeLog.

I figure there is no advantage to soft linking it if UIKit is hard linking it and this hard links UIKit, but maybe my understanding of this is flawed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005204</commentid>
    <comment_count>9</comment_count>
      <attachid>230403</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-04-29 16:40:23 -0700</bug_when>
    <thetext>Comment on attachment 230403
[PATCH] Addressed Comments

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

The patch looks good. One remaining question: don&apos;t you need to handle rotation? I know we do it for select elements and for the airplay picker.

&gt;&gt;&gt; Source/WebKit2/ChangeLog:9
&gt;&gt;&gt; +        Include MobileCoreServices on iOS for kUTTypeImage/kUTTypeMovie.
&gt;&gt; 
&gt;&gt; Couldn&apos;t you soft link MobileCoreServices? We already do that in WebCore and I think it would be more performant.
&gt; 
&gt; I figure there is no advantage to soft linking it if UIKit is hard linking it and this hard links UIKit, but maybe my understanding of this is flawed.

You are right, I forgot we link UIKit.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:653
&gt; +    NSString *imageCountString, *videoCountString;

Split over two lines.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:654
&gt; +    NSString *imageString, *videoString;

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005501</commentid>
    <comment_count>10</comment_count>
      <attachid>230403</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-04-30 13:52:10 -0700</bug_when>
    <thetext>Comment on attachment 230403
[PATCH] Addressed Comments

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

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:695
&gt; +        title = [NSString stringWithFormat:WEB_UI_STRING_KEY(&quot;%@ Photos and %@ Videos&quot;, &quot;# Photos and # Videos (file upload on page label for image and videos)&quot;, &quot;File Upload images and videos label&quot;), imageCountString, videoCountString];
&gt; +        break;

Arg this won&apos;t work for 1 photo and 1 video this would say &quot;1 Photos and 1 Videos&quot;. I think I misinterpreted Darin&apos;s comment. It sounds like, if I want to make explicit strings to handle the &quot;and&quot; case I would need a bunch just for that:

    &quot;1 Photo and 1 Video&quot;
    &quot;1 Photo and # Videos&quot;
    &quot;# Photos and 1 Video&quot;
    &quot;# Photos and # Videos&quot;

A bit lengthy, but I can do that. I&apos;ll do it in a follow-up. And then I can clean up this code since we wouldn&apos;t really need the earlier switches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006091</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-05-02 12:29:42 -0700</bug_when>
    <thetext>&lt;https://trac.webkit.org/r168180&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229913</attachid>
            <date>2014-04-22 14:57:32 -0700</date>
            <delta_ts>2014-04-29 12:42:37 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>file-upload-1.patch</filename>
            <type>text/plain</type>
            <size>66645</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5Y2ZjNTEwLi5mMTNlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTQtMDQtMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbaU9TXSBXZWJLaXQyIEZpbGUgVXBsb2FkIFN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjAyNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6
YWJsZS5zdHJpbmdzOgorICAgICAgICBOZXcgbG9jYWxpemVkIHN0cmluZ3MgZm9yIDxpbnB1dCB0
eXBlPSJmaWxlIj4gb24gaU9TLgorCiAyMDE0LTA0LTIxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUHJvZmlsZXJBZ2VudDo6ZGlzYWJsZSBpcyBj
YWxsaW5nIHRoZSB3cm9uZyBzdXBlcmNsYXNzIG1ldGhvZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzIGIvU291cmNlL1dlYkNvcmUv
RW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCmluZGV4IGI3N2E0MmMuLjcwMjhlMTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3Ry
aW5ncworKysgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmlu
Z3MKQEAgLTEsMyArMSwxMiBAQAorLyogRmlsZSBVcGxvYWQgbXVsdGlwbGUgcGhvdG9zIGxhYmVs
ICovCisiIyBQaG90b3MgKGZpbGUgdXBsb2FkIG9uIHBhZ2UgbGFiZWwgZm9yIG11bHRpcGxlIHBo
b3RvcykiID0gIiVAIFBob3RvcyI7CisKKy8qIEZpbGUgVXBsb2FkIGltYWdlcyBhbmQgdmlkZW9z
IGxhYmVsICovCisiIyBQaG90b3MgYW5kICMgVmlkZW9zIChmaWxlIHVwbG9hZCBvbiBwYWdlIGxh
YmVsIGZvciBpbWFnZSBhbmQgdmlkZW9zIiA9ICIlQCBhbmQgJUAiOworCisvKiBGaWxlIFVwbG9h
ZCBtdWx0aXBsZSB2aWRlb3MgbGFiZWwgKi8KKyIjIFZpZGVvcyAoZmlsZSB1cGxvYWQgb24gcGFn
ZSBsYWJlbCBmb3IgbXVsdGlwbGUgdmlkZW9zIiA9ICIlQCBWaWRlb3MiOworCiAvKiBhY2Nlc3Np
YmlsaXR5IGhlbHAgdGV4dCBmb3IgbWVkaWEgY29udHJvbGxlciB0aW1lIHZhbHVlID49IDEgZGF5
ICovCiAiJTEkZCBkYXlzICUyJGQgaG91cnMgJTMkZCBtaW51dGVzICU0JGQgc2Vjb25kcyIgPSAi
JTEkZCBkYXlzICUyJGQgaG91cnMgJTMkZCBtaW51dGVzICU0JGQgc2Vjb25kcyI7CiAKQEAgLTU1
LDYgKzY0LDEyIEBACiAvKiBQcmVzZW50IHRoZSBlbGVtZW50IDxzZWxlY3QgbXVsdGlwbGU+IHdo
ZW4gYSBzaW5nbGUgPG9wdGlvbj4gaXMgc2VsZWN0ZWQgKGlPUyBvbmx5KSAqLwogIjEgSXRlbSIg
PSAiMSBJdGVtIjsKIAorLyogRmlsZSBVcGxvYWQgc2luZ2xlIHBob3RvIGxhYmVsICovCisiMSBQ
aG90byAoZmlsZSB1cGxvYWQgb24gcGFnZSBsYWJlbCBmb3Igb25lIHBob3RvKSIgPSAiMSBQaG90
byI7CisKKy8qIEZpbGUgVXBsb2FkIHNpbmdsZSB2aWRlbyBsYWJlbCAqLworIjEgVmlkZW8gKGZp
bGUgdXBsb2FkIG9uIHBhZ2UgbGFiZWwgZm9yIG9uZSB2aWRlbyIgPSAiMSBWaWRlbyI7CisKIC8q
IE1lbnUgaXRlbSB0aXRsZSBmb3IgS0VZR0VOIHBvcC11cCBtZW51ICovCiAiMTAyNCAoTWVkaXVt
IEdyYWRlKSIgPSAiMTAyNCAoTWVkaXVtIEdyYWRlKSI7CiAKQEAgLTk0LDYgKzEwOSw5IEBACiAv
KiBVbmRvIGFjdGlvbiBuYW1lICovCiAiQm9sZCAoVW5kbyBhY3Rpb24gbmFtZSkiID0gIkJvbGQi
OwogCisvKiBGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBidXR0b24gc3RyaW5nIHRvIGNhbmNlbCAq
LworIkNhbmNlbCAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIgPSAiQ2FuY2VsIjsKKwogLyog
VGl0bGUgZm9yIENhbmNlbCBidXR0b24gbGFiZWwgaW4gYnV0dG9uIGJhciAqLwogIkNhbmNlbCBi
dXR0b24gbGFiZWwgaW4gYnV0dG9uIGJhciIgPSAiQ2FuY2VsIjsKIApAQCAtMzc5LDYgKzM5Nyw5
IEBACiAvKiBNZWRpYSBQYXVzZSBjb250ZXh0IG1lbnUgaXRlbSAqLwogIlBhdXNlIiA9ICJQYXVz
ZSI7CiAKKy8qIEZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1dHRvbiBzdHJpbmcgZm9yIGNob29z
aW5nIGFuIGV4aXN0aW5nIG1lZGlhIGl0ZW0gZnJvbSB0aGUgUGhvdG8gTGlicmFyeSAqLworIlBo
b3RvIExpYnJhcnkgKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiID0gIlBob3RvIExpYnJhcnki
OworCiAvKiBNZWRpYSBQbGF5IGNvbnRleHQgbWVudSBpdGVtICovCiAiUGxheSIgPSAiUGxheSI7
CiAKQEAgLTUyNiw2ICs1NDcsMTUgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJTdXBlcnNj
cmlwdCAoVW5kbyBhY3Rpb24gbmFtZSkiID0gIlN1cGVyc2NyaXB0IjsKIAorLyogRmlsZSBVcGxv
YWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBvbmx5IHBob3Rv
cyAqLworIlRha2UgUGhvdG8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiID0gIlRha2UgUGhv
dG8iOworCisvKiBGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmluZyBm
b3IgdGFraW5nIHBob3RvcyBvciB2aWRlb3MgKi8KKyJUYWtlIFBob3RvIG9yIFZpZGVvIChmaWxl
IHVwbG9hZCBhY3Rpb24gc2hlZXQpIiA9ICJUYWtlIFBob3RvIG9yIFZpZGVvIjsKKworLyogRmls
ZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBvbmx5
IHZpZGVvcyAqLworIlRha2UgVmlkZW8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiID0gIlRh
a2UgVmlkZW8iOworCiAvKiBUZXh0IFJlcGxhY2VtZW50IGNvbnRleHQgbWVudSBpdGVtICovCiAi
VGV4dCBSZXBsYWNlbWVudCIgPSAiVGV4dCBSZXBsYWNlbWVudCI7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAw
YzYxNDE5Li40MjUxNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTE2IEBACiAyMDE0LTA0LTIy
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgW2lPU10g
V2ViS2l0MiBGaWxlIFVwbG9hZCBTdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIwMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL1dlYktpdDIueGNjb25maWc6Cisg
ICAgICAgIEluY2x1ZGUgTW9iaWxlQ29yZVNlcnZpY2VzIG9uIGlPUyBmb3Iga1VUVHlwZUltYWdl
L2tVVFR5cGVNb3ZpZS4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpmaWxlUGF0
aHNGcm9tRmlsZVVSTHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5OjpjaG9vc2VGaWxlcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZElj
b24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
OjpkaWRDaG9vc2VGaWxlc1dpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENob29zZUZpbGVzRm9yT3BlblBh
bmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKToKKyAgICAgICAgTWVzc2FnZSBmb3J3YXJkaW5n
IGZvciBjaG9vc2luZyBmaWxlcyBhbmQgcHJvdmlkaW5nIGEgZGlzcGxheSBzdHJpbmcgYW5kIGlj
b24sCisgICAgICAgIGxlYWRpbmcgZG93biB0byB0aGUgZXhpc3RpbmcgV2ViQ29yZSBGaWxlQ2hv
b3NlciBtZXRob2QuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6aGFuZGxlUnVuT3BlblBhbmVsKToKKyAgICAgICAgQWRkIGEgZGVmYXVsdCBoYW5kbGVy
IGZvciBmaWxlIG9wZW4gcGFuZWwgb24gaU9TLgorICAgICAgICBGb3J3YXJkcyB0byB0aGUgY29u
dGVudCB2aWV3LgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBsYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbl0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF93ZWJUb3VjaEV2ZW50c1JlY29nbml6ZWQ6XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2hpZ2hsaWdodExvbmdQcmVzc1JlY29nbml6ZWQ6
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xvbmdQcmVzc1JlY29nbml6ZWQ6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbmdsZVRhcFJlY29nbml6ZWQ6XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX2RvdWJsZVRhcFJlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX3R3b0ZpbmdlckRvdWJsZVRhcFJlY29nbml6ZWQ6XSk6CisgICAgICAgIEtl
ZXAgdHJhY2sgb2YgdGhlIGxhc3QgaW50ZXJhY3Rpb24gbG9jYXRpb24uIFRoaXMgbWF0Y2hlcyBw
cmV2aW91cyBiZWhhdmlvcgorICAgICAgICBvZiBzaG93aW5nIHRoZSBmaWxlIHVwbG9hZCBwb3Bv
dmVyIHdoZXJlIHRoZSB1c2VyIHRhcHBlZCwgdG8gaGFuZGxlCisgICAgICAgIGNhc2VzIHdoZXJl
IHRoZSA8aW5wdXQ+IGlzIGhpZGRlbi4KKworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaG93
UnVuT3BlblBhbmVsOnJlc3VsdExpc3RlbmVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGZpbGVVcGxvYWRQYW5lbERpZERpc21pc3M6XSk6CisgICAgICAgIEhhbmRsZSBzaG93aW5nIHRo
ZSBjbGVhbmluZyB1cCBhZnRlciB0aGUgZmlsZSB1cGxvYWQgcGFuZWwuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbTogQWRkZWQuCisgICAgICAgIChzcXVh
cmVDcm9wUmVjdEZvclNpemUpOgorICAgICAgICAoc3F1YXJlSW1hZ2UpOgorICAgICAgICAodGh1
bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKToKKyAgICAgICAgKC1bX1dLRmlsZVVwbG9hZEl0ZW0g
aXNWaWRlb10pOgorICAgICAgICAoLVtfV0tGaWxlVXBsb2FkSXRlbSBmaWxlVVJMXSk6CisgICAg
ICAgICgtW19XS0ZpbGVVcGxvYWRJdGVtIGRpc3BsYXlJbWFnZV0pOgorICAgICAgICAoLVtfV0tJ
bWFnZUZpbGVVcGxvYWRJdGVtIGluaXRXaXRoRmlsZVBhdGg6b3JpZ2luYWxJbWFnZTpdKToKKyAg
ICAgICAgKC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBpc1ZpZGVvXSk6CisgICAgICAgICgtW19X
S0ltYWdlRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOgorICAgICAgICAoLVtfV0tJbWFnZUZpbGVV
cGxvYWRJdGVtIGRpc3BsYXlJbWFnZV0pOgorICAgICAgICAoLVtfV0tWaWRlb0ZpbGVVcGxvYWRJ
dGVtIGluaXRXaXRoRmlsZVBhdGg6bWVkaWFVUkw6XSk6CisgICAgICAgICgtW19XS1ZpZGVvRmls
ZVVwbG9hZEl0ZW0gaXNWaWRlb10pOgorICAgICAgICAoLVtfV0tWaWRlb0ZpbGVVcGxvYWRJdGVt
IGZpbGVVUkxdKToKKyAgICAgICAgKC1bX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBkaXNwbGF5SW1h
Z2VdKToKKyAgICAgICAgSGVscGVyIGNsYXNzIGZvciBlYWNoIGltYWdlIHBpY2tlciBzZWxlY3Rp
b24uIEtub3dzIGhvdyB0byBnZXQKKyAgICAgICAgYSBmaWxlIFVSTCBhbmQgdGh1bWJuYWlsIGRp
c3BsYXkgaW1hZ2UgZm9yIHRoZSBpdGVtLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVs
IGluaXRXaXRoVmlldzpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZGVhbGxvY10p
OgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfZGlzcGF0Y2hEaWREaXNtaXNzXSk6Cisg
ICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9jYW5jZWxdKToKKyAgICAgICAgKC1bV0tGaWxl
VXBsb2FkUGFuZWwgX2Nob29zZUZpbGVzOmRpc3BsYXlTdHJpbmc6aWNvbkltYWdlOl0pOgorICAg
ICAgICBMaWZldGltZSBvZiB0aGUgdXBsb2FkIHBhbmVsIHJlcXVpcmVzIHRoYXQgZWl0aGVyIGNh
bmNlbCBvciBjaG9vc2UKKyAgICAgICAgbXVzdCBoYXBwZW4gYXMgd2UgZ28gdGhyb3VnaCB0aGUg
ZmlsZSBwaWNraW5nIHByb2Nlc3MuCisKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgcHJl
c2VudFdpdGhQYXJhbWV0ZXJzOldlYktpdDo6cmVzdWx0TGlzdGVuZXI6V2ViS2l0OjpdKToKKyAg
ICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZGlzbWlzc10pOgorICAgICAgICBBUEkgdG8gc2hv
dyBvciBkaXNtaXNzIHRoZSBwYW5lbC4KKworICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBf
ZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDpdKToKKyAgICAgICAgSGVscGVyIHRvIGNsZWFuIHVwIHRo
ZSBVSSBhcyBpdCBwcm9ncmVzc2VzIG9yIGNvbXBsZXRlcyBubyBtYXR0ZXIgdGhlIGRldmljZSBp
ZGlvbS4KKworICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfcHJlc2VudFBvcG92ZXJXaXRo
Q29udGVudFZpZXdDb250cm9sbGVyOmFuaW1hdGVkOl0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxv
YWRQYW5lbCBfcHJlc2VudEZ1bGxzY3JlZW5WaWV3Q29udHJvbGxlcjphbmltYXRlZDpdKToKKyAg
ICAgICAgVUkgcHJlc2VudGF0aW9uIGZvciB0aGUgYXBwcm9wcmlhdGUgaWRpb20uCisKKyAgICAg
ICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOl0p
OgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfc2hvd01lZGlhU291cmNlU2VsZWN0aW9u
U2hlZXRdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX3Nob3dQaG90b1BpY2tlcldp
dGhTb3VyY2VUeXBlOl0pOgorICAgICAgICBTaG93aW5nIHRoZSBhY3Rpb24gc2hlZXQgb3IgaW1h
Z2UgcGlja2VyLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIHBvcG92ZXJDb250cm9s
bGVyRGlkRGlzbWlzc1BvcG92ZXI6XSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF93
aWxsTXVsdGlwbGVTZWxlY3Rpb25EZWxlZ2F0ZUJlQ2FsbGVkXSk6CisgICAgICAgICgtW1dLRmls
ZVVwbG9hZFBhbmVsIGltYWdlUGlja2VyQ29udHJvbGxlcjpkaWRGaW5pc2hQaWNraW5nTWVkaWFX
aXRoSW5mbzpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgaW1hZ2VQaWNrZXJDb250
cm9sbGVyOmRpZEZpbmlzaFBpY2tpbmdNdWx0aXBsZU1lZGlhV2l0aEluZm86XSk6CisgICAgICAg
ICgtW1dLRmlsZVVwbG9hZFBhbmVsIGltYWdlUGlja2VyQ29udHJvbGxlckRpZENhbmNlbDpdKToK
KyAgICAgICAgQWN0aW9uIHNoZWV0IG9yIGltYWdlIHBpY2tlciBoYW5kbGVycy4KKworICAgICAg
ICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfcHJvY2Vzc01lZGlhSW5mb0RpY3Rpb25hcmllczpzdWNj
ZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBf
cHJvY2Vzc01lZGlhSW5mb0RpY3Rpb25hcmllczphdEluZGV4OnByb2Nlc3NlZFJlc3VsdHM6cHJv
Y2Vzc2VkSW1hZ2VDb3VudDpwcm9jZXNzZWRWaWRlb0NvdW50OnN1Y2Nlc3NCbG9jazpmYWlsdXJl
QmxvY2s6XSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxvYWRJdGVtRnJvbU1l
ZGlhSW5mbzpzdWNjZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0pOgorICAgICAgICAoLVtXS0ZpbGVV
cGxvYWRQYW5lbCBfZGlzcGxheVN0cmluZ0ZvclBob3Rvczp2aWRlb3M6XSk6CisgICAgICAgIFBy
b2Nlc3Npbmcgc2VsZWN0aW9ucyBmcm9tIHRoZSBpbWFnZSBwaWNrZXIgdG8gRmlsZVVwbG9hZEl0
ZW1zLgorCisyMDE0LTA0LTIyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+
CisKICAgICAgICAgUmVtb3ZlIHVudXNlZCBsb2NhbCB2YXJpYWJsZQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyMDIwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL1dlYktpdDIueGNjb25maWcgYi9Tb3VyY2UvV2Vi
S2l0Mi9Db25maWd1cmF0aW9ucy9XZWJLaXQyLnhjY29uZmlnCmluZGV4IGRmMzhiOTcuLmJiNjEz
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL1dlYktpdDIueGNj
b25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvV2ViS2l0Mi54Y2NvbmZp
ZwpAQCAtMTksNyArMTksNyBAQAogLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogLy8gT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAvLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogI2luY2x1ZGUgIkJhc2VUYXJn
ZXQueGNjb25maWciCiAKQEAgLTMwLDcgKzMwLDcgQEAgSU5TVEFMTF9QQVRIX0FDVFVBTCA9ICQo
V0VCS0lUMl9GUkFNRVdPUktTX0RJUik7CiBEWUxJQl9JTlNUQUxMX05BTUVfQkFTRSA9ICQoTk9S
TUFMX1dFQktJVDJfRlJBTUVXT1JLU19ESVIpOwogCiBGUkFNRVdPUktfQU5EX0xJQlJBUllfTERG
TEFHUyA9ICQoRlJBTUVXT1JLX0FORF9MSUJSQVJZX0xERkxBR1NfJChQTEFURk9STV9OQU1FKSk7
Ci1GUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAtbG9iamMg
LWZyYW1ld29yayBBc3NlcnRpb25TZXJ2aWNlcyAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3
b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29y
ZVBERiAtZnJhbWV3b3JrIENvcmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3Jr
IEdyYXBoaWNzU2VydmljZXMgLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgVUlLaXQgLWZy
YW1ld29yayBPcGVuR0xFUyAtZnJhbWV3b3JrIE1vYmlsZUFzc2V0IC1mcmFtZXdvcmsgV2ViS2l0
IC1sTW9iaWxlR2VzdGFsdCAtbGFzc2VydGlvbl9leHRlbnNpb247CitGUkFNRVdPUktfQU5EX0xJ
QlJBUllfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAtbG9iamMgLWZyYW1ld29yayBBc3NlcnRp
b25TZXJ2aWNlcyAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9u
IC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFtZXdvcmsgQ29yZVBERiAtZnJhbWV3b3JrIENv
cmVUZXh0IC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIEdyYXBoaWNzU2VydmljZXMg
LWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgVUlLaXQgLWZyYW1ld29yayBPcGVuR0xFUyAt
ZnJhbWV3b3JrIE1vYmlsZUFzc2V0IC1mcmFtZXdvcmsgTW9iaWxlQ29yZVNlcnZpY2VzIC1mcmFt
ZXdvcmsgV2ViS2l0IC1sTW9iaWxlR2VzdGFsdCAtbGFzc2VydGlvbl9leHRlbnNpb247CiBGUkFN
RVdPUktfQU5EX0xJQlJBUllfTERGTEFHU19pcGhvbmVvcyA9ICQoRlJBTUVXT1JLX0FORF9MSUJS
QVJZX0xERkxBR1NfaXBob25lc2ltdWxhdG9yKSAtZnJhbWV3b3JrIElPU3VyZmFjZTsKIEZSQU1F
V09SS19BTkRfTElCUkFSWV9MREZMQUdTX21hY29zeCA9IC1mcmFtZXdvcmsgQXBwbGljYXRpb25T
ZXJ2aWNlcyAtZnJhbWV3b3JrIENhcmJvbiAtZnJhbWV3b3JrIENvY29hIC1mcmFtZXdvcmsgQ29y
ZVNlcnZpY2VzIC1mcmFtZXdvcmsgSU9LaXQgLWZyYW1ld29yayBDb3JlQXVkaW8gLWZyYW1ld29y
ayBJT1N1cmZhY2UgLWZyYW1ld29yayBPcGVuR0w7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oCmluZGV4IGQyZDkzMmEuLmY4MGRlZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaApAQCAtNDMs
NyArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViT3BlblBhbmVsUGFy
YW1ldGVycz4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZpbGVDaG9vc2VyU2V0dGluZ3MmKTsKICAg
ICB+V2ViT3BlblBhbmVsUGFyYW1ldGVycygpOwogCi0gICAgYm9vbCBhbGxvd011bHRpcGxlRmls
ZXMoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmFsbG93c011bHRpcGxlRmlsZXM7IH0gCisg
ICAgYm9vbCBhbGxvd011bHRpcGxlRmlsZXMoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmFs
bG93c011bHRpcGxlRmlsZXM7IH0KICAgICBQYXNzUmVmUHRyPEFQSTo6QXJyYXk+IGFjY2VwdE1J
TUVUeXBlcygpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8QVBJOjpBcnJheT4gc2VsZWN0ZWRGaWxl
TmFtZXMoKSBjb25zdDsKICNpZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IDMzYjYyNzQuLjJjYWQ3ZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMjUzLDYgKzI1Myw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8sIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGVsZW1lbnRSZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHpv
b21Ub1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0LCBkb3VibGUgbWluaW11bVNjYWxlLCBkb3VibGUg
bWF4aW11bVNjYWxlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUnVuT3BlblBhbmVs
KFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKiwg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopID0gMDsKKwogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAgICAgdmlydHVhbCB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5LmNwcAppbmRleCBmNjNmNWY3Li45ZTJhNWIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJv
eHkuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXJQcm94eS5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRlICJBUElTdHJp
bmcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ0LDI0ICs0NSw0MSBAQCBXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclByb3h5Ojp+V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSgp
CiB7CiB9CiAKLXZvaWQgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTo6Y2hvb3NlRmls
ZXMoQVBJOjpBcnJheSogZmlsZVVSTHNBcnJheSkKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBmaWxl
UGF0aHNGcm9tRmlsZVVSTHMoQVBJOjpBcnJheSogZmlsZVVSTHMpCiB7Ci0gICAgaWYgKCFtX3Bh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBzaXplID0gZmlsZVVSTHNBcnJheS0+
c2l6ZSgpOwotCiAgICAgVmVjdG9yPFN0cmluZz4gZmlsZVBhdGhzOworCisgICAgc2l6ZV90IHNp
emUgPSBmaWxlVVJMcy0+c2l6ZSgpOwogICAgIGZpbGVQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemUpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgQVBJOjpVUkwqIGFwaVVSTCA9IGZpbGVVUkxzQXJyYXktPmF0PEFQSTo6VVJMPihpKTsK
KyAgICAgICAgQVBJOjpVUkwqIGFwaVVSTCA9IGZpbGVVUkxzLT5hdDxBUEk6OlVSTD4oaSk7CiAg
ICAgICAgIGlmIChhcGlVUkwpIHsKICAgICAgICAgICAgIFVSTCB1cmwoVVJMKCksIGFwaVVSTC0+
c3RyaW5nKCkpOwogICAgICAgICAgICAgZmlsZVBhdGhzLnVuY2hlY2tlZEFwcGVuZCh1cmwuZmls
ZVN5c3RlbVBhdGgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICByZXR1cm4gZmlsZVBhdGhz
OworfQorCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5OjpjaG9vc2VGaWxlcyhBUEk6OkFycmF5KiBmaWxlVVJMc0FycmF5LCBBUEk6OlN0cmlu
ZyogZGlzcGxheVN0cmluZywgY29uc3QgQVBJOjpEYXRhKiBpY29uSW1hZ2VEYXRhKQoreworICAg
IGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxl
UGF0aHMgPSBmaWxlUGF0aHNGcm9tRmlsZVVSTHMoZmlsZVVSTHNBcnJheSk7CisgICAgbV9wYWdl
LT5kaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihmaWxl
UGF0aHMsIGRpc3BsYXlTdHJpbmcgPyBkaXNwbGF5U3RyaW5nLT5zdHJpbmcoKSA6IFN0cmluZygp
LCBpY29uSW1hZ2VEYXRhKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYk9wZW5QYW5lbFJlc3VsdExp
c3RlbmVyUHJveHk6OmNob29zZUZpbGVzKEFQSTo6QXJyYXkqIGZpbGVVUkxzQXJyYXkpCit7Cisg
ICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxTdHJpbmc+IGZp
bGVQYXRocyA9IGZpbGVQYXRoc0Zyb21GaWxlVVJMcyhmaWxlVVJMc0FycmF5KTsKICAgICBtX3Bh
Z2UtPmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGZpbGVQYXRocyk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXJQcm94eS5oCmluZGV4IGFkNGJmOGYuLmQ0ZmIwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaApA
QCAtMzIsNiArMzIsOCBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEFycmF5OworY2xhc3Mg
RGF0YTsKK2NsYXNzIFN0cmluZzsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00Nyw2ICs0
OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5KCk7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBjaG9vc2VGaWxlcyhBUEk6
OkFycmF5KiwgQVBJOjpTdHJpbmcqIGRpc3BsYXlTdHJpbmcsIGNvbnN0IEFQSTo6RGF0YSogaWNv
bkltYWdlRGF0YSk7CisjZW5kaWYKKwogICAgIHZvaWQgY2hvb3NlRmlsZXMoQVBJOjpBcnJheSop
OwogICAgIHZvaWQgY2FuY2VsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKaW5kZXggYTg1ODA2MS4uMTQ4MGY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTMwMTQsOCArMzAxNCwxMiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cnVuT3BlblBhbmVsKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IEZpbGVDaG9vc2VyU2V0
dGluZ3MmIHNldAogICAgIC8vIFNpbmNlIHJ1bk9wZW5QYW5lbCgpIGNhbiBzcGluIGEgbmVzdGVk
IHJ1biBsb29wIHdlIG5lZWQgdG8gdHVybiBvZmYgdGhlIHJlc3BvbnNpdmVuZXNzIHRpbWVyLgog
ICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLT5zdG9wKCk7CiAKKyNpZiAhUExB
VEZPUk0oSU9TKQogICAgIGlmICghbV91aUNsaWVudC0+cnVuT3BlblBhbmVsKHRoaXMsIGZyYW1l
LCBwYXJhbWV0ZXJzLmdldCgpLCBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmdldCgpKSkKICAg
ICAgICAgZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCk7CisjZWxzZQorICAgIG1fcGFnZUNsaWVudC5o
YW5kbGVSdW5PcGVuUGFuZWwodGhpcywgZnJhbWUsIHBhcmFtZXRlcnMuZ2V0KCksIG1fb3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIuZ2V0KCkpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpwcmludEZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCkBAIC0zNTMzLDYgKzM1MzcsMTkgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRN
ZW51SXRlbURhdGEmIGl0ZW0pCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAK
KyNpZiBQTEFURk9STShJT1MpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JP
cGVuUGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24oY29uc3QgVmVjdG9yPFN0cmluZz4mIGZp
bGVVUkxzLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlTdHJpbmcsIGNvbnN0IEFQSTo6RGF0YSogaWNv
bkRhdGEpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFu
ZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24oZmlsZVVSTHMsIGRpc3BsYXlTdHJpbmcsIGljb25E
YXRhID8gaWNvbkRhdGEtPmRhdGFSZWZlcmVuY2UoKSA6IElQQzo6RGF0YVJlZmVyZW5jZSgpKSwg
bV9wYWdlSUQpOworCisgICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci0+aW52YWxpZGF0ZSgp
OworICAgIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPSBudWxscHRyOworfQorI2VuZGlmCisK
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZVVSTHMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggOTllYjk4YS4uOWQ5NDkxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtOTI5LDYgKzkyOSw5IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclByb3h5LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGRpZENob29zZUZpbGVz
Rm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBjb25zdCBBUEk6OkRhdGEqIGljb25EYXRh
KTsKKyNlbmRpZgogICAgIHZvaWQgZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3QgVmVj
dG9yPFN0cmluZz4mKTsKICAgICB2b2lkIGRpZENhbmNlbEZvck9wZW5QYW5lbCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKaW5kZXgg
ZGI2MDY5Mi4uMjA3NjVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MuaApAQCAtMTE4LDYgKzExOCw4IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNo
LCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNo
b2xkKTsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFz
VmlkZW8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVsZW1lbnRSZWN0KSBvdmVycmlkZTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2ViRnJh
bWVQcm94eSosIFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5Kikgb3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIHZpcnR1
YWwgdm9pZCBzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
dm9pZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggODAyNmI4NS4u
OGVmYTYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tCkBAIC00MDcsNiArNDA3LDExIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnNo
b3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBjb25zdCBJbnRSZWN0JiBlbGVt
CiAgICAgW21fY29udGVudFZpZXcgX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjpoYXNWaWRlbyBm
cm9tUmVjdDplbGVtZW50UmVjdF07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZVJ1
bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViT3BlblBhbmVsUGFy
YW1ldGVycyogcGFyYW1ldGVycywgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSogbGlz
dGVuZXIpCit7CisgICAgW21fY29udGVudFZpZXcgX3Nob3dSdW5PcGVuUGFuZWw6cGFyYW1ldGVy
cyByZXN1bHRMaXN0ZW5lcjpsaXN0ZW5lcl07Cit9CisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0luc3BlY3RvckluZGljYXRpb24oKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmgKaW5kZXggZTM5OWU1Ni4uMmQ4NzI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW1wb3J0ICJHZXN0dXJlVHlwZXMuaCIKICNpbXBvcnQgIkludGVyYWN0aW9uSW5m
b3JtYXRpb25BdFBvc2l0aW9uLmgiCiAjaW1wb3J0ICJXS0FpclBsYXlSb3V0ZVBpY2tlci5oIgor
I2ltcG9ydCAiV0tGaWxlVXBsb2FkUGFuZWwuaCIKICNpbXBvcnQgIldLRm9ybVBlcmlwaGVyYWwu
aCIKICNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0
L1VJVmlldy5oPgpAQCAtNTEsMTQgKzUyLDE2IEBAIGNsYXNzIEludFNpemU7CiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7CiBjbGFzcyBTbWFydE1hZ25pZmlj
YXRpb25Db250cm9sbGVyOworY2xhc3MgV2ViT3BlblBhbmVsUGFyYW1ldGVyczsKK2NsYXNzIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9CiAK
LUBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKLUBjbGFz
cyBfVUlIaWdobGlnaHRWaWV3OwotQGNsYXNzIFdlYklPU0V2ZW50OwogQGNsYXNzIFdLQWN0aW9u
U2hlZXRBc3Npc3RhbnQ7CiBAY2xhc3MgV0tGb3JtSW5wdXRTZXNzaW9uOworQGNsYXNzIFdlYklP
U0V2ZW50OworQGNsYXNzIF9VSUhpZ2hsaWdodFZpZXc7CitAY2xhc3MgX1VJV2ViSGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CiAKIHR5cGVkZWYgdm9pZCAoXlVJV0tBdXRvY29y
cmVjdGlvbkNvbXBsZXRpb25IYW5kbGVyKShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNG
b3JJbnB1dCk7CiB0eXBlZGVmIHZvaWQgKF5VSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxl
cikoVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqYXV0b2NvcnJlY3Rpb25Db250ZXh0KTsKQEAg
LTk4LDYgKzEwMSw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAgICAgUmV0YWlu
UHRyPFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQ+IF9hY3Rpb25TaGVldEFzc2lzdGFudDsKICAgICBS
ZXRhaW5QdHI8V0tBaXJQbGF5Um91dGVQaWNrZXI+IF9haXJQbGF5Um91dGVQaWNrZXI7CiAgICAg
UmV0YWluUHRyPFdLRm9ybUlucHV0U2Vzc2lvbj4gX2Zvcm1JbnB1dFNlc3Npb247CisgICAgUmV0
YWluUHRyPFdLRmlsZVVwbG9hZFBhbmVsPiBfZmlsZVVwbG9hZFBhbmVsOwogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYktpdDo6U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlcj4gX3NtYXJ0TWFn
bmlmaWNhdGlvbkNvbnRyb2xsZXI7CiAKQEAgLTExMCw2ICsxMTQsOCBAQCBzdHJ1Y3QgV0tBdXRv
Q29ycmVjdGlvbkRhdGEgewogICAgIFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gX2Fz
c2lzdGVkTm9kZUluZm9ybWF0aW9uOwogICAgIFJldGFpblB0cjxOU09iamVjdDxXS0Zvcm1QZXJp
cGhlcmFsPj4gX2lucHV0UGVyaXBoZXJhbDsKIAorICAgIENHUG9pbnQgX2xhc3RJbnRlcmFjdGlv
bkxvY2F0aW9uOworCiAgICAgQk9PTCBfaXNFZGl0YWJsZTsKICAgICBCT09MIF9zaG93aW5nVGV4
dFN0eWxlT3B0aW9uczsKICAgICBCT09MIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb247CkBA
IC0xMjAsOCArMTI2LDkgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIAogQGVuZAog
Ci1AaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24pIDxVSUdlc3R1cmVSZWNv
Z25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRl
LCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2ViRm9ybUFjY2Vzc29yeURlbGVnYXRlLCBVSVdLSW50
ZXJhY3Rpb25WaWV3UHJvdG9jb2w+CitAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJh
Y3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0
dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2ViRm9ybUFjY2Vz
c29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLRmlsZVVwbG9hZFBh
bmVsRGVsZWdhdGU+CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dQb2ludCBs
YXN0SW50ZXJhY3Rpb25Mb2NhdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
Qk9PTCBpc0VkaXRhYmxlOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBjb25zdCBX
ZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBwb3NpdGlvbkluZm9ybWF0
aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBjb25zdCBXZWJLaXQ6OldLQXV0
b0NvcnJlY3Rpb25EYXRhJiBhdXRvY29ycmVjdGlvbkRhdGE7CkBAIC0xNDgsNiArMTU1LDcgQEAg
c3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIC0gKHZvaWQpX2RpZEVuZFNjcm9sbGluZ09y
Wm9vbWluZzsKIC0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihXZWJL
aXQ6OlNlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooV2ViS2l0OjpTZWxlY3Rpb25GbGFn
cylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNo
b2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZDsKIC0gKHZvaWQpX3Nob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcjooQk9PTCloYXNWaWRlbyBmcm9tUmVjdDooY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
ZWxlbWVudFJlY3Q7CistICh2b2lkKV9zaG93UnVuT3BlblBhbmVsOihXZWJLaXQ6OldlYk9wZW5Q
YW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0TGlzdGVuZXI6KFdlYktpdDo6V2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopbGlzdGVuZXI7CiAtICh2b2lkKWFjY2Vzc29yeURv
bmU7CiAtIChWZWN0b3I8V2ViS2l0OjpXS09wdGlvbkl0ZW0+JikgYXNzaXN0ZWROb2RlU2VsZWN0
T3B0aW9uczsKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggYWE3YzJjZS4uOTcwMzJmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0KQEAgLTMyLDE5ICszMiwxNyBAQAogI2ltcG9ydCAiTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiTmF0aXZlV2ViVG91Y2hFdmVudC5oIgogI2ltcG9ydCAi
U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViRXZlbnQuaCIKLSNp
bXBvcnQgIldlYklPU0V2ZW50RmFjdG9yeS5oIgotI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgi
Ci0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldLQWN0aW9uU2hlZXRBc3Np
c3RhbnQuaCIKICNpbXBvcnQgIldLRm9ybUlucHV0Q29udHJvbC5oIgogI2ltcG9ydCAiV0tGb3Jt
U2VsZWN0Q29udHJvbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAi
V2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYklPU0V2ZW50RmFjdG9yeS5oIgorI2ltcG9ydCAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIl9X
S0Zvcm1EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiX1dLRm9ybUlucHV0U2Vzc2lvbi5oIgogI2ltcG9y
dCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29udHJvbGxlci5oPgotI2ltcG9ydCA8VUlL
aXQvX1VJSGlnaGxpZ2h0Vmlldy5oPgotI2ltcG9ydCA8VUlLaXQvX1VJV2ViSGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQgPFVJS2l0L1VJRm9udF9Qcml2YXRl
Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KICNpbXBv
cnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CkBAIC01Miw2ICs1MCw4IEBACiAjaW1wb3J0IDxV
SUtpdC9VSVRhcEdlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJ
VGV4dEludGVyYWN0aW9uQXNzaXN0YW50X1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJV2Vi
RG9jdW1lbnRWaWV3Lmg+IC8vIEZJWE1FOiBzaG91bGQgbm90IGluY2x1ZGUgdGhpcyBoZWFkZXIu
CisjaW1wb3J0IDxVSUtpdC9fVUlIaWdobGlnaHRWaWV3Lmg+CisjaW1wb3J0IDxVSUtpdC9fVUlX
ZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTI0Niw2ICsyNDYsMTEgQEAgc3RhdGljIGNvbnN0IGZs
b2F0IHRhcEFuZEhvbGREZWxheSAgPSAwLjc1OwogICAgIFtfZG91YmxlVGFwR2VzdHVyZVJlY29n
bml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW19sb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpuaWxdOworCisgICAgaWYgKF9maWxlVXBsb2FkUGFuZWwpIHsKKyAg
ICAgICAgW19maWxlVXBsb2FkUGFuZWwgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW19maWxl
VXBsb2FkUGFuZWwgZGlzbWlzc107CisgICAgfQogfQogCiAtIChjb25zdCBJbnRlcmFjdGlvbklu
Zm9ybWF0aW9uQXRQb3NpdGlvbiYpcG9zaXRpb25JbmZvcm1hdGlvbgpAQCAtMjYzLDYgKzI2OCwx
MSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGFwQW5kSG9sZERlbGF5ICA9IDAuNzU7CiAgICAgcmV0
dXJuIF9pbnB1dERlbGVnYXRlOwogfQogCistIChDR1BvaW50KWxhc3RJbnRlcmFjdGlvbkxvY2F0
aW9uCit7CisgICAgcmV0dXJuIF9sYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbjsKK30KKwogLSAoQk9P
TClpc0VkaXRhYmxlCiB7CiAgICAgcmV0dXJuIF9pc0VkaXRhYmxlOwpAQCAtMjk4LDYgKzMwOCw4
IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0YXBBbmRIb2xkRGVsYXkgID0gMC43NTsKICAgICBpZiAo
IV9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSkKICAgICAgICAgX25hdGl2ZVdlYlRv
dWNoRXZlbnRVbmlxdWVJZEJlaW5nU2VudFN5bmNocm9ub3VzbHkgPSBuYXRpdmVXZWJUb3VjaEV2
ZW50LnVuaXF1ZUlkKCk7CiAKKyAgICBfbGFzdEludGVyYWN0aW9uTG9jYXRpb24gPSBnZXN0dXJl
UmVjb2duaXplci5sb2NhdGlvbkluV2luZG93OworCiAgICAgX3BhZ2UtPnNldFNob3VsZFNlbmRF
dmVudHNTeW5jaHJvbm91c2x5KCFfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkpOwog
ICAgIF9wYWdlLT5oYW5kbGVUb3VjaEV2ZW50KG5hdGl2ZVdlYlRvdWNoRXZlbnQpOwogICAgIF9w
YWdlLT5zZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShmYWxzZSk7CkBAIC02NzAsNiAr
NjgyLDggQEAgc3RhdGljIGlubGluZSBib29sIGlzU2FtZVBhaXIoVUlHZXN0dXJlUmVjb2duaXpl
ciAqYSwgVUlHZXN0dXJlUmVjb2duaXplciAqYiwgVUkKIHsKICAgICBBU1NFUlQoZ2VzdHVyZVJl
Y29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKIAorICAg
IF9sYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbiA9IGdlc3R1cmVSZWNvZ25pemVyLnN0YXJ0UG9pbnQ7
CisKICAgICBzd2l0Y2ggKFtnZXN0dXJlUmVjb2duaXplciBzdGF0ZV0pIHsKICAgICBjYXNlIFVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuOgogICAgICAgICBfcGFnZS0+dGFwSGlnaGxpZ2h0
QXRQb3NpdGlvbihbZ2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF0sIF9sYXRlc3RUYXBIaWdo
bGlnaHRJRCk7CkBAIC02OTEsNiArNzA1LDggQEAgc3RhdGljIGlubGluZSBib29sIGlzU2FtZVBh
aXIoVUlHZXN0dXJlUmVjb2duaXplciAqYSwgVUlHZXN0dXJlUmVjb2duaXplciAqYiwgVUkKIHsK
ICAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25p
emVyKTsKIAorICAgIF9sYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbiA9IGdlc3R1cmVSZWNvZ25pemVy
LnN0YXJ0UG9pbnQ7CisKICAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikgewogICAgICAgICBTRUwgYWN0aW9uID0gW3NlbGYg
X2FjdGlvbkZvckxvbmdQcmVzc107CiAgICAgICAgIGlmIChhY3Rpb24pCkBAIC03MDcsMTYgKzcy
MywyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTYW1lUGFpcihVSUdlc3R1cmVSZWNvZ25pemVy
ICphLCBVSUdlc3R1cmVSZWNvZ25pemVyICpiLCBVSQogCiAgICAgW193ZWJTZWxlY3Rpb25Bc3Np
c3RhbnQgY2xlYXJTZWxlY3Rpb25dOwogCi0gICAgW3NlbGYgX2F0dGVtcHRDbGlja0F0TG9jYXRp
b246W2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uXV07CisgICAgX2xhc3RJbnRlcmFjdGlvbkxv
Y2F0aW9uID0gZ2VzdHVyZVJlY29nbml6ZXIubG9jYXRpb247CisKKyAgICBbc2VsZiBfYXR0ZW1w
dENsaWNrQXRMb2NhdGlvbjpnZXN0dXJlUmVjb2duaXplci5sb2NhdGlvbl07CiB9CiAKIC0gKHZv
aWQpX2RvdWJsZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJl
UmVjb2duaXplcgogeworICAgIF9sYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbiA9IGdlc3R1cmVSZWNv
Z25pemVyLmxvY2F0aW9uOworCiAgICAgX3NtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXItPmhh
bmRsZVNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoZ2VzdHVyZVJlY29nbml6ZXIubG9jYXRpb24p
OwogfQogCiAtICh2b2lkKV90d29GaW5nZXJEb3VibGVUYXBSZWNvZ25pemVkOihVSVRhcEdlc3R1
cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsKKyAgICBfbGFzdEludGVyYWN0aW9u
TG9jYXRpb24gPSBnZXN0dXJlUmVjb2duaXplci5sb2NhdGlvbjsKKwogICAgIF9zbWFydE1hZ25p
ZmljYXRpb25Db250cm9sbGVyLT5oYW5kbGVSZXNldE1hZ25pZmljYXRpb25HZXN0dXJlKGdlc3R1
cmVSZWNvZ25pemVyLmxvY2F0aW9uKTsKIH0KIApAQCAtMjA2Miw2ICsyMDg0LDI2IEBAIHN0YXRp
YyBVSVRleHRBdXRvY2FwaXRhbGl6YXRpb25UeXBlIHRvVUlUZXh0QXV0b2NhcGl0YWxpemUoV2Vi
QXV0b2NhcGl0YWxpemVUeXBlCiAgICAgW19haXJQbGF5Um91dGVQaWNrZXIgc2hvdzpoYXNWaWRl
byBmcm9tUmVjdDplbGVtZW50UmVjdF07CiB9CiAKKy0gKHZvaWQpX3Nob3dSdW5PcGVuUGFuZWw6
KFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0TGlzdGVuZXI6KFdlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKWxpc3RlbmVyCit7CisgICAgQVNTRVJUKCFfZmls
ZVVwbG9hZFBhbmVsKTsKKyAgICBpZiAoX2ZpbGVVcGxvYWRQYW5lbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgX2ZpbGVVcGxvYWRQYW5lbCA9IGFkb3B0TlMoW1tXS0ZpbGVVcGxvYWRQYW5lbCBh
bGxvY10gaW5pdFdpdGhWaWV3OnNlbGZdKTsKKyAgICBbX2ZpbGVVcGxvYWRQYW5lbCBzZXREZWxl
Z2F0ZTpzZWxmXTsKKyAgICBbX2ZpbGVVcGxvYWRQYW5lbCBwcmVzZW50V2l0aFBhcmFtZXRlcnM6
cGFyYW1ldGVycyByZXN1bHRMaXN0ZW5lcjpsaXN0ZW5lcl07Cit9CisKKy0gKHZvaWQpZmlsZVVw
bG9hZFBhbmVsRGlkRGlzbWlzczooV0tGaWxlVXBsb2FkUGFuZWwgKilmaWxlVXBsb2FkUGFuZWwK
K3sKKyAgICBBU1NFUlQoX2ZpbGVVcGxvYWRQYW5lbC5nZXQoKSA9PSBmaWxlVXBsb2FkUGFuZWwp
OworCisgICAgW19maWxlVXBsb2FkUGFuZWwgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2ZpbGVV
cGxvYWRQYW5lbCByZWxlYXNlXTsKKyAgICBfZmlsZVVwbG9hZFBhbmVsID0gbmlsOworfQorCiAj
cHJhZ21hIG1hcmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBVSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJl
Y29nbml6ZXJEZWxlZ2F0ZS4KIAogLSAoQk9PTClzaG91bGRJZ25vcmVXZWJUb3VjaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxl
VXBsb2FkUGFuZWwuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpjb3B5IGZyb20gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcApjb3B5
IHRvIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwu
aAppbmRleCBiY2YzZTgwLi42OWQ3NDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMjkgKzIzLDI4
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCisjaWYg
UExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVyLmg+CisKK0Bj
bGFzcyBXS0NvbnRlbnRWaWV3OworQHByb3RvY29sIFdLRmlsZVVwbG9hZFBhbmVsRGVsZWdhdGU7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPFdlYk9wZW5QYW5lbFJlc3VsdExp
c3RlbmVyPiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6Y3JlYXRlKFdlYlBhZ2UqIHBhZ2Us
IFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIocGFnZSwgZmlsZUNo
b29zZXIpKTsKK2NsYXNzIFdlYk9wZW5QYW5lbFBhcmFtZXRlcnM7CitjbGFzcyBXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogfQogCi1XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpGaWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAs
IG1fZmlsZUNob29zZXIoZmlsZUNob29zZXIpCi17Ci19CitAaW50ZXJmYWNlIFdLRmlsZVVwbG9h
ZFBhbmVsIDogVUlWaWV3Q29udHJvbGxlcgorQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
aWQgPFdLRmlsZVVwbG9hZFBhbmVsRGVsZWdhdGU+IGRlbGVnYXRlOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXc7CistICh2b2lkKXByZXNlbnRXaXRo
UGFyYW1ldGVyczooV2ViS2l0OjpXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKilwYXJhbWV0ZXJzIHJl
c3VsdExpc3RlbmVyOihXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKWxp
c3RlbmVyOworLSAodm9pZClkaXNtaXNzOworQGVuZAogCi1XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lcjo6fldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKCkKLXsKLX0KLQotdm9pZCBXZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lcjo6ZGlkQ2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVzKQotewotICAgIG1fZmlsZUNob29zZXItPmNob29zZUZpbGVzKGZpbGVzKTsKLX0KK0Bw
cm90b2NvbCBXS0ZpbGVVcGxvYWRQYW5lbERlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAor
LSAodm9pZClmaWxlVXBsb2FkUGFuZWxEaWREaXNtaXNzOihXS0ZpbGVVcGxvYWRQYW5lbCAqKWZp
bGVVcGxvYWRQYW5lbDsKK0BlbmQKIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9m
b3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
Zm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTU2NDNlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KQEAgLTAsMCArMSw3MTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLRmlsZVVwbG9hZFBhbmVsLmgi
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIkFQSUFycmF5LmgiCisjaW1wb3J0ICJB
UElEYXRhLmgiCisjaW1wb3J0ICJBUElTdHJpbmcuaCIKKyNpbXBvcnQgIldLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5oIgorI2ltcG9ydCAiV0tEYXRhLmgiCisjaW1wb3J0ICJXS1N0cmluZ0NGLmgi
CisjaW1wb3J0ICJXS1VSTENGLmgiCisjaW1wb3J0ICJXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmgi
CisjaW1wb3J0ICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmgiCisjaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KKyNp
bXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KKyNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNl
cy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKyNpbXBvcnQgPFVJS2l0L1VJQWxlcnRDb250cm9sbGVy
X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb25fUHJpdmF0ZS5oPgorI2lt
cG9ydCA8VUlLaXQvVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8
VUlLaXQvVUlJbWFnZV9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVy
X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2luZG93X1ByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2lu
Zy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYk5TRmlsZU1hbmFnZXJFeHRyYXMuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworU09GVF9MSU5L
X0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pOworU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwg
QVZBc3NldEltYWdlR2VuZXJhdG9yKTsKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
VVJMQXNzZXQpOworI2RlZmluZSBBVkFzc2V0SW1hZ2VHZW5lcmF0b3JfY2xhc3MgZ2V0QVZBc3Nl
dEltYWdlR2VuZXJhdG9yQ2xhc3MoKQorI2RlZmluZSBBVlVSTEFzc2V0X2NsYXNzIGdldEFWVVJM
QXNzZXRDbGFzcygpCisKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZU1lZGlhKTsKK1NPRlRfTElO
S19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVRpbWVaZXJvLCBDTVRpbWUpOworI2RlZmluZSBrQ01U
aW1lWmVybyBnZXRrQ01UaW1lWmVybygpCisKKworI3ByYWdtYSBtYXJrIC0gX1dLRmlsZVVwbG9h
ZEl0ZW0KKworc3RhdGljIENHUmVjdCBzcXVhcmVDcm9wUmVjdEZvclNpemUoQ0dTaXplIHNpemUp
Cit7CisgICAgQ0dGbG9hdCBzbWFsbGVyU2lkZSA9IE1JTihzaXplLndpZHRoLCBzaXplLmhlaWdo
dCk7CisgICAgQ0dSZWN0IGNyb3BSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCBzbWFsbGVyU2lkZSwg
c21hbGxlclNpZGUpOworCisgICAgaWYgKHNpemUud2lkdGggPCBzaXplLmhlaWdodCkKKyAgICAg
ICAgY3JvcFJlY3Qub3JpZ2luLnkgPSByaW50Zigoc2l6ZS5oZWlnaHQgLSBzbWFsbGVyU2lkZSkg
LyAyKTsKKyAgICBlbHNlCisgICAgICAgIGNyb3BSZWN0Lm9yaWdpbi54ID0gcmludGYoKHNpemUu
d2lkdGggLSBzbWFsbGVyU2lkZSkgLyAyKTsKKworICAgIHJldHVybiBjcm9wUmVjdDsKK30KKwor
c3RhdGljIFVJSW1hZ2UgKnNxdWFyZUltYWdlKFVJSW1hZ2UgKmltYWdlKQoreworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBDR0ltYWdlUmVmIGltYWdlUmVmID0g
W2ltYWdlIENHSW1hZ2VdOworICAgIENHU2l6ZSBpbWFnZVNpemUgPSBDR1NpemVNYWtlKENHSW1h
Z2VHZXRXaWR0aChpbWFnZVJlZiksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2VSZWYpKTsKKyAgICBp
ZiAoaW1hZ2VTaXplLndpZHRoID09IGltYWdlU2l6ZS5oZWlnaHQpCisgICAgICAgIHJldHVybiBp
bWFnZTsKKworICAgIENHUmVjdCBzcXVhcmVDcm9wUmVjdCA9IHNxdWFyZUNyb3BSZWN0Rm9yU2l6
ZShpbWFnZVNpemUpOworICAgIENHSW1hZ2VSZWYgc3F1YXJlSW1hZ2VSZWYgPSBDR0ltYWdlQ3Jl
YXRlV2l0aEltYWdlSW5SZWN0KGltYWdlUmVmLCBzcXVhcmVDcm9wUmVjdCk7CisgICAgVUlJbWFn
ZSAqc3F1YXJlSW1hZ2UgPSBbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpzcXVhcmVJ
bWFnZVJlZiBpbWFnZU9yaWVudGF0aW9uOltpbWFnZSBpbWFnZU9yaWVudGF0aW9uXV07CisgICAg
Q0dJbWFnZVJlbGVhc2Uoc3F1YXJlSW1hZ2VSZWYpOworICAgIHJldHVybiBbc3F1YXJlSW1hZ2Ug
YXV0b3JlbGVhc2VdOworfQorCitzdGF0aWMgVUlJbWFnZSAqdGh1bWJuYWlsU2l6ZWRJbWFnZUZv
ckltYWdlKFVJSW1hZ2UgKmltYWdlKQoreworICAgIFVJSW1hZ2UgKnNxdWFyZWRJbWFnZSA9IHNx
dWFyZUltYWdlKGltYWdlKTsKKyAgICBpZiAoIXNxdWFyZWRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIENHUmVjdCBkZXN0UmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDAp
OworICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dChkZXN0UmVjdC5zaXplKTsKKyAgICBD
R0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShVSUdyYXBoaWNzR2V0Q3VycmVudENvbnRl
eHQoKSwga0NHSW50ZXJwb2xhdGlvbkhpZ2gpOworICAgIFtzcXVhcmVkSW1hZ2UgZHJhd0luUmVj
dDpkZXN0UmVjdF07CisgICAgVUlJbWFnZSAqcmVzdWx0SW1hZ2UgPSBVSUdyYXBoaWNzR2V0SW1h
Z2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgpOworICAgIFVJR3JhcGhpY3NFbmRJbWFnZUNvbnRl
eHQoKTsKKyAgICByZXR1cm4gcmVzdWx0SW1hZ2U7Cit9CisKKworQGludGVyZmFjZSBfV0tGaWxl
VXBsb2FkSXRlbSA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGdl
dHRlcj1pc1ZpZGVvKSBCT09MIHZpZGVvOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU1VSTCAqZmlsZVVSTDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlJbWFn
ZSAqZGlzcGxheUltYWdlOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLRmlsZVVwbG9hZEl0
ZW0KKworLSAoQk9PTClpc1ZpZGVvCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIE5POworfQorCistIChOU1VSTCAqKWZpbGVVUkwKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSUltYWdlICopZGlzcGxheUltYWdl
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworQGVu
ZAorCisKK0BpbnRlcmZhY2UgX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSA6IF9XS0ZpbGVVcGxvYWRJ
dGVtCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlUGF0aDooTlNTdHJpbmcgKilmaWxlUGF0
aCBvcmlnaW5hbEltYWdlOihVSUltYWdlICopb3JpZ2luYWxJbWFnZTsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIF9XS0ltYWdlRmlsZVVwbG9hZEl0ZW0geworICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gX2ZpbGVQYXRoOworICAgIFJldGFpblB0cjxVSUltYWdlPiBfb3JpZ2luYWxJbWFnZTsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVBhdGg6KE5TU3RyaW5nICopZmlsZVBhdGgg
b3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1hZ2UKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfZmlsZVBhdGggPSBm
aWxlUGF0aDsKKyAgICBfb3JpZ2luYWxJbWFnZSA9IG9yaWdpbmFsSW1hZ2U7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKEJPT0wpaXNWaWRlbworeworICAgIHJldHVybiBOTzsKK30KKworLSAo
TlNVUkwgKilmaWxlVVJMCit7CisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6X2Zp
bGVQYXRoLmdldCgpXTsKK30KKworLSAoVUlJbWFnZSAqKWRpc3BsYXlJbWFnZQoreworICAgIHJl
dHVybiB0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2UoX29yaWdpbmFsSW1hZ2UuZ2V0KCkpOwor
fQorCitAZW5kCisKKworQGludGVyZmFjZSBfV0tWaWRlb0ZpbGVVcGxvYWRJdGVtIDogX1dLRmls
ZVVwbG9hZEl0ZW0KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZpbGVQYXRoOihOU1N0cmluZyAq
KWZpbGVQYXRoIG1lZGlhVVJMOihOU1VSTCAqKW1lZGlhVVJMOworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBf
ZmlsZVBhdGg7CisgICAgUmV0YWluUHRyPE5TVVJMPiBfbWVkaWFVUkw7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEZpbGVQYXRoOihOU1N0cmluZyAqKWZpbGVQYXRoIG1lZGlhVVJMOihO
U1VSTCAqKW1lZGlhVVJMCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgX2ZpbGVQYXRoID0gZmlsZVBhdGg7CisgICAgX21lZGlhVVJM
ID0gbWVkaWFVUkw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpaXNWaWRlbworewor
ICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVVJMICopZmlsZVVSTAoreworICAgIHJldHVybiBb
TlNVUkwgZmlsZVVSTFdpdGhQYXRoOl9maWxlUGF0aC5nZXQoKV07Cit9CisKKy0gKFVJSW1hZ2Ug
KilkaXNwbGF5SW1hZ2UKK3sKKyAgICBSZXRhaW5QdHI8QVZVUkxBc3NldD4gYXNzZXQgPSBhZG9w
dE5TKFtbQVZVUkxBc3NldF9jbGFzcyBhbGxvY10gaW5pdFdpdGhVUkw6X21lZGlhVVJMLmdldCgp
IG9wdGlvbnM6bmlsXSk7CisgICAgUmV0YWluUHRyPEFWQXNzZXRJbWFnZUdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yID0gYWRvcHROUyhbW0FWQXNzZXRJbWFnZUdlbmVyYXRvcl9jbGFzcyBhbGxvY10gaW5p
dFdpdGhBc3NldDphc3NldC5nZXQoKV0pOworICAgIFtnZW5lcmF0b3Igc2V0QXBwbGllc1ByZWZl
cnJlZFRyYWNrVHJhbnNmb3JtOllFU107CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VSZWYgPSBbZ2VuZXJhdG9yIGNvcHlDR0ltYWdl
QXRUaW1lOmtDTVRpbWVaZXJvIGFjdHVhbFRpbWU6bmlsIGVycm9yOiZlcnJvcl07CisgICAgaWYg
KGVycm9yKSB7CisgICAgICAgIExPR19FUlJPUigiX1dLVmlkZW9GaWxlVXBsb2FkSXRlbTogRXJy
b3IgY3JlYXRpbmcgaW1hZ2UgZm9yIHZpZGVvOiAlQCIsIF9tZWRpYVVSTC5nZXQoKSk7CisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgUmV0YWluUHRyPFVJSW1hZ2U+IGltYWdlID0g
YWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTppbWFnZVJlZi5nZXQoKV0p
OworICAgIHJldHVybiB0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2UoaW1hZ2UuZ2V0KCkpOwor
fQorCitAZW5kCisKKworI3ByYWdtYSBtYXJrIC0gV0tGaWxlVXBsb2FkUGFuZWwKKworQGludGVy
ZmFjZSBXS0ZpbGVVcGxvYWRQYW5lbCAoKSA8VUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlLCBV
SU5hdmlnYXRpb25Db250cm9sbGVyRGVsZWdhdGUsIFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyRGVs
ZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0ZpbGVVcGxvYWRQYW5lbCB7CisgICAg
V0tDb250ZW50VmlldyAqX3ZpZXc7CisgICAgV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lclByb3h5KiBfbGlzdGVuZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF9taW1lVHlwZXM7
CisgICAgQ0dQb2ludCBfaW50ZXJhY3Rpb25Qb2ludDsKKyAgICBCT09MIF9hbGxvd011bHRpcGxl
RmlsZXM7CisgICAgQk9PTCBfdXNpbmdDYW1lcmE7CisgICAgUmV0YWluUHRyPFVJSW1hZ2VQaWNr
ZXJDb250cm9sbGVyPiBfaW1hZ2VQaWNrZXI7CisgICAgUmV0YWluUHRyPFVJQWxlcnRDb250cm9s
bGVyPiBfYWN0aW9uU2hlZXRDb250cm9sbGVyOworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9s
bGVyPiBfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXI7IC8vIGlQaG9uZSBhbHdheXMuIGlQYWQg
Zm9yIEZ1bGxzY3JlZW4gQ2FtZXJhLgorICAgIFJldGFpblB0cjxVSVBvcG92ZXJDb250cm9sbGVy
PiBfcHJlc2VudGF0aW9uUG9wb3ZlcjsgLy8gaVBhZCBmb3IgYWN0aW9uIHNoZWV0IGFuZCBQaG90
byBMaWJyYXJ5LgorfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRW
aWV3ICopdmlldworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIF92aWV3ID0gdmlldzsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW19pbWFnZVBpY2tlciBzZXREZWxlZ2F0ZTpuaWxdOworICAg
IFtfcHJlc2VudGF0aW9uUG9wb3ZlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKworLSAodm9pZClfZGlzcGF0Y2hEaWREaXNtaXNzCit7CisgICAgaWYgKFtfZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihmaWxlVXBsb2FkUGFuZWxEaWREaXNt
aXNzOildKQorICAgICAgICBbX2RlbGVnYXRlIGZpbGVVcGxvYWRQYW5lbERpZERpc21pc3M6c2Vs
Zl07Cit9CisKKyNwcmFnbWEgbWFyayAtIFBhbmVsIENvbXBsZXRpb24gKG9uZSBvZiB0aGVzZSBt
dXN0IGJlIGNhbGxlZCkKKworLSAodm9pZClfY2FuY2VsCit7CisgICAgX2xpc3RlbmVyLT5jYW5j
ZWwoKTsKKyAgICBbc2VsZiBfZGlzcGF0Y2hEaWREaXNtaXNzXTsKK30KKworLSAodm9pZClfY2hv
b3NlRmlsZXM6KE5TQXJyYXkgKilmaWxlVVJMcyBkaXNwbGF5U3RyaW5nOihOU1N0cmluZyAqKWRp
c3BsYXlTdHJpbmcgaWNvbkltYWdlOihVSUltYWdlICopaWNvbkltYWdlCit7CisgICAgTlNVSW50
ZWdlciBjb3VudCA9IFtmaWxlVVJMcyBjb3VudF07CisgICAgaWYgKCFjb3VudCkgeworICAgICAg
ICBbc2VsZiBfY2FuY2VsXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxS
ZWZQdHI8QVBJOjpPYmplY3Q+PiB1cmxzOworICAgIHVybHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShjb3VudCk7CisgICAgZm9yIChOU1VSTCAqZmlsZVVSTCBpbiBmaWxlVVJMcykKKyAgICAgICAg
dXJscy51bmNoZWNrZWRBcHBlbmQoYWRvcHRSZWYodG9JbXBsKFdLVVJMQ3JlYXRlV2l0aENGVVJM
KChDRlVSTFJlZilmaWxlVVJMKSkpKTsKKyAgICBSZWZQdHI8QVBJOjpBcnJheT4gZmlsZVVSTHNS
ZWYgPSBBUEk6OkFycmF5OjpjcmVhdGUoc3RkOjptb3ZlKHVybHMpKTsKKworICAgIE5TRGF0YSAq
anBlZyA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24oaWNvbkltYWdlLCAxLjApOworICAgIFJl
ZlB0cjxBUEk6OkRhdGE+IGljb25JbWFnZURhdGFSZWYgPSBhZG9wdFJlZih0b0ltcGwoV0tEYXRh
Q3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KFtqcGVnIGJ5dGVz
XSksIFtqcGVnIGxlbmd0aF0pKSk7CisKKyAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IGRpc3BsYXlT
dHJpbmdSZWYgPSBhZG9wdFJlZih0b0ltcGwoV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENG
U3RyaW5nUmVmKWRpc3BsYXlTdHJpbmcpKSk7CisKKyAgICBfbGlzdGVuZXItPmNob29zZUZpbGVz
KGZpbGVVUkxzUmVmLmdldCgpLCBkaXNwbGF5U3RyaW5nUmVmLmdldCgpLCBpY29uSW1hZ2VEYXRh
UmVmLmdldCgpKTsKKyAgICBbc2VsZiBfZGlzcGF0Y2hEaWREaXNtaXNzXTsKK30KKworI3ByYWdt
YSBtYXJrIC0gUHJlc2VudCAvIERpc21pc3MgQVBJCisKKy0gKHZvaWQpcHJlc2VudFdpdGhQYXJh
bWV0ZXJzOihXZWJLaXQ6OldlYk9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0
TGlzdGVuZXI6KFdlYktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopbGlzdGVu
ZXIKK3sKKyAgICBBU1NFUlQoIV9saXN0ZW5lcik7CisKKyAgICBfbGlzdGVuZXIgPSBsaXN0ZW5l
cjsKKyAgICBfYWxsb3dNdWx0aXBsZUZpbGVzID0gcGFyYW1ldGVycy0+YWxsb3dNdWx0aXBsZUZp
bGVzKCk7CisgICAgX2ludGVyYWN0aW9uUG9pbnQgPSBbX3ZpZXcgbGFzdEludGVyYWN0aW9uTG9j
YXRpb25dOworCisgICAgUmVmUHRyPEFQSTo6QXJyYXk+IGFjY2VwdE1pbWVUeXBlcyA9IHBhcmFt
ZXRlcnMtPmFjY2VwdE1JTUVUeXBlcygpOworICAgIE5TTXV0YWJsZUFycmF5ICptaW1lVHlwZXMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6YWNjZXB0TWltZVR5cGVzLT5zaXpl
KCldOworICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBhY2NlcHRNaW1lVHlwZXMtPmVs
ZW1lbnRzT2ZUeXBlPEFQSTo6U3RyaW5nPigpKQorICAgICAgICBbbWltZVR5cGVzIGFkZE9iamVj
dDptaW1lVHlwZS0+c3RyaW5nKCldOworICAgIF9taW1lVHlwZXMgPSBhZG9wdE5TKFttaW1lVHlw
ZXMgY29weV0pOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2FtZXJhIG9yIHRoaXMgaXMgdHlw
ZT1tdWx0aXBsZSwganVzdCBzaG93IHRoZSBpbWFnZSBwaWNrZXIgZm9yIHRoZSBwaG90byBsaWJy
YXJ5LgorICAgIC8vIE90aGVyd2lzZSwgc2hvdyBhbiBhY3Rpb24gc2hlZXQgZm9yIHRoZSB1c2Vy
IHRvIGNob29zZSBiZXR3ZWVuIGNhbWVyYSBvciBsaWJyYXJ5LgorICAgIGlmIChfYWxsb3dNdWx0
aXBsZUZpbGVzIHx8ICFbVUlJbWFnZVBpY2tlckNvbnRyb2xsZXIgaXNTb3VyY2VUeXBlQXZhaWxh
YmxlOlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZUNhbWVyYV0pCisgICAgICAgIFtz
ZWxmIF9zaG93UGhvdG9QaWNrZXJXaXRoU291cmNlVHlwZTpVSUltYWdlUGlja2VyQ29udHJvbGxl
clNvdXJjZVR5cGVQaG90b0xpYnJhcnldOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX3Nob3dN
ZWRpYVNvdXJjZVNlbGVjdGlvblNoZWV0XTsKK30KKworLSAodm9pZClkaXNtaXNzCit7CisgICAg
W3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6Tk9dOworICAgIFtzZWxmIF9jYW5jZWxdOwor
fQorCistICh2b2lkKV9kaXNtaXNzRGlzcGxheUFuaW1hdGVkOihCT09MKWFuaW1hdGVkCit7Cisg
ICAgaWYgKF9wcmVzZW50YXRpb25Qb3BvdmVyKSB7CisgICAgICAgIFtfcHJlc2VudGF0aW9uUG9w
b3ZlciBkaXNtaXNzUG9wb3ZlckFuaW1hdGVkOmFuaW1hdGVkXTsKKyAgICAgICAgW19wcmVzZW50
YXRpb25Qb3BvdmVyIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIF9wcmVzZW50YXRpb25Qb3Bv
dmVyID0gbmlsOworICAgIH0KKworICAgIGlmIChfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXIp
IHsKKyAgICAgICAgW19wcmVzZW50YXRpb25WaWV3Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRy
b2xsZXJBbmltYXRlZDphbmltYXRlZCBjb21wbGV0aW9uOl57CisgICAgICAgICAgICBfcHJlc2Vu
dGF0aW9uVmlld0NvbnRyb2xsZXIgPSBuaWw7CisgICAgICAgIH1dOworICAgIH0KK30KKworI3By
YWdtYSBtYXJrIC0gQWN0aW9uIFNoZWV0CisKK3N0YXRpYyBib29sIHN0cmluZ0hhc1ByZWZpeENh
c2VJbnNlbnNpdGl2ZShOU1N0cmluZyAqc3RyLCBOU1N0cmluZyAqcHJlZml4KQoreworICAgIE5T
UmFuZ2UgcmFuZ2UgPSBbc3RyIHJhbmdlT2ZTdHJpbmc6cHJlZml4IG9wdGlvbnM6KE5TQ2FzZUlu
c2Vuc2l0aXZlU2VhcmNoIHwgTlNBbmNob3JlZFNlYXJjaCldOworICAgIHJldHVybiByYW5nZS5s
b2NhdGlvbiAhPSBOU05vdEZvdW5kOworfQorCistIChOU0FycmF5ICopX21lZGlhVHlwZXNGb3JQ
aWNrZXJTb3VyY2VUeXBlOihVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGUpc291cmNl
VHlwZQoreworICAgIC8vIFRoZSBIVE1MNSBzcGVjIG1lbnRpb25zIHRoZSBsaXRlcmFsICJpbWFn
ZS8qIiBhbmQgInZpZGVvLyoiIHN0cmluZ3MuCisgICAgLy8gV2Ugc3VwcG9ydCB0aGVzZSBhbmQg
Z28gYSBzdGVwIGZ1cnRoZXIsIGlmIHRoZSBNSU1FIHR5cGUgc3RhcnRzIHdpdGgKKyAgICAvLyAi
aW1hZ2UvIiBvciAidmlkZW8vIiB3ZSBhZGp1c3QgdGhlIHBpY2tlcidzIGltYWdlIG9yIHZpZGVv
IGZpbHRlcnMuCisgICAgLy8gU28sICJpbWFnZS9qcGVnIiB3b3VsZCBtYWtlIHRoZSBwaWNrZXIg
ZGlzcGxheSBhbGwgaW1hZ2VzIHR5cGVzLgorICAgIE5TTXV0YWJsZVNldCAqbWVkaWFUeXBlcyA9
IFtOU011dGFibGVTZXQgc2V0XTsKKyAgICBmb3IgKE5TU3RyaW5nICptaW1lVHlwZSBpbiBfbWlt
ZVR5cGVzLmdldCgpKSB7CisgICAgICAgIGlmIChzdHJpbmdIYXNQcmVmaXhDYXNlSW5zZW5zaXRp
dmUobWltZVR5cGUsIEAiaW1hZ2UvIikpCisgICAgICAgICAgICBbbWVkaWFUeXBlcyBhZGRPYmpl
Y3Q6KE5TU3RyaW5nICopa1VUVHlwZUltYWdlXTsKKyAgICAgICAgZWxzZSBpZiAoc3RyaW5nSGFz
UHJlZml4Q2FzZUluc2Vuc2l0aXZlKG1pbWVUeXBlLCBAInZpZGVvLyIpKQorICAgICAgICAgICAg
W21lZGlhVHlwZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVNb3ZpZV07CisgICAgfQor
CisgICAgaWYgKFttZWRpYVR5cGVzIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIFttZWRpYVR5cGVz
IGFsbE9iamVjdHNdOworCisgICAgLy8gRmFsbGJhY2sgdG8gZXZlcnkgc3VwcG9ydGVkIG1lZGlh
IHR5cGUgaWYgdGhlcmUgaXMgbm8gZmlsdGVyLgorICAgIHJldHVybiBbVUlJbWFnZVBpY2tlckNv
bnRyb2xsZXIgYXZhaWxhYmxlTWVkaWFUeXBlc0ZvclNvdXJjZVR5cGU6c291cmNlVHlwZV07Cit9
CisKKy0gKHZvaWQpX3Nob3dNZWRpYVNvdXJjZVNlbGVjdGlvblNoZWV0Cit7CisgICAgTlNTdHJp
bmcgKmV4aXN0aW5nU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVkoIlBob3RvIExpYnJhcnkiLCAi
UGhvdG8gTGlicmFyeSAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBh
bGVydCBzaGVldCBidXR0b24gc3RyaW5nIGZvciBjaG9vc2luZyBhbiBleGlzdGluZyBtZWRpYSBp
dGVtIGZyb20gdGhlIFBob3RvIExpYnJhcnkiKTsKKyAgICBOU1N0cmluZyAqY2FuY2VsU3RyaW5n
ID0gV0VCX1VJX1NUUklOR19LRVkoIkNhbmNlbCIsICJDYW5jZWwgKGZpbGUgdXBsb2FkIGFjdGlv
biBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgYnV0dG9uIHN0cmluZyB0byBjYW5j
ZWwiKTsKKworICAgIC8vIENob29zZSB0aGUgYXBwcm9wcmlhdGUgc3RyaW5nIGZvciB0aGUgY2Ft
ZXJhIGJ1dHRvbi4KKyAgICBOU1N0cmluZyAqY2FtZXJhU3RyaW5nOworICAgIE5TQXJyYXkgKmZp
bHRlcmVkTWVkaWFUeXBlcyA9IFtzZWxmIF9tZWRpYVR5cGVzRm9yUGlja2VyU291cmNlVHlwZTpV
SUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGVDYW1lcmFdOworICAgIEJPT0wgY29udGFp
bnNJbWFnZU1lZGlhVHlwZSA9IFtmaWx0ZXJlZE1lZGlhVHlwZXMgY29udGFpbnNPYmplY3Q6KE5T
U3RyaW5nICopa1VUVHlwZUltYWdlXTsKKyAgICBCT09MIGNvbnRhaW5zVmlkZW9NZWRpYVR5cGUg
PSBbZmlsdGVyZWRNZWRpYVR5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVN
b3ZpZV07CisgICAgQVNTRVJUKGNvbnRhaW5zSW1hZ2VNZWRpYVR5cGUgfHwgY29udGFpbnNWaWRl
b01lZGlhVHlwZSk7CisgICAgaWYgKGNvbnRhaW5zSW1hZ2VNZWRpYVR5cGUgJiYgY29udGFpbnNW
aWRlb01lZGlhVHlwZSkKKyAgICAgICAgY2FtZXJhU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVko
IlRha2UgUGhvdG8gb3IgVmlkZW8iLCAiVGFrZSBQaG90byBvciBWaWRlbyAoZmlsZSB1cGxvYWQg
YWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0
cmluZyBmb3IgdGFraW5nIHBob3RvcyBvciB2aWRlb3MiKTsKKyAgICBlbHNlIGlmIChjb250YWlu
c1ZpZGVvTWVkaWFUeXBlKQorICAgICAgICBjYW1lcmFTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tF
WSgiVGFrZSBWaWRlbyIsICJUYWtlIFZpZGVvIChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwg
IkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGNhbWVyYSBidXR0b24gc3RyaW5nIGZvciB0YWtpbmcg
b25seSB2aWRlb3MiKTsKKyAgICBlbHNlCisgICAgICAgIGNhbWVyYVN0cmluZyA9IFdFQl9VSV9T
VFJJTkdfS0VZKCJUYWtlIFBob3RvIiwgIlRha2UgUGhvdG8gKGZpbGUgdXBsb2FkIGFjdGlvbiBz
aGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9y
IHRha2luZyBvbmx5IHBob3RvcyIpOworCisgICAgX2FjdGlvblNoZWV0Q29udHJvbGxlciA9IFtV
SUFsZXJ0Q29udHJvbGxlciBfYWxlcnRDb250cm9sbGVyV2l0aFRpdGxlOm5pbCBtZXNzYWdlOm5p
bF07CisgICAgW19hY3Rpb25TaGVldENvbnRyb2xsZXIgc2V0UHJlZmVycmVkU3R5bGU6VUlBbGVy
dENvbnRyb2xsZXJTdHlsZUFjdGlvblNoZWV0XTsKKworICAgIFtfYWN0aW9uU2hlZXRDb250cm9s
bGVyIF9hZGRBY3Rpb25XaXRoVGl0bGU6Y2FuY2VsU3RyaW5nIHN0eWxlOlVJQWxlcnRBY3Rpb25T
dHlsZUNhbmNlbCBoYW5kbGVyOl57CisgICAgICAgIFtzZWxmIF9jYW5jZWxdOworICAgICAgICBf
YWN0aW9uU2hlZXRDb250cm9sbGVyID0gbmlsOworICAgICAgICAvLyBXZSBoYW5kbGVkIGNhbmNl
bCBvdXJzZWx2ZXMuIFByZXZlbnQgdGhlIHBvcG92ZXIgY29udHJvbGxlciBkZWxlZ2F0ZSBmcm9t
IGNhbmNlbGxpbmcgd2hlbiB0aGUgcG9wb3ZlciBkaXNtaXNzZWQuCisgICAgICAgIFtfcHJlc2Vu
dGF0aW9uUG9wb3ZlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIH1dOworCisgICAgW19hY3Rpb25T
aGVldENvbnRyb2xsZXIgX2FkZEFjdGlvbldpdGhUaXRsZTpjYW1lcmFTdHJpbmcgc3R5bGU6VUlB
bGVydEFjdGlvblN0eWxlRGVmYXVsdCBoYW5kbGVyOl57CisgICAgICAgIF91c2luZ0NhbWVyYSA9
IFlFUzsKKyAgICAgICAgW3NlbGYgX3Nob3dQaG90b1BpY2tlcldpdGhTb3VyY2VUeXBlOlVJSW1h
Z2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZUNhbWVyYV07CisgICAgICAgIF9hY3Rpb25TaGVl
dENvbnRyb2xsZXIgPSBuaWw7CisgICAgfV07CisKKyAgICBbX2FjdGlvblNoZWV0Q29udHJvbGxl
ciBfYWRkQWN0aW9uV2l0aFRpdGxlOmV4aXN0aW5nU3RyaW5nIHN0eWxlOlVJQWxlcnRBY3Rpb25T
dHlsZURlZmF1bHQgaGFuZGxlcjpeeworICAgICAgICBbc2VsZiBfc2hvd1Bob3RvUGlja2VyV2l0
aFNvdXJjZVR5cGU6VUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlUGhvdG9MaWJyYXJ5
XTsKKyAgICAgICAgX2FjdGlvblNoZWV0Q29udHJvbGxlciA9IG5pbDsKKyAgICB9XTsKKworICAg
IGlmIChVSUN1cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpKQorICAgICAgICBbc2VsZiBf
cHJlc2VudFBvcG92ZXJXaXRoQ29udGVudFZpZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRy
b2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIF9wcmVz
ZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0KCkg
YW5pbWF0ZWQ6WUVTXTsKK30KKworI3ByYWdtYSBtYXJrIC0gSW1hZ2UgUGlja2VyCisKKy0gKHZv
aWQpX3Nob3dQaG90b1BpY2tlcldpdGhTb3VyY2VUeXBlOihVSUltYWdlUGlja2VyQ29udHJvbGxl
clNvdXJjZVR5cGUpc291cmNlVHlwZQoreworICAgIF9pbWFnZVBpY2tlciA9IGFkb3B0TlMoW1tV
SUltYWdlUGlja2VyQ29udHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgIFtfaW1hZ2VQaWNrZXIg
c2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19pbWFnZVBpY2tlciBzZXRTb3VyY2VUeXBlOnNvdXJj
ZVR5cGVdOworICAgIFtfaW1hZ2VQaWNrZXIgc2V0QWxsb3dzRWRpdGluZzpOT107CisgICAgW19p
bWFnZVBpY2tlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRpb25G
dWxsU2NyZWVuXTsKKyAgICBbX2ltYWdlUGlja2VyIF9zZXRBbGxvd3NNdWx0aXBsZVNlbGVjdGlv
bjpfYWxsb3dNdWx0aXBsZUZpbGVzXTsKKyAgICBbX2ltYWdlUGlja2VyIHNldE1lZGlhVHlwZXM6
W3NlbGYgX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOnNvdXJjZVR5cGVdXTsKKworICAg
IC8vIFVzZSBhIHBvcG92ZXIgb24gdGhlIGlQYWQgaWYgdGhlIHNvdXJjZSB0eXBlIGlzIG5vdCB0
aGUgY2FtZXJhLgorICAgIC8vIFRoZSBjYW1lcmEgd2lsbCB1c2UgYSBmdWxsc2NyZWVuLCBtb2Rh
bCB2aWV3IGNvbnRyb2xsZXIuCisgICAgQk9PTCB1c2VQb3BvdmVyID0gVUlDdXJyZW50VXNlcklu
dGVyZmFjZUlkaW9tSXNQYWQoKSAmJiBzb3VyY2VUeXBlICE9IFVJSW1hZ2VQaWNrZXJDb250cm9s
bGVyU291cmNlVHlwZUNhbWVyYTsKKyAgICBpZiAodXNlUG9wb3ZlcikKKyAgICAgICAgW3NlbGYg
X3ByZXNlbnRQb3BvdmVyV2l0aENvbnRlbnRWaWV3Q29udHJvbGxlcjpfaW1hZ2VQaWNrZXIuZ2V0
KCkgYW5pbWF0ZWQ6WUVTXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIF9wcmVzZW50RnVsbHNj
cmVlblZpZXdDb250cm9sbGVyOl9pbWFnZVBpY2tlci5nZXQoKSBhbmltYXRlZDpZRVNdOworfQor
CisjcHJhZ21hIG1hcmsgLSBQcmVzZW50aW5nIFZpZXcgQ29udHJvbGxlcnMKKworLSAodm9pZClf
cHJlc2VudFBvcG92ZXJXaXRoQ29udGVudFZpZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVy
ICopY29udGVudFZpZXdDb250cm9sbGVyIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkCit7CisgICAg
W3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6YW5pbWF0ZWRdOworCisgICAgX3ByZXNlbnRh
dGlvblBvcG92ZXIgPSBhZG9wdE5TKFtbVUlQb3BvdmVyQ29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhDb250ZW50Vmlld0NvbnRyb2xsZXI6Y29udGVudFZpZXdDb250cm9sbGVyXSk7CisgICAgW19w
cmVzZW50YXRpb25Qb3BvdmVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfcHJlc2VudGF0aW9u
UG9wb3ZlciBwcmVzZW50UG9wb3ZlckZyb21SZWN0OkNHUmVjdEludGVncmFsKENHUmVjdE1ha2Uo
X2ludGVyYWN0aW9uUG9pbnQueCwgX2ludGVyYWN0aW9uUG9pbnQueSwgMSwgMSkpIGluVmlldzpf
dmlldyBwZXJtaXR0ZWRBcnJvd0RpcmVjdGlvbnM6VUlQb3BvdmVyQXJyb3dEaXJlY3Rpb25Bbnkg
YW5pbWF0ZWQ6YW5pbWF0ZWRdOworfQorCistICh2b2lkKV9wcmVzZW50RnVsbHNjcmVlblZpZXdD
b250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopdmlld0NvbnRyb2xsZXIgYW5pbWF0ZWQ6KEJP
T0wpYW5pbWF0ZWQKK3sKKyAgICBbc2VsZiBfZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDphbmltYXRl
ZF07CisKKyAgICBfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXIgPSBbVUlWaWV3Q29udHJvbGxl
ciBfdmlld0NvbnRyb2xsZXJGb3JGdWxsU2NyZWVuUHJlc2VudGF0aW9uRnJvbVZpZXc6X3ZpZXdd
OworICAgIFtfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVy
OnZpZXdDb250cm9sbGVyIGFuaW1hdGVkOmFuaW1hdGVkIGNvbXBsZXRpb246bmlsXTsKK30KKwor
I3ByYWdtYSBtYXJrIC0gVUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlCisKKy0gKHZvaWQpcG9w
b3ZlckNvbnRyb2xsZXJEaWREaXNtaXNzUG9wb3ZlcjooVUlQb3BvdmVyQ29udHJvbGxlciAqKXBv
cG92ZXJDb250cm9sbGVyCit7CisgICAgW3NlbGYgX2NhbmNlbF07Cit9CisKKyNwcmFnbWEgbWFy
ayAtIFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24KKworLSAo
Qk9PTClfd2lsbE11bHRpcGxlU2VsZWN0aW9uRGVsZWdhdGVCZUNhbGxlZAoreworICAgIC8vIFRo
ZSBtdWx0aXBsZSBzZWxlY3Rpb24gZGVsZWdhdGUgd2lsbCBub3QgYmUgY2FsbGVkIHdoZW4gdGhl
IFVJSW1hZ2VQaWNrZXIgd2FzIG5vdCBtdWx0aXBsZSBzZWxlY3Rpb24uCisgICAgaWYgKCFfYWxs
b3dNdWx0aXBsZUZpbGVzKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICAvLyBUaGUgbXVsdGlw
bGUgc2VsZWN0aW9uIGRlbGVnYXRlIHdpbGwgbm90IGJlIGNhbGxlZCB3aGVuIHdlIHVzZWQgdGhl
IGNhbWVyYSBpbiB0aGUgVUlJbWFnZVBpY2tlci4KKyAgICBpZiAoX3VzaW5nQ2FtZXJhKQorICAg
ICAgICByZXR1cm4gTk87CisKKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKWltYWdlUGlj
a2VyQ29udHJvbGxlcjooVUlJbWFnZVBpY2tlckNvbnRyb2xsZXIgKilpbWFnZVBpY2tlciBkaWRG
aW5pc2hQaWNraW5nTWVkaWFXaXRoSW5mbzooTlNEaWN0aW9uYXJ5ICopaW5mbworeworICAgIC8v
IFNvbWV0aW1lcyBib3RoIGRlbGVnYXRlcyBnZXQgY2FsbGVkLCBzb21ldGltZXMganVzdCBvbmUu
IEFsd2F5cyBsZXQgdGhlCisgICAgLy8gbXVsdGlwbGUgc2VsZWN0aW9uIGRlbGVnYXRlIGhhbmRs
ZSBldmVyeXRoaW5nIGlmIGl0IHdpbGwgZ2V0IGNhbGxlZC4KKyAgICBpZiAoW3NlbGYgX3dpbGxN
dWx0aXBsZVNlbGVjdGlvbkRlbGVnYXRlQmVDYWxsZWRdKQorICAgICAgICByZXR1cm47CisKKyAg
ICBbc2VsZiBfZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDpZRVNdOworCisgICAgW3NlbGYgX3Byb2Nl
c3NNZWRpYUluZm9EaWN0aW9uYXJpZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmluZm9dCisg
ICAgICAgIHN1Y2Nlc3NCbG9jazpeKE5TQXJyYXkgKnByb2Nlc3NlZFJlc3VsdHMsIE5TU3RyaW5n
ICpkaXNwbGF5U3RyaW5nKSB7CisgICAgICAgICAgICBBU1NFUlQoW3Byb2Nlc3NlZFJlc3VsdHMg
Y291bnRdID09IDEpOworICAgICAgICAgICAgX1dLRmlsZVVwbG9hZEl0ZW0gKnJlc3VsdCA9IFtw
cm9jZXNzZWRSZXN1bHRzIG9iamVjdEF0SW5kZXg6MF07CisgICAgICAgICAgICBkaXNwYXRjaF9h
c3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgICAgIFtzZWxm
IF9jaG9vc2VGaWxlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6cmVzdWx0LmZpbGVVUkxdIGRp
c3BsYXlTdHJpbmc6ZGlzcGxheVN0cmluZyBpY29uSW1hZ2U6cmVzdWx0LmRpc3BsYXlJbWFnZV07
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBmYWlsdXJlQmxvY2s6XnsKKyAg
ICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Cisg
ICAgICAgICAgICAgICAgW3NlbGYgX2NhbmNlbF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIF07Cit9CisKKy0gKHZvaWQpaW1hZ2VQaWNrZXJDb250cm9sbGVyOihVSUltYWdlUGlj
a2VyQ29udHJvbGxlciAqKWltYWdlUGlja2VyIGRpZEZpbmlzaFBpY2tpbmdNdWx0aXBsZU1lZGlh
V2l0aEluZm86KE5TQXJyYXkgKilpbmZvcworeworICAgIFtzZWxmIF9kaXNtaXNzRGlzcGxheUFu
aW1hdGVkOllFU107CisKKyAgICBbc2VsZiBfcHJvY2Vzc01lZGlhSW5mb0RpY3Rpb25hcmllczpp
bmZvcworICAgICAgICBzdWNjZXNzQmxvY2s6XihOU0FycmF5ICpwcm9jZXNzZWRSZXN1bHRzLCBO
U1N0cmluZyAqZGlzcGxheVN0cmluZykgeworICAgICAgICAgICAgVUlJbWFnZSAqaWNvbkltYWdl
ID0gbmlsOworICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmZpbGVVUkxzID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5XTsKKyAgICAgICAgICAgIGZvciAoX1dLRmlsZVVwbG9hZEl0ZW0gKnJlc3Vs
dCBpbiBwcm9jZXNzZWRSZXN1bHRzKSB7CisgICAgICAgICAgICAgICAgTlNVUkwgKmZpbGVVUkwg
PSByZXN1bHQuZmlsZVVSTDsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGVVUkwpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFtmaWxlVVJMcyBhZGRPYmpl
Y3Q6cmVzdWx0LmZpbGVVUkxdOworICAgICAgICAgICAgICAgIGlmICghaWNvbkltYWdlKQorICAg
ICAgICAgICAgICAgICAgICBpY29uSW1hZ2UgPSByZXN1bHQuZGlzcGxheUltYWdlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeeworICAgICAgICAgICAgICAgIFtzZWxmIF9jaG9vc2VGaWxlczpmaWxlVVJMcyBk
aXNwbGF5U3RyaW5nOmRpc3BsYXlTdHJpbmcgaWNvbkltYWdlOmljb25JbWFnZV07CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBmYWlsdXJlQmxvY2s6XnsKKyAgICAgICAgICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAg
ICAgICAgW3NlbGYgX2NhbmNlbF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIF07
Cit9CisKKy0gKHZvaWQpaW1hZ2VQaWNrZXJDb250cm9sbGVyRGlkQ2FuY2VsOihVSUltYWdlUGlj
a2VyQ29udHJvbGxlciAqKWltYWdlUGlja2VyCit7CisgICAgW3NlbGYgX2Rpc21pc3NEaXNwbGF5
QW5pbWF0ZWQ6WUVTXTsKKyAgICBbc2VsZiBfY2FuY2VsXTsKK30KKworI3ByYWdtYSBtYXJrIC0g
UHJvY2VzcyBVSUltYWdlUGlja2VyIHJlc3VsdHMKKworLSAodm9pZClfcHJvY2Vzc01lZGlhSW5m
b0RpY3Rpb25hcmllczooTlNBcnJheSAqKWluZm9zIHN1Y2Nlc3NCbG9jazoodm9pZCAoXikoTlNB
cnJheSAqcHJvY2Vzc2VkUmVzdWx0cywgTlNTdHJpbmcgKmRpc3BsYXlTdHJpbmcpKXN1Y2Nlc3NC
bG9jayBmYWlsdXJlQmxvY2s6KHZvaWQgKF4pKCkpZmFpbHVyZUJsb2NrCit7CisgICAgW3NlbGYg
X3Byb2Nlc3NNZWRpYUluZm9EaWN0aW9uYXJpZXM6aW5mb3MgYXRJbmRleDowIHByb2Nlc3NlZFJl
c3VsdHM6W05TTXV0YWJsZUFycmF5IGFycmF5XSBwcm9jZXNzZWRJbWFnZUNvdW50OjAgcHJvY2Vz
c2VkVmlkZW9Db3VudDowIHN1Y2Nlc3NCbG9jazpzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZh
aWx1cmVCbG9ja107Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NNZWRpYUluZm9EaWN0aW9uYXJpZXM6
KE5TQXJyYXkgKilpbmZvcyBhdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4IHByb2Nlc3NlZFJlc3Vs
dHM6KE5TTXV0YWJsZUFycmF5ICopcHJvY2Vzc2VkUmVzdWx0cyBwcm9jZXNzZWRJbWFnZUNvdW50
OihOU1VJbnRlZ2VyKXByb2Nlc3NlZEltYWdlQ291bnQgcHJvY2Vzc2VkVmlkZW9Db3VudDooTlNV
SW50ZWdlcilwcm9jZXNzZWRWaWRlb0NvdW50IHN1Y2Nlc3NCbG9jazoodm9pZCAoXikoTlNBcnJh
eSAqcHJvY2Vzc2VkUmVzdWx0cywgTlNTdHJpbmcgKmRpc3BsYXlTdHJpbmcpKXN1Y2Nlc3NCbG9j
ayBmYWlsdXJlQmxvY2s6KHZvaWQgKF4pKCkpZmFpbHVyZUJsb2NrCit7CisgICAgTlNVSW50ZWdl
ciBjb3VudCA9IFtpbmZvcyBjb3VudF07CisgICAgaWYgKGluZGV4ID09IGNvdW50KSB7CisgICAg
ICAgIE5TU3RyaW5nICpkaXNwbGF5U3RyaW5nID0gW3NlbGYgX2Rpc3BsYXlTdHJpbmdGb3JQaG90
b3M6cHJvY2Vzc2VkSW1hZ2VDb3VudCB2aWRlb3M6cHJvY2Vzc2VkVmlkZW9Db3VudF07CisgICAg
ICAgIHN1Y2Nlc3NCbG9jayhwcm9jZXNzZWRSZXN1bHRzLCBkaXNwbGF5U3RyaW5nKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE5TRGljdGlvbmFyeSAqaW5mbyA9IFtpbmZvcyBvYmpl
Y3RBdEluZGV4OmluZGV4XTsKKyAgICBBU1NFUlQoaW5kZXggPCBjb3VudCk7CisgICAgaW5kZXgr
KzsKKworICAgIGF1dG8gdXBsb2FkSXRlbVN1Y2Nlc3NCbG9jayA9IF4oX1dLRmlsZVVwbG9hZEl0
ZW0gKnVwbG9hZEl0ZW0pIHsKKyAgICAgICAgTlNVSW50ZWdlciBuZXdQcm9jZXNzZWRWaWRlb0Nv
dW50ID0gcHJvY2Vzc2VkVmlkZW9Db3VudCArICh1cGxvYWRJdGVtLmlzVmlkZW8gPyAxIDogMCk7
CisgICAgICAgIE5TVUludGVnZXIgbmV3UHJvY2Vzc2VkSW1hZ2VDb3VudCA9IHByb2Nlc3NlZElt
YWdlQ291bnQgKyAodXBsb2FkSXRlbS5pc1ZpZGVvID8gMCA6IDEpOworICAgICAgICBbcHJvY2Vz
c2VkUmVzdWx0cyBhZGRPYmplY3Q6dXBsb2FkSXRlbV07CisgICAgICAgIFtzZWxmIF9wcm9jZXNz
TWVkaWFJbmZvRGljdGlvbmFyaWVzOmluZm9zIGF0SW5kZXg6aW5kZXggcHJvY2Vzc2VkUmVzdWx0
czpwcm9jZXNzZWRSZXN1bHRzIHByb2Nlc3NlZEltYWdlQ291bnQ6bmV3UHJvY2Vzc2VkSW1hZ2VD
b3VudCBwcm9jZXNzZWRWaWRlb0NvdW50Om5ld1Byb2Nlc3NlZFZpZGVvQ291bnQgc3VjY2Vzc0Js
b2NrOnN1Y2Nlc3NCbG9jayBmYWlsdXJlQmxvY2s6ZmFpbHVyZUJsb2NrXTsKKyAgICB9OworCisg
ICAgW3NlbGYgX3VwbG9hZEl0ZW1Gcm9tTWVkaWFJbmZvOmluZm8gc3VjY2Vzc0Jsb2NrOnVwbG9h
ZEl0ZW1TdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZhaWx1cmVCbG9ja107Cit9CisKKy0gKHZv
aWQpX3VwbG9hZEl0ZW1Gcm9tTWVkaWFJbmZvOihOU0RpY3Rpb25hcnkgKilpbmZvIHN1Y2Nlc3NC
bG9jazoodm9pZCAoXikoX1dLRmlsZVVwbG9hZEl0ZW0gKikpc3VjY2Vzc0Jsb2NrIGZhaWx1cmVC
bG9jazoodm9pZCAoXikoKSlmYWlsdXJlQmxvY2sKK3sKKyAgICBOU1N0cmluZyAqbWVkaWFUeXBl
ID0gW2luZm8gb2JqZWN0Rm9yS2V5OlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyTWVkaWFUeXBlXTsK
KworICAgIC8vIEZvciB2aWRlb3MgZnJvbSB0aGUgZXhpc3RpbmcgbGlicmFyeSBvciBjYW1lcmEs
IHRoZSBtZWRpYSBVUkwgd2lsbCBnaXZlIHVzIGEgZmlsZSBwYXRoLgorICAgIGlmIChVVFR5cGVD
b25mb3Jtc1RvKChDRlN0cmluZ1JlZiltZWRpYVR5cGUsIGtVVFR5cGVNb3ZpZSkpIHsKKyAgICAg
ICAgTlNVUkwgKm1lZGlhVVJMID0gW2luZm8gb2JqZWN0Rm9yS2V5OlVJSW1hZ2VQaWNrZXJDb250
cm9sbGVyTWVkaWFVUkxdOworICAgICAgICBpZiAoIVttZWRpYVVSTCBpc0ZpbGVVUkxdKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIldLRmlsZVVwbG9hZFBhbmVsOiBFeHBlY3RlZCBtZWRpYSBV
UkwgdG8gYmUgYSBmaWxlIHBhdGgsIGl0IHdhcyBub3QiKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgZmFpbHVyZUJsb2NrKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBOU1N0cmluZyAqZmlsZVBhdGggPSBbbWVkaWFV
UkwgcGF0aF07CisgICAgICAgIFJldGFpblB0cjxfV0tGaWxlVXBsb2FkSXRlbT4gaXRlbSA9IGFk
b3B0TlMoW1tfV0tWaWRlb0ZpbGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVQYXRoOmZp
bGVQYXRoIG1lZGlhVVJMOm1lZGlhVVJMXSk7CisgICAgICAgIHN1Y2Nlc3NCbG9jayhpdGVtLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZvciBpbWFnZXMsIHdlIGNy
ZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggYW5kIHVzZSB0aGUgb3JpZ2luYWwgaW1hZ2UuCisg
ICAgaWYgKFVUVHlwZUNvbmZvcm1zVG8oKENGU3RyaW5nUmVmKW1lZGlhVHlwZSwga1VUVHlwZUlt
YWdlKSkgeworICAgICAgICBVSUltYWdlICpvcmlnaW5hbEltYWdlID0gW2luZm8gb2JqZWN0Rm9y
S2V5OlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyT3JpZ2luYWxJbWFnZV07CisgICAgICAgIGlmICgh
b3JpZ2luYWxJbWFnZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5l
bDogRXhwZWN0ZWQgaW1hZ2UgZGF0YSBidXQgdGhlcmUgd2FzIG5vbmUiKTsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgZmFpbHVyZUJsb2NrKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDAp
LCBeeworICAgICAgICAgICAgc3RhdGljIE5TU3RyaW5nICprVGVtcG9yYXJ5RGlyZWN0b3J5TmFt
ZSA9IEAiV0tXZWJGaWxlVXBsb2FkIjsKKyAgICAgICAgICAgIHN0YXRpYyBOU1N0cmluZyAqa1Vw
bG9hZEltYWdlTmFtZSA9IEAiaW1hZ2UuanBnIjsKKworICAgICAgICAgICAgLy8gQnVpbGQgdGVt
cG9yYXJ5IGZpbGUgcGF0aC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2V0IHRo
ZSBBTEFzc2V0IGZvciB0aGUgbWVkaWFVUkwgYW5kIGdldCB0aGUgYWN0dWFsIGZpbGVuYW1lIGZv
ciB0aGUgcGhvdG8KKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgbmFtaW5nIGVhY2ggb2YgdGhl
IGluZGl2aWR1YWwgdXBsb2FkcyBpbWFnZS5qcGc/IFRoaXMgd29uJ3Qgd29yayBmb3IgcGhvdG9z
CisgICAgICAgICAgICAvLyB0YWtlbiB3aXRoIHRoZSBjYW1lcmEsIGJ1dCB3b3VsZCB3b3JrIGZv
ciBwaG90b3MgcGlja2VkIGZyb20gdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBOU0ZpbGVNYW5h
Z2VyICpmaWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICAg
ICAgICAgIE5TU3RyaW5nICp0ZW1wb3JhcnlEaXJlY3RvcnkgPSBbZmlsZU1hbmFnZXIgX3dlYmtp
dF9jcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnlXaXRoVGVtcGxhdGVQcmVmaXg6a1RlbXBvcmFyeURp
cmVjdG9yeU5hbWVdOworICAgICAgICAgICAgTlNTdHJpbmcgKmZpbGVQYXRoID0gW3RlbXBvcmFy
eURpcmVjdG9yeSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6a1VwbG9hZEltYWdlTmFt
ZV07CisgICAgICAgICAgICBpZiAoIWZpbGVQYXRoKSB7CisgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJXS0ZpbGVVcGxvYWRQYW5lbDogRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0
b3J5IHRvIHNhdmUgaW1hZ2UiKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlQmxvY2soKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENv
bXByZXNzIHRvIEpQRUcgZm9ybWF0LgorICAgICAgICAgICAgLy8gRklYTUU6IERpZmZlcmVudCBj
b21wcmVzc2lvbiBmb3IgZGlmZmVyZW50IGRldmljZXM/CisgICAgICAgICAgICAvLyBGSVhNRTog
RGlmZmVyZW50IGNvbXByZXNzaW9uIGZvciBkaWZmZXJlbnQgVUlJbWFnZSBzaXplcz8KKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgRVhJRiBkYXRhIGJlIG1haW50YWluZWQ/CisgICAgICAg
ICAgICBjb25zdCBDR0Zsb2F0IGNvbXByZXNzaW9uID0gMC44OworICAgICAgICAgICAgTlNEYXRh
ICpqcGVnID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbihvcmlnaW5hbEltYWdlLCBjb21wcmVz
c2lvbik7CisgICAgICAgICAgICBpZiAoIWpwZWcpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoIldLRmlsZVVwbG9hZFBhbmVsOiBGYWlsZWQgdG8gY3JlYXRlIEpQRUcgcmVwcmVzZW50YXRp
b24gZm9yIGltYWdlIik7CisgICAgICAgICAgICAgICAgZmFpbHVyZUJsb2NrKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTYXZlIHRo
ZSBpbWFnZSB0byB0aGUgdGVtcG9yYXJ5IGZpbGUuCisgICAgICAgICAgICBOU0Vycm9yICplcnJv
ciA9IG5pbDsKKyAgICAgICAgICAgIFtqcGVnIHdyaXRlVG9GaWxlOmZpbGVQYXRoIG9wdGlvbnM6
TlNEYXRhV3JpdGluZ0F0b21pYyBlcnJvcjomZXJyb3JdOworICAgICAgICAgICAgaWYgKGVycm9y
KSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5lbDogRXJyb3Ig
d3JpdGluZyBpbWFnZSBkYXRhIHRvIHRlbXBvcmFyeSBmaWxlOiAlQCIsIGVycm9yKTsKKyAgICAg
ICAgICAgICAgICBmYWlsdXJlQmxvY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFJldGFpblB0cjxfV0tGaWxlVXBsb2FkSXRlbT4gaXRl
bSA9IGFkb3B0TlMoW1tfV0tJbWFnZUZpbGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVQ
YXRoOmZpbGVQYXRoIG9yaWdpbmFsSW1hZ2U6b3JpZ2luYWxJbWFnZV0pOworICAgICAgICAgICAg
c3VjY2Vzc0Jsb2NrKGl0ZW0uZ2V0KCkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFVua25vd24gbWVkaWEgdHlwZS4KKyAgICBMT0dfRVJST1IoIldLRmls
ZVVwbG9hZFBhbmVsOiBVbmV4cGVjdGVkIG1lZGlhIHR5cGUuIEV4cGVjdGVkIGltYWdlIG9yIHZp
ZGVvLCBnb3Q6ICVAIiwgbWVkaWFUeXBlKTsKKyAgICBmYWlsdXJlQmxvY2soKTsKK30KKworLSAo
TlNTdHJpbmcgKilfZGlzcGxheVN0cmluZ0ZvclBob3RvczooTlNVSW50ZWdlcilpbWFnZUNvdW50
IHZpZGVvczooTlNVSW50ZWdlcil2aWRlb0NvdW50Cit7CisgICAgaWYgKCFpbWFnZUNvdW50ICYm
ICF2aWRlb0NvdW50KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNTdHJpbmcgKnRpdGxl
OworICAgIE5TU3RyaW5nICpjb3VudFN0cmluZzsKKyAgICBOU1N0cmluZyAqaW1hZ2VTdHJpbmcs
ICp2aWRlb1N0cmluZzsKKyAgICBOU1VJbnRlZ2VyIG51bWJlck9mVHlwZXMgPSAyOworCisgICAg
UmV0YWluUHRyPE5TTnVtYmVyRm9ybWF0dGVyPiBjb3VudEZvcm1hdHRlciA9IGFkb3B0TlMoW1tO
U051bWJlckZvcm1hdHRlciBhbGxvY10gaW5pdF0pOworICAgIFtjb3VudEZvcm1hdHRlciBzZXRM
b2NhbGU6W05TTG9jYWxlIGN1cnJlbnRMb2NhbGVdXTsKKyAgICBbY291bnRGb3JtYXR0ZXIgc2V0
R2VuZXJhdGVzRGVjaW1hbE51bWJlcnM6WUVTXTsKKyAgICBbY291bnRGb3JtYXR0ZXIgc2V0TnVt
YmVyU3R5bGU6TlNOdW1iZXJGb3JtYXR0ZXJEZWNpbWFsU3R5bGVdOworCisgICAgLy8gR2VuZXJh
dGUgdGhlIGluZGl2aWR1YWwgY291bnRzIGZvciBlYWNoIHR5cGUuCisgICAgc3dpdGNoIChpbWFn
ZUNvdW50KSB7CisgICAgY2FzZSAwOgorICAgICAgICBpbWFnZVN0cmluZyA9IG5pbDsKKyAgICAg
ICAgLS1udW1iZXJPZlR5cGVzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAg
IGltYWdlU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVkoIjEgUGhvdG8iLCAiMSBQaG90byAoZmls
ZSB1cGxvYWQgb24gcGFnZSBsYWJlbCBmb3Igb25lIHBob3RvKSIsICJGaWxlIFVwbG9hZCBzaW5n
bGUgcGhvdG8gbGFiZWwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
Y291bnRTdHJpbmcgPSBbY291bnRGb3JtYXR0ZXIgc3RyaW5nRnJvbU51bWJlcjpAKGltYWdlQ291
bnQpXTsKKyAgICAgICAgaW1hZ2VTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpX
RUJfVUlfU1RSSU5HX0tFWSgiJUAgUGhvdG9zIiwgIiMgUGhvdG9zIChmaWxlIHVwbG9hZCBvbiBw
YWdlIGxhYmVsIGZvciBtdWx0aXBsZSBwaG90b3MpIiwgIkZpbGUgVXBsb2FkIG11bHRpcGxlIHBo
b3RvcyBsYWJlbCIpLCBjb3VudFN0cmluZ107CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHN3aXRjaCAodmlkZW9Db3VudCkgeworICAgIGNhc2UgMDoKKyAgICAgICAgdmlkZW9TdHJpbmcg
PSBuaWw7CisgICAgICAgIC0tbnVtYmVyT2ZUeXBlczsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAxOgorICAgICAgICB2aWRlb1N0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCIxIFZpZGVvIiwg
IjEgVmlkZW8gKGZpbGUgdXBsb2FkIG9uIHBhZ2UgbGFiZWwgZm9yIG9uZSB2aWRlbyIsICJGaWxl
IFVwbG9hZCBzaW5nbGUgdmlkZW8gbGFiZWwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgY291bnRTdHJpbmcgPSBbY291bnRGb3JtYXR0ZXIgc3RyaW5nRnJvbU51bWJl
cjpAKHZpZGVvQ291bnQpXTsKKyAgICAgICAgdmlkZW9TdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HX0tFWSgiJUAgVmlkZW9zIiwgIiMgVmlkZW9zIChmaWxl
IHVwbG9hZCBvbiBwYWdlIGxhYmVsIGZvciBtdWx0aXBsZSB2aWRlb3MiLCAiRmlsZSBVcGxvYWQg
bXVsdGlwbGUgdmlkZW9zIGxhYmVsIiksIGNvdW50U3RyaW5nXTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gQ29tYmluZSBpbnRvIGEgc2luZ2xlIHJlc3VsdCBzdHJpbmcgaWYgbmVl
ZGVkLgorICAgIHN3aXRjaCAobnVtYmVyT2ZUeXBlcykgeworICAgIGNhc2UgMjoKKyAgICAgICAg
dGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HX0tFWSgiJUAg
YW5kICVAIiwgIiMgUGhvdG9zIGFuZCAjIFZpZGVvcyAoZmlsZSB1cGxvYWQgb24gcGFnZSBsYWJl
bCBmb3IgaW1hZ2UgYW5kIHZpZGVvcyIsICJGaWxlIFVwbG9hZCBpbWFnZXMgYW5kIHZpZGVvcyBs
YWJlbCIpLCBpbWFnZVN0cmluZywgdmlkZW9TdHJpbmddOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDE6CisgICAgICAgIHRpdGxlID0gaW1hZ2VTdHJpbmcgPyBpbWFnZVN0cmluZyA6IHZpZGVv
U3RyaW5nOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgdGl0bGUgPSBuaWw7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBbdGl0bGUgbG93ZXJjYXNlU3RyaW5nXTsKK30KKworQGVuZAorCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFjNDk1ODAuLjU2NDFjZGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjEsNiAr
MTAyMSw4IEBACiAJCUExQTRGRTYxMThERDU0QTQwMEI1RUE4QSAvKiBfV0tEb3dubG9hZERlbGVn
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUE0
RkU2MDE4REQ1NEE0MDBCNUVBOEEgLyogX1dLRG93bmxvYWREZWxlZ2F0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExREY2MzEyMThFMEI3Qzgw
MDNBM0UyQSAvKiBEb3dubG9hZENsaWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExREY2MzEwMThFMEI3QzgwMDNBM0UyQSAvKiBEb3dubG9hZENs
aWVudC5tbSAqLzsgfTsKIAkJQTFERjYzMTMxOEUwQjdDODAwM0EzRTJBIC8qIERvd25sb2FkQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMURG
NjMxMTE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQuaCAqLzsgfTsKKwkJQTU4QjZG
MDgxOEZDQTczMzAwOENCQTUzIC8qIFdLRmlsZVVwbG9hZFBhbmVsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNThCNkYwNjE4RkNBNzMzMDA4Q0JBNTMg
LyogV0tGaWxlVXBsb2FkUGFuZWwuaCAqLzsgfTsKKwkJQTU4QjZGMDkxOEZDQTczMzAwOENCQTUz
IC8qIFdLRmlsZVVwbG9hZFBhbmVsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTU4QjZGMDcxOEZDQTczMzAwOENCQTUzIC8qIFdLRmlsZVVwbG9hZFBh
bmVsLm1tICovOyB9OwogCQlBNUVGRDM4QzE2QjBFODhDMDBCMkYwRTggLyogV0tQYWdlVmlzaWJp
bGl0eVR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNUVGRDM4QjE2QjBFODhDMDBCMkYwRTggLyogV0tQYWdlVmlzaWJpbGl0eVR5cGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdENzkyRDYx
NzY3Q0I2RTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDc5MkQ1MTc2N0NCNkUwMDg4MUNCRSAv
KiBBY3Rpdml0eUFzc2VydGlvbi5jcHAgKi87IH07CiAJCUE3RDc5MkQ4MTc2N0NDQTMwMDg4MUNC
RSAvKiBBY3Rpdml0eUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdENzkyRDQxNzY3Q0IwOTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0
aW9uLmggKi87IH07CkBAIC0yODg0LDYgKzI4ODYsOCBAQAogCQlBMUVERDJEQjE4ODRCOTY0MDBC
QkZFOTggLyogUGx1Z2luUHJvY2Vzc1NoaW0ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gUGx1Z2lu
UHJvY2Vzc1NoaW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRURE
MkRDMTg4NEI5QjUwMEJCRkU5OCAvKiBTZWNJdGVtU2hpbS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBTZWNJdGVtU2hpbS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFF
REQyREQxODg0QjlFMzAwQkJGRTk4IC8qIFdlYlByb2Nlc3NTaGltLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IFdlYlByb2Nlc3NTaGltLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBNThCNkYwNjE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tGaWxlVXBsb2FkUGFuZWwuaDsgcGF0aCA9
IGlvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBNThCNkYwNzE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0ZpbGVVcGxvYWRQYW5lbC5t
bTsgcGF0aCA9IGlvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTVFRkQzOEIxNkIwRTg4QzAwQjJGMEU4IC8qIFdLUGFnZVZpc2liaWxp
dHlUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1BhZ2VWaXNpYmls
aXR5VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcyRDVEN0YxMjM2Q0JB
ODAwQTg4QjE1IC8qIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdENzkyRDQxNzY3Q0IwOTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNz
ZXJ0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5QXNzZXJ0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02NDcyLDYgKzY0NzYsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJQzVGQTFFRDExOEUxMDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLmggKi8s
CiAJCQkJQzVGQTFFRDIxOEUxMDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJvdXRlUGlja2VyLm1t
ICovLAorCQkJCUE1OEI2RjA2MThGQ0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxvYWRQYW5lbC5o
ICovLAorCQkJCUE1OEI2RjA3MThGQ0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxvYWRQYW5lbC5t
bSAqLywKIAkJCQlDNTQyNTZBRjE4QkVDMThCMDBERTQxNzkgLyogV0tGb3JtSW5wdXRDb250cm9s
LmggKi8sCiAJCQkJQzU0MjU2QjAxOEJFQzE4QjAwREU0MTc5IC8qIFdLRm9ybUlucHV0Q29udHJv
bC5tbSAqLywKIAkJCQlDNTQyNTZCMTE4QkVDMThCMDBERTQxNzkgLyogV0tGb3JtUGVyaXBoZXJh
bC5oICovLApAQCAtNjY3Niw2ICs2NjgyLDcgQEAKIAkJCQkxQUI3RDRDQTEyODhBQUE3MDBDRkQw
OEMgLyogRG93bmxvYWRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzczRDEyMkQxOEE0QjZF
QjAwNjZEOUNDIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFEMjVFOTYxNjdBQjA4MTAwRUE5QkNEIC8qIERvd25sb2FkUHJveHlNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCUE1OEI2RjA4MThGQ0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxv
YWRQYW5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCN0Q2MUExMjg4QjlEOTAwQ0ZEMDhDIC8q
IERvd25sb2FkUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxNzM4ODExMkRG
OEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzg0NTJBODExNjJDODA5MDBDQUI5QjUgLyogRHJhd2luZ0FyZWEuaCBpbiBIZWFkZXJzICov
LApAQCAtODM4NCw2ICs4MzkxLDcgQEAKIAkJCQlCQzExMUE1QTExMkY0RkJCMDAzMzdCQUIgLyog
V2ViQ2hyb21lQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODE2MEQwMTg3NjQ1NTcw
MDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
M0Y4N0I5QkQxNTg5NDAxMjAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBNThCNkYwOTE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlGMDM2OTc4ODE1RjRCRjA1MDBDM0E4MEUgLyogV2ViQ29s
b3JQaWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0QTYyOEYxNDczMTJCRTAwNkM2ODFB
IC8qIFdlYkNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0QTYyOTExNDczMTJC
RTAwNkM2ODFBIC8qIFdlYkNvbm5lY3Rpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVz
dWx0TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAppbmRleCBiY2YzZTgwLi42NTRiODI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIgogCisjaW5j
bHVkZSA8V2ViQ29yZS9JY29uLmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYXNzUmVmUHRy
PFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6
Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IGZp
bGVDaG9vc2VyKQpAQCAtNDgsNCArNTAsMTEgQEAgdm9pZCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lcjo6ZGlkQ2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVzKQogICAgIG1f
ZmlsZUNob29zZXItPmNob29zZUZpbGVzKGZpbGVzKTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykK
K3ZvaWQgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6OmRpZENob29zZUZpbGVzV2l0aERpc3Bs
YXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlcywgY29uc3QgU3RyaW5n
JiBkaXNwbGF5U3RyaW5nLCBXZWJDb3JlOjpJY29uKiBkaXNwbGF5SWNvbikKK3sKKyAgICBtX2Zp
bGVDaG9vc2VyLT5jaG9vc2VNZWRpYUZpbGVzKGZpbGVzLCBkaXNwbGF5U3RyaW5nLCBkaXNwbGF5
SWNvbik7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lci5oCmluZGV4IDA3M2Q2NmEuLjBkMDkwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lci5oCkBAIC0yOSw2ICsyOSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlQ2hvb3Nlci5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBJY29uOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsK
QEAgLTQwLDYgKzQ0LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNjb25uZWN0RnJvbVBhZ2Uo
KSB7IG1fcGFnZSA9IDA7IH0KICAgICB2b2lkIGRpZENob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+Jik7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgZGlkQ2hvb3NlRmlsZXNXaXRo
RGlzcGxheVN0cmluZ0FuZEljb24oY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlTdHJpbmcsIFdlYkNvcmU6Okljb24qKTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAg
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UqLCBQYXNzUmVmUHRyPFdlYkNvcmU6
OkZpbGVDaG9vc2VyPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggOTA0YWE1ZC4uMmY2MGU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTg0LDYgKzE4NCw4IEBACiAKICNpZiBQ
TEFURk9STShJT1MpCiAjaW5jbHVkZSAiV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgorI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lj
b24uaD4KICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjk5Myw2ICsyOTk1LDI3IEBAIHZv
aWQgV2ViUGFnZTo6Y2hhbmdlU2VsZWN0ZWRJbmRleChpbnQzMl90IGluZGV4KQogICAgIG1fYWN0
aXZlUG9wdXBNZW51LT5kaWRDaGFuZ2VTZWxlY3RlZEluZGV4KGluZGV4KTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK3ZvaWQgV2ViUGFnZTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRo
RGlzcGxheVN0cmluZ0FuZEljb24oY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVzLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlTdHJpbmcsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgaWNvbkRhdGEp
Cit7CisgICAgaWYgKCFtX2FjdGl2ZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8SWNvbj4gaWNvbjsKKyNpZiBVU0UoQ0cpCisgICAgaWYgKCFp
Y29uRGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YVJl
ZiA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIGljb25EYXRhLmRhdGEoKSwgaWNvbkRh
dGEuc2l6ZSgpKSk7CisgICAgICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gaW1hZ2VQ
cm92aWRlclJlZiA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFS
ZWYuZ2V0KCkpKTsKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlUmVmID0gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEpQRUdEYXRhUHJvdmlkZXIoaW1hZ2VQcm92aWRlclJlZi5n
ZXQoKSwgbnVsbHB0ciwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgICAg
ICBpY29uID0gSWNvbjo6Y3JlYXRlSWNvbkZvckltYWdlKGltYWdlUmVmLmdldCgpKTsKKyAgICB9
CisjZW5kaWYKKworICAgIG1fYWN0aXZlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXItPmRpZENob29z
ZUZpbGVzV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGZpbGVzLCBkaXNwbGF5U3RyaW5nLCBpY29u
LmdldCgpKTsKKyAgICBtX2FjdGl2ZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gbnVsbHB0cjsK
K30KKyNlbmRpZgorCiB2b2lkIFdlYlBhZ2U6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlcykKIHsKICAgICBpZiAoIW1fYWN0aXZlT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAppbmRleCBhNzc0MDIyLi5lYzAxZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTk0Myw2ICs5NDMsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgZmFpbGVkVG9TaG93UG9wdXBNZW51KCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykK
KyAgICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJ
Y29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGljb25EYXRhKTsKKyNlbmRpZgogICAgIHZvaWQgZGlk
Q2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICB2b2lk
IGRpZENhbmNlbEZvck9wZW5QYW5lbCgpOwogI2lmIEVOQUJMRShXRUJfUFJPQ0VTU19TQU5EQk9Y
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgppbmRleCBmOWI4MjA5Li43ZjczZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtMjIxLDYg
KzIyMSw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogI2VuZGlmCiAK
ICAgICAjIE9wZW4gcGFuZWwuCisjaWYgUExBVEZPUk0oSU9TKQorICAgIERpZENob29zZUZpbGVz
Rm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKFZlY3RvcjxTdHJpbmc+IGZpbGVV
UkxzLCBTdHJpbmcgZGlzcGxheVN0cmluZywgSVBDOjpEYXRhUmVmZXJlbmNlIGljb25EYXRhKQor
I2VuZGlmCiAgICAgRGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoVmVjdG9yPFN0cmluZz4gZmls
ZVVSTHMpCiAgICAgRGlkQ2FuY2VsRm9yT3BlblBhbmVsKCkKICNpZiBFTkFCTEUoV0VCX1BST0NF
U1NfU0FOREJPWCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230403</attachid>
            <date>2014-04-29 12:42:37 -0700</date>
            <delta_ts>2014-04-30 13:52:10 -0700</delta_ts>
            <desc>[PATCH] Addressed Comments</desc>
            <filename>file-upload-2.patch</filename>
            <type>text/plain</type>
            <size>66676</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5Y2ZjNTEwLi4zMTM5OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTQtMDQtMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbaU9TXSBXZWJLaXQyIEZpbGUgVXBsb2FkIFN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjAyNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9Mb2NhbGl6
YWJsZS5zdHJpbmdzOgorICAgICAgICBOZXcgbG9jYWxpemVkIHN0cmluZ3MgZm9yIDxpbnB1dCB0
eXBlPSJmaWxlIj4gb24gaU9TLgorCiAyMDE0LTA0LTIxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUHJvZmlsZXJBZ2VudDo6ZGlzYWJsZSBpcyBj
YWxsaW5nIHRoZSB3cm9uZyBzdXBlcmNsYXNzIG1ldGhvZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzIGIvU291cmNlL1dlYkNvcmUv
RW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCmluZGV4IGI3N2E0MmMuLjBjYzBmMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovTG9jYWxpemFibGUuc3Ry
aW5ncworKysgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmlu
Z3MKQEAgLTEsMyArMSwxMiBAQAorLyogRmlsZSBVcGxvYWQgbXVsdGlwbGUgcGhvdG9zIGxhYmVs
ICovCisiIyBQaG90b3MgKGZpbGUgdXBsb2FkIG9uIHBhZ2UgbGFiZWwgZm9yIG11bHRpcGxlIHBo
b3RvcykiID0gIiVAIFBob3RvcyI7CisKKy8qIEZpbGUgVXBsb2FkIGltYWdlcyBhbmQgdmlkZW9z
IGxhYmVsICovCisiIyBQaG90b3MgYW5kICMgVmlkZW9zIChmaWxlIHVwbG9hZCBvbiBwYWdlIGxh
YmVsIGZvciBpbWFnZSBhbmQgdmlkZW9zKSIgPSAiJUAgUGhvdG9zIGFuZCAlQCBWaWRlb3MiOwor
CisvKiBGaWxlIFVwbG9hZCBtdWx0aXBsZSB2aWRlb3MgbGFiZWwgKi8KKyIjIFZpZGVvcyAoZmls
ZSB1cGxvYWQgb24gcGFnZSBsYWJlbCBmb3IgbXVsdGlwbGUgdmlkZW9zKSIgPSAiJUAgVmlkZW9z
IjsKKwogLyogYWNjZXNzaWJpbGl0eSBoZWxwIHRleHQgZm9yIG1lZGlhIGNvbnRyb2xsZXIgdGlt
ZSB2YWx1ZSA+PSAxIGRheSAqLwogIiUxJGQgZGF5cyAlMiRkIGhvdXJzICUzJGQgbWludXRlcyAl
NCRkIHNlY29uZHMiID0gIiUxJGQgZGF5cyAlMiRkIGhvdXJzICUzJGQgbWludXRlcyAlNCRkIHNl
Y29uZHMiOwogCkBAIC01NSw2ICs2NCwxMiBAQAogLyogUHJlc2VudCB0aGUgZWxlbWVudCA8c2Vs
ZWN0IG11bHRpcGxlPiB3aGVuIGEgc2luZ2xlIDxvcHRpb24+IGlzIHNlbGVjdGVkIChpT1Mgb25s
eSkgKi8KICIxIEl0ZW0iID0gIjEgSXRlbSI7CiAKKy8qIEZpbGUgVXBsb2FkIHNpbmdsZSBwaG90
byBsYWJlbCAqLworIjEgUGhvdG8gKGZpbGUgdXBsb2FkIG9uIHBhZ2UgbGFiZWwgZm9yIG9uZSBw
aG90bykiID0gIjEgUGhvdG8iOworCisvKiBGaWxlIFVwbG9hZCBzaW5nbGUgdmlkZW8gbGFiZWwg
Ki8KKyIxIFZpZGVvIChmaWxlIHVwbG9hZCBvbiBwYWdlIGxhYmVsIGZvciBvbmUgdmlkZW8pIiA9
ICIxIFZpZGVvIjsKKwogLyogTWVudSBpdGVtIHRpdGxlIGZvciBLRVlHRU4gcG9wLXVwIG1lbnUg
Ki8KICIxMDI0IChNZWRpdW0gR3JhZGUpIiA9ICIxMDI0IChNZWRpdW0gR3JhZGUpIjsKIApAQCAt
OTQsNiArMTA5LDkgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJCb2xkIChVbmRvIGFjdGlv
biBuYW1lKSIgPSAiQm9sZCI7CiAKKy8qIEZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1dHRvbiBz
dHJpbmcgdG8gY2FuY2VsICovCisiQ2FuY2VsIChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiA9
ICJDYW5jZWwiOworCiAvKiBUaXRsZSBmb3IgQ2FuY2VsIGJ1dHRvbiBsYWJlbCBpbiBidXR0b24g
YmFyICovCiAiQ2FuY2VsIGJ1dHRvbiBsYWJlbCBpbiBidXR0b24gYmFyIiA9ICJDYW5jZWwiOwog
CkBAIC0zNzksNiArMzk3LDkgQEAKIC8qIE1lZGlhIFBhdXNlIGNvbnRleHQgbWVudSBpdGVtICov
CiAiUGF1c2UiID0gIlBhdXNlIjsKIAorLyogRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgYnV0dG9u
IHN0cmluZyBmb3IgY2hvb3NpbmcgYW4gZXhpc3RpbmcgbWVkaWEgaXRlbSBmcm9tIHRoZSBQaG90
byBMaWJyYXJ5ICovCisiUGhvdG8gTGlicmFyeSAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIg
PSAiUGhvdG8gTGlicmFyeSI7CisKIC8qIE1lZGlhIFBsYXkgY29udGV4dCBtZW51IGl0ZW0gKi8K
ICJQbGF5IiA9ICJQbGF5IjsKIApAQCAtNTI2LDYgKzU0NywxNSBAQAogLyogVW5kbyBhY3Rpb24g
bmFtZSAqLwogIlN1cGVyc2NyaXB0IChVbmRvIGFjdGlvbiBuYW1lKSIgPSAiU3VwZXJzY3JpcHQi
OwogCisvKiBGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmluZyBmb3Ig
dGFraW5nIG9ubHkgcGhvdG9zICovCisiVGFrZSBQaG90byAoZmlsZSB1cGxvYWQgYWN0aW9uIHNo
ZWV0KSIgPSAiVGFrZSBQaG90byI7CisKKy8qIEZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGNhbWVy
YSBidXR0b24gc3RyaW5nIGZvciB0YWtpbmcgcGhvdG9zIG9yIHZpZGVvcyAqLworIlRha2UgUGhv
dG8gb3IgVmlkZW8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiID0gIlRha2UgUGhvdG8gb3Ig
VmlkZW8iOworCisvKiBGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmlu
ZyBmb3IgdGFraW5nIG9ubHkgdmlkZW9zICovCisiVGFrZSBWaWRlbyAoZmlsZSB1cGxvYWQgYWN0
aW9uIHNoZWV0KSIgPSAiVGFrZSBWaWRlbyI7CisKIC8qIFRleHQgUmVwbGFjZW1lbnQgY29udGV4
dCBtZW51IGl0ZW0gKi8KICJUZXh0IFJlcGxhY2VtZW50IiA9ICJUZXh0IFJlcGxhY2VtZW50IjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDBjNjE0MTkuLjNiYjI4NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MTQgQEAKKzIwMTQtMDQtMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
KworICAgICAgICBbaU9TXSBXZWJLaXQyIEZpbGUgVXBsb2FkIFN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjAyNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2Vi
S2l0Mi54Y2NvbmZpZzoKKyAgICAgICAgSW5jbHVkZSBNb2JpbGVDb3JlU2VydmljZXMgb24gaU9T
IGZvciBrVVRUeXBlSW1hZ2Uva1VUVHlwZU1vdmllLgorCisgICAgICAgICogV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmZpbGVQYXRoc0Zyb21GaWxlVVJMcyk6CisgICAgICAgIChXZWJLaXQ6OldlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk6OmNob29zZUZpbGVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cnVuT3BlblBhbmVsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhE
aXNwbGF5U3RyaW5nQW5kSWNvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXI6OmRpZENob29zZUZpbGVzV2l0aERpc3BsYXlTdHJpbmdBbmRJY29u
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ2hv
b3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24pOgorICAgICAgICBN
ZXNzYWdlIGZvcndhcmRpbmcgZm9yIGNob29zaW5nIGZpbGVzIGFuZCBwcm92aWRpbmcgYSBkaXNw
bGF5IHN0cmluZyBhbmQgaWNvbiwKKyAgICAgICAgbGVhZGluZyBkb3duIHRvIHRoZSBleGlzdGlu
ZyBXZWJDb3JlIEZpbGVDaG9vc2VyIG1ldGhvZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QYWdl
Q2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpoYW5kbGVSdW5PcGVuUGFuZWwpOgorICAgICAgICBBZGQg
YSBkZWZhdWx0IGhhbmRsZXIgZm9yIGZpbGUgb3BlbiBwYW5lbCBvbiBpT1MuCisgICAgICAgIEZv
cndhcmRzIHRvIHRoZSBjb250ZW50IHZpZXcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGxhc3RJbnRl
cmFjdGlvbkxvY2F0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3dlYlRvdWNoRXZl
bnRzUmVjb2duaXplZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfaGlnaGxpZ2h0TG9u
Z1ByZXNzUmVjb2duaXplZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfbG9uZ1ByZXNz
UmVjb2duaXplZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2luZ2xlVGFwUmVjb2du
aXplZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZG91YmxlVGFwUmVjb2duaXplZDpd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfdHdvRmluZ2VyRG91YmxlVGFwUmVjb2duaXpl
ZDpdKToKKyAgICAgICAgS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBpbnRlcmFjdGlvbiBsb2NhdGlv
bi4gVGhpcyBtYXRjaGVzIHByZXZpb3VzIGJlaGF2aW9yCisgICAgICAgIG9mIHNob3dpbmcgdGhl
IGZpbGUgdXBsb2FkIHBvcG92ZXIgd2hlcmUgdGhlIHVzZXIgdGFwcGVkLCB0byBoYW5kbGUKKyAg
ICAgICAgY2FzZXMgd2hlcmUgdGhlIDxpbnB1dD4gaXMgaGlkZGVuLgorCisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX3Nob3dSdW5PcGVuUGFuZWw6cmVzdWx0TGlzdGVuZXI6XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgZmlsZVVwbG9hZFBhbmVsRGlkRGlzbWlzczpdKToKKyAgICAgICAg
SGFuZGxlIHNob3dpbmcgdGhlIGNsZWFuaW5nIHVwIGFmdGVyIHRoZSBmaWxlIHVwbG9hZCBwYW5l
bC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tOiBBZGRl
ZC4KKyAgICAgICAgKHNxdWFyZUNyb3BSZWN0Rm9yU2l6ZSk6CisgICAgICAgIChzcXVhcmVJbWFn
ZSk6CisgICAgICAgICh0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2UpOgorICAgICAgICAoLVtf
V0tGaWxlVXBsb2FkSXRlbSBpc1ZpZGVvXSk6CisgICAgICAgICgtW19XS0ZpbGVVcGxvYWRJdGVt
IGZpbGVVUkxdKToKKyAgICAgICAgKC1bX1dLRmlsZVVwbG9hZEl0ZW0gZGlzcGxheUltYWdlXSk6
CisgICAgICAgICgtW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gaW5pdFdpdGhGaWxlUGF0aDpvcmln
aW5hbEltYWdlOl0pOgorICAgICAgICAoLVtfV0tJbWFnZUZpbGVVcGxvYWRJdGVtIGlzVmlkZW9d
KToKKyAgICAgICAgKC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBmaWxlVVJMXSk6CisgICAgICAg
ICgtW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gZGlzcGxheUltYWdlXSk6CisgICAgICAgICgtW19X
S1ZpZGVvRmlsZVVwbG9hZEl0ZW0gaW5pdFdpdGhGaWxlUGF0aDptZWRpYVVSTDpdKToKKyAgICAg
ICAgKC1bX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBpc1ZpZGVvXSk6CisgICAgICAgICgtW19XS1Zp
ZGVvRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOgorICAgICAgICAoLVtfV0tWaWRlb0ZpbGVVcGxv
YWRJdGVtIGRpc3BsYXlJbWFnZV0pOgorICAgICAgICBIZWxwZXIgY2xhc3MgZm9yIGVhY2ggaW1h
Z2UgcGlja2VyIHNlbGVjdGlvbi4gS25vd3MgaG93IHRvIGdldAorICAgICAgICBhIGZpbGUgVVJM
IGFuZCB0aHVtYm5haWwgZGlzcGxheSBpbWFnZSBmb3IgdGhlIGl0ZW0uCisKKyAgICAgICAgKC1b
V0tGaWxlVXBsb2FkUGFuZWwgaW5pdFdpdGhWaWV3Ol0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxv
YWRQYW5lbCBkZWFsbG9jXSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9kaXNwYXRj
aERpZERpc21pc3NdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX2NhbmNlbF0pOgor
ICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfY2hvb3NlRmlsZXM6ZGlzcGxheVN0cmluZzpp
Y29uSW1hZ2U6XSk6CisgICAgICAgIExpZmV0aW1lIG9mIHRoZSB1cGxvYWQgcGFuZWwgcmVxdWly
ZXMgdGhhdCBlaXRoZXIgY2FuY2VsIG9yIGNob29zZQorICAgICAgICBtdXN0IGhhcHBlbiBhcyB3
ZSBnbyB0aHJvdWdoIHRoZSBmaWxlIHBpY2tpbmcgcHJvY2Vzcy4KKworICAgICAgICAoLVtXS0Zp
bGVVcGxvYWRQYW5lbCBwcmVzZW50V2l0aFBhcmFtZXRlcnM6V2ViS2l0OjpyZXN1bHRMaXN0ZW5l
cjpXZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBkaXNtaXNzXSk6Cisg
ICAgICAgIEFQSSB0byBzaG93IG9yIGRpc21pc3MgdGhlIHBhbmVsLgorCisgICAgICAgICgtW1dL
RmlsZVVwbG9hZFBhbmVsIF9kaXNtaXNzRGlzcGxheUFuaW1hdGVkOl0pOgorICAgICAgICBIZWxw
ZXIgdG8gY2xlYW4gdXAgdGhlIFVJIGFzIGl0IHByb2dyZXNzZXMgb3IgY29tcGxldGVzIG5vIG1h
dHRlciB0aGUgZGV2aWNlIGlkaW9tLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9w
cmVzZW50UG9wb3ZlcldpdGhDb250ZW50Vmlld0NvbnRyb2xsZXI6YW5pbWF0ZWQ6XSk6CisgICAg
ICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9wcmVzZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVy
OmFuaW1hdGVkOl0pOgorICAgICAgICBVSSBwcmVzZW50YXRpb24gZm9yIHRoZSBhcHByb3ByaWF0
ZSBpZGlvbS4KKworICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfbWVkaWFUeXBlc0ZvclBp
Y2tlclNvdXJjZVR5cGU6XSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9zaG93TWVk
aWFTb3VyY2VTZWxlY3Rpb25TaGVldF0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBf
c2hvd1Bob3RvUGlja2VyV2l0aFNvdXJjZVR5cGU6XSk6CisgICAgICAgIFNob3dpbmcgdGhlIGFj
dGlvbiBzaGVldCBvciBpbWFnZSBwaWNrZXIuCisKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFu
ZWwgcG9wb3ZlckNvbnRyb2xsZXJEaWREaXNtaXNzUG9wb3ZlcjpdKToKKyAgICAgICAgKC1bV0tG
aWxlVXBsb2FkUGFuZWwgX3dpbGxNdWx0aXBsZVNlbGVjdGlvbkRlbGVnYXRlQmVDYWxsZWRdKToK
KyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgaW1hZ2VQaWNrZXJDb250cm9sbGVyOmRpZEZp
bmlzaFBpY2tpbmdNZWRpYVdpdGhJbmZvOl0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5l
bCBpbWFnZVBpY2tlckNvbnRyb2xsZXI6ZGlkRmluaXNoUGlja2luZ011bHRpcGxlTWVkaWFXaXRo
SW5mbzpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgaW1hZ2VQaWNrZXJDb250cm9s
bGVyRGlkQ2FuY2VsOl0pOgorICAgICAgICBBY3Rpb24gc2hlZXQgb3IgaW1hZ2UgcGlja2VyIGhh
bmRsZXJzLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9wcm9jZXNzTWVkaWFJbmZv
RGljdGlvbmFyaWVzOnN1Y2Nlc3NCbG9jazpmYWlsdXJlQmxvY2s6XSk6CisgICAgICAgICgtW1dL
RmlsZVVwbG9hZFBhbmVsIF9wcm9jZXNzTWVkaWFJbmZvRGljdGlvbmFyaWVzOmF0SW5kZXg6cHJv
Y2Vzc2VkUmVzdWx0czpwcm9jZXNzZWRJbWFnZUNvdW50OnByb2Nlc3NlZFZpZGVvQ291bnQ6c3Vj
Y2Vzc0Jsb2NrOmZhaWx1cmVCbG9jazpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwg
X3VwbG9hZEl0ZW1Gcm9tTWVkaWFJbmZvOnN1Y2Nlc3NCbG9jazpmYWlsdXJlQmxvY2s6XSk6Cisg
ICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9kaXNwbGF5U3RyaW5nRm9yUGhvdG9zOnZpZGVv
czpdKToKKyAgICAgICAgUHJvY2Vzc2luZyBzZWxlY3Rpb25zIGZyb20gdGhlIGltYWdlIHBpY2tl
ciB0byBGaWxlVXBsb2FkSXRlbXMuCisKIDIwMTQtMDQtMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIGxvY2FsIHZhcmlhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9XZWJLaXQyLnhjY29u
ZmlnIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvV2ViS2l0Mi54Y2NvbmZpZwppbmRl
eCBkZjM4Yjk3Li5iYjYxM2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0
aW9ucy9XZWJLaXQyLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25z
L1dlYktpdDIueGNjb25maWcKQEAgLTE5LDcgKzE5LDcgQEAKIC8vIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKIC8vIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICNp
bmNsdWRlICJCYXNlVGFyZ2V0LnhjY29uZmlnIgogCkBAIC0zMCw3ICszMCw3IEBAIElOU1RBTExf
UEFUSF9BQ1RVQUwgPSAkKFdFQktJVDJfRlJBTUVXT1JLU19ESVIpOwogRFlMSUJfSU5TVEFMTF9O
QU1FX0JBU0UgPSAkKE5PUk1BTF9XRUJLSVQyX0ZSQU1FV09SS1NfRElSKTsKIAogRlJBTUVXT1JL
X0FORF9MSUJSQVJZX0xERkxBR1MgPSAkKEZSQU1FV09SS19BTkRfTElCUkFSWV9MREZMQUdTXyQo
UExBVEZPUk1fTkFNRSkpOwotRlJBTUVXT1JLX0FORF9MSUJSQVJZX0xERkxBR1NfaXBob25lc2lt
dWxhdG9yID0gLWxvYmpjIC1mcmFtZXdvcmsgQXNzZXJ0aW9uU2VydmljZXMgLWZyYW1ld29yayBD
Rk5ldHdvcmsgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAtZnJhbWV3b3JrIENvcmVHcmFwaGlj
cyAtZnJhbWV3b3JrIENvcmVQREYgLWZyYW1ld29yayBDb3JlVGV4dCAtZnJhbWV3b3JrIEZvdW5k
YXRpb24gLWZyYW1ld29yayBHcmFwaGljc1NlcnZpY2VzIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJh
bWV3b3JrIFVJS2l0IC1mcmFtZXdvcmsgT3BlbkdMRVMgLWZyYW1ld29yayBNb2JpbGVBc3NldCAt
ZnJhbWV3b3JrIFdlYktpdCAtbE1vYmlsZUdlc3RhbHQgLWxhc3NlcnRpb25fZXh0ZW5zaW9uOwor
RlJBTUVXT1JLX0FORF9MSUJSQVJZX0xERkxBR1NfaXBob25lc2ltdWxhdG9yID0gLWxvYmpjIC1m
cmFtZXdvcmsgQXNzZXJ0aW9uU2VydmljZXMgLWZyYW1ld29yayBDRk5ldHdvcmsgLWZyYW1ld29y
ayBDb3JlRm91bmRhdGlvbiAtZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJhbWV3b3JrIENvcmVQ
REYgLWZyYW1ld29yayBDb3JlVGV4dCAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBH
cmFwaGljc1NlcnZpY2VzIC1mcmFtZXdvcmsgSW1hZ2VJTyAtZnJhbWV3b3JrIFVJS2l0IC1mcmFt
ZXdvcmsgT3BlbkdMRVMgLWZyYW1ld29yayBNb2JpbGVBc3NldCAtZnJhbWV3b3JrIE1vYmlsZUNv
cmVTZXJ2aWNlcyAtZnJhbWV3b3JrIFdlYktpdCAtbE1vYmlsZUdlc3RhbHQgLWxhc3NlcnRpb25f
ZXh0ZW5zaW9uOwogRlJBTUVXT1JLX0FORF9MSUJSQVJZX0xERkxBR1NfaXBob25lb3MgPSAkKEZS
QU1FV09SS19BTkRfTElCUkFSWV9MREZMQUdTX2lwaG9uZXNpbXVsYXRvcikgLWZyYW1ld29yayBJ
T1N1cmZhY2U7CiBGUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHU19tYWNvc3ggPSAtZnJhbWV3
b3JrIEFwcGxpY2F0aW9uU2VydmljZXMgLWZyYW1ld29yayBDYXJib24gLWZyYW1ld29yayBDb2Nv
YSAtZnJhbWV3b3JrIENvcmVTZXJ2aWNlcyAtZnJhbWV3b3JrIElPS2l0IC1mcmFtZXdvcmsgQ29y
ZUF1ZGlvIC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsgT3BlbkdMOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaAppbmRleCBkMmQ5MzJh
Li5mODBkZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViT3BlblBhbmVs
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJPcGVuUGFuZWxQYXJh
bWV0ZXJzLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYk9wZW5QYW5lbFBhcmFtZXRlcnM+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGaWxlQ2hvb3Nl
clNldHRpbmdzJik7CiAgICAgfldlYk9wZW5QYW5lbFBhcmFtZXRlcnMoKTsKIAotICAgIGJvb2wg
YWxsb3dNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5ncy5hbGxvd3NNdWx0
aXBsZUZpbGVzOyB9IAorICAgIGJvb2wgYWxsb3dNdWx0aXBsZUZpbGVzKCkgY29uc3QgeyByZXR1
cm4gbV9zZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzOyB9CiAgICAgUGFzc1JlZlB0cjxBUEk6
OkFycmF5PiBhY2NlcHRNSU1FVHlwZXMoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEFQSTo6QXJy
YXk+IHNlbGVjdGVkRmlsZU5hbWVzKCkgY29uc3Q7CiAjaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCAzM2I2Mjc0Li4yOTYyNDQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTE1MCw2ICsxNTAsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25s
b2FkUHJveHkqKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlUnVuT3BlblBhbmVsKFdl
YlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIHsgcmV0dXJuIGZhbHNlOyB9CisKICNpZiBQ
TEFURk9STShFRkwpCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKSA9IDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcApp
bmRleCBmNjNmNWY3Li5kZDY2NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oIgog
CiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRlICJBUElTdHJpbmcuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTQ0LDI1ICs0NSwzOCBAQCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5Ojp+V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSgpCiB7CiB9CiAKLXZvaWQg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eTo6Y2hvb3NlRmlsZXMoQVBJOjpBcnJheSog
ZmlsZVVSTHNBcnJheSkKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBmaWxlUGF0aHNGcm9tRmlsZVVS
THMoY29uc3QgQVBJOjpBcnJheSYgZmlsZVVSTHMpCiB7Ci0gICAgaWYgKCFtX3BhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNpemVfdCBzaXplID0gZmlsZVVSTHNBcnJheS0+c2l6ZSgpOwot
CiAgICAgVmVjdG9yPFN0cmluZz4gZmlsZVBhdGhzOworCisgICAgc2l6ZV90IHNpemUgPSBmaWxl
VVJMcy5zaXplKCk7CiAgICAgZmlsZVBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBBUEk6
OlVSTCogYXBpVVJMID0gZmlsZVVSTHNBcnJheS0+YXQ8QVBJOjpVUkw+KGkpOwotICAgICAgICBp
ZiAoYXBpVVJMKSB7Ci0gICAgICAgICAgICBVUkwgdXJsKFVSTCgpLCBhcGlVUkwtPnN0cmluZygp
KTsKLSAgICAgICAgICAgIGZpbGVQYXRocy51bmNoZWNrZWRBcHBlbmQodXJsLmZpbGVTeXN0ZW1Q
YXRoKCkpOwotICAgICAgICB9CisgICAgICAgIEFQSTo6VVJMKiBhcGlVUkwgPSBmaWxlVVJMcy5h
dDxBUEk6OlVSTD4oaSk7CisgICAgICAgIGlmIChhcGlVUkwpCisgICAgICAgICAgICBmaWxlUGF0
aHMudW5jaGVja2VkQXBwZW5kKFVSTChVUkwoKSwgYXBpVVJMLT5zdHJpbmcoKSkuZmlsZVN5c3Rl
bVBhdGgoKSk7CiAgICAgfQogCi0gICAgbV9wYWdlLT5kaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5l
bChmaWxlUGF0aHMpOworICAgIHJldHVybiBmaWxlUGF0aHM7Cit9CisKKyNpZiBQTEFURk9STShJ
T1MpCit2b2lkIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk6OmNob29zZUZpbGVzKEFQ
STo6QXJyYXkqIGZpbGVVUkxzQXJyYXksIEFQSTo6U3RyaW5nKiBkaXNwbGF5U3RyaW5nLCBjb25z
dCBBUEk6OkRhdGEqIGljb25JbWFnZURhdGEpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcGFnZS0+ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlz
cGxheVN0cmluZ0FuZEljb24oZmlsZVBhdGhzRnJvbUZpbGVVUkxzKCpmaWxlVVJMc0FycmF5KSwg
ZGlzcGxheVN0cmluZyA/IGRpc3BsYXlTdHJpbmctPnN0cmluZygpIDogU3RyaW5nKCksIGljb25J
bWFnZURhdGEpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQ
cm94eTo6Y2hvb3NlRmlsZXMoQVBJOjpBcnJheSogZmlsZVVSTHNBcnJheSkKK3sKKyAgICBpZiAo
IW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5kaWRDaG9vc2VGaWxlc0Zv
ck9wZW5QYW5lbChmaWxlUGF0aHNGcm9tRmlsZVVSTHMoKmZpbGVVUkxzQXJyYXkpKTsKIH0KIAog
dm9pZCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OjpjYW5jZWwoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5LmgKaW5kZXggYWQ0YmY4Zi4uYWU2ZWFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oCkBA
IC0zMiw2ICszMiw4IEBACiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXJyYXk7CitjbGFzcyBE
YXRhOworY2xhc3MgU3RyaW5nOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ3LDYgKzQ5
LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQ
cm94eSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgY2hvb3NlRmlsZXMoQVBJOjpB
cnJheSosIEFQSTo6U3RyaW5nKiBkaXNwbGF5U3RyaW5nLCBjb25zdCBBUEk6OkRhdGEqIGljb25J
bWFnZURhdGEpOworI2VuZGlmCiAgICAgdm9pZCBjaG9vc2VGaWxlcyhBUEk6OkFycmF5Kik7CiAg
ICAgdm9pZCBjYW5jZWwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCBhODU4MDYxLi5hMWYwMThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcApAQCAtMzAxNCw4ICszMDE0LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpydW5PcGVuUGFuZWwodWludDY0X3QgZnJhbWVJRCwgY29uc3QgRmlsZUNob29zZXJTZXR0aW5n
cyYgc2V0CiAgICAgLy8gU2luY2UgcnVuT3BlblBhbmVsKCkgY2FuIHNwaW4gYSBuZXN0ZWQgcnVu
IGxvb3Agd2UgbmVlZCB0byB0dXJuIG9mZiB0aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIuCiAgICAg
bV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0b3AoKTsKIAotICAgIGlmICghbV91
aUNsaWVudC0+cnVuT3BlblBhbmVsKHRoaXMsIGZyYW1lLCBwYXJhbWV0ZXJzLmdldCgpLCBtX29w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmdldCgpKSkKLSAgICAgICAgZGlkQ2FuY2VsRm9yT3BlblBh
bmVsKCk7CisgICAgaWYgKCFtX3VpQ2xpZW50LT5ydW5PcGVuUGFuZWwodGhpcywgZnJhbWUsIHBh
cmFtZXRlcnMuZ2V0KCksIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuZ2V0KCkpKSB7CisgICAg
ICAgIGlmICghbV9wYWdlQ2xpZW50LmhhbmRsZVJ1bk9wZW5QYW5lbCh0aGlzLCBmcmFtZSwgcGFy
YW1ldGVycy5nZXQoKSwgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5nZXQoKSkpCisgICAgICAg
ICAgICBkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKTsKKyAgICB9CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpwcmludEZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCkBAIC0zNTMzLDYgKzM1MzUsMTkgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRl
eHRNZW51SXRlbURhdGEmIGl0ZW0pCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMp
CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNG
b3JPcGVuUGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24oY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVVUkxzLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlTdHJpbmcsIGNvbnN0IEFQSTo6RGF0YSog
aWNvbkRhdGEpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVu
UGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24oZmlsZVVSTHMsIGRpc3BsYXlTdHJpbmcsIGlj
b25EYXRhID8gaWNvbkRhdGEtPmRhdGFSZWZlcmVuY2UoKSA6IElQQzo6RGF0YVJlZmVyZW5jZSgp
KSwgbV9wYWdlSUQpOworCisgICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci0+aW52YWxpZGF0
ZSgpOworICAgIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPSBudWxscHRyOworfQorI2VuZGlm
CisKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZVVSTHMpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggOTllYjk4YS4uOWQ5NDkxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtOTI5LDYgKzkyOSw5IEBA
IHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclByb3h5LgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGRpZENob29zZUZp
bGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBjb25zdCBBUEk6OkRhdGEqIGljb25E
YXRhKTsKKyNlbmRpZgogICAgIHZvaWQgZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3Qg
VmVjdG9yPFN0cmluZz4mKTsKICAgICB2b2lkIGRpZENhbmNlbEZvck9wZW5QYW5lbCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKaW5k
ZXggZGI2MDY5Mi4uZjlkZDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MuaApAQCAtMTE4LDYgKzExOCw4IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRv
dWNoLCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhy
ZXNob2xkKTsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wg
aGFzVmlkZW8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVsZW1lbnRSZWN0KSBvdmVycmlkZTsK
IAorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5KiwgV2Vi
RnJhbWVQcm94eSosIFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclByb3h5Kikgb3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIHZp
cnR1YWwgdm9pZCBzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggODAyNmI4
NS4uYjgwNDM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLm1tCkBAIC00MDcsNiArNDA3LDEyIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6
OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBjb25zdCBJbnRSZWN0JiBl
bGVtCiAgICAgW21fY29udGVudFZpZXcgX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjpoYXNWaWRl
byBmcm9tUmVjdDplbGVtZW50UmVjdF07CiB9CiAKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmhhbmRs
ZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViT3BlblBhbmVs
UGFyYW1ldGVycyogcGFyYW1ldGVycywgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSog
bGlzdGVuZXIpCit7CisgICAgW21fY29udGVudFZpZXcgX3Nob3dSdW5PcGVuUGFuZWw6cGFyYW1l
dGVycyByZXN1bHRMaXN0ZW5lcjpsaXN0ZW5lcl07CisgICAgcmV0dXJuIHRydWU7Cit9CisKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd0luc3BlY3Rvcklu
ZGljYXRpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggZTM5OWU1Ni4uMmQ4NzI2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJHZXN0dXJlVHlwZXMuaCIKICNp
bXBvcnQgIkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCiAjaW1wb3J0ICJXS0Fp
clBsYXlSb3V0ZVBpY2tlci5oIgorI2ltcG9ydCAiV0tGaWxlVXBsb2FkUGFuZWwuaCIKICNpbXBv
cnQgIldLRm9ybVBlcmlwaGVyYWwuaCIKICNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZh
dGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgpAQCAtNTEsMTQgKzUyLDE2IEBAIGNsYXNz
IEludFNpemU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7
CiBjbGFzcyBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyOworY2xhc3MgV2ViT3BlblBhbmVs
UGFyYW1ldGVyczsKK2NsYXNzIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHk7CiBjbGFz
cyBXZWJQYWdlUHJveHk7CiB9CiAKLUBjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplcjsKLUBjbGFzcyBfVUlIaWdobGlnaHRWaWV3OwotQGNsYXNzIFdlYklPU0V2
ZW50OwogQGNsYXNzIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQ7CiBAY2xhc3MgV0tGb3JtSW5wdXRT
ZXNzaW9uOworQGNsYXNzIFdlYklPU0V2ZW50OworQGNsYXNzIF9VSUhpZ2hsaWdodFZpZXc7CitA
Y2xhc3MgX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7CiAKIHR5cGVk
ZWYgdm9pZCAoXlVJV0tBdXRvY29ycmVjdGlvbkNvbXBsZXRpb25IYW5kbGVyKShVSVdLQXV0b2Nv
cnJlY3Rpb25SZWN0cyAqcmVjdHNGb3JJbnB1dCk7CiB0eXBlZGVmIHZvaWQgKF5VSVdLQXV0b2Nv
cnJlY3Rpb25Db250ZXh0SGFuZGxlcikoVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqYXV0b2Nv
cnJlY3Rpb25Db250ZXh0KTsKQEAgLTk4LDYgKzEwMSw3IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0
aW9uRGF0YSB7CiAgICAgUmV0YWluUHRyPFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQ+IF9hY3Rpb25T
aGVldEFzc2lzdGFudDsKICAgICBSZXRhaW5QdHI8V0tBaXJQbGF5Um91dGVQaWNrZXI+IF9haXJQ
bGF5Um91dGVQaWNrZXI7CiAgICAgUmV0YWluUHRyPFdLRm9ybUlucHV0U2Vzc2lvbj4gX2Zvcm1J
bnB1dFNlc3Npb247CisgICAgUmV0YWluUHRyPFdLRmlsZVVwbG9hZFBhbmVsPiBfZmlsZVVwbG9h
ZFBhbmVsOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6U21hcnRNYWduaWZpY2F0aW9u
Q29udHJvbGxlcj4gX3NtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXI7CiAKQEAgLTExMCw2ICsx
MTQsOCBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogICAgIFdlYktpdDo6QXNzaXN0
ZWROb2RlSW5mb3JtYXRpb24gX2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uOwogICAgIFJldGFpblB0
cjxOU09iamVjdDxXS0Zvcm1QZXJpcGhlcmFsPj4gX2lucHV0UGVyaXBoZXJhbDsKIAorICAgIENH
UG9pbnQgX2xhc3RJbnRlcmFjdGlvbkxvY2F0aW9uOworCiAgICAgQk9PTCBfaXNFZGl0YWJsZTsK
ICAgICBCT09MIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9uczsKICAgICBCT09MIF9oYXNWYWxpZFBv
c2l0aW9uSW5mb3JtYXRpb247CkBAIC0xMjAsOCArMTI2LDkgQEAgc3RydWN0IFdLQXV0b0NvcnJl
Y3Rpb25EYXRhIHsKIAogQGVuZAogCi1AaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJh
Y3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0
dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2ViRm9ybUFjY2Vz
c29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2w+CitAaW50ZXJmYWNlIFdL
Q29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUs
IFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFBy
aXZhdGUsIFVJV2ViRm9ybUFjY2Vzc29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJv
dG9jb2wsIFdLRmlsZVVwbG9hZFBhbmVsRGVsZWdhdGU+CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQ0dQb2ludCBsYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbjsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBpc0VkaXRhYmxlOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0
aW9uJiBwb3NpdGlvbkluZm9ybWF0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBjb25zdCBXZWJLaXQ6OldLQXV0b0NvcnJlY3Rpb25EYXRhJiBhdXRvY29ycmVjdGlvbkRhdGE7
CkBAIC0xNDgsNiArMTU1LDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25EYXRhIHsKIC0gKHZv
aWQpX2RpZEVuZFNjcm9sbGluZ09yWm9vbWluZzsKIC0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2Vs
ZWN0aW9uV2l0aFRvdWNoOihXZWJLaXQ6OlNlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczoo
V2ViS2l0OjpTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dU
aHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZDsKIC0gKHZv
aWQpX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjooQk9PTCloYXNWaWRlbyBmcm9tUmVjdDooY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpZWxlbWVudFJlY3Q7CistICh2b2lkKV9zaG93UnVuT3BlblBh
bmVsOihXZWJLaXQ6OldlYk9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0TGlz
dGVuZXI6KFdlYktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopbGlzdGVuZXI7
CiAtICh2b2lkKWFjY2Vzc29yeURvbmU7CiAtIChWZWN0b3I8V2ViS2l0OjpXS09wdGlvbkl0ZW0+
JikgYXNzaXN0ZWROb2RlU2VsZWN0T3B0aW9uczsKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXgg
YWE3YzJjZS4uOTcwMzJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTMyLDE5ICszMiwxNyBAQAog
I2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiTmF0aXZlV2ViVG91
Y2hFdmVudC5oIgogI2ltcG9ydCAiU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5oIgotI2lt
cG9ydCAiV2ViRXZlbnQuaCIKLSNpbXBvcnQgIldlYklPU0V2ZW50RmFjdG9yeS5oIgotI2ltcG9y
dCAiV2ViUGFnZU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBv
cnQgIldLQWN0aW9uU2hlZXRBc3Npc3RhbnQuaCIKICNpbXBvcnQgIldLRm9ybUlucHV0Q29udHJv
bC5oIgogI2ltcG9ydCAiV0tGb3JtU2VsZWN0Q29udHJvbC5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYklPU0V2ZW50RmFj
dG9yeS5oIgorI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbXBvcnQgIl9XS0Zvcm1EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiX1dLRm9ybUlu
cHV0U2Vzc2lvbi5oIgogI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8VUlLaXQvX1VJSGlnaGxpZ2h0Vmlldy5oPgotI2ltcG9ydCA8VUlL
aXQvX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuaD4KICNpbXBvcnQg
PFVJS2l0L1VJRm9udF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25p
emVyX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CkBAIC01Miw2
ICs1MCw4IEBACiAjaW1wb3J0IDxVSUtpdC9VSVRhcEdlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUu
aD4KICNpbXBvcnQgPFVJS2l0L1VJVGV4dEludGVyYWN0aW9uQXNzaXN0YW50X1ByaXZhdGUuaD4K
ICNpbXBvcnQgPFVJS2l0L1VJV2ViRG9jdW1lbnRWaWV3Lmg+IC8vIEZJWE1FOiBzaG91bGQgbm90
IGluY2x1ZGUgdGhpcyBoZWFkZXIuCisjaW1wb3J0IDxVSUtpdC9fVUlIaWdobGlnaHRWaWV3Lmg+
CisjaW1wb3J0IDxVSUtpdC9fVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1
YWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTI0Niw2ICsyNDYs
MTEgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRhcEFuZEhvbGREZWxheSAgPSAwLjc1OwogICAgIFtf
ZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICBbX2hpZ2hs
aWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW19s
b25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworCisgICAgaWYgKF9m
aWxlVXBsb2FkUGFuZWwpIHsKKyAgICAgICAgW19maWxlVXBsb2FkUGFuZWwgc2V0RGVsZWdhdGU6
bmlsXTsKKyAgICAgICAgW19maWxlVXBsb2FkUGFuZWwgZGlzbWlzc107CisgICAgfQogfQogCiAt
IChjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpcG9zaXRpb25JbmZvcm1h
dGlvbgpAQCAtMjYzLDYgKzI2OCwxMSBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGFwQW5kSG9sZERl
bGF5ICA9IDAuNzU7CiAgICAgcmV0dXJuIF9pbnB1dERlbGVnYXRlOwogfQogCistIChDR1BvaW50
KWxhc3RJbnRlcmFjdGlvbkxvY2F0aW9uCit7CisgICAgcmV0dXJuIF9sYXN0SW50ZXJhY3Rpb25M
b2NhdGlvbjsKK30KKwogLSAoQk9PTClpc0VkaXRhYmxlCiB7CiAgICAgcmV0dXJuIF9pc0VkaXRh
YmxlOwpAQCAtMjk4LDYgKzMwOCw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0YXBBbmRIb2xkRGVs
YXkgID0gMC43NTsKICAgICBpZiAoIV9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSkK
ICAgICAgICAgX25hdGl2ZVdlYlRvdWNoRXZlbnRVbmlxdWVJZEJlaW5nU2VudFN5bmNocm9ub3Vz
bHkgPSBuYXRpdmVXZWJUb3VjaEV2ZW50LnVuaXF1ZUlkKCk7CiAKKyAgICBfbGFzdEludGVyYWN0
aW9uTG9jYXRpb24gPSBnZXN0dXJlUmVjb2duaXplci5sb2NhdGlvbkluV2luZG93OworCiAgICAg
X3BhZ2UtPnNldFNob3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KCFfY2FuU2VuZFRvdWNoRXZl
bnRzQXN5bmNocm9ub3VzbHkpOwogICAgIF9wYWdlLT5oYW5kbGVUb3VjaEV2ZW50KG5hdGl2ZVdl
YlRvdWNoRXZlbnQpOwogICAgIF9wYWdlLT5zZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNs
eShmYWxzZSk7CkBAIC02NzAsNiArNjgyLDggQEAgc3RhdGljIGlubGluZSBib29sIGlzU2FtZVBh
aXIoVUlHZXN0dXJlUmVjb2duaXplciAqYSwgVUlHZXN0dXJlUmVjb2duaXplciAqYiwgVUkKIHsK
ICAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyKTsKIAorICAgIF9sYXN0SW50ZXJhY3Rpb25Mb2NhdGlvbiA9IGdlc3R1cmVS
ZWNvZ25pemVyLnN0YXJ0UG9pbnQ7CisKICAgICBzd2l0Y2ggKFtnZXN0dXJlUmVjb2duaXplciBz
dGF0ZV0pIHsKICAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuOgogICAgICAg
ICBfcGFnZS0+dGFwSGlnaGxpZ2h0QXRQb3NpdGlvbihbZ2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQ
b2ludF0sIF9sYXRlc3RUYXBIaWdobGlnaHRJRCk7CkBAIC02OTEsNiArNzA1LDggQEAgc3RhdGlj
IGlubGluZSBib29sIGlzU2FtZVBhaXIoVUlHZXN0dXJlUmVjb2duaXplciAqYSwgVUlHZXN0dXJl
UmVjb2duaXplciAqYiwgVUkKIHsKICAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2xv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKIAorICAgIF9sYXN0SW50ZXJhY3Rpb25Mb2NhdGlv
biA9IGdlc3R1cmVSZWNvZ25pemVyLnN0YXJ0UG9pbnQ7CisKICAgICBpZiAoW2dlc3R1cmVSZWNv
Z25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikgewogICAgICAg
ICBTRUwgYWN0aW9uID0gW3NlbGYgX2FjdGlvbkZvckxvbmdQcmVzc107CiAgICAgICAgIGlmIChh
Y3Rpb24pCkBAIC03MDcsMTYgKzcyMywyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTYW1lUGFp
cihVSUdlc3R1cmVSZWNvZ25pemVyICphLCBVSUdlc3R1cmVSZWNvZ25pemVyICpiLCBVSQogCiAg
ICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgY2xlYXJTZWxlY3Rpb25dOwogCi0gICAgW3NlbGYg
X2F0dGVtcHRDbGlja0F0TG9jYXRpb246W2dlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uXV07Cisg
ICAgX2xhc3RJbnRlcmFjdGlvbkxvY2F0aW9uID0gZ2VzdHVyZVJlY29nbml6ZXIubG9jYXRpb247
CisKKyAgICBbc2VsZiBfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjpnZXN0dXJlUmVjb2duaXplci5s
b2NhdGlvbl07CiB9CiAKIC0gKHZvaWQpX2RvdWJsZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2VzdHVy
ZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgogeworICAgIF9sYXN0SW50ZXJhY3Rpb25M
b2NhdGlvbiA9IGdlc3R1cmVSZWNvZ25pemVyLmxvY2F0aW9uOworCiAgICAgX3NtYXJ0TWFnbmlm
aWNhdGlvbkNvbnRyb2xsZXItPmhhbmRsZVNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoZ2VzdHVy
ZVJlY29nbml6ZXIubG9jYXRpb24pOwogfQogCiAtICh2b2lkKV90d29GaW5nZXJEb3VibGVUYXBS
ZWNvZ25pemVkOihVSVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKIHsK
KyAgICBfbGFzdEludGVyYWN0aW9uTG9jYXRpb24gPSBnZXN0dXJlUmVjb2duaXplci5sb2NhdGlv
bjsKKwogICAgIF9zbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLT5oYW5kbGVSZXNldE1hZ25p
ZmljYXRpb25HZXN0dXJlKGdlc3R1cmVSZWNvZ25pemVyLmxvY2F0aW9uKTsKIH0KIApAQCAtMjA2
Miw2ICsyMDg0LDI2IEBAIHN0YXRpYyBVSVRleHRBdXRvY2FwaXRhbGl6YXRpb25UeXBlIHRvVUlU
ZXh0QXV0b2NhcGl0YWxpemUoV2ViQXV0b2NhcGl0YWxpemVUeXBlCiAgICAgW19haXJQbGF5Um91
dGVQaWNrZXIgc2hvdzpoYXNWaWRlbyBmcm9tUmVjdDplbGVtZW50UmVjdF07CiB9CiAKKy0gKHZv
aWQpX3Nob3dSdW5PcGVuUGFuZWw6KFdlYk9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMg
cmVzdWx0TGlzdGVuZXI6KFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKWxpc3RlbmVy
Cit7CisgICAgQVNTRVJUKCFfZmlsZVVwbG9hZFBhbmVsKTsKKyAgICBpZiAoX2ZpbGVVcGxvYWRQ
YW5lbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX2ZpbGVVcGxvYWRQYW5lbCA9IGFkb3B0TlMo
W1tXS0ZpbGVVcGxvYWRQYW5lbCBhbGxvY10gaW5pdFdpdGhWaWV3OnNlbGZdKTsKKyAgICBbX2Zp
bGVVcGxvYWRQYW5lbCBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX2ZpbGVVcGxvYWRQYW5lbCBw
cmVzZW50V2l0aFBhcmFtZXRlcnM6cGFyYW1ldGVycyByZXN1bHRMaXN0ZW5lcjpsaXN0ZW5lcl07
Cit9CisKKy0gKHZvaWQpZmlsZVVwbG9hZFBhbmVsRGlkRGlzbWlzczooV0tGaWxlVXBsb2FkUGFu
ZWwgKilmaWxlVXBsb2FkUGFuZWwKK3sKKyAgICBBU1NFUlQoX2ZpbGVVcGxvYWRQYW5lbC5nZXQo
KSA9PSBmaWxlVXBsb2FkUGFuZWwpOworCisgICAgW19maWxlVXBsb2FkUGFuZWwgc2V0RGVsZWdh
dGU6bmlsXTsKKyAgICBbX2ZpbGVVcGxvYWRQYW5lbCByZWxlYXNlXTsKKyAgICBfZmlsZVVwbG9h
ZFBhbmVsID0gbmlsOworfQorCiAjcHJhZ21hIG1hcmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBVSVdl
YlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZS4KIAogLSAoQk9PTClzaG91bGRJ
Z25vcmVXZWJUb3VjaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpj
b3B5IGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyLmNwcApjb3B5IHRvIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9y
bXMvV0tGaWxlVXBsb2FkUGFuZWwuaAppbmRleCBiY2YzZTgwLi42OWQ3NDk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxl
VXBsb2FkUGFuZWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjMsMjkgKzIzLDI4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyLmgiCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxVSUtpdC9VSVZp
ZXdDb250cm9sbGVyLmg+CisKK0BjbGFzcyBXS0NvbnRlbnRWaWV3OworQHByb3RvY29sIFdLRmls
ZVVwbG9hZFBhbmVsRGVsZWdhdGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRy
PFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6
Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IGZp
bGVDaG9vc2VyKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIocGFnZSwgZmlsZUNob29zZXIpKTsKK2NsYXNzIFdlYk9wZW5QYW5lbFBhcmFtZXRl
cnM7CitjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogfQogCi1XZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSog
cGFnZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCi0gICAg
OiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZmlsZUNob29zZXIoZmlsZUNob29zZXIpCi17Ci19CitA
aW50ZXJmYWNlIFdLRmlsZVVwbG9hZFBhbmVsIDogVUlWaWV3Q29udHJvbGxlcgorQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgaWQgPFdLRmlsZVVwbG9hZFBhbmVsRGVsZWdhdGU+IGRlbGVn
YXRlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXc7
CistICh2b2lkKXByZXNlbnRXaXRoUGFyYW1ldGVyczooV2ViS2l0OjpXZWJPcGVuUGFuZWxQYXJh
bWV0ZXJzKilwYXJhbWV0ZXJzIHJlc3VsdExpc3RlbmVyOihXZWJLaXQ6OldlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyUHJveHkqKWxpc3RlbmVyOworLSAodm9pZClkaXNtaXNzOworQGVuZAogCi1X
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6fldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKCkK
LXsKLX0KLQotdm9pZCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6ZGlkQ2hvb3NlRmlsZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVzKQotewotICAgIG1fZmlsZUNob29zZXItPmNob29z
ZUZpbGVzKGZpbGVzKTsKLX0KK0Bwcm90b2NvbCBXS0ZpbGVVcGxvYWRQYW5lbERlbGVnYXRlIDxO
U09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClmaWxlVXBsb2FkUGFuZWxEaWREaXNtaXNzOihX
S0ZpbGVVcGxvYWRQYW5lbCAqKWZpbGVVcGxvYWRQYW5lbDsKK0BlbmQKIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjNjE3MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KQEAg
LTAsMCArMSw3MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IldLRmlsZVVwbG9hZFBhbmVsLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIkFQ
SUFycmF5LmgiCisjaW1wb3J0ICJBUElEYXRhLmgiCisjaW1wb3J0ICJBUElTdHJpbmcuaCIKKyNp
bXBvcnQgIldLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIgorI2ltcG9ydCAiV0tEYXRhLmgiCisj
aW1wb3J0ICJXS1N0cmluZ0NGLmgiCisjaW1wb3J0ICJXS1VSTENGLmgiCisjaW1wb3J0ICJXZWJP
cGVuUGFuZWxQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPEFWRm91bmRhdGlv
bi9BVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9Db3JlTWVkaWEuaD4KKyNpbXBv
cnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KKyNpbXBvcnQgPFVJ
S2l0L1VJQWxlcnRDb250cm9sbGVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJQXBwbGlj
YXRpb25fUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJf
UHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlJbWFnZV9Qcml2YXRlLmg+CisjaW1wb3J0IDxV
SUtpdC9VSVZpZXdDb250cm9sbGVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2luZG93
X1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYk5TRmlsZU1hbmFn
ZXJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworU09GVF9MSU5LX0ZSQU1FV09SSyhBVkZvdW5kYXRpb24pOworU09GVF9MSU5L
X0NMQVNTKEFWRm91bmRhdGlvbiwgQVZBc3NldEltYWdlR2VuZXJhdG9yKTsKK1NPRlRfTElOS19D
TEFTUyhBVkZvdW5kYXRpb24sIEFWVVJMQXNzZXQpOworI2RlZmluZSBBVkFzc2V0SW1hZ2VHZW5l
cmF0b3JfY2xhc3MgZ2V0QVZBc3NldEltYWdlR2VuZXJhdG9yQ2xhc3MoKQorI2RlZmluZSBBVlVS
TEFzc2V0X2NsYXNzIGdldEFWVVJMQXNzZXRDbGFzcygpCisKK1NPRlRfTElOS19GUkFNRVdPUkso
Q29yZU1lZGlhKTsKK1NPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVRpbWVaZXJvLCBD
TVRpbWUpOworI2RlZmluZSBrQ01UaW1lWmVybyBnZXRrQ01UaW1lWmVybygpCisKKworI3ByYWdt
YSBtYXJrIC0gX1dLRmlsZVVwbG9hZEl0ZW0KKworc3RhdGljIENHUmVjdCBzcXVhcmVDcm9wUmVj
dEZvclNpemUoQ0dTaXplIHNpemUpCit7CisgICAgQ0dGbG9hdCBzbWFsbGVyU2lkZSA9IE1JTihz
aXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgQ0dSZWN0IGNyb3BSZWN0ID0gQ0dSZWN0TWFr
ZSgwLCAwLCBzbWFsbGVyU2lkZSwgc21hbGxlclNpZGUpOworCisgICAgaWYgKHNpemUud2lkdGgg
PCBzaXplLmhlaWdodCkKKyAgICAgICAgY3JvcFJlY3Qub3JpZ2luLnkgPSByaW50Zigoc2l6ZS5o
ZWlnaHQgLSBzbWFsbGVyU2lkZSkgLyAyKTsKKyAgICBlbHNlCisgICAgICAgIGNyb3BSZWN0Lm9y
aWdpbi54ID0gcmludGYoKHNpemUud2lkdGggLSBzbWFsbGVyU2lkZSkgLyAyKTsKKworICAgIHJl
dHVybiBjcm9wUmVjdDsKK30KKworc3RhdGljIFVJSW1hZ2UgKnNxdWFyZUltYWdlKFVJSW1hZ2Ug
KmltYWdlKQoreworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBD
R0ltYWdlUmVmIGltYWdlUmVmID0gW2ltYWdlIENHSW1hZ2VdOworICAgIENHU2l6ZSBpbWFnZVNp
emUgPSBDR1NpemVNYWtlKENHSW1hZ2VHZXRXaWR0aChpbWFnZVJlZiksIENHSW1hZ2VHZXRIZWln
aHQoaW1hZ2VSZWYpKTsKKyAgICBpZiAoaW1hZ2VTaXplLndpZHRoID09IGltYWdlU2l6ZS5oZWln
aHQpCisgICAgICAgIHJldHVybiBpbWFnZTsKKworICAgIENHUmVjdCBzcXVhcmVDcm9wUmVjdCA9
IHNxdWFyZUNyb3BSZWN0Rm9yU2l6ZShpbWFnZVNpemUpOworICAgIENHSW1hZ2VSZWYgc3F1YXJl
SW1hZ2VSZWYgPSBDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlUmVmLCBzcXVhcmVD
cm9wUmVjdCk7CisgICAgVUlJbWFnZSAqc3F1YXJlSW1hZ2UgPSBbW1VJSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoQ0dJbWFnZTpzcXVhcmVJbWFnZVJlZiBpbWFnZU9yaWVudGF0aW9uOltpbWFnZSBpbWFn
ZU9yaWVudGF0aW9uXV07CisgICAgQ0dJbWFnZVJlbGVhc2Uoc3F1YXJlSW1hZ2VSZWYpOworICAg
IHJldHVybiBbc3F1YXJlSW1hZ2UgYXV0b3JlbGVhc2VdOworfQorCitzdGF0aWMgVUlJbWFnZSAq
dGh1bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKFVJSW1hZ2UgKmltYWdlKQoreworICAgIFVJSW1h
Z2UgKnNxdWFyZWRJbWFnZSA9IHNxdWFyZUltYWdlKGltYWdlKTsKKyAgICBpZiAoIXNxdWFyZWRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIENHUmVjdCBkZXN0UmVjdCA9IENHUmVj
dE1ha2UoMCwgMCwgMTAwLCAxMDApOworICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dChk
ZXN0UmVjdC5zaXplKTsKKyAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShVSUdy
YXBoaWNzR2V0Q3VycmVudENvbnRleHQoKSwga0NHSW50ZXJwb2xhdGlvbkhpZ2gpOworICAgIFtz
cXVhcmVkSW1hZ2UgZHJhd0luUmVjdDpkZXN0UmVjdF07CisgICAgVUlJbWFnZSAqcmVzdWx0SW1h
Z2UgPSBVSUdyYXBoaWNzR2V0SW1hZ2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgpOworICAgIFVJ
R3JhcGhpY3NFbmRJbWFnZUNvbnRleHQoKTsKKyAgICByZXR1cm4gcmVzdWx0SW1hZ2U7Cit9CisK
KworQGludGVyZmFjZSBfV0tGaWxlVXBsb2FkSXRlbSA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHksIGdldHRlcj1pc1ZpZGVvKSBCT09MIHZpZGVvOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1VSTCAqZmlsZVVSTDsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgVUlJbWFnZSAqZGlzcGxheUltYWdlOworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gX1dLRmlsZVVwbG9hZEl0ZW0KKworLSAoQk9PTClpc1ZpZGVvCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5POworfQorCistIChOU1VSTCAqKWZpbGVVUkwK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChV
SUltYWdlICopZGlzcGxheUltYWdlCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG5pbDsKK30KKworQGVuZAorCisKK0BpbnRlcmZhY2UgX1dLSW1hZ2VGaWxlVXBsb2Fk
SXRlbSA6IF9XS0ZpbGVVcGxvYWRJdGVtCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlUGF0
aDooTlNTdHJpbmcgKilmaWxlUGF0aCBvcmlnaW5hbEltYWdlOihVSUltYWdlICopb3JpZ2luYWxJ
bWFnZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gewor
ICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2ZpbGVQYXRoOworICAgIFJldGFpblB0cjxVSUltYWdl
PiBfb3JpZ2luYWxJbWFnZTsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVBhdGg6
KE5TU3RyaW5nICopZmlsZVBhdGggb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1h
Z2UKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBfZmlsZVBhdGggPSBmaWxlUGF0aDsKKyAgICBfb3JpZ2luYWxJbWFnZSA9IG9yaWdp
bmFsSW1hZ2U7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKEJPT0wpaXNWaWRlbworeworICAg
IHJldHVybiBOTzsKK30KKworLSAoTlNVUkwgKilmaWxlVVJMCit7CisgICAgcmV0dXJuIFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6X2ZpbGVQYXRoLmdldCgpXTsKK30KKworLSAoVUlJbWFnZSAqKWRp
c3BsYXlJbWFnZQoreworICAgIHJldHVybiB0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2UoX29y
aWdpbmFsSW1hZ2UuZ2V0KCkpOworfQorCitAZW5kCisKKworQGludGVyZmFjZSBfV0tWaWRlb0Zp
bGVVcGxvYWRJdGVtIDogX1dLRmlsZVVwbG9hZEl0ZW0KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEZpbGVQYXRoOihOU1N0cmluZyAqKWZpbGVQYXRoIG1lZGlhVVJMOihOU1VSTCAqKW1lZGlhVVJM
OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSB7CisgICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBfZmlsZVBhdGg7CisgICAgUmV0YWluUHRyPE5TVVJMPiBfbWVk
aWFVUkw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZpbGVQYXRoOihOU1N0cmluZyAq
KWZpbGVQYXRoIG1lZGlhVVJMOihOU1VSTCAqKW1lZGlhVVJMCit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2ZpbGVQYXRoID0gZmls
ZVBhdGg7CisgICAgX21lZGlhVVJMID0gbWVkaWFVUkw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKEJPT0wpaXNWaWRlbworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKE5TVVJMICopZmls
ZVVSTAoreworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOl9maWxlUGF0aC5nZXQo
KV07Cit9CisKKy0gKFVJSW1hZ2UgKilkaXNwbGF5SW1hZ2UKK3sKKyAgICBSZXRhaW5QdHI8QVZV
UkxBc3NldD4gYXNzZXQgPSBhZG9wdE5TKFtbQVZVUkxBc3NldF9jbGFzcyBhbGxvY10gaW5pdFdp
dGhVUkw6X21lZGlhVVJMLmdldCgpIG9wdGlvbnM6bmlsXSk7CisgICAgUmV0YWluUHRyPEFWQXNz
ZXRJbWFnZUdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gYWRvcHROUyhbW0FWQXNzZXRJbWFnZUdlbmVy
YXRvcl9jbGFzcyBhbGxvY10gaW5pdFdpdGhBc3NldDphc3NldC5nZXQoKV0pOworICAgIFtnZW5l
cmF0b3Igc2V0QXBwbGllc1ByZWZlcnJlZFRyYWNrVHJhbnNmb3JtOllFU107CisKKyAgICBOU0Vy
cm9yICplcnJvciA9IG5pbDsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VSZWYgPSBh
ZG9wdENGKFtnZW5lcmF0b3IgY29weUNHSW1hZ2VBdFRpbWU6a0NNVGltZVplcm8gYWN0dWFsVGlt
ZTpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIExPR19FUlJP
UigiX1dLVmlkZW9GaWxlVXBsb2FkSXRlbTogRXJyb3IgY3JlYXRpbmcgaW1hZ2UgZm9yIHZpZGVv
OiAlQCIsIF9tZWRpYVVSTC5nZXQoKSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisg
ICAgUmV0YWluUHRyPFVJSW1hZ2U+IGltYWdlID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoQ0dJbWFnZTppbWFnZVJlZi5nZXQoKV0pOworICAgIHJldHVybiB0aHVtYm5haWxTaXpl
ZEltYWdlRm9ySW1hZ2UoaW1hZ2UuZ2V0KCkpOworfQorCitAZW5kCisKKworI3ByYWdtYSBtYXJr
IC0gV0tGaWxlVXBsb2FkUGFuZWwKKworQGludGVyZmFjZSBXS0ZpbGVVcGxvYWRQYW5lbCAoKSA8
VUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlLCBVSU5hdmlnYXRpb25Db250cm9sbGVyRGVsZWdh
dGUsIFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyRGVsZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXS0ZpbGVVcGxvYWRQYW5lbCB7CisgICAgV0tDb250ZW50VmlldyAqX3ZpZXc7CisgICAg
V2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5KiBfbGlzdGVuZXI7CisgICAg
UmV0YWluUHRyPE5TQXJyYXk+IF9taW1lVHlwZXM7CisgICAgQ0dQb2ludCBfaW50ZXJhY3Rpb25Q
b2ludDsKKyAgICBCT09MIF9hbGxvd011bHRpcGxlRmlsZXM7CisgICAgQk9PTCBfdXNpbmdDYW1l
cmE7CisgICAgUmV0YWluUHRyPFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyPiBfaW1hZ2VQaWNrZXI7
CisgICAgUmV0YWluUHRyPFVJQWxlcnRDb250cm9sbGVyPiBfYWN0aW9uU2hlZXRDb250cm9sbGVy
OworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBfcHJlc2VudGF0aW9uVmlld0NvbnRy
b2xsZXI7IC8vIGlQaG9uZSBhbHdheXMuIGlQYWQgZm9yIEZ1bGxzY3JlZW4gQ2FtZXJhLgorICAg
IFJldGFpblB0cjxVSVBvcG92ZXJDb250cm9sbGVyPiBfcHJlc2VudGF0aW9uUG9wb3ZlcjsgLy8g
aVBhZCBmb3IgYWN0aW9uIHNoZWV0IGFuZCBQaG90byBMaWJyYXJ5LgorfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldworeworICAgIGlmICghKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF92aWV3ID0gdmll
dzsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19pbWFn
ZVBpY2tlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfcHJlc2VudGF0aW9uUG9wb3ZlciBzZXRE
ZWxlZ2F0ZTpuaWxdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfZGlzcGF0
Y2hEaWREaXNtaXNzCit7CisgICAgaWYgKFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihmaWxlVXBsb2FkUGFuZWxEaWREaXNtaXNzOildKQorICAgICAgICBbX2RlbGVnYXRl
IGZpbGVVcGxvYWRQYW5lbERpZERpc21pc3M6c2VsZl07Cit9CisKKyNwcmFnbWEgbWFyayAtIFBh
bmVsIENvbXBsZXRpb24gKG9uZSBvZiB0aGVzZSBtdXN0IGJlIGNhbGxlZCkKKworLSAodm9pZClf
Y2FuY2VsCit7CisgICAgX2xpc3RlbmVyLT5jYW5jZWwoKTsKKyAgICBbc2VsZiBfZGlzcGF0Y2hE
aWREaXNtaXNzXTsKK30KKworLSAodm9pZClfY2hvb3NlRmlsZXM6KE5TQXJyYXkgKilmaWxlVVJM
cyBkaXNwbGF5U3RyaW5nOihOU1N0cmluZyAqKWRpc3BsYXlTdHJpbmcgaWNvbkltYWdlOihVSUlt
YWdlICopaWNvbkltYWdlCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtmaWxlVVJMcyBjb3Vu
dF07CisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBbc2VsZiBfY2FuY2VsXTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiB1cmxzOwor
ICAgIHVybHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CisgICAgZm9yIChOU1VSTCAq
ZmlsZVVSTCBpbiBmaWxlVVJMcykKKyAgICAgICAgdXJscy51bmNoZWNrZWRBcHBlbmQoYWRvcHRS
ZWYodG9JbXBsKFdLVVJMQ3JlYXRlV2l0aENGVVJMKChDRlVSTFJlZilmaWxlVVJMKSkpKTsKKyAg
ICBSZWZQdHI8QVBJOjpBcnJheT4gZmlsZVVSTHNSZWYgPSBBUEk6OkFycmF5OjpjcmVhdGUoc3Rk
Ojptb3ZlKHVybHMpKTsKKworICAgIE5TRGF0YSAqanBlZyA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50
YXRpb24oaWNvbkltYWdlLCAxLjApOworICAgIFJlZlB0cjxBUEk6OkRhdGE+IGljb25JbWFnZURh
dGFSZWYgPSBhZG9wdFJlZih0b0ltcGwoV0tEYXRhQ3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KFtqcGVnIGJ5dGVzXSksIFtqcGVnIGxlbmd0aF0pKSk7CisKKyAg
ICBSZWZQdHI8QVBJOjpTdHJpbmc+IGRpc3BsYXlTdHJpbmdSZWYgPSBhZG9wdFJlZih0b0ltcGwo
V0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWRpc3BsYXlTdHJpbmcpKSk7
CisKKyAgICBfbGlzdGVuZXItPmNob29zZUZpbGVzKGZpbGVVUkxzUmVmLmdldCgpLCBkaXNwbGF5
U3RyaW5nUmVmLmdldCgpLCBpY29uSW1hZ2VEYXRhUmVmLmdldCgpKTsKKyAgICBbc2VsZiBfZGlz
cGF0Y2hEaWREaXNtaXNzXTsKK30KKworI3ByYWdtYSBtYXJrIC0gUHJlc2VudCAvIERpc21pc3Mg
QVBJCisKKy0gKHZvaWQpcHJlc2VudFdpdGhQYXJhbWV0ZXJzOihXZWJLaXQ6OldlYk9wZW5QYW5l
bFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0TGlzdGVuZXI6KFdlYktpdDo6V2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eSopbGlzdGVuZXIKK3sKKyAgICBBU1NFUlQoIV9saXN0ZW5l
cik7CisKKyAgICBfbGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICBfYWxsb3dNdWx0aXBsZUZpbGVz
ID0gcGFyYW1ldGVycy0+YWxsb3dNdWx0aXBsZUZpbGVzKCk7CisgICAgX2ludGVyYWN0aW9uUG9p
bnQgPSBbX3ZpZXcgbGFzdEludGVyYWN0aW9uTG9jYXRpb25dOworCisgICAgUmVmUHRyPEFQSTo6
QXJyYXk+IGFjY2VwdE1pbWVUeXBlcyA9IHBhcmFtZXRlcnMtPmFjY2VwdE1JTUVUeXBlcygpOwor
ICAgIE5TTXV0YWJsZUFycmF5ICptaW1lVHlwZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
Q2FwYWNpdHk6YWNjZXB0TWltZVR5cGVzLT5zaXplKCldOworICAgIGZvciAoY29uc3QgYXV0byYg
bWltZVR5cGUgOiBhY2NlcHRNaW1lVHlwZXMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6U3RyaW5nPigp
KQorICAgICAgICBbbWltZVR5cGVzIGFkZE9iamVjdDptaW1lVHlwZS0+c3RyaW5nKCldOworICAg
IF9taW1lVHlwZXMgPSBhZG9wdE5TKFttaW1lVHlwZXMgY29weV0pOworCisgICAgLy8gSWYgdGhl
cmUgaXMgbm8gY2FtZXJhIG9yIHRoaXMgaXMgdHlwZT1tdWx0aXBsZSwganVzdCBzaG93IHRoZSBp
bWFnZSBwaWNrZXIgZm9yIHRoZSBwaG90byBsaWJyYXJ5LgorICAgIC8vIE90aGVyd2lzZSwgc2hv
dyBhbiBhY3Rpb24gc2hlZXQgZm9yIHRoZSB1c2VyIHRvIGNob29zZSBiZXR3ZWVuIGNhbWVyYSBv
ciBsaWJyYXJ5LgorICAgIGlmIChfYWxsb3dNdWx0aXBsZUZpbGVzIHx8ICFbVUlJbWFnZVBpY2tl
ckNvbnRyb2xsZXIgaXNTb3VyY2VUeXBlQXZhaWxhYmxlOlVJSW1hZ2VQaWNrZXJDb250cm9sbGVy
U291cmNlVHlwZUNhbWVyYV0pCisgICAgICAgIFtzZWxmIF9zaG93UGhvdG9QaWNrZXJXaXRoU291
cmNlVHlwZTpVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGVQaG90b0xpYnJhcnldOwor
ICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX3Nob3dNZWRpYVNvdXJjZVNlbGVjdGlvblNoZWV0XTsK
K30KKworLSAodm9pZClkaXNtaXNzCit7CisgICAgW3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0
ZWQ6Tk9dOworICAgIFtzZWxmIF9jYW5jZWxdOworfQorCistICh2b2lkKV9kaXNtaXNzRGlzcGxh
eUFuaW1hdGVkOihCT09MKWFuaW1hdGVkCit7CisgICAgaWYgKF9wcmVzZW50YXRpb25Qb3BvdmVy
KSB7CisgICAgICAgIFtfcHJlc2VudGF0aW9uUG9wb3ZlciBkaXNtaXNzUG9wb3ZlckFuaW1hdGVk
OmFuaW1hdGVkXTsKKyAgICAgICAgW19wcmVzZW50YXRpb25Qb3BvdmVyIHNldERlbGVnYXRlOm5p
bF07CisgICAgICAgIF9wcmVzZW50YXRpb25Qb3BvdmVyID0gbmlsOworICAgIH0KKworICAgIGlm
IChfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW19wcmVzZW50YXRpb25W
aWV3Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXJBbmltYXRlZDphbmltYXRlZCBjb21w
bGV0aW9uOl57CisgICAgICAgICAgICBfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXIgPSBuaWw7
CisgICAgICAgIH1dOworICAgIH0KK30KKworI3ByYWdtYSBtYXJrIC0gQWN0aW9uIFNoZWV0CisK
K3N0YXRpYyBib29sIHN0cmluZ0hhc1ByZWZpeENhc2VJbnNlbnNpdGl2ZShOU1N0cmluZyAqc3Ry
LCBOU1N0cmluZyAqcHJlZml4KQoreworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbc3RyIHJhbmdlT2ZT
dHJpbmc6cHJlZml4IG9wdGlvbnM6KE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoIHwgTlNBbmNob3Jl
ZFNlYXJjaCldOworICAgIHJldHVybiByYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kOworfQor
CistIChOU0FycmF5ICopX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOihVSUltYWdlUGlj
a2VyQ29udHJvbGxlclNvdXJjZVR5cGUpc291cmNlVHlwZQoreworICAgIC8vIFRoZSBIVE1MNSBz
cGVjIG1lbnRpb25zIHRoZSBsaXRlcmFsICJpbWFnZS8qIiBhbmQgInZpZGVvLyoiIHN0cmluZ3Mu
CisgICAgLy8gV2Ugc3VwcG9ydCB0aGVzZSBhbmQgZ28gYSBzdGVwIGZ1cnRoZXIsIGlmIHRoZSBN
SU1FIHR5cGUgc3RhcnRzIHdpdGgKKyAgICAvLyAiaW1hZ2UvIiBvciAidmlkZW8vIiB3ZSBhZGp1
c3QgdGhlIHBpY2tlcidzIGltYWdlIG9yIHZpZGVvIGZpbHRlcnMuCisgICAgLy8gU28sICJpbWFn
ZS9qcGVnIiB3b3VsZCBtYWtlIHRoZSBwaWNrZXIgZGlzcGxheSBhbGwgaW1hZ2VzIHR5cGVzLgor
ICAgIE5TTXV0YWJsZVNldCAqbWVkaWFUeXBlcyA9IFtOU011dGFibGVTZXQgc2V0XTsKKyAgICBm
b3IgKE5TU3RyaW5nICptaW1lVHlwZSBpbiBfbWltZVR5cGVzLmdldCgpKSB7CisgICAgICAgIGlm
IChzdHJpbmdIYXNQcmVmaXhDYXNlSW5zZW5zaXRpdmUobWltZVR5cGUsIEAiaW1hZ2UvIikpCisg
ICAgICAgICAgICBbbWVkaWFUeXBlcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUltYWdl
XTsKKyAgICAgICAgZWxzZSBpZiAoc3RyaW5nSGFzUHJlZml4Q2FzZUluc2Vuc2l0aXZlKG1pbWVU
eXBlLCBAInZpZGVvLyIpKQorICAgICAgICAgICAgW21lZGlhVHlwZXMgYWRkT2JqZWN0OihOU1N0
cmluZyAqKWtVVFR5cGVNb3ZpZV07CisgICAgfQorCisgICAgaWYgKFttZWRpYVR5cGVzIGNvdW50
XSkKKyAgICAgICAgcmV0dXJuIFttZWRpYVR5cGVzIGFsbE9iamVjdHNdOworCisgICAgLy8gRmFs
bGJhY2sgdG8gZXZlcnkgc3VwcG9ydGVkIG1lZGlhIHR5cGUgaWYgdGhlcmUgaXMgbm8gZmlsdGVy
LgorICAgIHJldHVybiBbVUlJbWFnZVBpY2tlckNvbnRyb2xsZXIgYXZhaWxhYmxlTWVkaWFUeXBl
c0ZvclNvdXJjZVR5cGU6c291cmNlVHlwZV07Cit9CisKKy0gKHZvaWQpX3Nob3dNZWRpYVNvdXJj
ZVNlbGVjdGlvblNoZWV0Cit7CisgICAgTlNTdHJpbmcgKmV4aXN0aW5nU3RyaW5nID0gV0VCX1VJ
X1NUUklOR19LRVkoIlBob3RvIExpYnJhcnkiLCAiUGhvdG8gTGlicmFyeSAoZmlsZSB1cGxvYWQg
YWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBidXR0b24gc3RyaW5nIGZv
ciBjaG9vc2luZyBhbiBleGlzdGluZyBtZWRpYSBpdGVtIGZyb20gdGhlIFBob3RvIExpYnJhcnki
KTsKKyAgICBOU1N0cmluZyAqY2FuY2VsU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVkoIkNhbmNl
bCIsICJDYW5jZWwgKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxl
cnQgc2hlZXQgYnV0dG9uIHN0cmluZyB0byBjYW5jZWwiKTsKKworICAgIC8vIENob29zZSB0aGUg
YXBwcm9wcmlhdGUgc3RyaW5nIGZvciB0aGUgY2FtZXJhIGJ1dHRvbi4KKyAgICBOU1N0cmluZyAq
Y2FtZXJhU3RyaW5nOworICAgIE5TQXJyYXkgKmZpbHRlcmVkTWVkaWFUeXBlcyA9IFtzZWxmIF9t
ZWRpYVR5cGVzRm9yUGlja2VyU291cmNlVHlwZTpVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJj
ZVR5cGVDYW1lcmFdOworICAgIEJPT0wgY29udGFpbnNJbWFnZU1lZGlhVHlwZSA9IFtmaWx0ZXJl
ZE1lZGlhVHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZUltYWdlXTsKKyAg
ICBCT09MIGNvbnRhaW5zVmlkZW9NZWRpYVR5cGUgPSBbZmlsdGVyZWRNZWRpYVR5cGVzIGNvbnRh
aW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVNb3ZpZV07CisgICAgQVNTRVJUKGNvbnRhaW5z
SW1hZ2VNZWRpYVR5cGUgfHwgY29udGFpbnNWaWRlb01lZGlhVHlwZSk7CisgICAgaWYgKGNvbnRh
aW5zSW1hZ2VNZWRpYVR5cGUgJiYgY29udGFpbnNWaWRlb01lZGlhVHlwZSkKKyAgICAgICAgY2Ft
ZXJhU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVkoIlRha2UgUGhvdG8gb3IgVmlkZW8iLCAiVGFr
ZSBQaG90byBvciBWaWRlbyAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9h
ZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmluZyBmb3IgdGFraW5nIHBob3RvcyBvciB2
aWRlb3MiKTsKKyAgICBlbHNlIGlmIChjb250YWluc1ZpZGVvTWVkaWFUeXBlKQorICAgICAgICBj
YW1lcmFTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiVGFrZSBWaWRlbyIsICJUYWtlIFZpZGVv
IChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGNh
bWVyYSBidXR0b24gc3RyaW5nIGZvciB0YWtpbmcgb25seSB2aWRlb3MiKTsKKyAgICBlbHNlCisg
ICAgICAgIGNhbWVyYVN0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFBob3RvIiwgIlRh
a2UgUGhvdG8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQg
c2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBvbmx5IHBob3RvcyIpOworCisg
ICAgX2FjdGlvblNoZWV0Q29udHJvbGxlciA9IFtVSUFsZXJ0Q29udHJvbGxlciBfYWxlcnRDb250
cm9sbGVyV2l0aFRpdGxlOm5pbCBtZXNzYWdlOm5pbF07CisgICAgW19hY3Rpb25TaGVldENvbnRy
b2xsZXIgc2V0UHJlZmVycmVkU3R5bGU6VUlBbGVydENvbnRyb2xsZXJTdHlsZUFjdGlvblNoZWV0
XTsKKworICAgIFtfYWN0aW9uU2hlZXRDb250cm9sbGVyIF9hZGRBY3Rpb25XaXRoVGl0bGU6Y2Fu
Y2VsU3RyaW5nIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZUNhbmNlbCBoYW5kbGVyOl57CisgICAg
ICAgIFtzZWxmIF9jYW5jZWxdOworICAgICAgICBfYWN0aW9uU2hlZXRDb250cm9sbGVyID0gbmls
OworICAgICAgICAvLyBXZSBoYW5kbGVkIGNhbmNlbCBvdXJzZWx2ZXMuIFByZXZlbnQgdGhlIHBv
cG92ZXIgY29udHJvbGxlciBkZWxlZ2F0ZSBmcm9tIGNhbmNlbGxpbmcgd2hlbiB0aGUgcG9wb3Zl
ciBkaXNtaXNzZWQuCisgICAgICAgIFtfcHJlc2VudGF0aW9uUG9wb3ZlciBzZXREZWxlZ2F0ZTpu
aWxdOworICAgIH1dOworCisgICAgW19hY3Rpb25TaGVldENvbnRyb2xsZXIgX2FkZEFjdGlvbldp
dGhUaXRsZTpjYW1lcmFTdHJpbmcgc3R5bGU6VUlBbGVydEFjdGlvblN0eWxlRGVmYXVsdCBoYW5k
bGVyOl57CisgICAgICAgIF91c2luZ0NhbWVyYSA9IFlFUzsKKyAgICAgICAgW3NlbGYgX3Nob3dQ
aG90b1BpY2tlcldpdGhTb3VyY2VUeXBlOlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlw
ZUNhbWVyYV07CisgICAgICAgIF9hY3Rpb25TaGVldENvbnRyb2xsZXIgPSBuaWw7CisgICAgfV07
CisKKyAgICBbX2FjdGlvblNoZWV0Q29udHJvbGxlciBfYWRkQWN0aW9uV2l0aFRpdGxlOmV4aXN0
aW5nU3RyaW5nIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZURlZmF1bHQgaGFuZGxlcjpeeworICAg
ICAgICBbc2VsZiBfc2hvd1Bob3RvUGlja2VyV2l0aFNvdXJjZVR5cGU6VUlJbWFnZVBpY2tlckNv
bnRyb2xsZXJTb3VyY2VUeXBlUGhvdG9MaWJyYXJ5XTsKKyAgICAgICAgX2FjdGlvblNoZWV0Q29u
dHJvbGxlciA9IG5pbDsKKyAgICB9XTsKKworICAgIGlmIChVSUN1cnJlbnRVc2VySW50ZXJmYWNl
SWRpb21Jc1BhZCgpKQorICAgICAgICBbc2VsZiBfcHJlc2VudFBvcG92ZXJXaXRoQ29udGVudFZp
ZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTXTsK
KyAgICBlbHNlCisgICAgICAgIFtzZWxmIF9wcmVzZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVy
Ol9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTXTsKK30KKworI3ByYWdt
YSBtYXJrIC0gSW1hZ2UgUGlja2VyCisKKy0gKHZvaWQpX3Nob3dQaG90b1BpY2tlcldpdGhTb3Vy
Y2VUeXBlOihVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGUpc291cmNlVHlwZQorewor
ICAgIF9pbWFnZVBpY2tlciA9IGFkb3B0TlMoW1tVSUltYWdlUGlja2VyQ29udHJvbGxlciBhbGxv
Y10gaW5pdF0pOworICAgIFtfaW1hZ2VQaWNrZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19p
bWFnZVBpY2tlciBzZXRTb3VyY2VUeXBlOnNvdXJjZVR5cGVdOworICAgIFtfaW1hZ2VQaWNrZXIg
c2V0QWxsb3dzRWRpdGluZzpOT107CisgICAgW19pbWFnZVBpY2tlciBzZXRNb2RhbFByZXNlbnRh
dGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRpb25GdWxsU2NyZWVuXTsKKyAgICBbX2ltYWdlUGlj
a2VyIF9zZXRBbGxvd3NNdWx0aXBsZVNlbGVjdGlvbjpfYWxsb3dNdWx0aXBsZUZpbGVzXTsKKyAg
ICBbX2ltYWdlUGlja2VyIHNldE1lZGlhVHlwZXM6W3NlbGYgX21lZGlhVHlwZXNGb3JQaWNrZXJT
b3VyY2VUeXBlOnNvdXJjZVR5cGVdXTsKKworICAgIC8vIFVzZSBhIHBvcG92ZXIgb24gdGhlIGlQ
YWQgaWYgdGhlIHNvdXJjZSB0eXBlIGlzIG5vdCB0aGUgY2FtZXJhLgorICAgIC8vIFRoZSBjYW1l
cmEgd2lsbCB1c2UgYSBmdWxsc2NyZWVuLCBtb2RhbCB2aWV3IGNvbnRyb2xsZXIuCisgICAgQk9P
TCB1c2VQb3BvdmVyID0gVUlDdXJyZW50VXNlckludGVyZmFjZUlkaW9tSXNQYWQoKSAmJiBzb3Vy
Y2VUeXBlICE9IFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZUNhbWVyYTsKKyAgICBp
ZiAodXNlUG9wb3ZlcikKKyAgICAgICAgW3NlbGYgX3ByZXNlbnRQb3BvdmVyV2l0aENvbnRlbnRW
aWV3Q29udHJvbGxlcjpfaW1hZ2VQaWNrZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTXTsKKyAgICBlbHNl
CisgICAgICAgIFtzZWxmIF9wcmVzZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVyOl9pbWFnZVBp
Y2tlci5nZXQoKSBhbmltYXRlZDpZRVNdOworfQorCisjcHJhZ21hIG1hcmsgLSBQcmVzZW50aW5n
IFZpZXcgQ29udHJvbGxlcnMKKworLSAodm9pZClfcHJlc2VudFBvcG92ZXJXaXRoQ29udGVudFZp
ZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopY29udGVudFZpZXdDb250cm9sbGVyIGFu
aW1hdGVkOihCT09MKWFuaW1hdGVkCit7CisgICAgW3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0
ZWQ6YW5pbWF0ZWRdOworCisgICAgX3ByZXNlbnRhdGlvblBvcG92ZXIgPSBhZG9wdE5TKFtbVUlQ
b3BvdmVyQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhDb250ZW50Vmlld0NvbnRyb2xsZXI6Y29u
dGVudFZpZXdDb250cm9sbGVyXSk7CisgICAgW19wcmVzZW50YXRpb25Qb3BvdmVyIHNldERlbGVn
YXRlOnNlbGZdOworICAgIFtfcHJlc2VudGF0aW9uUG9wb3ZlciBwcmVzZW50UG9wb3ZlckZyb21S
ZWN0OkNHUmVjdEludGVncmFsKENHUmVjdE1ha2UoX2ludGVyYWN0aW9uUG9pbnQueCwgX2ludGVy
YWN0aW9uUG9pbnQueSwgMSwgMSkpIGluVmlldzpfdmlldyBwZXJtaXR0ZWRBcnJvd0RpcmVjdGlv
bnM6VUlQb3BvdmVyQXJyb3dEaXJlY3Rpb25BbnkgYW5pbWF0ZWQ6YW5pbWF0ZWRdOworfQorCist
ICh2b2lkKV9wcmVzZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVy
ICopdmlld0NvbnRyb2xsZXIgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKK3sKKyAgICBbc2VsZiBf
ZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDphbmltYXRlZF07CisKKyAgICBfcHJlc2VudGF0aW9uVmll
d0NvbnRyb2xsZXIgPSBbVUlWaWV3Q29udHJvbGxlciBfdmlld0NvbnRyb2xsZXJGb3JGdWxsU2Ny
ZWVuUHJlc2VudGF0aW9uRnJvbVZpZXc6X3ZpZXddOworICAgIFtfcHJlc2VudGF0aW9uVmlld0Nv
bnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyIGFuaW1hdGVkOmFu
aW1hdGVkIGNvbXBsZXRpb246bmlsXTsKK30KKworI3ByYWdtYSBtYXJrIC0gVUlQb3BvdmVyQ29u
dHJvbGxlckRlbGVnYXRlCisKKy0gKHZvaWQpcG9wb3ZlckNvbnRyb2xsZXJEaWREaXNtaXNzUG9w
b3ZlcjooVUlQb3BvdmVyQ29udHJvbGxlciAqKXBvcG92ZXJDb250cm9sbGVyCit7CisgICAgW3Nl
bGYgX2NhbmNlbF07Cit9CisKKyNwcmFnbWEgbWFyayAtIFVJSW1hZ2VQaWNrZXJDb250cm9sbGVy
RGVsZWdhdGUgaW1wbGVtZW50YXRpb24KKworLSAoQk9PTClfd2lsbE11bHRpcGxlU2VsZWN0aW9u
RGVsZWdhdGVCZUNhbGxlZAoreworICAgIC8vIFRoZSBtdWx0aXBsZSBzZWxlY3Rpb24gZGVsZWdh
dGUgd2lsbCBub3QgYmUgY2FsbGVkIHdoZW4gdGhlIFVJSW1hZ2VQaWNrZXIgd2FzIG5vdCBtdWx0
aXBsZSBzZWxlY3Rpb24uCisgICAgaWYgKCFfYWxsb3dNdWx0aXBsZUZpbGVzKQorICAgICAgICBy
ZXR1cm4gTk87CisKKyAgICAvLyBUaGUgbXVsdGlwbGUgc2VsZWN0aW9uIGRlbGVnYXRlIHdpbGwg
bm90IGJlIGNhbGxlZCB3aGVuIHdlIHVzZWQgdGhlIGNhbWVyYSBpbiB0aGUgVUlJbWFnZVBpY2tl
ci4KKyAgICBpZiAoX3VzaW5nQ2FtZXJhKQorICAgICAgICByZXR1cm4gTk87CisKKyAgICByZXR1
cm4gWUVTOworfQorCistICh2b2lkKWltYWdlUGlja2VyQ29udHJvbGxlcjooVUlJbWFnZVBpY2tl
ckNvbnRyb2xsZXIgKilpbWFnZVBpY2tlciBkaWRGaW5pc2hQaWNraW5nTWVkaWFXaXRoSW5mbzoo
TlNEaWN0aW9uYXJ5ICopaW5mbworeworICAgIC8vIFNvbWV0aW1lcyBib3RoIGRlbGVnYXRlcyBn
ZXQgY2FsbGVkLCBzb21ldGltZXMganVzdCBvbmUuIEFsd2F5cyBsZXQgdGhlCisgICAgLy8gbXVs
dGlwbGUgc2VsZWN0aW9uIGRlbGVnYXRlIGhhbmRsZSBldmVyeXRoaW5nIGlmIGl0IHdpbGwgZ2V0
IGNhbGxlZC4KKyAgICBpZiAoW3NlbGYgX3dpbGxNdWx0aXBsZVNlbGVjdGlvbkRlbGVnYXRlQmVD
YWxsZWRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfZGlzbWlzc0Rpc3BsYXlBbmlt
YXRlZDpZRVNdOworCisgICAgW3NlbGYgX3Byb2Nlc3NNZWRpYUluZm9EaWN0aW9uYXJpZXM6W05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0OmluZm9dCisgICAgICAgIHN1Y2Nlc3NCbG9jazpeKE5TQXJy
YXkgKnByb2Nlc3NlZFJlc3VsdHMsIE5TU3RyaW5nICpkaXNwbGF5U3RyaW5nKSB7CisgICAgICAg
ICAgICBBU1NFUlQoW3Byb2Nlc3NlZFJlc3VsdHMgY291bnRdID09IDEpOworICAgICAgICAgICAg
X1dLRmlsZVVwbG9hZEl0ZW0gKnJlc3VsdCA9IFtwcm9jZXNzZWRSZXN1bHRzIG9iamVjdEF0SW5k
ZXg6MF07CisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1
ZSgpLCBeeworICAgICAgICAgICAgICAgIFtzZWxmIF9jaG9vc2VGaWxlczpbTlNBcnJheSBhcnJh
eVdpdGhPYmplY3Q6cmVzdWx0LmZpbGVVUkxdIGRpc3BsYXlTdHJpbmc6ZGlzcGxheVN0cmluZyBp
Y29uSW1hZ2U6cmVzdWx0LmRpc3BsYXlJbWFnZV07CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICBmYWlsdXJlQmxvY2s6XnsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAgICAgICAgW3NlbGYgX2NhbmNl
bF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIF07Cit9CisKKy0gKHZvaWQpaW1h
Z2VQaWNrZXJDb250cm9sbGVyOihVSUltYWdlUGlja2VyQ29udHJvbGxlciAqKWltYWdlUGlja2Vy
IGRpZEZpbmlzaFBpY2tpbmdNdWx0aXBsZU1lZGlhV2l0aEluZm86KE5TQXJyYXkgKilpbmZvcwor
eworICAgIFtzZWxmIF9kaXNtaXNzRGlzcGxheUFuaW1hdGVkOllFU107CisKKyAgICBbc2VsZiBf
cHJvY2Vzc01lZGlhSW5mb0RpY3Rpb25hcmllczppbmZvcworICAgICAgICBzdWNjZXNzQmxvY2s6
XihOU0FycmF5ICpwcm9jZXNzZWRSZXN1bHRzLCBOU1N0cmluZyAqZGlzcGxheVN0cmluZykgewor
ICAgICAgICAgICAgVUlJbWFnZSAqaWNvbkltYWdlID0gbmlsOworICAgICAgICAgICAgTlNNdXRh
YmxlQXJyYXkgKmZpbGVVUkxzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAgICAgICAg
IGZvciAoX1dLRmlsZVVwbG9hZEl0ZW0gKnJlc3VsdCBpbiBwcm9jZXNzZWRSZXN1bHRzKSB7Cisg
ICAgICAgICAgICAgICAgTlNVUkwgKmZpbGVVUkwgPSByZXN1bHQuZmlsZVVSTDsKKyAgICAgICAg
ICAgICAgICBpZiAoIWZpbGVVUkwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIFtmaWxlVVJMcyBhZGRPYmplY3Q6cmVzdWx0LmZpbGVVUkxdOworICAgICAg
ICAgICAgICAgIGlmICghaWNvbkltYWdlKQorICAgICAgICAgICAgICAgICAgICBpY29uSW1hZ2Ug
PSByZXN1bHQuZGlzcGxheUltYWdlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkaXNw
YXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgICAg
IFtzZWxmIF9jaG9vc2VGaWxlczpmaWxlVVJMcyBkaXNwbGF5U3RyaW5nOmRpc3BsYXlTdHJpbmcg
aWNvbkltYWdlOmljb25JbWFnZV07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg
ICBmYWlsdXJlQmxvY2s6XnsKKyAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAgICAgICAgW3NlbGYgX2NhbmNlbF07CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIF07Cit9CisKKy0gKHZvaWQpaW1hZ2VQaWNrZXJD
b250cm9sbGVyRGlkQ2FuY2VsOihVSUltYWdlUGlja2VyQ29udHJvbGxlciAqKWltYWdlUGlja2Vy
Cit7CisgICAgW3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6WUVTXTsKKyAgICBbc2VsZiBf
Y2FuY2VsXTsKK30KKworI3ByYWdtYSBtYXJrIC0gUHJvY2VzcyBVSUltYWdlUGlja2VyIHJlc3Vs
dHMKKworLSAodm9pZClfcHJvY2Vzc01lZGlhSW5mb0RpY3Rpb25hcmllczooTlNBcnJheSAqKWlu
Zm9zIHN1Y2Nlc3NCbG9jazoodm9pZCAoXikoTlNBcnJheSAqcHJvY2Vzc2VkUmVzdWx0cywgTlNT
dHJpbmcgKmRpc3BsYXlTdHJpbmcpKXN1Y2Nlc3NCbG9jayBmYWlsdXJlQmxvY2s6KHZvaWQgKF4p
KCkpZmFpbHVyZUJsb2NrCit7CisgICAgW3NlbGYgX3Byb2Nlc3NNZWRpYUluZm9EaWN0aW9uYXJp
ZXM6aW5mb3MgYXRJbmRleDowIHByb2Nlc3NlZFJlc3VsdHM6W05TTXV0YWJsZUFycmF5IGFycmF5
XSBwcm9jZXNzZWRJbWFnZUNvdW50OjAgcHJvY2Vzc2VkVmlkZW9Db3VudDowIHN1Y2Nlc3NCbG9j
azpzdWNjZXNzQmxvY2sgZmFpbHVyZUJsb2NrOmZhaWx1cmVCbG9ja107Cit9CisKKy0gKHZvaWQp
X3Byb2Nlc3NNZWRpYUluZm9EaWN0aW9uYXJpZXM6KE5TQXJyYXkgKilpbmZvcyBhdEluZGV4OihO
U1VJbnRlZ2VyKWluZGV4IHByb2Nlc3NlZFJlc3VsdHM6KE5TTXV0YWJsZUFycmF5ICopcHJvY2Vz
c2VkUmVzdWx0cyBwcm9jZXNzZWRJbWFnZUNvdW50OihOU1VJbnRlZ2VyKXByb2Nlc3NlZEltYWdl
Q291bnQgcHJvY2Vzc2VkVmlkZW9Db3VudDooTlNVSW50ZWdlcilwcm9jZXNzZWRWaWRlb0NvdW50
IHN1Y2Nlc3NCbG9jazoodm9pZCAoXikoTlNBcnJheSAqcHJvY2Vzc2VkUmVzdWx0cywgTlNTdHJp
bmcgKmRpc3BsYXlTdHJpbmcpKXN1Y2Nlc3NCbG9jayBmYWlsdXJlQmxvY2s6KHZvaWQgKF4pKCkp
ZmFpbHVyZUJsb2NrCit7CisgICAgTlNVSW50ZWdlciBjb3VudCA9IFtpbmZvcyBjb3VudF07Cisg
ICAgaWYgKGluZGV4ID09IGNvdW50KSB7CisgICAgICAgIE5TU3RyaW5nICpkaXNwbGF5U3RyaW5n
ID0gW3NlbGYgX2Rpc3BsYXlTdHJpbmdGb3JQaG90b3M6cHJvY2Vzc2VkSW1hZ2VDb3VudCB2aWRl
b3M6cHJvY2Vzc2VkVmlkZW9Db3VudF07CisgICAgICAgIHN1Y2Nlc3NCbG9jayhwcm9jZXNzZWRS
ZXN1bHRzLCBkaXNwbGF5U3RyaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5T
RGljdGlvbmFyeSAqaW5mbyA9IFtpbmZvcyBvYmplY3RBdEluZGV4OmluZGV4XTsKKyAgICBBU1NF
UlQoaW5kZXggPCBjb3VudCk7CisgICAgaW5kZXgrKzsKKworICAgIGF1dG8gdXBsb2FkSXRlbVN1
Y2Nlc3NCbG9jayA9IF4oX1dLRmlsZVVwbG9hZEl0ZW0gKnVwbG9hZEl0ZW0pIHsKKyAgICAgICAg
TlNVSW50ZWdlciBuZXdQcm9jZXNzZWRWaWRlb0NvdW50ID0gcHJvY2Vzc2VkVmlkZW9Db3VudCAr
ICh1cGxvYWRJdGVtLmlzVmlkZW8gPyAxIDogMCk7CisgICAgICAgIE5TVUludGVnZXIgbmV3UHJv
Y2Vzc2VkSW1hZ2VDb3VudCA9IHByb2Nlc3NlZEltYWdlQ291bnQgKyAodXBsb2FkSXRlbS5pc1Zp
ZGVvID8gMCA6IDEpOworICAgICAgICBbcHJvY2Vzc2VkUmVzdWx0cyBhZGRPYmplY3Q6dXBsb2Fk
SXRlbV07CisgICAgICAgIFtzZWxmIF9wcm9jZXNzTWVkaWFJbmZvRGljdGlvbmFyaWVzOmluZm9z
IGF0SW5kZXg6aW5kZXggcHJvY2Vzc2VkUmVzdWx0czpwcm9jZXNzZWRSZXN1bHRzIHByb2Nlc3Nl
ZEltYWdlQ291bnQ6bmV3UHJvY2Vzc2VkSW1hZ2VDb3VudCBwcm9jZXNzZWRWaWRlb0NvdW50Om5l
d1Byb2Nlc3NlZFZpZGVvQ291bnQgc3VjY2Vzc0Jsb2NrOnN1Y2Nlc3NCbG9jayBmYWlsdXJlQmxv
Y2s6ZmFpbHVyZUJsb2NrXTsKKyAgICB9OworCisgICAgW3NlbGYgX3VwbG9hZEl0ZW1Gcm9tTWVk
aWFJbmZvOmluZm8gc3VjY2Vzc0Jsb2NrOnVwbG9hZEl0ZW1TdWNjZXNzQmxvY2sgZmFpbHVyZUJs
b2NrOmZhaWx1cmVCbG9ja107Cit9CisKKy0gKHZvaWQpX3VwbG9hZEl0ZW1Gcm9tTWVkaWFJbmZv
OihOU0RpY3Rpb25hcnkgKilpbmZvIHN1Y2Nlc3NCbG9jazoodm9pZCAoXikoX1dLRmlsZVVwbG9h
ZEl0ZW0gKikpc3VjY2Vzc0Jsb2NrIGZhaWx1cmVCbG9jazoodm9pZCAoXikoKSlmYWlsdXJlQmxv
Y2sKK3sKKyAgICBOU1N0cmluZyAqbWVkaWFUeXBlID0gW2luZm8gb2JqZWN0Rm9yS2V5OlVJSW1h
Z2VQaWNrZXJDb250cm9sbGVyTWVkaWFUeXBlXTsKKworICAgIC8vIEZvciB2aWRlb3MgZnJvbSB0
aGUgZXhpc3RpbmcgbGlicmFyeSBvciBjYW1lcmEsIHRoZSBtZWRpYSBVUkwgd2lsbCBnaXZlIHVz
IGEgZmlsZSBwYXRoLgorICAgIGlmIChVVFR5cGVDb25mb3Jtc1RvKChDRlN0cmluZ1JlZiltZWRp
YVR5cGUsIGtVVFR5cGVNb3ZpZSkpIHsKKyAgICAgICAgTlNVUkwgKm1lZGlhVVJMID0gW2luZm8g
b2JqZWN0Rm9yS2V5OlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyTWVkaWFVUkxdOworICAgICAgICBp
ZiAoIVttZWRpYVVSTCBpc0ZpbGVVUkxdKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIldLRmls
ZVVwbG9hZFBhbmVsOiBFeHBlY3RlZCBtZWRpYSBVUkwgdG8gYmUgYSBmaWxlIHBhdGgsIGl0IHdh
cyBub3QiKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ZmFpbHVyZUJsb2NrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBOU1N0cmluZyAqZmlsZVBhdGggPSBbbWVkaWFVUkwgcGF0aF07CisgICAgICAgIHN1Y2Nlc3NC
bG9jayhhZG9wdE5TKFtbX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBhbGxvY10gaW5pdFdpdGhGaWxl
UGF0aDpmaWxlUGF0aCBtZWRpYVVSTDptZWRpYVVSTF0pLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZvciBpbWFnZXMsIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxl
IHBhdGggYW5kIHVzZSB0aGUgb3JpZ2luYWwgaW1hZ2UuCisgICAgaWYgKFVUVHlwZUNvbmZvcm1z
VG8oKENGU3RyaW5nUmVmKW1lZGlhVHlwZSwga1VUVHlwZUltYWdlKSkgeworICAgICAgICBVSUlt
YWdlICpvcmlnaW5hbEltYWdlID0gW2luZm8gb2JqZWN0Rm9yS2V5OlVJSW1hZ2VQaWNrZXJDb250
cm9sbGVyT3JpZ2luYWxJbWFnZV07CisgICAgICAgIGlmICghb3JpZ2luYWxJbWFnZSkgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5lbDogRXhwZWN0ZWQgaW1hZ2UgZGF0
YSBidXQgdGhlcmUgd2FzIG5vbmUiKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgZmFpbHVyZUJsb2NrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVl
KERJU1BBVENIX1FVRVVFX1BSSU9SSVRZX0RFRkFVTFQsIDApLCBeeworICAgICAgICAgICAgTlNT
dHJpbmcgKiBjb25zdCBrVGVtcG9yYXJ5RGlyZWN0b3J5TmFtZSA9IEAiV0tXZWJGaWxlVXBsb2Fk
IjsKKyAgICAgICAgICAgIE5TU3RyaW5nICogY29uc3Qga1VwbG9hZEltYWdlTmFtZSA9IEAiaW1h
Z2UuanBnIjsKKworICAgICAgICAgICAgLy8gQnVpbGQgdGVtcG9yYXJ5IGZpbGUgcGF0aC4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZ2V0IHRoZSBBTEFzc2V0IGZvciB0aGUgbWVk
aWFVUkwgYW5kIGdldCB0aGUgYWN0dWFsIGZpbGVuYW1lIGZvciB0aGUgcGhvdG8KKyAgICAgICAg
ICAgIC8vIGluc3RlYWQgb2YgbmFtaW5nIGVhY2ggb2YgdGhlIGluZGl2aWR1YWwgdXBsb2FkcyBp
bWFnZS5qcGc/IFRoaXMgd29uJ3Qgd29yayBmb3IgcGhvdG9zCisgICAgICAgICAgICAvLyB0YWtl
biB3aXRoIHRoZSBjYW1lcmEsIGJ1dCB3b3VsZCB3b3JrIGZvciBwaG90b3MgcGlja2VkIGZyb20g
dGhlIGxpYnJhcnkuCisgICAgICAgICAgICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFuYWdlciA9IFtO
U0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICAgICAgICAgIE5TU3RyaW5nICp0ZW1w
b3JhcnlEaXJlY3RvcnkgPSBbZmlsZU1hbmFnZXIgX3dlYmtpdF9jcmVhdGVUZW1wb3JhcnlEaXJl
Y3RvcnlXaXRoVGVtcGxhdGVQcmVmaXg6a1RlbXBvcmFyeURpcmVjdG9yeU5hbWVdOworICAgICAg
ICAgICAgTlNTdHJpbmcgKmZpbGVQYXRoID0gW3RlbXBvcmFyeURpcmVjdG9yeSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6a1VwbG9hZEltYWdlTmFtZV07CisgICAgICAgICAgICBpZiAo
IWZpbGVQYXRoKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5l
bDogRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHNhdmUgaW1hZ2UiKTsK
KyAgICAgICAgICAgICAgICBmYWlsdXJlQmxvY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXByZXNzIHRvIEpQRUcgZm9ybWF0
LgorICAgICAgICAgICAgLy8gRklYTUU6IERpZmZlcmVudCBjb21wcmVzc2lvbiBmb3IgZGlmZmVy
ZW50IGRldmljZXM/CisgICAgICAgICAgICAvLyBGSVhNRTogRGlmZmVyZW50IGNvbXByZXNzaW9u
IGZvciBkaWZmZXJlbnQgVUlJbWFnZSBzaXplcz8KKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgRVhJRiBkYXRhIGJlIG1haW50YWluZWQ/CisgICAgICAgICAgICBjb25zdCBDR0Zsb2F0IGNv
bXByZXNzaW9uID0gMC44OworICAgICAgICAgICAgTlNEYXRhICpqcGVnID0gVUlJbWFnZUpQRUdS
ZXByZXNlbnRhdGlvbihvcmlnaW5hbEltYWdlLCBjb21wcmVzc2lvbik7CisgICAgICAgICAgICBp
ZiAoIWpwZWcpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIldLRmlsZVVwbG9hZFBhbmVs
OiBGYWlsZWQgdG8gY3JlYXRlIEpQRUcgcmVwcmVzZW50YXRpb24gZm9yIGltYWdlIik7CisgICAg
ICAgICAgICAgICAgZmFpbHVyZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTYXZlIHRoZSBpbWFnZSB0byB0aGUgdGVtcG9y
YXJ5IGZpbGUuCisgICAgICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICAgICAgICAg
IFtqcGVnIHdyaXRlVG9GaWxlOmZpbGVQYXRoIG9wdGlvbnM6TlNEYXRhV3JpdGluZ0F0b21pYyBl
cnJvcjomZXJyb3JdOworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJXS0ZpbGVVcGxvYWRQYW5lbDogRXJyb3Igd3JpdGluZyBpbWFnZSBkYXRhIHRv
IHRlbXBvcmFyeSBmaWxlOiAlQCIsIGVycm9yKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlQmxv
Y2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN1Y2Nlc3NCbG9jayhhZG9wdE5TKFtbX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBhbGxvY10g
aW5pdFdpdGhGaWxlUGF0aDpmaWxlUGF0aCBvcmlnaW5hbEltYWdlOm9yaWdpbmFsSW1hZ2VdKS5n
ZXQoKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVW5r
bm93biBtZWRpYSB0eXBlLgorICAgIExPR19FUlJPUigiV0tGaWxlVXBsb2FkUGFuZWw6IFVuZXhw
ZWN0ZWQgbWVkaWEgdHlwZS4gRXhwZWN0ZWQgaW1hZ2Ugb3IgdmlkZW8sIGdvdDogJUAiLCBtZWRp
YVR5cGUpOworICAgIGZhaWx1cmVCbG9jaygpOworfQorCistIChOU1N0cmluZyAqKV9kaXNwbGF5
U3RyaW5nRm9yUGhvdG9zOihOU1VJbnRlZ2VyKWltYWdlQ291bnQgdmlkZW9zOihOU1VJbnRlZ2Vy
KXZpZGVvQ291bnQKK3sKKyAgICBpZiAoIWltYWdlQ291bnQgJiYgIXZpZGVvQ291bnQpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBOU1N0cmluZyAqdGl0bGU7CisgICAgTlNTdHJpbmcgKmlt
YWdlQ291bnRTdHJpbmcsICp2aWRlb0NvdW50U3RyaW5nOworICAgIE5TU3RyaW5nICppbWFnZVN0
cmluZywgKnZpZGVvU3RyaW5nOworICAgIE5TVUludGVnZXIgbnVtYmVyT2ZUeXBlcyA9IDI7CisK
KyAgICBSZXRhaW5QdHI8TlNOdW1iZXJGb3JtYXR0ZXI+IGNvdW50Rm9ybWF0dGVyID0gYWRvcHRO
UyhbW05TTnVtYmVyRm9ybWF0dGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvdW50Rm9ybWF0dGVy
IHNldExvY2FsZTpbTlNMb2NhbGUgY3VycmVudExvY2FsZV1dOworICAgIFtjb3VudEZvcm1hdHRl
ciBzZXRHZW5lcmF0ZXNEZWNpbWFsTnVtYmVyczpZRVNdOworICAgIFtjb3VudEZvcm1hdHRlciBz
ZXROdW1iZXJTdHlsZTpOU051bWJlckZvcm1hdHRlckRlY2ltYWxTdHlsZV07CisKKyAgICAvLyBH
ZW5lcmF0ZSB0aGUgaW5kaXZpZHVhbCBjb3VudHMgZm9yIGVhY2ggdHlwZS4KKyAgICBzd2l0Y2gg
KGltYWdlQ291bnQpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGltYWdlU3RyaW5nID0gbmlsOwor
ICAgICAgICAtLW51bWJlck9mVHlwZXM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAg
ICAgICAgaW1hZ2VTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiMSBQaG90byIsICIxIFBob3Rv
IChmaWxlIHVwbG9hZCBvbiBwYWdlIGxhYmVsIGZvciBvbmUgcGhvdG8pIiwgIkZpbGUgVXBsb2Fk
IHNpbmdsZSBwaG90byBsYWJlbCIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBpbWFnZUNvdW50U3RyaW5nID0gW2NvdW50Rm9ybWF0dGVyIHN0cmluZ0Zyb21OdW1iZXI6
QChpbWFnZUNvdW50KV07CisgICAgICAgIGltYWdlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6V0VCX1VJX1NUUklOR19LRVkoIiVAIFBob3RvcyIsICIjIFBob3RvcyAoZmlsZSB1
cGxvYWQgb24gcGFnZSBsYWJlbCBmb3IgbXVsdGlwbGUgcGhvdG9zKSIsICJGaWxlIFVwbG9hZCBt
dWx0aXBsZSBwaG90b3MgbGFiZWwiKSwgaW1hZ2VDb3VudFN0cmluZ107CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHN3aXRjaCAodmlkZW9Db3VudCkgeworICAgIGNhc2UgMDoKKyAgICAg
ICAgdmlkZW9TdHJpbmcgPSBuaWw7CisgICAgICAgIC0tbnVtYmVyT2ZUeXBlczsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICB2aWRlb1N0cmluZyA9IFdFQl9VSV9TVFJJTkdf
S0VZKCIxIFZpZGVvIiwgIjEgVmlkZW8gKGZpbGUgdXBsb2FkIG9uIHBhZ2UgbGFiZWwgZm9yIG9u
ZSB2aWRlbykiLCAiRmlsZSBVcGxvYWQgc2luZ2xlIHZpZGVvIGxhYmVsIik7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZpZGVvQ291bnRTdHJpbmcgPSBbY291bnRGb3Jt
YXR0ZXIgc3RyaW5nRnJvbU51bWJlcjpAKHZpZGVvQ291bnQpXTsKKyAgICAgICAgdmlkZW9TdHJp
bmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HX0tFWSgiJUAgVmlk
ZW9zIiwgIiMgVmlkZW9zIChmaWxlIHVwbG9hZCBvbiBwYWdlIGxhYmVsIGZvciBtdWx0aXBsZSB2
aWRlb3MpIiwgIkZpbGUgVXBsb2FkIG11bHRpcGxlIHZpZGVvcyBsYWJlbCIpLCB2aWRlb0NvdW50
U3RyaW5nXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gQ29tYmluZSBpbnRvIGEg
c2luZ2xlIHJlc3VsdCBzdHJpbmcgaWYgbmVlZGVkLgorICAgIHN3aXRjaCAobnVtYmVyT2ZUeXBl
cykgeworICAgIGNhc2UgMjoKKyAgICAgICAgdGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpXRUJfVUlfU1RSSU5HX0tFWSgiJUAgUGhvdG9zIGFuZCAlQCBWaWRlb3MiLCAiIyBQaG90
b3MgYW5kICMgVmlkZW9zIChmaWxlIHVwbG9hZCBvbiBwYWdlIGxhYmVsIGZvciBpbWFnZSBhbmQg
dmlkZW9zKSIsICJGaWxlIFVwbG9hZCBpbWFnZXMgYW5kIHZpZGVvcyBsYWJlbCIpLCBpbWFnZUNv
dW50U3RyaW5nLCB2aWRlb0NvdW50U3RyaW5nXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAx
OgorICAgICAgICB0aXRsZSA9IGltYWdlU3RyaW5nID8gaW1hZ2VTdHJpbmcgOiB2aWRlb1N0cmlu
ZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHRpdGxlID0gbmlsOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gW3RpdGxlIGxvd2VyY2FzZVN0cmluZ107Cit9CisKK0BlbmQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAxYzQ5NTgwLi41NjQxY2RiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIxLDYgKzEwMjEs
OCBAQAogCQlBMUE0RkU2MTE4REQ1NEE0MDBCNUVBOEEgLyogX1dLRG93bmxvYWREZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFBNEZFNjAx
OERENTRBNDAwQjVFQThBIC8qIF9XS0Rvd25sb2FkRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMURGNjMxMjE4RTBCN0M4MDAzQTNF
MkEgLyogRG93bmxvYWRDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMURGNjMxMDE4RTBCN0M4MDAzQTNFMkEgLyogRG93bmxvYWRDbGllbnQu
bW0gKi87IH07CiAJCUExREY2MzEzMThFMEI3QzgwMDNBM0UyQSAvKiBEb3dubG9hZENsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFERjYzMTEx
OEUwQjdDODAwM0EzRTJBIC8qIERvd25sb2FkQ2xpZW50LmggKi87IH07CisJCUE1OEI2RjA4MThG
Q0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxvYWRQYW5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU4QjZGMDYxOEZDQTczMzAwOENCQTUzIC8qIFdL
RmlsZVVwbG9hZFBhbmVsLmggKi87IH07CisJCUE1OEI2RjA5MThGQ0E3MzMwMDhDQkE1MyAvKiBX
S0ZpbGVVcGxvYWRQYW5lbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1OEI2RjA3MThGQ0E3MzMwMDhDQkE1MyAvKiBXS0ZpbGVVcGxvYWRQYW5lbC5t
bSAqLzsgfTsKIAkJQTVFRkQzOEMxNkIwRTg4QzAwQjJGMEU4IC8qIFdLUGFnZVZpc2liaWxpdHlU
eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVF
RkQzOEIxNkIwRTg4QzAwQjJGMEU4IC8qIFdLUGFnZVZpc2liaWxpdHlUeXBlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3RDc5MkQ2MTc2N0NC
NkUwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q3OTJENTE3NjdDQjZFMDA4ODFDQkUgLyogQWN0
aXZpdHlBc3NlcnRpb24uY3BwICovOyB9OwogCQlBN0Q3OTJEODE3NjdDQ0EzMDA4ODFDQkUgLyog
QWN0aXZpdHlBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3RDc5MkQ0MTc2N0NCMDkwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5o
ICovOyB9OwpAQCAtMjg4NCw2ICsyODg2LDggQEAKIAkJQTFFREQyREIxODg0Qjk2NDAwQkJGRTk4
IC8qIFBsdWdpblByb2Nlc3NTaGltLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFBsdWdpblByb2Nl
c3NTaGltLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUVERDJEQzE4
ODRCOUI1MDBCQkZFOTggLyogU2VjSXRlbVNoaW0ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gU2Vj
SXRlbVNoaW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRUREMkRE
MTg4NEI5RTMwMEJCRkU5OCAvKiBXZWJQcm9jZXNzU2hpbS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBXZWJQcm9jZXNzU2hpbS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTU4QjZGMDYxOEZDQTczMzAwOENCQTUzIC8qIFdLRmlsZVVwbG9hZFBhbmVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRmlsZVVwbG9hZFBhbmVsLmg7IHBhdGggPSBpb3Mv
Zm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTU4QjZGMDcxOEZDQTczMzAwOENCQTUzIC8qIFdLRmlsZVVwbG9hZFBhbmVsLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGaWxlVXBsb2FkUGFuZWwubW07IHBh
dGggPSBpb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1RUZEMzhCMTZCMEU4OEMwMEIyRjBFOCAvKiBXS1BhZ2VWaXNpYmlsaXR5VHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdlVmlzaWJpbGl0eVR5
cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MkQ1RDdGMTIzNkNCQTgwMEE4
OEIxNSAvKiBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3RDc5MkQ0MTc2N0NCMDkwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpdml0eUFzc2VydGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjQ3Miw2ICs2NDc2LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1
RkExRUQxMThFMTA2MjIwMEIzRjQwMiAvKiBXS0FpclBsYXlSb3V0ZVBpY2tlci5oICovLAogCQkJ
CUM1RkExRUQyMThFMTA2MjIwMEIzRjQwMiAvKiBXS0FpclBsYXlSb3V0ZVBpY2tlci5tbSAqLywK
KwkJCQlBNThCNkYwNjE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwuaCAqLywK
KwkJCQlBNThCNkYwNzE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFuZWwubW0gKi8s
CiAJCQkJQzU0MjU2QUYxOEJFQzE4QjAwREU0MTc5IC8qIFdLRm9ybUlucHV0Q29udHJvbC5oICov
LAogCQkJCUM1NDI1NkIwMThCRUMxOEIwMERFNDE3OSAvKiBXS0Zvcm1JbnB1dENvbnRyb2wubW0g
Ki8sCiAJCQkJQzU0MjU2QjExOEJFQzE4QjAwREU0MTc5IC8qIFdLRm9ybVBlcmlwaGVyYWwuaCAq
LywKQEAgLTY2NzYsNiArNjY4Miw3IEBACiAJCQkJMUFCN0Q0Q0ExMjg4QUFBNzAwQ0ZEMDhDIC8q
IERvd25sb2FkUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3M0QxMjJEMThBNEI2RUIwMDY2
RDlDQyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRDI1RTk2MTY3QUIwODEwMEVBOUJDRCAvKiBEb3dubG9hZFByb3h5TWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBNThCNkYwODE4RkNBNzMzMDA4Q0JBNTMgLyogV0tGaWxlVXBsb2FkUGFu
ZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdENjFBMTI4OEI5RDkwMENGRDA4QyAvKiBEb3du
bG9hZFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTczODgxMTJERjhGNEYw
MEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4
NDUyQTgxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhLmggaW4gSGVhZGVycyAqLywKQEAg
LTgzODQsNiArODM5MSw3IEBACiAJCQkJQkMxMTFBNUExMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkNo
cm9tZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBEMDE4NzY0NTU3MDAyMUU3
OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNGODdC
OUJEMTU4OTQwMTIwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTU4QjZGMDkxOEZDQTczMzAwOENCQTUzIC8qIFdLRmlsZVVwbG9hZFBhbmVsLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjAzNjk3ODgxNUY0QkYwNTAwQzNBODBFIC8qIFdlYkNvbG9yUGlj
a2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNEE2MjhGMTQ3MzEyQkUwMDZDNjgxQSAvKiBX
ZWJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNEE2MjkxMTQ3MzEyQkUwMDZD
NjgxQSAvKiBXZWJDb25uZWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExp
c3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5jcHAKaW5kZXggYmNmM2U4MC4uNjU0YjgyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCIKIAorI2luY2x1ZGUg
PFdlYkNvcmUvSWNvbi5oPgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogUGFzc1JlZlB0cjxXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4gV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6OmNyZWF0
ZShXZWJQYWdlKiBwYWdlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiBmaWxlQ2hv
b3NlcikKQEAgLTQ4LDQgKzUwLDExIEBAIHZvaWQgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OmRpZENob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlcykKICAgICBtX2ZpbGVD
aG9vc2VyLT5jaG9vc2VGaWxlcyhmaWxlcyk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCit2b2lk
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpkaWRDaG9vc2VGaWxlc1dpdGhEaXNwbGF5U3Ry
aW5nQW5kSWNvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZXMsIGNvbnN0IFN0cmluZyYgZGlz
cGxheVN0cmluZywgV2ViQ29yZTo6SWNvbiogZGlzcGxheUljb24pCit7CisgICAgbV9maWxlQ2hv
b3Nlci0+Y2hvb3NlTWVkaWFGaWxlcyhmaWxlcywgZGlzcGxheVN0cmluZywgZGlzcGxheUljb24p
OworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXIuaAppbmRleCAwNzNkNjZhLi4wZDA5MGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXIuaApAQCAtMjksNiArMjksMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZUNob29zZXIuaD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgSWNvbjsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CkBAIC00
MCw2ICs0NCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBt
X3BhZ2UgPSAwOyB9CiAgICAgdm9pZCBkaWRDaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGRpZENob29zZUZpbGVzV2l0aERpc3Bs
YXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5U3RyaW5nLCBXZWJDb3JlOjpJY29uKik7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcihXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxl
Q2hvb3Nlcj4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDkwNGFhNWQuLmYwNzllZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE4NCw2ICsxODQsOCBAQAogCiAjaWYgUExBVEZP
Uk0oSU9TKQogI2luY2x1ZGUgIldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+
CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKQEAgLTI5OTMsNiArMjk5NSwyNSBAQCB2b2lkIFdl
YlBhZ2U6OmNoYW5nZVNlbGVjdGVkSW5kZXgoaW50MzJfdCBpbmRleCkKICAgICBtX2FjdGl2ZVBv
cHVwTWVudS0+ZGlkQ2hhbmdlU2VsZWN0ZWRJbmRleChpbmRleCk7CiB9CiAKKyNpZiBQTEFURk9S
TShJT1MpCit2b2lkIFdlYlBhZ2U6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3Bs
YXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlcywgY29uc3QgU3RyaW5n
JiBkaXNwbGF5U3RyaW5nLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGljb25EYXRhKQorewor
ICAgIGlmICghbV9hY3RpdmVPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPEljb24+IGljb247CisgICAgaWYgKCFpY29uRGF0YS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YVJlZiA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlKG51bGxwdHIsIGljb25EYXRhLmRhdGEoKSwgaWNvbkRhdGEuc2l6ZSgpKSk7CisgICAg
ICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gaW1hZ2VQcm92aWRlclJlZiA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFSZWYuZ2V0KCkpKTsKKyAgICAg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlUmVmID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
V2l0aEpQRUdEYXRhUHJvdmlkZXIoaW1hZ2VQcm92aWRlclJlZi5nZXQoKSwgbnVsbHB0ciwgdHJ1
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgICAgICBpY29uID0gSWNvbjo6Y3Jl
YXRlSWNvbkZvckltYWdlKGltYWdlUmVmLmdldCgpKTsKKyAgICB9CisKKyAgICBtX2FjdGl2ZU9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLT5kaWRDaG9vc2VGaWxlc1dpdGhEaXNwbGF5U3RyaW5nQW5k
SWNvbihmaWxlcywgZGlzcGxheVN0cmluZywgaWNvbi5nZXQoKSk7CisgICAgbV9hY3RpdmVPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lciA9IG51bGxwdHI7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJQYWdl
OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZXMp
CiB7CiAgICAgaWYgKCFtX2FjdGl2ZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggYTc3NDAyMi4uZWMwMWVk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC05
NDMsNiArOTQzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZhaWxlZFRvU2hvd1BvcHVwTWVudSgp
OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBkaWRDaG9vc2VGaWxlc0Zv
ck9wZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZywgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBp
Y29uRGF0YSk7CisjZW5kaWYKICAgICB2b2lkIGRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNv
bnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgdm9pZCBkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKTsK
ICNpZiBFTkFCTEUoV0VCX1BST0NFU1NfU0FOREJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggZjliODIwOS4u
N2Y3M2Y3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTIyMSw2ICsyMjEsOSBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIExlZ2FjeVJlY2VpdmVyIHsKICNlbmRpZgogCiAgICAgIyBPcGVuIHBhbmVsLgorI2lmIFBM
QVRGT1JNKElPUykKKyAgICBEaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5U3Ry
aW5nQW5kSWNvbihWZWN0b3I8U3RyaW5nPiBmaWxlVVJMcywgU3RyaW5nIGRpc3BsYXlTdHJpbmcs
IElQQzo6RGF0YVJlZmVyZW5jZSBpY29uRGF0YSkKKyNlbmRpZgogICAgIERpZENob29zZUZpbGVz
Rm9yT3BlblBhbmVsKFZlY3RvcjxTdHJpbmc+IGZpbGVVUkxzKQogICAgIERpZENhbmNlbEZvck9w
ZW5QYW5lbCgpCiAjaWYgRU5BQkxFKFdFQl9QUk9DRVNTX1NBTkRCT1gpCg==
</data>
<flag name="review"
          id="254783"
          type_id="1"
          status="+"
          setter="enrica"
    />
    <flag name="commit-queue"
          id="254784"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>