<?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>210974</bug_id>
          
          <creation_ts>2020-04-24 09:36:25 -0700</creation_ts>
          <short_desc>Use CocoaImage platform abstraction for NSImage/UIImage</short_desc>
          <delta_ts>2020-04-24 14:03:23 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210979</see_also>
          <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>
          <dependson>210814</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1645225</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-24 09:36:25 -0700</bug_when>
    <thetext>Use CocoaImage platform abstraction for NSImage/UIImage.

Following on from comments in Bug 210814, move CocoaImage into its own header for reuse in other classes.

There aren&apos;t as many opportunities for this as you might think, though:

$ grep -l NSImage `grep -l -r UIImage Source | grep -v ChangeLog | grep -v .order` 
Source/WebKitLegacy/mac/WebView/WebView.mm
Source/WebKitLegacy/mac/WebView/WebViewData.h
Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm
Source/WebKit/UIProcess/API/Cocoa/WKWebView.h
Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.h
Source/WebKit/UIProcess/QuickLookThumbnailLoader.h
Source/WebKit/UIProcess/QuickLookThumbnailLoader.mm
Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h
Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm
Source/WebCore/editing/cocoa/HTMLConverter.mm

The uses in WebCore and WebKitLegacy aren&apos;t really cross-platform, so all of the interesting use cases are in WebKit.

However, the initial version of the patch doesn&apos;t use CocoaImage in public headers as I wasn&apos;t sure if we were okay with doing things like this in Source/WebKit/UIProcess/API/Cocoa/WKWebView.h:

-#if TARGET_OS_IPHONE
-- (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(UIImage * _Nulla
ble snapshotImage, NSError * _Nullable error))completionHandler WK_API_AVAILABLE(ios(11.0));
-#else
-- (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(NSImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler WK_API_AVAILABLE(macos(10.13));
-#endif

+- (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(CocoaImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler WK_API_AVAILABLE(macos(10.13), ios(11.0));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645226</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-24 09:39:43 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #0)
&gt; However, the initial version of the patch doesn&apos;t use CocoaImage in public
&gt; headers

Yes, I don’t think it is good to use it in public headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645262</commentid>
    <comment_count>2</comment_count>
      <attachid>397471</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-24 10:46:25 -0700</bug_when>
    <thetext>Created attachment 397471
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645263</commentid>
    <comment_count>3</comment_count>
      <attachid>397471</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-24 10:47:51 -0700</bug_when>
    <thetext>Comment on attachment 397471
Patch v1

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:983
&gt; -#if PLATFORM(MAC)
&gt; -- (void)takeSnapshotWithConfiguration:(WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void(^)(NSImage *, NSError *))completionHandler
&gt; +- (void)takeSnapshotWithConfiguration:(WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void(^)(CocoaImage *, NSError *))completionHandler

This is the least-satisfying improvement.  Maybe I need to extract the platform-specific code into static methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645276</commentid>
    <comment_count>4</comment_count>
      <attachid>397471</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-24 10:59:48 -0700</bug_when>
    <thetext>Comment on attachment 397471
Patch v1

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

Nice improvement.

&gt; Source/WebKit/Platform/cocoa/CocoaImage.h:26
&gt; +#import &lt;wtf/PlatformUse.h&gt;

This should not be necessary. The prefix header takes care of this.

&gt; Source/WebKit/Platform/cocoa/CocoaImage.h:35
&gt; +#ifdef __cplusplus
&gt; +using CocoaImage = NSImage;
&gt; +#else
&gt; +#define CocoaImage NSImage
&gt; +#endif

If we need something that works with Objective-C (not C++) then I suggest we use typedef, not #define, and not using. But, can this just be an Objective-C++ header? Then it would use using unconditionally.

&gt; Source/WebKit/Platform/cocoa/CocoaImage.h:44
&gt; +#ifdef __cplusplus
&gt; +using CocoaImage = UIImage;
&gt; +#else
&gt; +#define CocoaImage UIImage
&gt; +#endif

Ditto.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:983
&gt;&gt; +- (void)takeSnapshotWithConfiguration:(WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void(^)(CocoaImage *, NSError *))completionHandler
&gt; 
&gt; This is the least-satisfying improvement.  Maybe I need to extract the platform-specific code into static methods?

Can chip away at it more later.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1017
&gt; -        RetainPtr&lt;NSImage&gt; nsImage = adoptNS([[NSImage alloc] initWithCGImage:cgImage.get() size:NSMakeSize(snapshotWidth, imageHeight)]);
&gt; -        handler(nsImage.get(), nil);
&gt; +        auto image = adoptNS([[CocoaImage alloc] initWithCGImage:cgImage.get() size:NSMakeSize(snapshotWidth, imageHeight)]);
&gt; +        handler(image.get(), nil);

I don’t think this change is needed. Nice to use auto, but no need to use CocoaImage here.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1032
&gt; -            RetainPtr&lt;UIImage&gt; uiImage;
&gt; +            RetainPtr&lt;CocoaImage&gt; image;
&gt;              
&gt;              if (!snapshotImage)
&gt;                  error = createNSError(WKErrorUnknown);
&gt;              else
&gt; -                uiImage = adoptNS([[UIImage alloc] initWithCGImage:snapshotImage scale:deviceScale orientation:UIImageOrientationUp]);
&gt; +                image = adoptNS([[CocoaImage alloc] initWithCGImage:snapshotImage scale:deviceScale orientation:UIImageOrientationUp]);
&gt;              
&gt; -            handler(uiImage.get(), error.get());
&gt; +            handler(image.get(), error.get());

I don’t think this change is needed. Nicer local variable name, but no need to use CocoaImage here.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:154
&gt; +        return [[_cocoaImage copy] autorelease];

Surprised that we need copy/autorelease.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:163
&gt; +#if USE(APPKIT)
&gt; +    _cocoaImage = adoptNS([[CocoaImage alloc] initWithCGImage:_image-&gt;makeCGImageCopy().get() size:NSSizeFromCGSize(_boundingRect.size)]);
&gt; +#else
&gt; +    _cocoaImage = adoptNS([[CocoaImage alloc] initWithCGImage:_image-&gt;makeCGImageCopy().get()]);
&gt; +#endif

I would have used the class names NSImage and UIImage here, not CocoaImage, but it’s OK either way I suppose.

&gt; Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:77
&gt; +#if USE(APPKIT)
&gt; +    return [[[CocoaImage alloc] initWithCGImage:image-&gt;bitmap().makeCGImage().get() size:NSZeroSize] autorelease];
&gt; +#else
&gt; +    return [[[CocoaImage alloc] initWithCGImage:image-&gt;bitmap().makeCGImage().get()] autorelease];
&gt;  #endif

Here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645277</commentid>
    <comment_count>5</comment_count>
      <attachid>397471</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-24 11:02:59 -0700</bug_when>
    <thetext>Comment on attachment 397471
Patch v1

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:154
&gt;&gt; +        return [[_cocoaImage copy] autorelease];
&gt; 
&gt; Surprised that we need copy/autorelease.

Oops, not sure why I left that comment in. Please don’t change this! I am surprised but we should take no risk on this at this time, just based on that surprise!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645291</commentid>
    <comment_count>6</comment_count>
      <attachid>397471</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-24 11:28:23 -0700</bug_when>
    <thetext>Comment on attachment 397471
Patch v1

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

&gt;&gt; Source/WebKit/Platform/cocoa/CocoaImage.h:26
&gt;&gt; +#import &lt;wtf/PlatformUse.h&gt;
&gt; 
&gt; This should not be necessary. The prefix header takes care of this.

Will remove.

&gt;&gt; Source/WebKit/Platform/cocoa/CocoaImage.h:35
&gt;&gt; +#endif
&gt; 
&gt; If we need something that works with Objective-C (not C++) then I suggest we use typedef, not #define, and not using. But, can this just be an Objective-C++ header? Then it would use using unconditionally.

Only used in Objective-C++ for now, so will just keep using statement.

&gt;&gt; Source/WebKit/Platform/cocoa/CocoaImage.h:44
&gt;&gt; +#endif
&gt; 
&gt; Ditto.

Only used in Objective-C++ for now, so will just keep using statement.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1017
&gt;&gt; +        handler(image.get(), nil);
&gt; 
&gt; I don’t think this change is needed. Nice to use auto, but no need to use CocoaImage here.

Will keep the variable name change and auto and revert the class name change.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1032
&gt;&gt; +            handler(image.get(), error.get());
&gt; 
&gt; I don’t think this change is needed. Nicer local variable name, but no need to use CocoaImage here.

Will keep the variable name change and revert the class name change.

&gt;&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:154
&gt;&gt;&gt; +        return [[_cocoaImage copy] autorelease];
&gt;&gt; 
&gt;&gt; Surprised that we need copy/autorelease.
&gt; 
&gt; Oops, not sure why I left that comment in. Please don’t change this! I am surprised but we should take no risk on this at this time, just based on that surprise!

Okay.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:163
&gt;&gt; +#endif
&gt; 
&gt; I would have used the class names NSImage and UIImage here, not CocoaImage, but it’s OK either way I suppose.

Will revert the class name change.

&gt;&gt; Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:77
&gt;&gt;  #endif
&gt; 
&gt; Here too.

Will revert the class name change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645307</commentid>
    <comment_count>7</comment_count>
      <attachid>397480</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-04-24 12:04:50 -0700</bug_when>
    <thetext>Created attachment 397480
Patch v2 (land safely after EWS)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645379</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-24 14:02:52 -0700</bug_when>
    <thetext>Committed r260667: &lt;https://trac.webkit.org/changeset/260667&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397480.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645380</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-24 14:03:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/62337926&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397471</attachid>
            <date>2020-04-24 10:46:25 -0700</date>
            <delta_ts>2020-04-24 12:04:48 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-210974-20200424104827.patch</filename>
            <type>text/plain</type>
            <size>17767</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkxMjUwNTMyN2VkYWIxYmU3
MzM1ZjM2OGRhMDdhZTI5YzRiYjM2YzguLmUyZDUzMTRhYTlkZTE3YTU4OGJhNGZkMGRiMTU0Mjc5
YmYwMWRhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjAtMDQtMjQgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgQ29jb2FJbWFnZSBwbGF0
Zm9ybSBhYnN0cmFjdGlvbiBmb3IgTlNJbWFnZS9VSUltYWdlCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8yMTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBQbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLmg6IEFkZC4KKyAgICAgICAg
LSBEZWZpbmUgQ29jb2FJbWFnZSBoZXJlIGZvciBjcm9zcy1wbGF0Zm9ybSB1c2UuICBEb24ndCB1
c2UKKyAgICAgICAgICBPQkpDX0NMQVNTKCkgaGVyZSBiZWNhdXNlIHRoaXMgaXMgYW4gT2JqZWN0
aXZlLUMgaGVhZGVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXS1dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIC0gQ29tYmluZSBzZXBhcmF0ZSBwbGF0Zm9ybS1z
cGVjaWZpYyBtZXRob2RzIGludG8gb25lIG1ldGhvZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLm1tOgorICAgICAgICAtIENvbWJpbmUgc2Vw
YXJhdGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5zdGFuY2UgdmFyaWFibGVzIGludG8KKyAgICAgICAg
ICBvbmUgaW5zdGFuY2UgdmFyaWFibGUuCisgICAgICAgICgtW19XS0FjdGl2YXRlZEVsZW1lbnRJ
bmZvIGltYWdlXSk6CisgICAgICAgIC0gQ29tYmluZSBzZXBhcmF0ZSBtZXRob2RzIGludG8gb25l
IHBsYXRmb3JtLXNwZWNpZmljIG1ldGhvZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUXVpY2tMb29r
VGh1bWJuYWlsTG9hZGVyLmg6CisgICAgICAgIC0gTW92ZSBjcm9zcy1wbGF0Zm9ybSBkZWZpbml0
aW9uIHRvIENvY29hSW1nZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9RdWlja0xvb2tUaHVtYm5h
aWxMb2FkZXIubW06CisgICAgICAgIC0gRHJpdmUtYnkgZml4IG9mIHNvZnQtbGlua2luZyBoZWFk
ZXIgaW5jbHVkZSBvcmRlci4KKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgLSBBZGQgQ29jb2FJbWFnZS5oIHRvIHRoZSBwcm9qZWN0LgorICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJ
bk5vZGVIYW5kbGUubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGUg
cmVuZGVyZWRJbWFnZVdpdGhPcHRpb25zOl0pOgorICAgICAgICAoLVtXS1dlYlByb2Nlc3NQbHVn
SW5Ob2RlSGFuZGxlIHJlbmRlcmVkSW1hZ2VXaXRoT3B0aW9uczp3aWR0aDpdKToKKyAgICAgICAg
LSBDb21iaW5lIHNlcGFyYXRlIHBsYXRmb3JtLXNwZWNpZmljIG1ldGhvZHMgaW50byBvbmUgbWV0
aG9kLgorCiAyMDIwLTA0LTIzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAK
ICAgICAgICAgSVBDOjpEZWNvZGVyIHNob3VsZCB1c2UgY3JlYXRlKCkgcGF0dGVybgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL2NvY29hL0NvY29hSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmU0ZmU3OWJl
OGQ5NzBmODVkZDM2MzE0MzQ2ZmZmMDE3ZjI1YTBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoK
KyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW1wb3J0IDx3dGYv
UGxhdGZvcm1Vc2UuaD4KKworI2lmIFVTRShBUFBLSVQpCisKK0BjbGFzcyBOU0ltYWdlOworI2lm
ZGVmIF9fY3BsdXNwbHVzCit1c2luZyBDb2NvYUltYWdlID0gTlNJbWFnZTsKKyNlbHNlCisjZGVm
aW5lIENvY29hSW1hZ2UgTlNJbWFnZQorI2VuZGlmCisKKyNlbHNlCisKK0BjbGFzcyBVSUltYWdl
OworI2lmZGVmIF9fY3BsdXNwbHVzCit1c2luZyBDb2NvYUltYWdlID0gVUlJbWFnZTsKKyNlbHNl
CisjZGVmaW5lIENvY29hSW1hZ2UgVUlJbWFnZQorI2VuZGlmCisKKyNlbmRpZiAvLyBVU0UoQVBQ
S0lUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0K
aW5kZXggYThjYWJjNWY5MDI4ZTQzODM5NzI2MjBmOGM3OTc3ZjE1MDc3Y2YzMC4uZWRiMmRmMmE1
MGVmMDQyNjY4ZDM1OGVjODcwYmJlNTgyMjZiNTg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0
ICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgogI2ltcG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCiAjaW1wb3J0ICJBdHRyaWJ1dGVkU3RyaW5nLmgiCisjaW1wb3J0ICJDb2NvYUltYWdl
LmgiCiAjaW1wb3J0ICJDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJD
b250ZW50QXNTdHJpbmdJbmNsdWRlc0NoaWxkRnJhbWVzLmgiCiAjaW1wb3J0ICJEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oIgpAQCAtOTc5LDggKzk4MCw3IEBAIC0gKHZvaWQpX2V2YWx1YXRlSmF2
YVNjcmlwdDooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjooQk9P
TClhCiAgICAgfSk7CiB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0tICh2b2lkKXRha2VTbmFwc2hv
dFdpdGhDb25maWd1cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29u
ZmlndXJhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0ltYWdlICosIE5TRXJyb3Ig
KikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRp
b246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkKF4pKENvY29hSW1hZ2UgKiwgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcgogewogICAgIENHUmVjdCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSBzbmFwc2hvdENv
bmZpZ3VyYXRpb24gJiYgIUNHUmVjdElzTnVsbChzbmFwc2hvdENvbmZpZ3VyYXRpb24ucmVjdCkg
PyBzbmFwc2hvdENvbmZpZ3VyYXRpb24ucmVjdCA6IHNlbGYuYm91bmRzOwogICAgIENHRmxvYXQg
c25hcHNob3RXaWR0aDsKQEAgLTk5MCw2ICs5OTAsOCBAQCAtICh2b2lkKXRha2VTbmFwc2hvdFdp
dGhDb25maWd1cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmln
dQogICAgICAgICBzbmFwc2hvdFdpZHRoID0gc2VsZi5ib3VuZHMuc2l6ZS53aWR0aDsKIAogICAg
IGF1dG8gaGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7CisKKyNpZiBV
U0UoQVBQS0lUKQogICAgIENHRmxvYXQgaW1hZ2VTY2FsZSA9IHNuYXBzaG90V2lkdGggLyByZWN0
SW5WaWV3Q29vcmRpbmF0ZXMuc2l6ZS53aWR0aDsKICAgICBDR0Zsb2F0IGltYWdlSGVpZ2h0ID0g
aW1hZ2VTY2FsZSAqIHJlY3RJblZpZXdDb29yZGluYXRlcy5zaXplLmhlaWdodDsKIApAQCAtMTAx
MSwzNSArMTAxMywyMyBAQCAtICh2b2lkKXRha2VTbmFwc2hvdFdpdGhDb25maWd1cmF0aW9uOihX
S1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndQogCiAgICAgICAgIGF1dG8g
Yml0bWFwID0gV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSwgV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKICAgICAgICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBiaXRtYXAgPyBiaXRtYXAtPm1ha2VDR0ltYWdlKCkg
OiBudWxscHRyOwotICAgICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbnNJbWFnZSA9IGFkb3B0TlMo
W1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKSBzaXplOk5TTWFr
ZVNpemUoc25hcHNob3RXaWR0aCwgaW1hZ2VIZWlnaHQpXSk7Ci0gICAgICAgIGhhbmRsZXIobnNJ
bWFnZS5nZXQoKSwgbmlsKTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tDb2NvYUlt
YWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKSBzaXplOk5TTWFrZVNpemUo
c25hcHNob3RXaWR0aCwgaW1hZ2VIZWlnaHQpXSk7CisgICAgICAgIGhhbmRsZXIoaW1hZ2UuZ2V0
KCksIG5pbCk7CiAgICAgfSk7Ci19Ci0KLSNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0tICh2
b2lkKXRha2VTbmFwc2hvdFdpdGhDb25maWd1cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlv
biAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShVSUlt
YWdlICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBDR1JlY3QgcmVjdElu
Vmlld0Nvb3JkaW5hdGVzID0gc25hcHNob3RDb25maWd1cmF0aW9uICYmICFDR1JlY3RJc051bGwo
c25hcHNob3RDb25maWd1cmF0aW9uLnJlY3QpID8gc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3Qg
OiBzZWxmLmJvdW5kczsKLSAgICBDR0Zsb2F0IHNuYXBzaG90V2lkdGg7Ci0gICAgaWYgKHNuYXBz
aG90Q29uZmlndXJhdGlvbikKLSAgICAgICAgc25hcHNob3RXaWR0aCA9IHNuYXBzaG90Q29uZmln
dXJhdGlvbi5zbmFwc2hvdFdpZHRoLmRvdWJsZVZhbHVlID86IHJlY3RJblZpZXdDb29yZGluYXRl
cy5zaXplLndpZHRoOwotICAgIGVsc2UKLSAgICAgICAgc25hcHNob3RXaWR0aCA9IHNlbGYuYm91
bmRzLnNpemUud2lkdGg7Ci0KLSAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpOworI2Vsc2UKICAgICBDR0Zsb2F0IGRldmljZVNjYWxlID0gX3BhZ2UtPmRl
dmljZVNjYWxlRmFjdG9yKCk7CiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gc3Ryb25nU2VsZiA9
IHNlbGY7CiAgICAgYXV0byBjYWxsU25hcHNob3RSZWN0ID0gW3N0cm9uZ1NlbGYsIHJlY3RJblZp
ZXdDb29yZGluYXRlcywgc25hcHNob3RXaWR0aCwgZGV2aWNlU2NhbGUsIGhhbmRsZXJdIHsKICAg
ICAgICAgW3N0cm9uZ1NlbGYgX3NuYXBzaG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50
b0ltYWdlT2ZXaWR0aDooc25hcHNob3RXaWR0aCAqIGRldmljZVNjYWxlKSBjb21wbGV0aW9uSGFu
ZGxlcjpbc3Ryb25nU2VsZiwgaGFuZGxlciwgZGV2aWNlU2NhbGVdKENHSW1hZ2VSZWYgc25hcHNo
b3RJbWFnZSkgewogICAgICAgICAgICAgUmV0YWluUHRyPE5TRXJyb3I+IGVycm9yOwotICAgICAg
ICAgICAgUmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2U7CisgICAgICAgICAgICBSZXRhaW5QdHI8
Q29jb2FJbWFnZT4gaW1hZ2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghc25hcHNo
b3RJbWFnZSkKICAgICAgICAgICAgICAgICBlcnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVu
a25vd24pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVpSW1hZ2UgPSBhZG9w
dE5TKFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOnNuYXBzaG90SW1hZ2Ugc2NhbGU6
ZGV2aWNlU2NhbGUgb3JpZW50YXRpb246VUlJbWFnZU9yaWVudGF0aW9uVXBdKTsKKyAgICAgICAg
ICAgICAgICBpbWFnZSA9IGFkb3B0TlMoW1tDb2NvYUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1h
Z2U6c25hcHNob3RJbWFnZSBzY2FsZTpkZXZpY2VTY2FsZSBvcmllbnRhdGlvbjpVSUltYWdlT3Jp
ZW50YXRpb25VcF0pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBoYW5kbGVyKHVpSW1hZ2Uu
Z2V0KCksIGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIGhhbmRsZXIoaW1hZ2UuZ2V0KCksIGVy
cm9yLmdldCgpKTsKICAgICAgICAgfV07CiAgICAgfTsKIApAQCAtMTA1NSw4ICsxMDQ1LDggQEAg
LSAodm9pZCl0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3Vy
YXRpb24gKilzbmFwc2hvdENvbmZpZ3UKICAgICAgICAgfQogICAgICAgICBjYWxsU25hcHNob3RS
ZWN0KCk7CiAgICAgfSk7Ci19CiAjZW5kaWYKK30KIAogLSAodm9pZClzZXRBbGxvd3NCYWNrRm9y
d2FyZE5hdmlnYXRpb25HZXN0dXJlczooQk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25H
ZXN0dXJlcwogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLm1tCmluZGV4IGExNWJkYjE0NzZlZjExYjAw
NGJhN2IyYWRiMDU4NzFiMGQ3MGFkOTUuLjU4ODMzYTVlZGNhZjJhMTU3MGY1MjdhNzc2MTU1YzAw
YTUyMDFkY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQWN0aXZhdGVkRWxlbWVudEluZm8ubW0KQEAgLTI2LDE1ICsyNiwxNCBAQAog
I2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJfV0tBY3RpdmF0ZWRFbGVtZW50SW5mb0ludGVy
bmFsLmgiCiAKKyNpbXBvcnQgIkNvY29hSW1hZ2UuaCIKICNpbXBvcnQgIlNoYXJlYWJsZUJpdG1h
cC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSNpbXBvcnQgPFVJS2l0L1VJSW1hZ2UuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQvTlNJbWFnZS5oPgorI2Vsc2UKKyNp
bXBvcnQgPFVJS2l0L1VJSW1hZ2UuaD4KICNlbmRpZgogCiBAaW1wbGVtZW50YXRpb24gX1dLQWN0
aXZhdGVkRWxlbWVudEluZm8gIHsKQEAgLTQ0LDEyICs0Myw5IEBAIEBpbXBsZW1lbnRhdGlvbiBf
V0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAgewogICAgIFdlYkNvcmU6OkludFBvaW50IF9pbnRlcmFj
dGlvbkxvY2F0aW9uOwogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX0lEOwogICAgIFJlZlB0cjxX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gX2ltYWdlOworICAgIFJldGFpblB0cjxDb2NvYUltYWdl
PiBfY29jb2FJbWFnZTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFJldGFpblB0cjxV
SUltYWdlPiBfdWlJbWFnZTsKICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBfdXNlckluZm87
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPE5TSW1hZ2U+IF9uc0lt
YWdlOwogI2VuZGlmCiAgICAgQk9PTCBfYW5pbWF0ZWRJbWFnZTsKIH0KQEAgLTE1MCwzNiArMTQ2
LDI0IEBAIC0gKE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvCiB7CiAgICAgcmV0dXJuIF91c2VySW5m
by5nZXQoKTsKIH0KLQotLSAoVUlJbWFnZSAqKWltYWdlCi17Ci0gICAgaWYgKF91aUltYWdlKQot
ICAgICAgICByZXR1cm4gW1tfdWlJbWFnZSBjb3B5XSBhdXRvcmVsZWFzZV07Ci0KLSAgICBpZiAo
IV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF91aUltYWdlID0gYWRvcHROUyhb
W1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfaW1hZ2UtPm1ha2VDR0ltYWdlQ29weSgp
LmdldCgpXSk7Ci0gICAgX2ltYWdlID0gbnVsbHB0cjsKLQotICAgIHJldHVybiBbW191aUltYWdl
IGNvcHldIGF1dG9yZWxlYXNlXTsKLX0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotLSAo
TlNJbWFnZSAqKWltYWdlCistIChDb2NvYUltYWdlICopaW1hZ2UKIHsKLSAgICBpZiAoX25zSW1h
Z2UpCi0gICAgICAgIHJldHVybiBbW19uc0ltYWdlIGNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICBp
ZiAoX2NvY29hSW1hZ2UpCisgICAgICAgIHJldHVybiBbW19jb2NvYUltYWdlIGNvcHldIGF1dG9y
ZWxlYXNlXTsKIAogICAgIGlmICghX2ltYWdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
X25zSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9pbWFn
ZS0+bWFrZUNHSW1hZ2VDb3B5KCkuZ2V0KCkgc2l6ZTpOU1NpemVGcm9tQ0dTaXplKF9ib3VuZGlu
Z1JlY3Quc2l6ZSldKTsKKyNpZiBVU0UoQVBQS0lUKQorICAgIF9jb2NvYUltYWdlID0gYWRvcHRO
UyhbW0NvY29hSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfaW1hZ2UtPm1ha2VDR0ltYWdl
Q29weSgpLmdldCgpIHNpemU6TlNTaXplRnJvbUNHU2l6ZShfYm91bmRpbmdSZWN0LnNpemUpXSk7
CisjZWxzZQorICAgIF9jb2NvYUltYWdlID0gYWRvcHROUyhbW0NvY29hSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoQ0dJbWFnZTpfaW1hZ2UtPm1ha2VDR0ltYWdlQ29weSgpLmdldCgpXSk7CisjZW5kaWYK
ICAgICBfaW1hZ2UgPSBudWxscHRyOwogCi0gICAgcmV0dXJuIFtbX25zSW1hZ2UgY29weV0gYXV0
b3JlbGVhc2VdOworICAgIHJldHVybiBbW19jb2NvYUltYWdlIGNvcHldIGF1dG9yZWxlYXNlXTsK
IH0KLSNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9R
dWlja0xvb2tUaHVtYm5haWxMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1F1aWNr
TG9va1RodW1ibmFpbExvYWRlci5oCmluZGV4IGUyNjMwNGNjMGM0ZDIxMzlkZTJiNmMwZTdlNzVm
ZDMwYjg1ZGIxNjMuLjhiMDkwZGYwOGE5YTFhNTUwNmI2OTIwOTc4MzA2YjQ5NjYzMzFlMjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1F1aWNrTG9va1RodW1ibmFpbExvYWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1F1aWNrTG9va1RodW1ibmFpbExvYWRl
ci5oCkBAIC0yNSwxMyArMjUsNyBAQAogCiAjaWYgSEFWRShRVUlDS0xPT0tfVEhVTUJOQUlMSU5H
KQogCi0jaWYgVVNFKEFQUEtJVCkKLUBjbGFzcyBOU0ltYWdlOwotdXNpbmcgQ29jb2FJbWFnZSA9
IE5TSW1hZ2U7Ci0jZWxzZQotQGNsYXNzIFVJSW1hZ2U7Ci11c2luZyBDb2NvYUltYWdlID0gVUlJ
bWFnZTsKLSNlbmRpZgorI2ltcG9ydCAiQ29jb2FJbWFnZS5oIgogCiBAaW50ZXJmYWNlIFdLUUxU
aHVtYm5haWxRdWV1ZU1hbmFnZXIgOiBOU09iamVjdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9RdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9RdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0KaW5kZXggNjk5Njc5ZjdhNjk4
MmQwNDJiNzYxMzRhYTE3NmExN2IwYjE1MmE0Yi4uZTgwMTg4YjkwYjIyZmY2YWE3OTg2MDAzNDNj
YjBjY2NhZTNkNmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUXVpY2tM
b29rVGh1bWJuYWlsTG9hZGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1F1aWNr
TG9va1RodW1ibmFpbExvYWRlci5tbQpAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpZiBIQVZFKFFV
SUNLTE9PS19USFVNQk5BSUxJTkcpCiAKLSNpbXBvcnQgIlF1aWNrTG9va1RodW1ibmFpbGluZ1Nv
ZnRMaW5rLmgiCi0KICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAKKyNpbXBvcnQgIlF1aWNr
TG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmgiCisKIEBpbXBsZW1lbnRhdGlvbiBXS1FMVGh1bWJu
YWlsUXVldWVNYW5hZ2VyIAogCiAtIChpbnN0YW5jZXR5cGUpaW5pdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDJhYmJlYmI2YWY3OGY4
M2IwNzIzMjc4ZjgyZmY3NThkMjFjY2UyMi4uZWZkMjYyMzBiMTg3MmNlMmY5ZGU4OWNkMmJmZDRm
YzJiZTRkNjI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC05MzMsNiArOTMzLDcgQEAKIAkJNDFGQUY1RjUxRTNDMDY0OTAwMUFFNjc4
IC8qIFdlYlJUQ1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUZBRjVGNDFFM0MwNjQxMDAxQUU2NzggLyogV2ViUlRDUmVzb2x2ZXIuaCAq
LzsgfTsKIAkJNDFGQUY1RjgxRTNDMTAyMTAwMUFFNjc4IC8qIExpYldlYlJUQ1Jlc29sdmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBRjVGNjFF
M0MwQjQ3MDAxQUU2NzggLyogTGliV2ViUlRDUmVzb2x2ZXIuaCAqLzsgfTsKIAkJNDQ1OTk4NDIy
MjgzM0U4NzAwRTYxMzczIC8qIFN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ1OTk4NDEyMjgzM0U2MDAw
RTYxMzczIC8qIFN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZS5oICovOyB9OworCQk0NDgyNzM0
NzI0NTI4RjYwMDBBOTU0OTMgLyogQ29jb2FJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4MjczNDYyNDUyOEY2MDAwQTk1NDkzIC8qIENvY29h
SW1hZ2UuaCAqLzsgfTsKIAkJNDQ5RDkwREEyMUZEQzMwQjAwRjY3N0MwIC8qIExvY2FsQXV0aGVu
dGljYXRpb25Tb2Z0TGluay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0OUQ5MEQ4MjFGRDYzRkUwMEY2NzdDMCAvKiBMb2NhbEF1dGhlbnRpY2F0aW9u
U29mdExpbmsubW0gKi87IH07CiAJCTQ0RTkzNkZEMjQ0N0MyRDgwMDlGQTNFMyAvKiBMZWdhY3lD
dXN0b21Qcm90b2NvbElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NEU5MzZGQzI0NDdDMjU2MDA5RkEzRTMgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xJ
RC5oICovOyB9OwogCQk0NjBGNDg4RjFGOTk2RjcxMDBDRjRCODcgLyogV2ViU1dDb250ZXh0TWFu
YWdlckNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDYwRjQ4OEQxRjk5NkY2QzAwQ0Y0Qjg3IC8qIFdlYlNX
Q29udGV4dE1hbmFnZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTM1
MjQsNiArMzUyNSw3IEBACiAJCTQxRkNENkJGMjNDRTA0NDAwMEM2MjU2NyAvKiBSZW1vdGVTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ1MEFFQkYxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1l
bW9yeUNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJl
ZE1lbW9yeUNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ1OTk4NDEy
MjgzM0U2MDAwRTYxMzczIC8qIFN5bnRoZXRpY0VkaXRpbmdDb21tYW5kVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTeW50aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDQ4MjczNDYyNDUyOEY2MDAwQTk1NDkzIC8qIENvY29hSW1hZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29jb2FJbWFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NDlEOTBEODIxRkQ2M0ZFMDBGNjc3QzAgLyogTG9jYWxBdXRoZW50
aWNhdGlvblNvZnRMaW5rLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NEE0ODFDNjIxRjJEMjdCMDBGMkY5MTkgLyogQ2xpZW50Q2VydGlmaWNhdGVBdXRo
ZW50aWNhdGlvblhQQ0NvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGllbnRDZXJ0
aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDRFOTM2RkMyNDQ3QzI1NjAwOUZBM0UzIC8qIExlZ2FjeUN1c3RvbVByb3Rv
Y29sSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5Q3VzdG9tUHJv
dG9jb2xJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY4Niw2ICs3Njg4LDcg
QEAKIAkJNDQ1MEFFQkUxREMzRkFBQzAwOTk0M0YyIC8qIGNvY29hICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0NDgyNzM0NjI0NTI4RjYwMDBBOTU0OTMg
LyogQ29jb2FJbWFnZS5oICovLAogCQkJCUJDRTA5Mzc2MTRGQjEyOEIwMDExMzhEOSAvKiBMYXll
ckhvc3RpbmdDb250ZXh0LmggKi8sCiAJCQkJQkNFMDkzNzUxNEZCMTI4QjAwMTEzOEQ5IC8qIExh
eWVySG9zdGluZ0NvbnRleHQubW0gKi8sCiAJCQkJQTE3OThCM0QyMjJEOTdBMjAwMDc2NEJEIC8q
IFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyLmggKi8sCkBAIC0xMDczNyw2ICsxMDc0MCw3
IEBACiAJCQkJMzdDNEU5RjYxMzFDNkU3RTAwMjlCRDVBIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwMzJEQUIxMEY0MzdEMTAwNThDMTVBIC8qIENvbm5lY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNBMDUzOTc5MjNFRTMyNDQwMEE1NTNEQyAvKiBDb250ZW50QXNTdHJpbmdJ
bmNsdWRlc0NoaWxkRnJhbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NDgyNzM0NzI0NTI4RjYw
MDBBOTU0OTMgLyogQ29jb2FJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0EwNTM5NzcyM0VF
MzFFMTAwQTU1M0RDIC8qIENvbnRlbnRBc1N0cmluZ0luY2x1ZGVzQ2hpbGRGcmFtZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMjlFQjEyMjNEMERFN0IwMEFGMUNENyAvKiBDb250ZW50V29ybGRT
aGFyZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDZEN0M0MThCREJFNzMwMDBBQjE2NiAvKiBD
b250ZXh0TWVudUNvbnRleHREYXRhLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNz
UGx1Z0luTm9kZUhhbmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luTm9kZUhhbmRsZS5tbQppbmRleCBiODg2
YWNjYWQxZGUzOGMwZjdjNGQ0M2Y5NDFkOWE3ZTk0OTJhNWVlLi5lOWEzZTJlMjhiZDExYzc0MWQz
NmI5NmYwNmI1Mzg4NDdlMzhmYWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2Nv
YS9XS1dlYlByb2Nlc3NQbHVnSW5Ob2RlSGFuZGxlLm1tCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRl
cm5hbC5oIgogCisjaW1wb3J0ICJDb2NvYUltYWdlLmgiCiAjaW1wb3J0ICJXS1NoYXJlZEFQSUNh
c3QuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lSW50ZXJuYWwuaCIKICNpbXBv
cnQgPFdlYkNvcmUvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaD4KQEAgLTU0LDEzICs1NSwx
MiBAQCAtIChXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSAqKWh0bWxJRnJhbWVFbGVtZW50Q29udGVu
dEZyYW1lCiAgICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihfbm9kZUhhbmRsZS0+aHRtbElGcmFt
ZUVsZW1lbnRDb250ZW50RnJhbWUoKSk7CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
LSAoVUlJbWFnZSAqKXJlbmRlcmVkSW1hZ2VXaXRoT3B0aW9uczooV0tTbmFwc2hvdE9wdGlvbnMp
b3B0aW9ucworLSAoQ29jb2FJbWFnZSAqKXJlbmRlcmVkSW1hZ2VXaXRoT3B0aW9uczooV0tTbmFw
c2hvdE9wdGlvbnMpb3B0aW9ucwogewogICAgIHJldHVybiBbc2VsZiByZW5kZXJlZEltYWdlV2l0
aE9wdGlvbnM6b3B0aW9ucyB3aWR0aDpuaWxdOwogfQogCi0tIChVSUltYWdlICopcmVuZGVyZWRJ
bWFnZVdpdGhPcHRpb25zOihXS1NuYXBzaG90T3B0aW9ucylvcHRpb25zIHdpZHRoOihOU051bWJl
ciAqKXdpZHRoCistIChDb2NvYUltYWdlICopcmVuZGVyZWRJbWFnZVdpdGhPcHRpb25zOihXS1Nu
YXBzaG90T3B0aW9ucylvcHRpb25zIHdpZHRoOihOU051bWJlciAqKXdpZHRoCiB7CiAgICAgT3B0
aW9uYWw8ZmxvYXQ+IG9wdGlvbmFsV2lkdGg7CiAgICAgaWYgKHdpZHRoKQpAQCAtNzAsMjkgKzcw
LDEyIEBAIC0gKFVJSW1hZ2UgKilyZW5kZXJlZEltYWdlV2l0aE9wdGlvbnM6KFdLU25hcHNob3RP
cHRpb25zKW9wdGlvbnMgd2lkdGg6KE5TTnVtYmVyCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1h
Z2U6aW1hZ2UtPmJpdG1hcCgpLm1ha2VDR0ltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKLX0K
KyNpZiBVU0UoQVBQS0lUKQorICAgIHJldHVybiBbW1tDb2NvYUltYWdlIGFsbG9jXSBpbml0V2l0
aENHSW1hZ2U6aW1hZ2UtPmJpdG1hcCgpLm1ha2VDR0ltYWdlKCkuZ2V0KCkgc2l6ZTpOU1plcm9T
aXplXSBhdXRvcmVsZWFzZV07CisjZWxzZQorICAgIHJldHVybiBbW1tDb2NvYUltYWdlIGFsbG9j
XSBpbml0V2l0aENHSW1hZ2U6aW1hZ2UtPmJpdG1hcCgpLm1ha2VDR0ltYWdlKCkuZ2V0KCldIGF1
dG9yZWxlYXNlXTsKICNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotLSAoTlNJbWFnZSAqKXJl
bmRlcmVkSW1hZ2VXaXRoT3B0aW9uczooV0tTbmFwc2hvdE9wdGlvbnMpb3B0aW9ucwotewotICAg
IHJldHVybiBbc2VsZiByZW5kZXJlZEltYWdlV2l0aE9wdGlvbnM6b3B0aW9ucyB3aWR0aDpuaWxd
OwotfQotCi0tIChOU0ltYWdlICopcmVuZGVyZWRJbWFnZVdpdGhPcHRpb25zOihXS1NuYXBzaG90
T3B0aW9ucylvcHRpb25zIHdpZHRoOihOU051bWJlciAqKXdpZHRoCi17Ci0gICAgT3B0aW9uYWw8
ZmxvYXQ+IG9wdGlvbmFsV2lkdGg7Ci0gICAgaWYgKHdpZHRoKQotICAgICAgICBvcHRpb25hbFdp
ZHRoID0gd2lkdGguZmxvYXRWYWx1ZTsKLQotICAgIFJlZlB0cjxXZWJLaXQ6OldlYkltYWdlPiBp
bWFnZSA9IF9ub2RlSGFuZGxlLT5yZW5kZXJlZEltYWdlKFdlYktpdDo6dG9TbmFwc2hvdE9wdGlv
bnMob3B0aW9ucyksIG9wdGlvbnMgJiBrV0tTbmFwc2hvdE9wdGlvbnNFeGNsdWRlT3ZlcmZsb3cs
IG9wdGlvbmFsV2lkdGgpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICByZXR1cm4gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmltYWdlLT5iaXRt
YXAoKS5tYWtlQ0dJbWFnZSgpLmdldCgpIHNpemU6TlNaZXJvU2l6ZV0gYXV0b3JlbGVhc2VdOwog
fQotI2VuZGlmCiAKIC0gKENHUmVjdCllbGVtZW50Qm91bmRzCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397480</attachid>
            <date>2020-04-24 12:04:50 -0700</date>
            <delta_ts>2020-04-24 14:02:52 -0700</delta_ts>
            <desc>Patch v2 (land safely after EWS)</desc>
            <filename>bug-210974-20200424120652.patch</filename>
            <type>text/plain</type>
            <size>17469</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkxMjUwNTMyN2VkYWIxYmU3
MzM1ZjM2OGRhMDdhZTI5YzRiYjM2YzguLmVkODViYjIxODA0NzlhMjExM2Q0Y2YyN2FjOTZjMjdl
NzUwNzkxN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjAtMDQtMjQgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgQ29jb2FJbWFnZSBwbGF0
Zm9ybSBhYnN0cmFjdGlvbiBmb3IgTlNJbWFnZS9VSUltYWdlCisgICAgICAgIDxodHRwczovL3dl
YmtpdC5vcmcvYi8yMTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgKiBQbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLmg6IEFkZC4KKyAgICAgICAgLSBE
ZWZpbmUgQ29jb2FJbWFnZSBoZXJlIGZvciBjcm9zcy1wbGF0Zm9ybSB1c2UuICBEb24ndCB1c2UK
KyAgICAgICAgICBPQkpDX0NMQVNTKCkgaGVyZSBiZWNhdXNlIHRoaXMgaXMgYW4gT2JqZWN0aXZl
LUMgaGVhZGVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgIC0gQ29tYmluZSBzZXBhcmF0ZSBwbGF0Zm9ybS1zcGVj
aWZpYyBtZXRob2RzIGludG8gb25lIG1ldGhvZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLm1tOgorICAgICAgICAtIENvbWJpbmUgc2VwYXJh
dGUgcGxhdGZvcm0tc3BlY2lmaWMgaW5zdGFuY2UgdmFyaWFibGVzIGludG8KKyAgICAgICAgICBv
bmUgaW5zdGFuY2UgdmFyaWFibGUuCisgICAgICAgICgtW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZv
IGltYWdlXSk6CisgICAgICAgIC0gQ29tYmluZSBzZXBhcmF0ZSBtZXRob2RzIGludG8gb25lIHBs
YXRmb3JtLXNwZWNpZmljIG1ldGhvZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvUXVpY2tMb29rVGh1
bWJuYWlsTG9hZGVyLmg6CisgICAgICAgIC0gTW92ZSBjcm9zcy1wbGF0Zm9ybSBkZWZpbml0aW9u
IHRvIENvY29hSW1nZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9RdWlja0xvb2tUaHVtYm5haWxM
b2FkZXIubW06CisgICAgICAgIC0gRHJpdmUtYnkgZml4IG9mIHNvZnQtbGlua2luZyBoZWFkZXIg
aW5jbHVkZSBvcmRlci4KKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgLSBBZGQgQ29jb2FJbWFnZS5oIHRvIHRoZSBwcm9qZWN0LgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbk5v
ZGVIYW5kbGUubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGUgcmVu
ZGVyZWRJbWFnZVdpdGhPcHRpb25zOl0pOgorICAgICAgICAoLVtXS1dlYlByb2Nlc3NQbHVnSW5O
b2RlSGFuZGxlIHJlbmRlcmVkSW1hZ2VXaXRoT3B0aW9uczp3aWR0aDpdKToKKyAgICAgICAgLSBD
b21iaW5lIHNlcGFyYXRlIHBsYXRmb3JtLXNwZWNpZmljIG1ldGhvZHMgaW50byBvbmUgbWV0aG9k
LgorCiAyMDIwLTA0LTIzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAg
ICAgICAgSVBDOjpEZWNvZGVyIHNob3VsZCB1c2UgY3JlYXRlKCkgcGF0dGVybgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL2NvY29hL0NvY29hSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yY2FiNzVjYWRlYTQ3
ZGM3NTUwMzEwMmUyYTJhMjhjNWJiMmM4MTcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9jb2NvYS9Db2NvYUltYWdlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWYgVVNFKEFQUEtJVCkK
K0BjbGFzcyBOU0ltYWdlOwordXNpbmcgQ29jb2FJbWFnZSA9IE5TSW1hZ2U7CisjZWxzZQorQGNs
YXNzIFVJSW1hZ2U7Cit1c2luZyBDb2NvYUltYWdlID0gVUlJbWFnZTsKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggYThjYWJj
NWY5MDI4ZTQzODM5NzI2MjBmOGM3OTc3ZjE1MDc3Y2YzMC4uYmYzNjEyYmY3ODhiZTkxMzczM2Fi
ZGVjMTMzZDllOThmYjBlN2ZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJBUElQYWdlQ29u
ZmlndXJhdGlvbi5oIgogI2ltcG9ydCAiQVBJU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW1w
b3J0ICJBdHRyaWJ1dGVkU3RyaW5nLmgiCisjaW1wb3J0ICJDb2NvYUltYWdlLmgiCiAjaW1wb3J0
ICJDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmgiCiAjaW1wb3J0ICJDb250ZW50QXNTdHJp
bmdJbmNsdWRlc0NoaWxkRnJhbWVzLmgiCiAjaW1wb3J0ICJEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oIgpAQCAtOTc5LDggKzk4MCw3IEBAIC0gKHZvaWQpX2V2YWx1YXRlSmF2YVNjcmlwdDooTlNT
dHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGFzQXN5bmNGdW5jdGlvbjooQk9PTClhCiAgICAgfSk7
CiB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0tICh2b2lkKXRha2VTbmFwc2hvdFdpdGhDb25maWd1
cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndXJhdGlvbiBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0ltYWdlICosIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXIKKy0gKHZvaWQpdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246KFdLU25hcHNo
b3RDb25maWd1cmF0aW9uICopc25hcHNob3RDb25maWd1cmF0aW9uIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKENvY29hSW1hZ2UgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewog
ICAgIENHUmVjdCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSBzbmFwc2hvdENvbmZpZ3VyYXRpb24g
JiYgIUNHUmVjdElzTnVsbChzbmFwc2hvdENvbmZpZ3VyYXRpb24ucmVjdCkgPyBzbmFwc2hvdENv
bmZpZ3VyYXRpb24ucmVjdCA6IHNlbGYuYm91bmRzOwogICAgIENHRmxvYXQgc25hcHNob3RXaWR0
aDsKQEAgLTk5MCw2ICs5OTAsOCBAQCAtICh2b2lkKXRha2VTbmFwc2hvdFdpdGhDb25maWd1cmF0
aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndQogICAgICAgICBz
bmFwc2hvdFdpZHRoID0gc2VsZi5ib3VuZHMuc2l6ZS53aWR0aDsKIAogICAgIGF1dG8gaGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7CisKKyNpZiBVU0UoQVBQS0lUKQog
ICAgIENHRmxvYXQgaW1hZ2VTY2FsZSA9IHNuYXBzaG90V2lkdGggLyByZWN0SW5WaWV3Q29vcmRp
bmF0ZXMuc2l6ZS53aWR0aDsKICAgICBDR0Zsb2F0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTY2FsZSAq
IHJlY3RJblZpZXdDb29yZGluYXRlcy5zaXplLmhlaWdodDsKIApAQCAtMTAxMSwzNSArMTAxMywy
MyBAQCAtICh2b2lkKXRha2VTbmFwc2hvdFdpdGhDb25maWd1cmF0aW9uOihXS1NuYXBzaG90Q29u
ZmlndXJhdGlvbiAqKXNuYXBzaG90Q29uZmlndQogCiAgICAgICAgIGF1dG8gYml0bWFwID0gV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZUhhbmRsZSwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKICAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNnSW1hZ2UgPSBiaXRtYXAgPyBiaXRtYXAtPm1ha2VDR0ltYWdlKCkgOiBudWxscHRyOwot
ICAgICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gbnNJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFs
bG9jXSBpbml0V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKSBzaXplOk5TTWFrZVNpemUoc25hcHNo
b3RXaWR0aCwgaW1hZ2VIZWlnaHQpXSk7Ci0gICAgICAgIGhhbmRsZXIobnNJbWFnZS5nZXQoKSwg
bmlsKTsKKyAgICAgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6Y2dJbWFnZS5nZXQoKSBzaXplOk5TTWFrZVNpemUoc25hcHNob3RXaWR0aCwg
aW1hZ2VIZWlnaHQpXSk7CisgICAgICAgIGhhbmRsZXIoaW1hZ2UuZ2V0KCksIG5pbCk7CiAgICAg
fSk7Ci19Ci0KLSNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0tICh2b2lkKXRha2VTbmFwc2hv
dFdpdGhDb25maWd1cmF0aW9uOihXS1NuYXBzaG90Q29uZmlndXJhdGlvbiAqKXNuYXBzaG90Q29u
ZmlndXJhdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShVSUltYWdlICosIE5TRXJyb3Ig
KikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBDR1JlY3QgcmVjdEluVmlld0Nvb3JkaW5hdGVz
ID0gc25hcHNob3RDb25maWd1cmF0aW9uICYmICFDR1JlY3RJc051bGwoc25hcHNob3RDb25maWd1
cmF0aW9uLnJlY3QpID8gc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3QgOiBzZWxmLmJvdW5kczsK
LSAgICBDR0Zsb2F0IHNuYXBzaG90V2lkdGg7Ci0gICAgaWYgKHNuYXBzaG90Q29uZmlndXJhdGlv
bikKLSAgICAgICAgc25hcHNob3RXaWR0aCA9IHNuYXBzaG90Q29uZmlndXJhdGlvbi5zbmFwc2hv
dFdpZHRoLmRvdWJsZVZhbHVlID86IHJlY3RJblZpZXdDb29yZGluYXRlcy5zaXplLndpZHRoOwot
ICAgIGVsc2UKLSAgICAgICAgc25hcHNob3RXaWR0aCA9IHNlbGYuYm91bmRzLnNpemUud2lkdGg7
Ci0KLSAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOwor
I2Vsc2UKICAgICBDR0Zsb2F0IGRldmljZVNjYWxlID0gX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9y
KCk7CiAgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gc3Ryb25nU2VsZiA9IHNlbGY7CiAgICAgYXV0
byBjYWxsU25hcHNob3RSZWN0ID0gW3N0cm9uZ1NlbGYsIHJlY3RJblZpZXdDb29yZGluYXRlcywg
c25hcHNob3RXaWR0aCwgZGV2aWNlU2NhbGUsIGhhbmRsZXJdIHsKICAgICAgICAgW3N0cm9uZ1Nl
bGYgX3NuYXBzaG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0aDoo
c25hcHNob3RXaWR0aCAqIGRldmljZVNjYWxlKSBjb21wbGV0aW9uSGFuZGxlcjpbc3Ryb25nU2Vs
ZiwgaGFuZGxlciwgZGV2aWNlU2NhbGVdKENHSW1hZ2VSZWYgc25hcHNob3RJbWFnZSkgewogICAg
ICAgICAgICAgUmV0YWluUHRyPE5TRXJyb3I+IGVycm9yOwotICAgICAgICAgICAgUmV0YWluUHRy
PFVJSW1hZ2U+IHVpSW1hZ2U7CisgICAgICAgICAgICBSZXRhaW5QdHI8VUlJbWFnZT4gaW1hZ2U7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghc25hcHNob3RJbWFnZSkKICAgICAgICAg
ICAgICAgICBlcnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHVpSW1hZ2UgPSBhZG9wdE5TKFtbVUlJbWFnZSBhbGxv
Y10gaW5pdFdpdGhDR0ltYWdlOnNuYXBzaG90SW1hZ2Ugc2NhbGU6ZGV2aWNlU2NhbGUgb3JpZW50
YXRpb246VUlJbWFnZU9yaWVudGF0aW9uVXBdKTsKKyAgICAgICAgICAgICAgICBpbWFnZSA9IGFk
b3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6c25hcHNob3RJbWFnZSBzY2Fs
ZTpkZXZpY2VTY2FsZSBvcmllbnRhdGlvbjpVSUltYWdlT3JpZW50YXRpb25VcF0pOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBoYW5kbGVyKHVpSW1hZ2UuZ2V0KCksIGVycm9yLmdldCgpKTsK
KyAgICAgICAgICAgIGhhbmRsZXIoaW1hZ2UuZ2V0KCksIGVycm9yLmdldCgpKTsKICAgICAgICAg
fV07CiAgICAgfTsKIApAQCAtMTA1NSw4ICsxMDQ1LDggQEAgLSAodm9pZCl0YWtlU25hcHNob3RX
aXRoQ29uZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZp
Z3UKICAgICAgICAgfQogICAgICAgICBjYWxsU25hcHNob3RSZWN0KCk7CiAgICAgfSk7Ci19CiAj
ZW5kaWYKK30KIAogLSAodm9pZClzZXRBbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJl
czooQk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcwogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FjdGl2YXRlZEVsZW1lbnRJ
bmZvLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0FjdGl2YXRlZEVs
ZW1lbnRJbmZvLm1tCmluZGV4IGExNWJkYjE0NzZlZjExYjAwNGJhN2IyYWRiMDU4NzFiMGQ3MGFk
OTUuLmY1NjI0NTgzOGZkNzkxMjEzNDkzMzJhM2M3NTBkMjRmZDk2NWY4NjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBY3RpdmF0ZWRFbGVtZW50SW5m
by5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQWN0aXZhdGVk
RWxlbWVudEluZm8ubW0KQEAgLTI2LDE1ICsyNiwxNCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJfV0tBY3RpdmF0ZWRFbGVtZW50SW5mb0ludGVybmFsLmgiCiAKKyNpbXBvcnQgIkNv
Y29hSW1hZ2UuaCIKICNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbXBvcnQgPFVJS2l0L1VJ
SW1hZ2UuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShBUFBLSVQpCiAj
aW1wb3J0IDxBcHBLaXQvTlNJbWFnZS5oPgorI2Vsc2UKKyNpbXBvcnQgPFVJS2l0L1VJSW1hZ2Uu
aD4KICNlbmRpZgogCiBAaW1wbGVtZW50YXRpb24gX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gIHsK
QEAgLTQ0LDEyICs0Myw5IEBAIEBpbXBsZW1lbnRhdGlvbiBfV0tBY3RpdmF0ZWRFbGVtZW50SW5m
byAgewogICAgIFdlYkNvcmU6OkludFBvaW50IF9pbnRlcmFjdGlvbkxvY2F0aW9uOwogICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX0lEOwogICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cD4gX2ltYWdlOworICAgIFJldGFpblB0cjxDb2NvYUltYWdlPiBfY29jb2FJbWFnZTsKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIFJldGFpblB0cjxVSUltYWdlPiBfdWlJbWFnZTsKICAg
ICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBfdXNlckluZm87Ci0jZW5kaWYKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgUmV0YWluUHRyPE5TSW1hZ2U+IF9uc0ltYWdlOwogI2VuZGlmCiAgICAgQk9P
TCBfYW5pbWF0ZWRJbWFnZTsKIH0KQEAgLTE1MCwzNiArMTQ2LDI0IEBAIC0gKE5TRGljdGlvbmFy
eSAqKXVzZXJJbmZvCiB7CiAgICAgcmV0dXJuIF91c2VySW5mby5nZXQoKTsKIH0KLQotLSAoVUlJ
bWFnZSAqKWltYWdlCi17Ci0gICAgaWYgKF91aUltYWdlKQotICAgICAgICByZXR1cm4gW1tfdWlJ
bWFnZSBjb3B5XSBhdXRvcmVsZWFzZV07Ci0KLSAgICBpZiAoIV9pbWFnZSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIF91aUltYWdlID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRX
aXRoQ0dJbWFnZTpfaW1hZ2UtPm1ha2VDR0ltYWdlQ29weSgpLmdldCgpXSk7Ci0gICAgX2ltYWdl
ID0gbnVsbHB0cjsKLQotICAgIHJldHVybiBbW191aUltYWdlIGNvcHldIGF1dG9yZWxlYXNlXTsK
LX0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQotLSAoTlNJbWFnZSAqKWltYWdlCistIChD
b2NvYUltYWdlICopaW1hZ2UKIHsKLSAgICBpZiAoX25zSW1hZ2UpCi0gICAgICAgIHJldHVybiBb
W19uc0ltYWdlIGNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoX2NvY29hSW1hZ2UpCisgICAg
ICAgIHJldHVybiBbW19jb2NvYUltYWdlIGNvcHldIGF1dG9yZWxlYXNlXTsKIAogICAgIGlmICgh
X2ltYWdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgX25zSW1hZ2UgPSBhZG9wdE5TKFtb
TlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9pbWFnZS0+bWFrZUNHSW1hZ2VDb3B5KCku
Z2V0KCkgc2l6ZTpOU1NpemVGcm9tQ0dTaXplKF9ib3VuZGluZ1JlY3Quc2l6ZSldKTsKKyNpZiBV
U0UoQVBQS0lUKQorICAgIF9jb2NvYUltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoQ0dJbWFnZTpfaW1hZ2UtPm1ha2VDR0ltYWdlQ29weSgpLmdldCgpIHNpemU6TlNTaXpl
RnJvbUNHU2l6ZShfYm91bmRpbmdSZWN0LnNpemUpXSk7CisjZWxzZQorICAgIF9jb2NvYUltYWdl
ID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfaW1hZ2UtPm1ha2VD
R0ltYWdlQ29weSgpLmdldCgpXSk7CisjZW5kaWYKICAgICBfaW1hZ2UgPSBudWxscHRyOwogCi0g
ICAgcmV0dXJuIFtbX25zSW1hZ2UgY29weV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW19j
b2NvYUltYWdlIGNvcHldIGF1dG9yZWxlYXNlXTsKIH0KLSNlbmRpZgogCiBAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9RdWlja0xvb2tUaHVtYm5haWxMb2FkZXIuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1F1aWNrTG9va1RodW1ibmFpbExvYWRlci5oCmluZGV4
IGUyNjMwNGNjMGM0ZDIxMzlkZTJiNmMwZTdlNzVmZDMwYjg1ZGIxNjMuLjhiMDkwZGYwOGE5YTFh
NTUwNmI2OTIwOTc4MzA2YjQ5NjYzMzFlMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1F1aWNrTG9va1RodW1ibmFpbExvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1F1aWNrTG9va1RodW1ibmFpbExvYWRlci5oCkBAIC0yNSwxMyArMjUsNyBAQAogCiAj
aWYgSEFWRShRVUlDS0xPT0tfVEhVTUJOQUlMSU5HKQogCi0jaWYgVVNFKEFQUEtJVCkKLUBjbGFz
cyBOU0ltYWdlOwotdXNpbmcgQ29jb2FJbWFnZSA9IE5TSW1hZ2U7Ci0jZWxzZQotQGNsYXNzIFVJ
SW1hZ2U7Ci11c2luZyBDb2NvYUltYWdlID0gVUlJbWFnZTsKLSNlbmRpZgorI2ltcG9ydCAiQ29j
b2FJbWFnZS5oIgogCiBAaW50ZXJmYWNlIFdLUUxUaHVtYm5haWxRdWV1ZU1hbmFnZXIgOiBOU09i
amVjdAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9RdWlja0xvb2tUaHVt
Ym5haWxMb2FkZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9RdWlja0xvb2tUaHVtYm5h
aWxMb2FkZXIubW0KaW5kZXggNjk5Njc5ZjdhNjk4MmQwNDJiNzYxMzRhYTE3NmExN2IwYjE1MmE0
Yi4uZTgwMTg4YjkwYjIyZmY2YWE3OTg2MDAzNDNjYjBjY2NhZTNkNmU2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUXVpY2tMb29rVGh1bWJuYWlsTG9hZGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1F1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbQpAQCAt
MjgsMTAgKzI4LDEwIEBACiAKICNpZiBIQVZFKFFVSUNLTE9PS19USFVNQk5BSUxJTkcpCiAKLSNp
bXBvcnQgIlF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmgiCi0KICNpbXBvcnQgPHd0Zi9G
aWxlU3lzdGVtLmg+CiAKKyNpbXBvcnQgIlF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmgi
CisKIEBpbXBsZW1lbnRhdGlvbiBXS1FMVGh1bWJuYWlsUXVldWVNYW5hZ2VyIAogCiAtIChpbnN0
YW5jZXR5cGUpaW5pdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMDJhYmJlYmI2YWY3OGY4M2IwNzIzMjc4ZjgyZmY3NThkMjFjY2UyMi4u
ZGU5NDMzZGRmYTFlOTNkNzNhMGVkYjQzOGNlMDFlOTZmMWVjZDFiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzMsNiArOTMzLDcg
QEAKIAkJNDFGQUY1RjUxRTNDMDY0OTAwMUFFNjc4IC8qIFdlYlJUQ1Jlc29sdmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBRjVGNDFFM0MwNjQx
MDAxQUU2NzggLyogV2ViUlRDUmVzb2x2ZXIuaCAqLzsgfTsKIAkJNDFGQUY1RjgxRTNDMTAyMTAw
MUFFNjc4IC8qIExpYldlYlJUQ1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUZBRjVGNjFFM0MwQjQ3MDAxQUU2NzggLyogTGliV2ViUlRD
UmVzb2x2ZXIuaCAqLzsgfTsKIAkJNDQ1OTk4NDIyMjgzM0U4NzAwRTYxMzczIC8qIFN5bnRoZXRp
Y0VkaXRpbmdDb21tYW5kVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQ1OTk4NDEyMjgzM0U2MDAwRTYxMzczIC8qIFN5bnRoZXRpY0VkaXRpbmdD
b21tYW5kVHlwZS5oICovOyB9OworCQk0NDgyNzM0NzI0NTI4RjYwMDBBOTU0OTMgLyogQ29jb2FJ
bWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4
MjczNDYyNDUyOEY2MDAwQTk1NDkzIC8qIENvY29hSW1hZ2UuaCAqLzsgfTsKIAkJNDQ5RDkwREEy
MUZEQzMwQjAwRjY3N0MwIC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OUQ5MEQ4MjFGRDYzRkUw
MEY2NzdDMCAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsubW0gKi87IH07CiAJCTQ0RTkz
NkZEMjQ0N0MyRDgwMDlGQTNFMyAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbElELmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEU5MzZGQzI0NDdDMjU2MDA5
RkEzRTMgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRC5oICovOyB9OwogCQk0NjBGNDg4RjFGOTk2
RjcxMDBDRjRCODcgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDYw
RjQ4OEQxRjk5NkY2QzAwQ0Y0Qjg3IC8qIFdlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTM1MjQsNiArMzUyNSw3IEBACiAJCTQxRkNENkJG
MjNDRTA0NDAwMEM2MjU2NyAvKiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ1MEFF
QkYxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1lbW9yeUNvY29hLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZE1lbW9yeUNvY29hLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ1OTk4NDEyMjgzM0U2MDAwRTYxMzczIC8qIFN5bnRoZXRp
Y0VkaXRpbmdDb21tYW5kVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50aGV0aWNFZGl0aW5nQ29t
bWFuZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDQ4MjczNDYyNDUyOEY2
MDAwQTk1NDkzIC8qIENvY29hSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29jb2FJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDlEOTBEODIx
RkQ2M0ZFMDBGNjc3QzAgLyogTG9jYWxBdXRoZW50aWNhdGlvblNvZnRMaW5rLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9jYWxBdXRoZW50aWNhdGlvblNvZnRM
aW5rLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEE0ODFDNjIxRjJEMjdCMDBG
MkY5MTkgLyogQ2xpZW50Q2VydGlmaWNhdGVBdXRoZW50aWNhdGlvblhQQ0NvbnN0YW50cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDbGllbnRDZXJ0aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29u
c3RhbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRFOTM2RkMyNDQ3QzI1
NjAwOUZBM0UzIC8qIExlZ2FjeUN1c3RvbVByb3RvY29sSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGVnYWN5Q3VzdG9tUHJvdG9jb2xJRC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzY4Niw2ICs3Njg4LDcgQEAKIAkJNDQ1MEFFQkUxREMzRkFBQzAwOTk0
M0YyIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0NDgyNzM0NjI0NTI4RjYwMDBBOTU0OTMgLyogQ29jb2FJbWFnZS5oICovLAogCQkJCUJD
RTA5Mzc2MTRGQjEyOEIwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0LmggKi8sCiAJCQkJ
QkNFMDkzNzUxNEZCMTI4QjAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gKi8sCiAJ
CQkJQTE3OThCM0QyMjJEOTdBMjAwMDc2NEJEIC8qIFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2Vu
dGVyLmggKi8sCkBAIC0xMDczMiw2ICsxMDczNSw3IEBACiAJCQkJNDE4OTdFREExRjQxNUQ4QTAw
MTZGQTQyIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTdCNEI0NjAyMEI1MDRBQzAwRDRBRDc5IC8qIENsaWVudENlcnRpZmljYXRlQXV0
aGVudGljYXRpb25YUENDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0ODI3MzQ3MjQ1
MjhGNjAwMEE5NTQ5MyAvKiBDb2NvYUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTExQUQ1
MjFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
QkVDNEUxMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzN0M0RTlGNjEzMUM2RTdFMDAyOUJENUEgLyogY29uZmlnLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luTm9kZUhhbmRsZS5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9j
ZXNzUGx1Z0luTm9kZUhhbmRsZS5tbQppbmRleCBiODg2YWNjYWQxZGUzOGMwZjdjNGQ0M2Y5NDFk
OWE3ZTk0OTJhNWVlLi45YjA5NGJlZDA1ODFiZmViNTJlZjZiMjEyOTA3MDU4MDI5NTRhM2JhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0Nv
Y29hL1dLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGUubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5Ob2Rl
SGFuZGxlLm1tCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQg
IldLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5hbC5oIgogCisjaW1wb3J0ICJDb2Nv
YUltYWdlLmgiCiAjaW1wb3J0ICJXS1NoYXJlZEFQSUNhc3QuaCIKICNpbXBvcnQgIldLV2ViUHJv
Y2Vzc1BsdWdJbkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuaD4KQEAgLTU0LDEzICs1NSwxMiBAQCAtIChXS1dlYlByb2Nlc3NQbHVn
SW5GcmFtZSAqKWh0bWxJRnJhbWVFbGVtZW50Q29udGVudEZyYW1lCiAgICAgcmV0dXJuIFdlYktp
dDo6d3JhcHBlcihfbm9kZUhhbmRsZS0+aHRtbElGcmFtZUVsZW1lbnRDb250ZW50RnJhbWUoKSk7
CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotLSAoVUlJbWFnZSAqKXJlbmRlcmVkSW1h
Z2VXaXRoT3B0aW9uczooV0tTbmFwc2hvdE9wdGlvbnMpb3B0aW9ucworLSAoQ29jb2FJbWFnZSAq
KXJlbmRlcmVkSW1hZ2VXaXRoT3B0aW9uczooV0tTbmFwc2hvdE9wdGlvbnMpb3B0aW9ucwogewog
ICAgIHJldHVybiBbc2VsZiByZW5kZXJlZEltYWdlV2l0aE9wdGlvbnM6b3B0aW9ucyB3aWR0aDpu
aWxdOwogfQogCi0tIChVSUltYWdlICopcmVuZGVyZWRJbWFnZVdpdGhPcHRpb25zOihXS1NuYXBz
aG90T3B0aW9ucylvcHRpb25zIHdpZHRoOihOU051bWJlciAqKXdpZHRoCistIChDb2NvYUltYWdl
ICopcmVuZGVyZWRJbWFnZVdpdGhPcHRpb25zOihXS1NuYXBzaG90T3B0aW9ucylvcHRpb25zIHdp
ZHRoOihOU051bWJlciAqKXdpZHRoCiB7CiAgICAgT3B0aW9uYWw8ZmxvYXQ+IG9wdGlvbmFsV2lk
dGg7CiAgICAgaWYgKHdpZHRoKQpAQCAtNzAsMjkgKzcwLDEyIEBAIC0gKFVJSW1hZ2UgKilyZW5k
ZXJlZEltYWdlV2l0aE9wdGlvbnM6KFdLU25hcHNob3RPcHRpb25zKW9wdGlvbnMgd2lkdGg6KE5T
TnVtYmVyCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAorI2lmIFVTRShB
UFBLSVQpCisgICAgcmV0dXJuIFtbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTppbWFn
ZS0+Yml0bWFwKCkubWFrZUNHSW1hZ2UoKS5nZXQoKSBzaXplOk5TWmVyb1NpemVdIGF1dG9yZWxl
YXNlXTsKKyNlbHNlCiAgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFn
ZTppbWFnZS0+Yml0bWFwKCkubWFrZUNHSW1hZ2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwotfQog
I2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0tIChOU0ltYWdlICopcmVuZGVyZWRJbWFnZVdp
dGhPcHRpb25zOihXS1NuYXBzaG90T3B0aW9ucylvcHRpb25zCi17Ci0gICAgcmV0dXJuIFtzZWxm
IHJlbmRlcmVkSW1hZ2VXaXRoT3B0aW9uczpvcHRpb25zIHdpZHRoOm5pbF07Ci19Ci0KLS0gKE5T
SW1hZ2UgKilyZW5kZXJlZEltYWdlV2l0aE9wdGlvbnM6KFdLU25hcHNob3RPcHRpb25zKW9wdGlv
bnMgd2lkdGg6KE5TTnVtYmVyICopd2lkdGgKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gb3B0aW9u
YWxXaWR0aDsKLSAgICBpZiAod2lkdGgpCi0gICAgICAgIG9wdGlvbmFsV2lkdGggPSB3aWR0aC5m
bG9hdFZhbHVlOwotCi0gICAgUmVmUHRyPFdlYktpdDo6V2ViSW1hZ2U+IGltYWdlID0gX25vZGVI
YW5kbGUtPnJlbmRlcmVkSW1hZ2UoV2ViS2l0Ojp0b1NuYXBzaG90T3B0aW9ucyhvcHRpb25zKSwg
b3B0aW9ucyAmIGtXS1NuYXBzaG90T3B0aW9uc0V4Y2x1ZGVPdmVyZmxvdywgb3B0aW9uYWxXaWR0
aCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBb
W1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2UtPmJpdG1hcCgpLm1ha2VDR0lt
YWdlKCkuZ2V0KCkgc2l6ZTpOU1plcm9TaXplXSBhdXRvcmVsZWFzZV07CiB9Ci0jZW5kaWYKIAog
LSAoQ0dSZWN0KWVsZW1lbnRCb3VuZHMKIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>