<?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>142596</bug_id>
          
          <creation_ts>2015-03-11 14:50:32 -0700</creation_ts>
          <short_desc>WebKit on iOS should support file upload from iCloud Drive</short_desc>
          <delta_ts>2015-03-13 01:10:15 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Honeycutt">jhoneycutt</reporter>
          <assigned_to name="Jon Honeycutt">jhoneycutt</assigned_to>
          <cc>aestes</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>joepeck</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076449</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-03-11 14:50:32 -0700</bug_when>
    <thetext>WebKit on iOS should support file upload from iCloud Drive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076462</commentid>
    <comment_count>1</comment_count>
      <attachid>248457</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-03-11 15:38:48 -0700</bug_when>
    <thetext>Created attachment 248457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076554</commentid>
    <comment_count>2</comment_count>
      <attachid>248457</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-11 21:48:08 -0700</bug_when>
    <thetext>Comment on attachment 248457
Patch

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

&gt; Source/WebKit2/ChangeLog:12
&gt; +        * UIProcess/ios/forms/WKFileUploadPanel.mm:

Maybe its just me, but I find this ChangeLog format completely unreadable. Some empty lines would help break things up. Many of the comments are not needed if the method is obvious. Not important to change, but I think another style would encourage reviewers to read your ChangeLog comments more.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:172
&gt; +- (instancetype)initWithFileURL:(NSURL *)fileURL;

Style: Normally we put the -init above properties.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:274
&gt; +    RetainPtr&lt;UIDocumentMenuViewController&gt; _sourceMenu;

Nit: I think this name is a bit poor. Maybe _documentMenuController would be clearer?
Style: The other lines have the comments at the end of the line. You could do that here as well.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:400
&gt; +        // FIXME: We should support more MIME type -&gt; UTI mappings.

We should! Lets make a bugzilla bug and put that in this comment.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:483
&gt; +    _sourceMenu = adoptNS([[UIDocumentMenuViewController alloc] initWithDocumentTypes:[self _mediaTypesForDocumentPickerMenu] inMode:UIDocumentPickerModeImport]);

We should also have a FIXME and bug here about eventually supporting multiple selection with UIDocumentViewController.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:487
&gt; +    NSString *photoLibraryString = WEB_UI_STRING_KEY(&quot;Photo Library&quot;, &quot;Photo Library (file upload action sheet)&quot;, &quot;File Upload alert sheet button string for choosing an existing media item from the Photo Library&quot;);

Nit: Since you made a helper for the camera string, you could make one for this too if only to reduce the WEB_UI_STRING bloat down to one place.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:581
&gt; +- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)imagePicker

Nit: &quot;imagePicker&quot; =&gt; &quot;documentPicker&quot; or &quot;controller&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076555</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-11 21:48:32 -0700</bug_when>
    <thetext>Looks good to me. I am not a WebKit2 Owner though, so it will need an Owner&apos;s approval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076599</commentid>
    <comment_count>4</comment_count>
      <attachid>248506</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-03-12 03:12:52 -0700</bug_when>
    <thetext>Created attachment 248506
WIP Take 2

WIP Take 2 patch that tests for the -[UIDocumentMenuViewController _setIgnoreApplicationEntitlementForImport:] SPI rather than using WKSI to test whether the current app has the correct entitlement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076817</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-12 18:35:38 -0700</bug_when>
    <thetext>Attachment 248506 did not pass style-queue:


ERROR: Source/WebKit2/Platform/spi/ios/UIKitSPI.h:76:  Should not have spaces around = in property attributes.  [whitespace/property] [4]
ERROR: Source/WebKit2/Platform/spi/ios/UIKitSPI.h:670:  Should not have spaces around = in property attributes.  [whitespace/property] [4]
Total errors found: 2 in 3 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>1076849</commentid>
    <comment_count>6</comment_count>
      <attachid>248506</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-12 22:22:51 -0700</bug_when>
    <thetext>Comment on attachment 248506
WIP Take 2

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

This looks pretty good to me, but I have enough concerns that I think another round is called for here.

&gt; Source/WebKit2/Platform/spi/ios/UIKitSPI.h:78
&gt; +#if defined(__has_include) &amp;&amp; __has_include(&lt;UIKit/UIDocumentMenuViewController_Private.h&gt;)
&gt; +#import &lt;UIKit/UIDocumentMenuViewController_Private.h&gt;
&gt; +#else
&gt; +@interface UIDocumentMenuViewController (Details)
&gt; +@property (nonatomic, assign, setter = _setIgnoreApplicationEntitlementForImport:, getter = _ignoreApplicationEntitlementForImport) BOOL _ignoreApplicationEntitlementForImport;
&gt; +@end
&gt; +#endif

You should unconditionally import the header file inside the USE(APPLE_INTERNAL_SDK) block, because we actually want the build to fail if a header we expect in the SDK goes missing.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:122
&gt; +    LOG_ERROR(&quot;_WKVideoFileUploadItem: Error creating thumbnail image for image: %@&quot;, file);

What&apos;s _WKVideoFileUploadItem?

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

Nit: the documentation only promises that error will be non-nil if an error occurs, but it doesn&apos;t promise that it will be nil if one doesn&apos;t (although it probably always is). I think the right way to check for an error is to check if imageRef is NULL.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:137
&gt; +        LOG_ERROR(&quot;_WKVideoFileUploadItem: Error creating image for video: %@&quot;, file);

What&apos;s _WKVideoFileUploadItem?

Also, it wouldn&apos;t hurt to include the error in the log message.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:159
&gt; +    RetainPtr&lt;CFStringRef&gt; fileUTI = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)fileExtension, 0));
&gt; +
&gt; +    if (UTTypeConformsTo(fileUTI.get(), kUTTypeImage))
&gt; +        return iconForImageFile(file);
&gt; +
&gt; +    if (UTTypeConformsTo(fileUTI.get(), kUTTypeMovie))
&gt; +        return iconForVideoFile(file);

Is it safe to call UTTypeConformsTo() when fileUTI is NULL?

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:349
&gt; +    if ([UIDocumentMenuViewController instancesRespondToSelector:@selector(_setIgnoreApplicationEntitlementForImport:)]) {
&gt; +        [self _showDocumentPickerMenu];
&gt; +        return;
&gt; +    }

It seems strange to use a runtime check to decide whether we should show the old or the new picker. Can&apos;t we decide this at compile time based on __IPHONE_OS_VERSION_MIN_REQUIRED?

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:389
&gt; -- (NSArray *)_mediaTypesForPickerSourceType:(UIImagePickerControllerSourceType)sourceType
&gt; +- (NSArray *)_UTIsForMIMETypes

This could be a free function: static NSArray *UTIsForMIMETypes(NSArray *mimeTypes)

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:417
&gt; +- (NSArray *)_mediaTypesForDocumentPickerMenu

I don&apos;t feel strongly about this, but I don&apos;t love this name, since it reads like the method should take an argument. Could it just be called _mediaTypes?

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:489
&gt; +    _documentMenuController = adoptNS([UIDocumentMenuViewController alloc]);
&gt; +    [_documentMenuController _setIgnoreApplicationEntitlementForImport:YES];
&gt; +    [_documentMenuController initWithDocumentTypes:[self _mediaTypesForDocumentPickerMenu] inMode:UIDocumentPickerModeImport];
&gt; +    [_documentMenuController setDelegate:self];

Sending a message to _documentMenuController before it&apos;s been initialized is really concerning. It&apos;s not safe to use an object before it&apos;s initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076853</commentid>
    <comment_count>7</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-03-12 23:03:26 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 248506 [details]
&gt; WIP Take 2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248506&amp;action=review
&gt; 
&gt; This looks pretty good to me, but I have enough concerns that I think
&gt; another round is called for here.
&gt; 
&gt; &gt; Source/WebKit2/Platform/spi/ios/UIKitSPI.h:78
&gt; &gt; +#if defined(__has_include) &amp;&amp; __has_include(&lt;UIKit/UIDocumentMenuViewController_Private.h&gt;)
&gt; &gt; +#import &lt;UIKit/UIDocumentMenuViewController_Private.h&gt;
&gt; &gt; +#else
&gt; &gt; +@interface UIDocumentMenuViewController (Details)
&gt; &gt; +@property (nonatomic, assign, setter = _setIgnoreApplicationEntitlementForImport:, getter = _ignoreApplicationEntitlementForImport) BOOL _ignoreApplicationEntitlementForImport;
&gt; &gt; +@end
&gt; &gt; +#endif
&gt; 
&gt; You should unconditionally import the header file inside the
&gt; USE(APPLE_INTERNAL_SDK) block, because we actually want the build to fail if
&gt; a header we expect in the SDK goes missing.

This header doesn&apos;t exist yet. It will be part of the next UIKit submission. I&apos;m hoping to land this patch before the header exists.


&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:122
&gt; &gt; +    LOG_ERROR(&quot;_WKVideoFileUploadItem: Error creating thumbnail image for image: %@&quot;, file);
&gt; 
&gt; What&apos;s _WKVideoFileUploadItem?

I moved this code from a _WKVideoFileUploadItem method. Will fix.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:136
&gt; &gt; +    RetainPtr&lt;CGImageRef&gt; imageRef = adoptCF([generator copyCGImageAtTime:kCMTimeZero actualTime:nil error:&amp;error]);
&gt; &gt; +    if (error) {
&gt; 
&gt; Nit: the documentation only promises that error will be non-nil if an error
&gt; occurs, but it doesn&apos;t promise that it will be nil if one doesn&apos;t (although
&gt; it probably always is). I think the right way to check for an error is to
&gt; check if imageRef is NULL.

I just moved this code, but I think it&apos;s fine to change this.


&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:137
&gt; &gt; +        LOG_ERROR(&quot;_WKVideoFileUploadItem: Error creating image for video: %@&quot;, file);
&gt; 
&gt; What&apos;s _WKVideoFileUploadItem?
&gt; 
&gt; Also, it wouldn&apos;t hurt to include the error in the log message.

More moved code. Will fix.


&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:159
&gt; &gt; +    RetainPtr&lt;CFStringRef&gt; fileUTI = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)fileExtension, 0));
&gt; &gt; +
&gt; &gt; +    if (UTTypeConformsTo(fileUTI.get(), kUTTypeImage))
&gt; &gt; +        return iconForImageFile(file);
&gt; &gt; +
&gt; &gt; +    if (UTTypeConformsTo(fileUTI.get(), kUTTypeMovie))
&gt; &gt; +        return iconForVideoFile(file);
&gt; 
&gt; Is it safe to call UTTypeConformsTo() when fileUTI is NULL?

Yes.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:349
&gt; &gt; +    if ([UIDocumentMenuViewController instancesRespondToSelector:@selector(_setIgnoreApplicationEntitlementForImport:)]) {
&gt; &gt; +        [self _showDocumentPickerMenu];
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; 
&gt; It seems strange to use a runtime check to decide whether we should show the
&gt; old or the new picker. Can&apos;t we decide this at compile time based on
&gt; __IPHONE_OS_VERSION_MIN_REQUIRED?

We need to ensure that this new SPI exists before trying to create a document picker menu. After the new UIKit is submitted, I&apos;ll be removing this runtime check.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:389
&gt; &gt; -- (NSArray *)_mediaTypesForPickerSourceType:(UIImagePickerControllerSourceType)sourceType
&gt; &gt; +- (NSArray *)_UTIsForMIMETypes
&gt; 
&gt; This could be a free function: static NSArray *UTIsForMIMETypes(NSArray
&gt; *mimeTypes)

This operates on the _mimeTypes ivar. Do you think it&apos;s clearer to call a function than to call an instance method?

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:417
&gt; &gt; +- (NSArray *)_mediaTypesForDocumentPickerMenu
&gt; 
&gt; I don&apos;t feel strongly about this, but I don&apos;t love this name, since it reads
&gt; like the method should take an argument. Could it just be called _mediaTypes?

Well, there&apos;s a -_mediaTypesForPickerSourceType:, so I want to make it clear that it&apos;s for the document picker. I think I&apos;ll rename this to -_documentPickerMenuMediaTypes.

&gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:489
&gt; &gt; +    _documentMenuController = adoptNS([UIDocumentMenuViewController alloc]);
&gt; &gt; +    [_documentMenuController _setIgnoreApplicationEntitlementForImport:YES];
&gt; &gt; +    [_documentMenuController initWithDocumentTypes:[self _mediaTypesForDocumentPickerMenu] inMode:UIDocumentPickerModeImport];
&gt; &gt; +    [_documentMenuController setDelegate:self];
&gt; 
&gt; Sending a message to _documentMenuController before it&apos;s been initialized is
&gt; really concerning. It&apos;s not safe to use an object before it&apos;s initialized.

Yes, but unfortunately, that&apos;s the way this SPI works; we need to set this flag to suppress an assertion that&apos;s in the initializer. &lt;rdar://problem/20137692&gt; covers adding a better SPI.

Thanks for the review! I&apos;ll post a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076856</commentid>
    <comment_count>8</comment_count>
      <attachid>248571</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-03-12 23:09:44 -0700</bug_when>
    <thetext>Created attachment 248571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076857</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-12 23:11:28 -0700</bug_when>
    <thetext>Attachment 248571 did not pass style-queue:


ERROR: Source/WebKit2/Platform/spi/ios/UIKitSPI.h:76:  Should not have spaces around = in property attributes.  [whitespace/property] [4]
ERROR: Source/WebKit2/Platform/spi/ios/UIKitSPI.h:670:  Should not have spaces around = in property attributes.  [whitespace/property] [4]
Total errors found: 2 in 3 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>1076862</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-12 23:19:49 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Sending a message to _documentMenuController before it&apos;s been initialized is
&gt; &gt; really concerning. It&apos;s not safe to use an object before it&apos;s initialized.
&gt; 
&gt; Yes, but unfortunately, that&apos;s the way this SPI works; we need to set this
&gt; flag to suppress an assertion that&apos;s in the initializer.
&gt; &lt;rdar://problem/20137692&gt; covers adding a better SPI.

There&apos;s another case of this bizarre pattern in the swipe code, and I think it&apos;s best to always leave a comment because it is *really* surprising when you stumble upon it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076863</commentid>
    <comment_count>11</comment_count>
      <attachid>248571</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-12 23:20:15 -0700</bug_when>
    <thetext>Comment on attachment 248571
Patch

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

&gt; Source/WebKit2/Platform/spi/ios/UIKitSPI.h:78
&gt; +#if defined(__has_include) &amp;&amp; __has_include(&lt;UIKit/UIDocumentMenuViewController_Private.h&gt;)
&gt; +#import &lt;UIKit/UIDocumentMenuViewController_Private.h&gt;
&gt; +#else
&gt; +@interface UIDocumentMenuViewController (Details)
&gt; +@property (nonatomic, assign, setter = _setIgnoreApplicationEntitlementForImport:, getter = _ignoreApplicationEntitlementForImport) BOOL _ignoreApplicationEntitlementForImport;
&gt; +@end
&gt; +#endif

Let&apos;s add a FIXME to remove the __has_include() once this header is in a build.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:349
&gt; +    if ([UIDocumentMenuViewController instancesRespondToSelector:@selector(_setIgnoreApplicationEntitlementForImport:)]) {
&gt; +        [self _showDocumentPickerMenu];
&gt; +        return;
&gt; +    }

Let&apos;s add a FIXME to remove this check once the right version of UIKit is in a build.

&gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:489
&gt; +    // FIXME: Support multiple file selection when implemented. &lt;rdar://17177981&gt;
&gt; +    _documentMenuController = adoptNS([UIDocumentMenuViewController alloc]);
&gt; +    [_documentMenuController _setIgnoreApplicationEntitlementForImport:YES];
&gt; +    [_documentMenuController initWithDocumentTypes:[self _documentPickerMenuMediaTypes] inMode:UIDocumentPickerModeImport];
&gt; +    [_documentMenuController setDelegate:self];

This is so bizarre that adding a comment mentioning &lt;rdar://problem/20137692&gt; would be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076866</commentid>
    <comment_count>12</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2015-03-12 23:25:13 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Comment on attachment 248506 [details]
&gt; &gt; WIP Take 2
&gt; &gt;  
&gt; &gt; &gt; Source/WebKit2/UIProcess/ios/forms/WKFileUploadPanel.mm:389
&gt; &gt; &gt; -- (NSArray *)_mediaTypesForPickerSourceType:(UIImagePickerControllerSourceType)sourceType
&gt; &gt; &gt; +- (NSArray *)_UTIsForMIMETypes
&gt; &gt; 
&gt; &gt; This could be a free function: static NSArray *UTIsForMIMETypes(NSArray
&gt; &gt; *mimeTypes)
&gt; 
&gt; This operates on the _mimeTypes ivar. Do you think it&apos;s clearer to call a
&gt; function than to call an instance method?

I think it&apos;s just as clear to pass _mimeTypes as an argument to a helper, and doing so avoids a message send, but I don&apos;t feel strongly that you make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076897</commentid>
    <comment_count>13</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2015-03-13 01:10:15 -0700</bug_when>
    <thetext>Thanks for the comments and review!

Landed in &lt;http://trac.webkit.org/changeset/181476&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248457</attachid>
            <date>2015-03-11 15:38:48 -0700</date>
            <delta_ts>2015-03-12 03:12:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142596-20150311153823.patch</filename>
            <type>text/plain</type>
            <size>22034</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTlmOTgzMjk2YjQyMDE3
MzJhNDU3ZGQxNjA2NjVlZTY0ZmJhNjZhZi4uYWU1Njc4MDMzYmVkZTdhZTE2NTY5MTM4MjJmZjNl
ZWIxZTJlZmE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE1LTAzLTExICBKb24g
SG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFVJRG9jdW1l
bnRNZW51Vmlld0NvbnRyb2xsZXIgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGZpbGVzIGZyb20KKyAg
ICAgICAgaUNsb3VkIERyaXZlIGluIFdLRmlsZVVwbG9hZFBhbmVsCisKKyAgICAgICAgUGFydCBv
ZiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5Nj4gV2ViS2l0
IG9uCisgICAgICAgIGlPUyBzaG91bGQgc3VwcG9ydCBmaWxlIHVwbG9hZCBmcm9tIGlDbG91ZCBE
cml2ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIxNzg5OTE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dL
RmlsZVVwbG9hZFBhbmVsLm1tOgorICAgICAgICBDcmVhdGUgYSBVSURvY3VtZW50SW50ZXJhY3Rp
b25Db250cm9sbGVyIGZvciB0aGUgZmlsZSwgYW5kIHJldHVybiBhCisgICAgICAgIHRodW1ibmFp
bCBpbWFnZSBmcm9tIGl0cyBzbWFsbGVzdCBpY29uLgorICAgICAgICAoaWNvbkZvckltYWdlRmls
ZSk6CisgICAgICAgIElmIHdlIGNhbiBnZXQgYSBVSUltYWdlIGZyb20gdGhlIGZpbGUsIGNyZWF0
ZSBhIHRodW1ibmFpbCBmcm9tIGl0LgorICAgICAgICBPdGhlcndpc2UsIGNhbGwgZmFsbGJhY2tJ
Y29uRm9yRmlsZSgpLgorICAgICAgICAoaWNvbkZvclZpZGVvRmlsZSk6CisgICAgICAgIENvZGUg
bW92ZWQgZnJvbSAtW19XS1ZpZGVvRmlsZVVwbG9hZEl0ZW0gZGlzcGxheUltYWdlXS4KKyAgICAg
ICAgKGljb25Gb3JGaWxlKToKKyAgICAgICAgR2V0IHRoZSBmaWxlJ3MgZXh0ZW5zaW9uLCBhbmQg
Z2V0IHRoZSBleHRlbnNpb24ncyBwcmVmZXJyZWQgVVRJLiBJZiB0aGUKKyAgICAgICAgVVRJIGlz
IGFuIGltYWdlIHR5cGUsIGNhbGwgaWNvbkZvckltYWdlRmlsZSgpLiBJZiBpdCdzIGEgdmlkZW8g
dHlwZSwKKyAgICAgICAgY2FsbCBpY29uRm9yVmlkZW9GaWxlKCkuIE90aGVyd2lzZSwgcmV0dXJu
IHRoZSBmYWxsYmFjayBpY29uLgorICAgICAgICAoLVtfV0tGaWxlVXBsb2FkSXRlbSBpbml0V2l0
aEZpbGVVUkw6XSk6CisgICAgICAgIEFkZGVkIGFuIGluaXRpYWxpemVyIHRoYXQgdGFrZXMgYSBm
aWxlIFVSTC4KKyAgICAgICAgKC1bX1dLRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOgorICAgICAg
ICBSZXR1cm4gdGhlIGZpbGUgVVJMLgorICAgICAgICAoLVtfV0tJbWFnZUZpbGVVcGxvYWRJdGVt
IGluaXRXaXRoRmlsZVVSTDpvcmlnaW5hbEltYWdlOl0pOgorICAgICAgICBDaGFuZ2VkIHRvIHRh
a2UgYSBVUkwuCisgICAgICAgICgtW19XS1ZpZGVvRmlsZVVwbG9hZEl0ZW0gZGlzcGxheUltYWdl
XSk6CisgICAgICAgIENhbGwgaWNvbkZvclZpZGVvRmlsZSgpLgorICAgICAgICAoV0tGaWxlVXBs
b2FkUGFuZWwpOgorICAgICAgICBJbmhlcml0IGZyb20gVUlEb2N1bWVudFBpY2tlckRlbGVnYXRl
IGFuZCBVSURvY3VtZW50TWVudURlbGVnYXRlLiBBZGQKKyAgICAgICAgYW4gaXZhciBmb3IgdGhl
IGRvY3VtZW50IG1lbnUgY29udHJvbGxlci4KKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwg
ZGVhbGxvY10pOgorICAgICAgICBTZXQgdGhlIGltcG9ydCBtZW51J3MgZGVsZWdhdGUgdG8gbmls
LgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBwcmVzZW50V2l0aFBhcmFtZXRlcnM6cmVz
dWx0TGlzdGVuZXI6XSk6CisgICAgICAgIElmIHRoZSBhcHAgaGFzIHRoZSBpQ2xvdWQgZG9jdW1l
bnRzIGVudGl0bGVtZW50LCBzaG93IHRoZSBkb2N1bWVudAorICAgICAgICBwaWNrZXIgbWVudS4g
T3RoZXJ3aXNlLCBzaG93IHRoZSBjdXJyZW50IHNvdXJjZSBzZWxlY3Rpb24gVUkuCisgICAgICAg
ICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9VVElzRm9yTUlNRVR5cGVzXSk6CisgICAgICAgIFJldHVy
biB0aGUgVVRJcyBmb3IgdGhlIDxpbnB1dD4gZWxlbWVudCdzICJhY2NlcHQiIGF0dHJpYnV0ZSdz
IE1JTUUKKyAgICAgICAgdHlwZSBsaXN0LgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBf
bWVkaWFUeXBlc0ZvclBpY2tlclNvdXJjZVR5cGU6XSk6CisgICAgICAgIENhbGwgLV9VVElzRm9y
TUlNRVR5cGVzLiBGYWxsIGJhY2sgdG8gYXZhaWxhYmxlIHNvdXJjZSB0eXBlcyBmb3IgdGhpcwor
ICAgICAgICBwaWNrZXIgdHlwZS4KKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX21lZGlh
VHlwZXNGb3JEb2N1bWVudFBpY2tlck1lbnVdKToKKyAgICAgICAgQ2FsbCAtX1VUSXNGb3JNSU1F
VHlwZXMuIEZhbGwgYmFjayB0byB0aGUgYWxsLWVuY29tcGFzc2luZworICAgICAgICAicHVibGlj
Lml0ZW0iIFVUSS4KKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX2NhbWVyYUJ1dHRvbkxh
YmVsXSk6CisgICAgICAgIEZhY3RvcmVkIG91dCBvZiAtX3Nob3dNZWRpYVNvdXJjZVNlbGVjdGlv
blNoZWV0LiBSZXR1cm5zIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBsYWJlbCBmb3IgdGhlIGNh
bWVyYSBidXR0b24sIGJhc2VkIG9uIHdoZXRoZXIgaXQgY2FuIHRha2UgYQorICAgICAgICBwaG90
byBvciB2aWRlbywgb3IgcmV0dXJuIG5pbCBpZiB0aGUgY2FtZXJhIGlzIG5vdCBhdmFpbGFibGUu
CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9zaG93TWVkaWFTb3VyY2VTZWxlY3Rpb25T
aGVldF0pOgorICAgICAgICBDaGFuZ2VkIHRvIHVzZSAtX2NhbWVyYUJ1dHRvbkxhYmVsIGFuZAor
ICAgICAgICAtX3ByZXNlbnRGb3JDdXJyZW50SW50ZXJmYWNlSWRpb206LgorICAgICAgICAoLVtX
S0ZpbGVVcGxvYWRQYW5lbCBfc2hvd0RvY3VtZW50UGlja2VyTWVudV0pOgorICAgICAgICBDcmVh
dGUgYSBVSURvY3VtZW50TWVudVZpZXdDb250cm9sbGVyLCBhbmQgcG9wdWxhdGUgaXQgd2l0aCBv
cHRpb25zIHRvCisgICAgICAgIG9wZW4gdGhlIHBob3RvIGxpYnJhcnkgb3IgdGFrZSBhIHBpY3R1
cmUgb3IgdmlkZW8uIElmIGlDbG91ZCBEcml2ZSBvcgorICAgICAgICBvdGhlciBkb2N1bWVudCBz
b3VyY2VzIGFyZSBhdmFpbGFibGUsIHRoZXkgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5Lgor
ICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJ
ZGlvbTpdKToKKyAgICAgICAgUHJlc2VudCB0aGUgdmlldyBpbiBhIHBvcG92ZXIgb3IgZnVsbC1z
Y3JlZW4uCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIGRvY3VtZW50TWVudTpkaWRQaWNr
RG9jdW1lbnRQaWNrZXI6XSk6CisgICAgICAgIFByZXNlbnQgdGhlIHNlbGVjdGVkIGRvY3VtZW50
IHBpY2tlci4KKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRNZW51V2FzQ2Fu
Y2VsbGVkOl0pOgorICAgICAgICBIaWRlIHRoZSBtZW51LCBhbmQgY2FsbCAtX2NhbmNlbC4KKyAg
ICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRQaWNrZXI6ZGlkUGlja0RvY3VtZW50
QXRVUkw6XSk6IERpc21pc3MKKyAgICAgICAgdGhlIHBpY2tlciwgYW5kIGNhbGwgLV9jaG9vc2VG
aWxlcy4KKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRQaWNrZXJXYXNDYW5j
ZWxsZWQ6XSk6CisgICAgICAgIEhpZGUgdGhlIHBpY2tlciwgYW5kIGNhbGwgLV9jYW5jZWwuCisg
ICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxvYWRJdGVtRnJvbU1lZGlhSW5mbzpzdWNj
ZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0pOgorICAgICAgICBQYXNzIHRoZSBVUkwgcmF0aGVyIHRo
YW4gdGhlIGZpbGUgcGF0aC4KKyAgICAgICAgKC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBpbml0
V2l0aEZpbGVQYXRoOm9yaWdpbmFsSW1hZ2U6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW19XS0lt
YWdlRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tWaWRl
b0ZpbGVVcGxvYWRJdGVtIGluaXRXaXRoRmlsZVBhdGg6bWVkaWFVUkw6XSk6IERlbGV0ZWQuCisg
ICAgICAgICgtW19XS1ZpZGVvRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOiBEZWxldGVkLgorCiAy
MDE1LTAzLTEwICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggdGhlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbQppbmRleCA1OWZjY2JmODFiNWNhNTM4
NGM3YjZkNTk5OWMyMDMxMGY2MDUyNGY0Li5kYWU4MzNkNzY4ZDJhNGJjMWE0NzllMmI1NzJjZDBj
ZDcwY2RkNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL2Zvcm1z
L1dLRmlsZVVwbG9hZFBhbmVsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
Zm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgogI2ltcG9ydCA8V2ViS2l0L1dlYk5TRmlsZU1hbmFnZXJFeHRyYXMuaD4KKyNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZUlPUy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtNTcsOCArNTgsNyBAQCBTT0ZUX0xJTktfRlJBTUVX
T1JLKENvcmVNZWRpYSk7CiBTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lWmVy
bywgQ01UaW1lKTsKICNkZWZpbmUga0NNVGltZVplcm8gZ2V0a0NNVGltZVplcm8oKQogCi0KLSNw
cmFnbWEgbWFyayAtIF9XS0ZpbGVVcGxvYWRJdGVtCisjcHJhZ21hIG1hcmsgLSBJY29uIGdlbmVy
YXRpb24KIAogc3RhdGljIENHUmVjdCBzcXVhcmVDcm9wUmVjdEZvclNpemUoQ0dTaXplIHNpemUp
CiB7CkBAIC0xMDUsMTQgKzEwNSw4NyBAQCBzdGF0aWMgVUlJbWFnZSAqdGh1bWJuYWlsU2l6ZWRJ
bWFnZUZvckltYWdlKFVJSW1hZ2UgKmltYWdlKQogICAgIHJldHVybiByZXN1bHRJbWFnZTsKIH0K
IAorc3RhdGljIFVJSW1hZ2UqIGZhbGxiYWNrSWNvbkZvckZpbGUoTlNVUkwgKmZpbGUpCit7Cisg
ICAgQVNTRVJUX0FSRyhmaWxlLCBbZmlsZSBpc0ZpbGVVUkxdKTsKKworICAgIFVJRG9jdW1lbnRJ
bnRlcmFjdGlvbkNvbnRyb2xsZXIgKmludGVyYWN0aW9uQ29udHJvbGxlciA9IFtVSURvY3VtZW50
SW50ZXJhY3Rpb25Db250cm9sbGVyIGludGVyYWN0aW9uQ29udHJvbGxlcldpdGhVUkw6ZmlsZV07
CisgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShpbnRlcmFjdGlvbkNvbnRy
b2xsZXIuaWNvbnNbMF0pOworfQorCitzdGF0aWMgVUlJbWFnZSogaWNvbkZvckltYWdlRmlsZShO
U1VSTCAqZmlsZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZpbGUsIFtmaWxlIGlzRmlsZVVSTF0pOwor
CisgICAgaWYgKFVJSW1hZ2UgKmltYWdlID0gW1VJSW1hZ2UgaW1hZ2VXaXRoQ29udGVudHNPZkZp
bGU6ZmlsZS5wYXRoXSkKKyAgICAgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFn
ZShpbWFnZSk7CisKKyAgICBMT0dfRVJST1IoIl9XS1ZpZGVvRmlsZVVwbG9hZEl0ZW06IEVycm9y
IGNyZWF0aW5nIHRodW1ibmFpbCBpbWFnZSBmb3IgaW1hZ2U6ICVAIiwgZmlsZSk7CisgICAgcmV0
dXJuIGZhbGxiYWNrSWNvbkZvckZpbGUoZmlsZSk7Cit9CisKK3N0YXRpYyBVSUltYWdlKiBpY29u
Rm9yVmlkZW9GaWxlKE5TVVJMICpmaWxlKQoreworICAgIEFTU0VSVF9BUkcoZmlsZSwgW2ZpbGUg
aXNGaWxlVVJMXSk7CisKKyAgICBSZXRhaW5QdHI8QVZVUkxBc3NldD4gYXNzZXQgPSBhZG9wdE5T
KFthbGxvY0FWVVJMQXNzZXRJbnN0YW5jZSgpIGluaXRXaXRoVVJMOmZpbGUgb3B0aW9uczpuaWxd
KTsKKyAgICBSZXRhaW5QdHI8QVZBc3NldEltYWdlR2VuZXJhdG9yPiBnZW5lcmF0b3IgPSBhZG9w
dE5TKFthbGxvY0FWQXNzZXRJbWFnZUdlbmVyYXRvckluc3RhbmNlKCkgaW5pdFdpdGhBc3NldDph
c3NldC5nZXQoKV0pOworICAgIFtnZW5lcmF0b3Igc2V0QXBwbGllc1ByZWZlcnJlZFRyYWNrVHJh
bnNmb3JtOllFU107CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2VSZWYgPSBhZG9wdENGKFtnZW5lcmF0b3IgY29weUNHSW1hZ2VBdFRp
bWU6a0NNVGltZVplcm8gYWN0dWFsVGltZTpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgIExPR19FUlJPUigiX1dLVmlkZW9GaWxlVXBsb2FkSXRlbTogRXJyb3Ig
Y3JlYXRpbmcgaW1hZ2UgZm9yIHZpZGVvOiAlQCIsIGZpbGUpOworICAgICAgICByZXR1cm4gZmFs
bGJhY2tJY29uRm9yRmlsZShmaWxlKTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8VUlJbWFnZT4g
aW1hZ2UgPSBhZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmltYWdlUmVm
LmdldCgpXSk7CisgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShpbWFnZS5n
ZXQoKSk7Cit9CisKK3N0YXRpYyBVSUltYWdlKiBpY29uRm9yRmlsZShOU1VSTCAqZmlsZSkKK3sK
KyAgICBBU1NFUlRfQVJHKGZpbGUsIFtmaWxlIGlzRmlsZVVSTF0pOworCisgICAgTlNTdHJpbmcg
KmZpbGVFeHRlbnNpb24gPSBmaWxlLnBhdGhFeHRlbnNpb247CisgICAgaWYgKCFmaWxlRXh0ZW5z
aW9uLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gZmlsZVVUSSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZv
clRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCAoQ0ZTdHJpbmdSZWYpZmlsZUV4dGVu
c2lvbiwgMCkpOworCisgICAgaWYgKFVUVHlwZUNvbmZvcm1zVG8oZmlsZVVUSS5nZXQoKSwga1VU
VHlwZUltYWdlKSkKKyAgICAgICAgcmV0dXJuIGljb25Gb3JJbWFnZUZpbGUoZmlsZSk7CisKKyAg
ICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhmaWxlVVRJLmdldCgpLCBrVVRUeXBlTW92aWUpKQorICAg
ICAgICByZXR1cm4gaWNvbkZvclZpZGVvRmlsZShmaWxlKTsKKworICAgIHJldHVybiBmYWxsYmFj
a0ljb25Gb3JGaWxlKGZpbGUpOworfQorCisKKyNwcmFnbWEgbWFyayAtIF9XS0ZpbGVVcGxvYWRJ
dGVtCiAKIEBpbnRlcmZhY2UgX1dLRmlsZVVwbG9hZEl0ZW0gOiBOU09iamVjdAogQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNWaWRlbykgQk9PTCB2aWRlbzsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNVUkwgKmZpbGVVUkw7CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFVJSW1hZ2UgKmRpc3BsYXlJbWFnZTsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEZpbGVVUkw6KE5TVVJMICopZmlsZVVSTDsKIEBlbmQKIAotQGltcGxlbWVudGF0
aW9uIF9XS0ZpbGVVcGxvYWRJdGVtCitAaW1wbGVtZW50YXRpb24gX1dLRmlsZVVwbG9hZEl0ZW0g
eworICAgIFJldGFpblB0cjxOU1VSTD4gX2ZpbGVVUkw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEZpbGVVUkw6KE5TVVJMICopZmlsZVVSTAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQVNTRVJUKFtmaWxlVVJMIGlz
RmlsZVVSTF0pOworICAgIEFTU0VSVChbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZp
bGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisgICAgX2ZpbGVVUkwgPSBmaWxlVVJMOwor
ICAgIHJldHVybiBzZWxmOworfQogCiAtIChCT09MKWlzVmlkZW8KIHsKQEAgLTEyMiw4ICsxOTUs
NyBAQCAtIChCT09MKWlzVmlkZW8KIAogLSAoTlNVUkwgKilmaWxlVVJMCiB7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gX2ZpbGVVUkwuZ2V0
KCk7CiB9CiAKIC0gKFVJSW1hZ2UgKilkaXNwbGF5SW1hZ2UKQEAgLTEzNiwxOSArMjA4LDE4IEBA
IEBlbmQKIAogCiBAaW50ZXJmYWNlIF9XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gOiBfV0tGaWxlVXBs
b2FkSXRlbQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVBhdGg6KE5TU3RyaW5nICopZmls
ZVBhdGggb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1hZ2U7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGaWxlVVJMOihOU1VSTCAqKWZpbGVVUkwgb3JpZ2luYWxJbWFnZTooVUlJ
bWFnZSAqKW9yaWdpbmFsSW1hZ2U7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tJbWFnZUZp
bGVVcGxvYWRJdGVtIHsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9maWxlUGF0aDsKICAgICBS
ZXRhaW5QdHI8VUlJbWFnZT4gX29yaWdpbmFsSW1hZ2U7CiB9CiAKLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEZpbGVQYXRoOihOU1N0cmluZyAqKWZpbGVQYXRoIG9yaWdpbmFsSW1hZ2U6KFVJSW1h
Z2UgKilvcmlnaW5hbEltYWdlCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlVVJMOihOU1VS
TCAqKWZpbGVVUkwgb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1hZ2UKIHsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoRmlsZVVSTDpmaWxlVVJMXSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2ZpbGVQ
YXRoID0gZmlsZVBhdGg7CisKICAgICBfb3JpZ2luYWxJbWFnZSA9IG9yaWdpbmFsSW1hZ2U7CiAg
ICAgcmV0dXJuIHNlbGY7CiB9CkBAIC0xNTgsMTEgKzIyOSw2IEBAIC0gKEJPT0wpaXNWaWRlbwog
ICAgIHJldHVybiBOTzsKIH0KIAotLSAoTlNVUkwgKilmaWxlVVJMCi17Ci0gICAgcmV0dXJuIFtO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6X2ZpbGVQYXRoLmdldCgpXTsKLX0KLQogLSAoVUlJbWFnZSAq
KWRpc3BsYXlJbWFnZQogewogICAgIHJldHVybiB0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2Uo
X29yaWdpbmFsSW1hZ2UuZ2V0KCkpOwpAQCAtMTcyLDQ4ICsyMzgsMTggQEAgQGVuZAogCiAKIEBp
bnRlcmZhY2UgX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSA6IF9XS0ZpbGVVcGxvYWRJdGVtCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlUGF0aDooTlNTdHJpbmcgKilmaWxlUGF0aCBtZWRpYVVS
TDooTlNVUkwgKiltZWRpYVVSTDsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIF9XS1ZpZGVvRmls
ZVVwbG9hZEl0ZW0gewotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2ZpbGVQYXRoOwotICAgIFJl
dGFpblB0cjxOU1VSTD4gX21lZGlhVVJMOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhG
aWxlUGF0aDooTlNTdHJpbmcgKilmaWxlUGF0aCBtZWRpYVVSTDooTlNVUkwgKiltZWRpYVVSTAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIF9maWxlUGF0aCA9IGZpbGVQYXRoOwotICAgIF9tZWRpYVVSTCA9IG1lZGlhVVJMOwotICAg
IHJldHVybiBzZWxmOwotfQorQGltcGxlbWVudGF0aW9uIF9XS1ZpZGVvRmlsZVVwbG9hZEl0ZW0K
IAogLSAoQk9PTClpc1ZpZGVvCiB7CiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoTlNVUkwgKilm
aWxlVVJMCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6X2ZpbGVQYXRoLmdl
dCgpXTsKLX0KLQogLSAoVUlJbWFnZSAqKWRpc3BsYXlJbWFnZQogewotICAgIFJldGFpblB0cjxB
VlVSTEFzc2V0PiBhc3NldCA9IGFkb3B0TlMoW2FsbG9jQVZVUkxBc3NldEluc3RhbmNlKCkgaW5p
dFdpdGhVUkw6X21lZGlhVVJMLmdldCgpIG9wdGlvbnM6bmlsXSk7Ci0gICAgUmV0YWluUHRyPEFW
QXNzZXRJbWFnZUdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gYWRvcHROUyhbYWxsb2NBVkFzc2V0SW1h
Z2VHZW5lcmF0b3JJbnN0YW5jZSgpIGluaXRXaXRoQXNzZXQ6YXNzZXQuZ2V0KCldKTsKLSAgICBb
Z2VuZXJhdG9yIHNldEFwcGxpZXNQcmVmZXJyZWRUcmFja1RyYW5zZm9ybTpZRVNdOwotCi0gICAg
TlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlUmVm
ID0gYWRvcHRDRihbZ2VuZXJhdG9yIGNvcHlDR0ltYWdlQXRUaW1lOmtDTVRpbWVaZXJvIGFjdHVh
bFRpbWU6bmlsIGVycm9yOiZlcnJvcl0pOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBMT0df
RVJST1IoIl9XS1ZpZGVvRmlsZVVwbG9hZEl0ZW06IEVycm9yIGNyZWF0aW5nIGltYWdlIGZvciB2
aWRlbzogJUAiLCBfbWVkaWFVUkwuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0K
LQotICAgIFJldGFpblB0cjxVSUltYWdlPiBpbWFnZSA9IGFkb3B0TlMoW1tVSUltYWdlIGFsbG9j
XSBpbml0V2l0aENHSW1hZ2U6aW1hZ2VSZWYuZ2V0KCldKTsKLSAgICByZXR1cm4gdGh1bWJuYWls
U2l6ZWRJbWFnZUZvckltYWdlKGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4gaWNvbkZvclZpZGVv
RmlsZShzZWxmLmZpbGVVUkwpOwogfQogCiBAZW5kCkBAIC0yMjEsNyArMjU3LDcgQEAgQGVuZAog
CiAjcHJhZ21hIG1hcmsgLSBXS0ZpbGVVcGxvYWRQYW5lbAogCi1AaW50ZXJmYWNlIFdLRmlsZVVw
bG9hZFBhbmVsICgpIDxVSVBvcG92ZXJDb250cm9sbGVyRGVsZWdhdGUsIFVJTmF2aWdhdGlvbkNv
bnRyb2xsZXJEZWxlZ2F0ZSwgVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJEZWxlZ2F0ZT4KK0BpbnRl
cmZhY2UgV0tGaWxlVXBsb2FkUGFuZWwgKCkgPFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSwg
VUlOYXZpZ2F0aW9uQ29udHJvbGxlckRlbGVnYXRlLCBVSUltYWdlUGlja2VyQ29udHJvbGxlckRl
bGVnYXRlLCBVSURvY3VtZW50UGlja2VyRGVsZWdhdGUsIFVJRG9jdW1lbnRNZW51RGVsZWdhdGU+
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0ZpbGVVcGxvYWRQYW5lbCB7CkBAIC0yMzIsOSAr
MjY4LDEyIEBAIEBpbXBsZW1lbnRhdGlvbiBXS0ZpbGVVcGxvYWRQYW5lbCB7CiAgICAgQk9PTCBf
YWxsb3dNdWx0aXBsZUZpbGVzOwogICAgIEJPT0wgX3VzaW5nQ2FtZXJhOwogICAgIFJldGFpblB0
cjxVSUltYWdlUGlja2VyQ29udHJvbGxlcj4gX2ltYWdlUGlja2VyOwotICAgIFJldGFpblB0cjxV
SUFsZXJ0Q29udHJvbGxlcj4gX2FjdGlvblNoZWV0Q29udHJvbGxlcjsKICAgICBSZXRhaW5QdHI8
VUlWaWV3Q29udHJvbGxlcj4gX3ByZXNlbnRhdGlvblZpZXdDb250cm9sbGVyOyAvLyBpUGhvbmUg
YWx3YXlzLiBpUGFkIGZvciBGdWxsc2NyZWVuIENhbWVyYS4KICAgICBSZXRhaW5QdHI8VUlQb3Bv
dmVyQ29udHJvbGxlcj4gX3ByZXNlbnRhdGlvblBvcG92ZXI7IC8vIGlQYWQgZm9yIGFjdGlvbiBz
aGVldCBhbmQgUGhvdG8gTGlicmFyeS4KKyAgICAvLyBDb250cm9sbGVyIGZvciBpQ2xvdWQtZW50
aXRsZWQgYXBwcy4KKyAgICBSZXRhaW5QdHI8VUlEb2N1bWVudE1lbnVWaWV3Q29udHJvbGxlcj4g
X3NvdXJjZU1lbnU7CisgICAgLy8gQ29udHJvbGxlciBmb3Igbm9uLWlDbG91ZC1lbnRpdGxlZCBh
cHBzLgorICAgIFJldGFpblB0cjxVSUFsZXJ0Q29udHJvbGxlcj4gX2FjdGlvblNoZWV0Q29udHJv
bGxlcjsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlldzooV0tDb250ZW50VmlldyAq
KXZpZXcKQEAgLTI0OSw2ICsyODgsOCBAQCAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBbX2ltYWdl
UGlja2VyIHNldERlbGVnYXRlOm5pbF07CiAgICAgW19wcmVzZW50YXRpb25Qb3BvdmVyIHNldERl
bGVnYXRlOm5pbF07CisgICAgW19zb3VyY2VNZW51IHNldERlbGVnYXRlOm5pbF07CisKICAgICBb
c3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTMwNSw2ICszNDYsMTIgQEAgLSAodm9pZClwcmVzZW50
V2l0aFBhcmFtZXRlcnM6KFdlYktpdDo6V2ViT3BlblBhbmVsUGFyYW1ldGVycyopcGFyYW1ldGVy
cyByZXN1bHQKICAgICAgICAgW21pbWVUeXBlcyBhZGRPYmplY3Q6bWltZVR5cGUtPnN0cmluZygp
XTsKICAgICBfbWltZVR5cGVzID0gYWRvcHROUyhbbWltZVR5cGVzIGNvcHldKTsKIAorICAgIGlm
IChXS0hhc0lDbG91ZERvY3VtZW50c0VudGl0bGVtZW50KCkpIHsKKyAgICAgICAgW3NlbGYgX3No
b3dEb2N1bWVudFBpY2tlck1lbnVdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RmFsbCBiYWNrIHRvIHNob3dpbmcgdGhlIG9sZC1zdHlsZSBzb3VyY2Ugc2VsZWN0aW9uIHNoZWV0
LgogICAgIC8vIElmIHRoZXJlIGlzIG5vIGNhbWVyYSBvciB0aGlzIGlzIHR5cGU9bXVsdGlwbGUs
IGp1c3Qgc2hvdyB0aGUgaW1hZ2UgcGlja2VyIGZvciB0aGUgcGhvdG8gbGlicmFyeS4KICAgICAv
LyBPdGhlcndpc2UsIHNob3cgYW4gYWN0aW9uIHNoZWV0IGZvciB0aGUgdXNlciB0byBjaG9vc2Ug
YmV0d2VlbiBjYW1lcmEgb3IgbGlicmFyeS4KICAgICBpZiAoX2FsbG93TXVsdGlwbGVGaWxlcyB8
fCAhW1VJSW1hZ2VQaWNrZXJDb250cm9sbGVyIGlzU291cmNlVHlwZUF2YWlsYWJsZTpVSUltYWdl
UGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGVDYW1lcmFdKQpAQCAtMzM0LDcgKzM4MSw3IEBAIC0g
KHZvaWQpX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKICAgICB9CiB9CiAK
LSNwcmFnbWEgbWFyayAtIEFjdGlvbiBTaGVldAorI3ByYWdtYSBtYXJrIC0gTWVkaWEgVHlwZXMK
IAogc3RhdGljIGJvb2wgc3RyaW5nSGFzUHJlZml4Q2FzZUluc2Vuc2l0aXZlKE5TU3RyaW5nICpz
dHIsIE5TU3RyaW5nICpwcmVmaXgpCiB7CkBAIC0zNDIsNyArMzg5LDcgQEAgc3RhdGljIGJvb2wg
c3RyaW5nSGFzUHJlZml4Q2FzZUluc2Vuc2l0aXZlKE5TU3RyaW5nICpzdHIsIE5TU3RyaW5nICpw
cmVmaXgpCiAgICAgcmV0dXJuIHJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQ7CiB9CiAKLS0g
KE5TQXJyYXkgKilfbWVkaWFUeXBlc0ZvclBpY2tlclNvdXJjZVR5cGU6KFVJSW1hZ2VQaWNrZXJD
b250cm9sbGVyU291cmNlVHlwZSlzb3VyY2VUeXBlCistIChOU0FycmF5ICopX1VUSXNGb3JNSU1F
VHlwZXMKIHsKICAgICAvLyBUaGUgSFRNTDUgc3BlYyBtZW50aW9ucyB0aGUgbGl0ZXJhbCAiaW1h
Z2UvKiIgYW5kICJ2aWRlby8qIiBzdHJpbmdzLgogICAgIC8vIFdlIHN1cHBvcnQgdGhlc2UgYW5k
IGdvIGEgc3RlcCBmdXJ0aGVyLCBpZiB0aGUgTUlNRSB0eXBlIHN0YXJ0cyB3aXRoCkBAIC0zNTAs
MzYgKzM5Nyw2MiBAQCAtIChOU0FycmF5ICopX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBl
OihVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGUpcwogICAgIC8vIFNvLCAiaW1hZ2Uv
anBlZyIgd291bGQgbWFrZSB0aGUgcGlja2VyIGRpc3BsYXkgYWxsIGltYWdlcyB0eXBlcy4KICAg
ICBOU011dGFibGVTZXQgKm1lZGlhVHlwZXMgPSBbTlNNdXRhYmxlU2V0IHNldF07CiAgICAgZm9y
IChOU1N0cmluZyAqbWltZVR5cGUgaW4gX21pbWVUeXBlcy5nZXQoKSkgeworICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSBNSU1FIHR5cGUgLT4gVVRJIG1hcHBpbmdzLgog
ICAgICAgICBpZiAoc3RyaW5nSGFzUHJlZml4Q2FzZUluc2Vuc2l0aXZlKG1pbWVUeXBlLCBAImlt
YWdlLyIpKQogICAgICAgICAgICAgW21lZGlhVHlwZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKWtV
VFR5cGVJbWFnZV07CiAgICAgICAgIGVsc2UgaWYgKHN0cmluZ0hhc1ByZWZpeENhc2VJbnNlbnNp
dGl2ZShtaW1lVHlwZSwgQCJ2aWRlby8iKSkKICAgICAgICAgICAgIFttZWRpYVR5cGVzIGFkZE9i
amVjdDooTlNTdHJpbmcgKilrVVRUeXBlTW92aWVdOwogICAgIH0KIAotICAgIGlmIChbbWVkaWFU
eXBlcyBjb3VudF0pCi0gICAgICAgIHJldHVybiBbbWVkaWFUeXBlcyBhbGxPYmplY3RzXTsKKyAg
ICByZXR1cm4gbWVkaWFUeXBlcy5hbGxPYmplY3RzOworfQorCistIChOU0FycmF5ICopX21lZGlh
VHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOihVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5
cGUpc291cmNlVHlwZQoreworICAgIE5TQXJyYXkgKm1lZGlhVHlwZXMgPSBbc2VsZiBfVVRJc0Zv
ck1JTUVUeXBlc107CisgICAgaWYgKG1lZGlhVHlwZXMuY291bnQpCisgICAgICAgIHJldHVybiBt
ZWRpYVR5cGVzOwogCiAgICAgLy8gRmFsbGJhY2sgdG8gZXZlcnkgc3VwcG9ydGVkIG1lZGlhIHR5
cGUgaWYgdGhlcmUgaXMgbm8gZmlsdGVyLgogICAgIHJldHVybiBbVUlJbWFnZVBpY2tlckNvbnRy
b2xsZXIgYXZhaWxhYmxlTWVkaWFUeXBlc0ZvclNvdXJjZVR5cGU6c291cmNlVHlwZV07CiB9CiAK
LS0gKHZvaWQpX3Nob3dNZWRpYVNvdXJjZVNlbGVjdGlvblNoZWV0CistIChOU0FycmF5ICopX21l
ZGlhVHlwZXNGb3JEb2N1bWVudFBpY2tlck1lbnUKIHsKLSAgICBOU1N0cmluZyAqZXhpc3RpbmdT
dHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiUGhvdG8gTGlicmFyeSIsICJQaG90byBMaWJyYXJ5
IChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1
dHRvbiBzdHJpbmcgZm9yIGNob29zaW5nIGFuIGV4aXN0aW5nIG1lZGlhIGl0ZW0gZnJvbSB0aGUg
UGhvdG8gTGlicmFyeSIpOwotICAgIE5TU3RyaW5nICpjYW5jZWxTdHJpbmcgPSBXRUJfVUlfU1RS
SU5HX0tFWSgiQ2FuY2VsIiwgIkNhbmNlbCAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIsICJG
aWxlIFVwbG9hZCBhbGVydCBzaGVldCBidXR0b24gc3RyaW5nIHRvIGNhbmNlbCIpOworICAgIE5T
QXJyYXkgKm1lZGlhVHlwZXMgPSBbc2VsZiBfVVRJc0Zvck1JTUVUeXBlc107CisgICAgaWYgKG1l
ZGlhVHlwZXMuY291bnQpCisgICAgICAgIHJldHVybiBtZWRpYVR5cGVzOworCisgICAgLy8gRmFs
bGJhY2sgdG8gZXZlcnkgc3VwcG9ydGVkIG1lZGlhIHR5cGUgaWYgdGhlcmUgaXMgbm8gZmlsdGVy
LgorICAgIHJldHVybiBAW0AicHVibGljLml0ZW0iXTsKK30KKworI3ByYWdtYSBtYXJrIC0gU291
cmNlIHNlbGVjdGlvbiBtZW51CisKKy0gKE5TU3RyaW5nICopX2NhbWVyYUJ1dHRvbkxhYmVsCit7
CisgICAgaWYgKCFbVUlJbWFnZVBpY2tlckNvbnRyb2xsZXIgaXNTb3VyY2VUeXBlQXZhaWxhYmxl
OlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZUNhbWVyYV0pCisgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICAvLyBDaG9vc2UgdGhlIGFwcHJvcHJpYXRlIHN0cmluZyBmb3IgdGhlIGNh
bWVyYSBidXR0b24uCi0gICAgTlNTdHJpbmcgKmNhbWVyYVN0cmluZzsKICAgICBOU0FycmF5ICpm
aWx0ZXJlZE1lZGlhVHlwZXMgPSBbc2VsZiBfbWVkaWFUeXBlc0ZvclBpY2tlclNvdXJjZVR5cGU6
VUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlQ2FtZXJhXTsKICAgICBCT09MIGNvbnRh
aW5zSW1hZ2VNZWRpYVR5cGUgPSBbZmlsdGVyZWRNZWRpYVR5cGVzIGNvbnRhaW5zT2JqZWN0OihO
U1N0cmluZyAqKWtVVFR5cGVJbWFnZV07CiAgICAgQk9PTCBjb250YWluc1ZpZGVvTWVkaWFUeXBl
ID0gW2ZpbHRlcmVkTWVkaWFUeXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBl
TW92aWVdOwogICAgIEFTU0VSVChjb250YWluc0ltYWdlTWVkaWFUeXBlIHx8IGNvbnRhaW5zVmlk
ZW9NZWRpYVR5cGUpOwogICAgIGlmIChjb250YWluc0ltYWdlTWVkaWFUeXBlICYmIGNvbnRhaW5z
VmlkZW9NZWRpYVR5cGUpCi0gICAgICAgIGNhbWVyYVN0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZ
KCJUYWtlIFBob3RvIG9yIFZpZGVvIiwgIlRha2UgUGhvdG8gb3IgVmlkZW8gKGZpbGUgdXBsb2Fk
IGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBz
dHJpbmcgZm9yIHRha2luZyBwaG90b3Mgb3IgdmlkZW9zIik7Ci0gICAgZWxzZSBpZiAoY29udGFp
bnNWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgY2FtZXJhU3RyaW5nID0gV0VCX1VJX1NUUklOR19L
RVkoIlRha2UgVmlkZW8iLCAiVGFrZSBWaWRlbyAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIs
ICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmluZyBmb3IgdGFraW5n
IG9ubHkgdmlkZW9zIik7Ci0gICAgZWxzZQotICAgICAgICBjYW1lcmFTdHJpbmcgPSBXRUJfVUlf
U1RSSU5HX0tFWSgiVGFrZSBQaG90byIsICJUYWtlIFBob3RvIChmaWxlIHVwbG9hZCBhY3Rpb24g
c2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGNhbWVyYSBidXR0b24gc3RyaW5nIGZv
ciB0YWtpbmcgb25seSBwaG90b3MiKTsKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkdfS0VZ
KCJUYWtlIFBob3RvIG9yIFZpZGVvIiwgIlRha2UgUGhvdG8gb3IgVmlkZW8gKGZpbGUgdXBsb2Fk
IGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBz
dHJpbmcgZm9yIHRha2luZyBwaG90b3Mgb3IgdmlkZW9zIik7CisKKyAgICBpZiAoY29udGFpbnNW
aWRlb01lZGlhVHlwZSkKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFZp
ZGVvIiwgIlRha2UgVmlkZW8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxv
YWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBvbmx5IHZpZGVv
cyIpOworCisgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFBob3RvIiwgIlRha2Ug
UGhvdG8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hl
ZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBvbmx5IHBob3RvcyIpOworfQorCist
ICh2b2lkKV9zaG93TWVkaWFTb3VyY2VTZWxlY3Rpb25TaGVldAoreworICAgIE5TU3RyaW5nICpl
eGlzdGluZ1N0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCJQaG90byBMaWJyYXJ5IiwgIlBob3Rv
IExpYnJhcnkgKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQg
c2hlZXQgYnV0dG9uIHN0cmluZyBmb3IgY2hvb3NpbmcgYW4gZXhpc3RpbmcgbWVkaWEgaXRlbSBm
cm9tIHRoZSBQaG90byBMaWJyYXJ5Iik7CisgICAgTlNTdHJpbmcgKmNhbWVyYVN0cmluZyA9IFtz
ZWxmIF9jYW1lcmFCdXR0b25MYWJlbF07CisgICAgTlNTdHJpbmcgKmNhbmNlbFN0cmluZyA9IFdF
Ql9VSV9TVFJJTkdfS0VZKCJDYW5jZWwiLCAiQ2FuY2VsIChmaWxlIHVwbG9hZCBhY3Rpb24gc2hl
ZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1dHRvbiBzdHJpbmcgdG8gY2FuY2VsIik7
CiAKICAgICBfYWN0aW9uU2hlZXRDb250cm9sbGVyID0gW1VJQWxlcnRDb250cm9sbGVyIGFsZXJ0
Q29udHJvbGxlcldpdGhUaXRsZTpuaWwgbWVzc2FnZTpuaWwgcHJlZmVycmVkU3R5bGU6VUlBbGVy
dENvbnRyb2xsZXJTdHlsZUFjdGlvblNoZWV0XTsKIApAQCAtNDAyLDEwICs0NzUsMjggQEAgLSAo
dm9pZClfc2hvd01lZGlhU291cmNlU2VsZWN0aW9uU2hlZXQKICAgICBbX2FjdGlvblNoZWV0Q29u
dHJvbGxlciBhZGRBY3Rpb246Y2FtZXJhQWN0aW9uXTsKICAgICBbX2FjdGlvblNoZWV0Q29udHJv
bGxlciBhZGRBY3Rpb246cGhvdG9MaWJyYXJ5QWN0aW9uXTsKIAotICAgIGlmIChVSUN1cnJlbnRV
c2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpKQotICAgICAgICBbc2VsZiBfcHJlc2VudFBvcG92ZXJX
aXRoQ29udGVudFZpZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0KCkgYW5p
bWF0ZWQ6WUVTXTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIF9wcmVzZW50RnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTXTsK
KyAgICBbc2VsZiBfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJZGlvbTpfYWN0aW9uU2hlZXRD
b250cm9sbGVyLmdldCgpXTsKK30KKworLSAodm9pZClfc2hvd0RvY3VtZW50UGlja2VyTWVudQor
eworICAgIF9zb3VyY2VNZW51ID0gYWRvcHROUyhbW1VJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnRUeXBlczpbc2VsZiBfbWVkaWFUeXBlc0ZvckRvY3Vt
ZW50UGlja2VyTWVudV0gaW5Nb2RlOlVJRG9jdW1lbnRQaWNrZXJNb2RlSW1wb3J0XSk7CisgICAg
W19zb3VyY2VNZW51IHNldERlbGVnYXRlOnNlbGZdOworCisgICAgLy8gRklYTUU6IE5lZWQgaWNv
bnMgZm9yIENhbWVyYSBhbmQgUGhvdG8gTGlicmFyeSBvcHRpb25zLgorICAgIE5TU3RyaW5nICpw
aG90b0xpYnJhcnlTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiUGhvdG8gTGlicmFyeSIsICJQ
aG90byBMaWJyYXJ5IChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFs
ZXJ0IHNoZWV0IGJ1dHRvbiBzdHJpbmcgZm9yIGNob29zaW5nIGFuIGV4aXN0aW5nIG1lZGlhIGl0
ZW0gZnJvbSB0aGUgUGhvdG8gTGlicmFyeSIpOworICAgIFtfc291cmNlTWVudSBhZGRPcHRpb25X
aXRoVGl0bGU6cGhvdG9MaWJyYXJ5U3RyaW5nIGltYWdlOm5pbCBvcmRlcjpVSURvY3VtZW50TWVu
dU9yZGVyRmlyc3QgaGFuZGxlcjpeeworICAgICAgICBbc2VsZiBfc2hvd1Bob3RvUGlja2VyV2l0
aFNvdXJjZVR5cGU6VUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlUGhvdG9MaWJyYXJ5
XTsKKyAgICB9XTsKKworICAgIGlmIChOU1N0cmluZyAqY2FtZXJhU3RyaW5nID0gW3NlbGYgX2Nh
bWVyYUJ1dHRvbkxhYmVsXSkgeworICAgICAgICBbX3NvdXJjZU1lbnUgYWRkT3B0aW9uV2l0aFRp
dGxlOmNhbWVyYVN0cmluZyBpbWFnZTpuaWwgb3JkZXI6VUlEb2N1bWVudE1lbnVPcmRlckZpcnN0
IGhhbmRsZXI6XnsKKyAgICAgICAgICAgIF91c2luZ0NhbWVyYSA9IFlFUzsKKyAgICAgICAgICAg
IFtzZWxmIF9zaG93UGhvdG9QaWNrZXJXaXRoU291cmNlVHlwZTpVSUltYWdlUGlja2VyQ29udHJv
bGxlclNvdXJjZVR5cGVDYW1lcmFdOworICAgICAgICB9XTsKKyAgICB9CisKKyAgICBbc2VsZiBf
cHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJZGlvbTpfc291cmNlTWVudS5nZXQoKV07CiB9CiAK
ICNwcmFnbWEgbWFyayAtIEltYWdlIFBpY2tlcgpAQCAtNDMxLDYgKzUyMiwxNCBAQCAtICh2b2lk
KV9zaG93UGhvdG9QaWNrZXJXaXRoU291cmNlVHlwZTooVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJT
b3VyY2VUeXBlKXNvdXJjZQogCiAjcHJhZ21hIG1hcmsgLSBQcmVzZW50aW5nIFZpZXcgQ29udHJv
bGxlcnMKIAorLSAodm9pZClfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJZGlvbTooVUlWaWV3
Q29udHJvbGxlciAqKXZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKFVJQ3VycmVudFVzZXJJbnRl
cmZhY2VJZGlvbUlzUGFkKCkpCisgICAgICAgIFtzZWxmIF9wcmVzZW50UG9wb3ZlcldpdGhDb250
ZW50Vmlld0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIgYW5pbWF0ZWQ6WUVTXTsKKyAgICBlbHNl
CisgICAgICAgIFtzZWxmIF9wcmVzZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVyOnZpZXdDb250
cm9sbGVyIGFuaW1hdGVkOllFU107Cit9CisKIC0gKHZvaWQpX3ByZXNlbnRQb3BvdmVyV2l0aENv
bnRlbnRWaWV3Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKWNvbnRlbnRWaWV3Q29udHJv
bGxlciBhbmltYXRlZDooQk9PTClhbmltYXRlZAogewogICAgIFtzZWxmIF9kaXNtaXNzRGlzcGxh
eUFuaW1hdGVkOmFuaW1hdGVkXTsKQEAgLTQ1NSw2ICs1NTQsMzYgQEAgLSAodm9pZClwb3BvdmVy
Q29udHJvbGxlckRpZERpc21pc3NQb3BvdmVyOihVSVBvcG92ZXJDb250cm9sbGVyICopcG9wb3Zl
ckNvbnRyb2wKICAgICBbc2VsZiBfY2FuY2VsXTsKIH0KIAorI3ByYWdtYSBtYXJrIC0gVUlEb2N1
bWVudE1lbnVEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbgorCistICh2b2lkKWRvY3VtZW50TWVudToo
VUlEb2N1bWVudE1lbnVWaWV3Q29udHJvbGxlciAqKWRvY3VtZW50TWVudSBkaWRQaWNrRG9jdW1l
bnRQaWNrZXI6KFVJRG9jdW1lbnRQaWNrZXJWaWV3Q29udHJvbGxlciAqKWRvY3VtZW50UGlja2Vy
Cit7CisgICAgZG9jdW1lbnRQaWNrZXIuZGVsZWdhdGUgPSBzZWxmOworICAgIGRvY3VtZW50UGlj
a2VyLm1vZGFsUHJlc2VudGF0aW9uU3R5bGUgPSBVSU1vZGFsUHJlc2VudGF0aW9uRnVsbFNjcmVl
bjsKKworICAgIFtzZWxmIF9wcmVzZW50Rm9yQ3VycmVudEludGVyZmFjZUlkaW9tOmRvY3VtZW50
UGlja2VyXTsKK30KKworLSAodm9pZClkb2N1bWVudE1lbnVXYXNDYW5jZWxsZWQ6KFVJRG9jdW1l
bnRNZW51Vmlld0NvbnRyb2xsZXIgKilkb2N1bWVudE1lbnUKK3sKKyAgICBbc2VsZiBfZGlzbWlz
c0Rpc3BsYXlBbmltYXRlZDpZRVNdOworICAgIFtzZWxmIF9jYW5jZWxdOworfQorCisjcHJhZ21h
IG1hcmsgLSBVSURvY3VtZW50UGlja2VyQ29udHJvbGxlckRlbGVnYXRlIGltcGxlbWVudGF0aW9u
CisKKy0gKHZvaWQpZG9jdW1lbnRQaWNrZXI6KFVJRG9jdW1lbnRQaWNrZXJWaWV3Q29udHJvbGxl
ciAqKWNvbnRyb2xsZXIgZGlkUGlja0RvY3VtZW50QXRVUkw6KE5TVVJMICopdXJsCit7CisgICAg
W3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6WUVTXTsKKyAgICBbc2VsZiBfY2hvb3NlRmls
ZXM6QFt1cmxdIGRpc3BsYXlTdHJpbmc6dXJsLmxhc3RQYXRoQ29tcG9uZW50IGljb25JbWFnZTpp
Y29uRm9yRmlsZSh1cmwpXTsKK30KKworLSAodm9pZClkb2N1bWVudFBpY2tlcldhc0NhbmNlbGxl
ZDooVUlEb2N1bWVudFBpY2tlclZpZXdDb250cm9sbGVyICopaW1hZ2VQaWNrZXIKK3sKKyAgICBb
c2VsZiBfZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDpZRVNdOworICAgIFtzZWxmIF9jYW5jZWxdOwor
fQorCiAjcHJhZ21hIG1hcmsgLSBVSUltYWdlUGlja2VyQ29udHJvbGxlckRlbGVnYXRlIGltcGxl
bWVudGF0aW9uCiAKIC0gKEJPT0wpX3dpbGxNdWx0aXBsZVNlbGVjdGlvbkRlbGVnYXRlQmVDYWxs
ZWQKQEAgLTU3NCw4ICs3MDMsNyBAQCAtICh2b2lkKV91cGxvYWRJdGVtRnJvbU1lZGlhSW5mbzoo
TlNEaWN0aW9uYXJ5ICopaW5mbyBzdWNjZXNzQmxvY2s6KHZvaWQgKF4pKF9XSwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgTlNTdHJpbmcgKmZpbGVQYXRoID0gW21l
ZGlhVVJMIHBhdGhdOwotICAgICAgICBzdWNjZXNzQmxvY2soYWRvcHROUyhbW19XS1ZpZGVvRmls
ZVVwbG9hZEl0ZW0gYWxsb2NdIGluaXRXaXRoRmlsZVBhdGg6ZmlsZVBhdGggbWVkaWFVUkw6bWVk
aWFVUkxdKS5nZXQoKSk7CisgICAgICAgIHN1Y2Nlc3NCbG9jayhhZG9wdE5TKFtbX1dLVmlkZW9G
aWxlVXBsb2FkSXRlbSBhbGxvY10gaW5pdFdpdGhGaWxlVVJMOm1lZGlhVVJMXSkuZ2V0KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MjcsNyArNzU1LDcgQEAgLSAodm9pZClfdXBs
b2FkSXRlbUZyb21NZWRpYUluZm86KE5TRGljdGlvbmFyeSAqKWluZm8gc3VjY2Vzc0Jsb2NrOih2
b2lkICheKShfV0sKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHN1Y2Nlc3NCbG9jayhhZG9wdE5TKFtbX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBh
bGxvY10gaW5pdFdpdGhGaWxlUGF0aDpmaWxlUGF0aCBvcmlnaW5hbEltYWdlOm9yaWdpbmFsSW1h
Z2VdKS5nZXQoKSk7CisgICAgICAgICAgICBzdWNjZXNzQmxvY2soYWRvcHROUyhbW19XS0ltYWdl
RmlsZVVwbG9hZEl0ZW0gYWxsb2NdIGluaXRXaXRoRmlsZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOmZpbGVQYXRoXSBvcmlnaW5hbEltYWdlOm9yaWdpbmFsSW1hZ2VdKS5nZXQoKSk7CiAgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248506</attachid>
            <date>2015-03-12 03:12:52 -0700</date>
            <delta_ts>2015-03-12 23:09:41 -0700</delta_ts>
            <desc>WIP Take 2</desc>
            <filename>0001-Use-UIDocumentMenuViewController-to-allow-selection-.patch</filename>
            <type>text/plain</type>
            <size>27039</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">RnJvbSA0MTBkN2RlZDczMzhjMTBjMmI2M2Q1MmYzZTc1MjM4ODk2NWI2YzM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gSG9uZXljdXR0IDxqaG9uZXljdXR0QGFwcGxlLmNvbT4K
RGF0ZTogV2VkLCAxMSBNYXIgMjAxNSAxNToxODo1MiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFVz
ZSBVSURvY3VtZW50TWVudVZpZXdDb250cm9sbGVyIHRvIGFsbG93IHNlbGVjdGlvbiBvZiBmaWxl
cwogZnJvbSBpQ2xvdWQgRHJpdmUgaW4gV0tGaWxlVXBsb2FkUGFuZWwKClBhcnQgb2YgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTY+IFdlYktpdCBvbgppT1Mg
c2hvdWxkIHN1cHBvcnQgZmlsZSB1cGxvYWQgZnJvbSBpQ2xvdWQgRHJpdmUKPHJkYXI6Ly9wcm9i
bGVtLzEyMTc4OTkxPgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgoqIFBsYXRmb3JtL3Nw
aS9pb3MvVUlLaXRTUEkuaDoKSW5jbHVkZSBVSURvY3VtZW50TWVudVZpZXdDb250cm9sbGVyX1By
aXZhdGUuaCBpZiBpdCBleGlzdHMuIElmIG5vdCwKZGVjbGFyZSB0aGlzIG5ldyBTUEkuCgoqIFVJ
UHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW06CihmYWxsYmFja0ljb25Gb3JG
aWxlKToKQ3JlYXRlIGEgVUlEb2N1bWVudEludGVyYWN0aW9uQ29udHJvbGxlciBmb3IgdGhlIGZp
bGUsIGFuZCByZXR1cm4gYQp0aHVtYm5haWwgaW1hZ2UgZnJvbSBpdHMgc21hbGxlc3QgaWNvbi4K
CihpY29uRm9ySW1hZ2VGaWxlKToKSWYgd2UgY2FuIGdldCBhIFVJSW1hZ2UgZnJvbSB0aGUgZmls
ZSwgY3JlYXRlIGEgdGh1bWJuYWlsIGZyb20gaXQuCk90aGVyd2lzZSwgY2FsbCBmYWxsYmFja0lj
b25Gb3JGaWxlKCkuCgooaWNvbkZvclZpZGVvRmlsZSk6CkNvZGUgbW92ZWQgZnJvbSAtW19XS1Zp
ZGVvRmlsZVVwbG9hZEl0ZW0gZGlzcGxheUltYWdlXS4KCihpY29uRm9yRmlsZSk6CkdldCB0aGUg
ZmlsZSdzIGV4dGVuc2lvbiwgYW5kIGdldCB0aGUgZXh0ZW5zaW9uJ3MgcHJlZmVycmVkIFVUSS4g
SWYgdGhlClVUSSBpcyBhbiBpbWFnZSB0eXBlLCBjYWxsIGljb25Gb3JJbWFnZUZpbGUoKS4gSWYg
aXQncyBhIHZpZGVvIHR5cGUsCmNhbGwgaWNvbkZvclZpZGVvRmlsZSgpLiBPdGhlcndpc2UsIHJl
dHVybiB0aGUgZmFsbGJhY2sgaWNvbi4KCigtW19XS0ZpbGVVcGxvYWRJdGVtIGluaXRXaXRoRmls
ZVVSTDpdKToKQWRkZWQgYW4gaW5pdGlhbGl6ZXIgdGhhdCB0YWtlcyBhIGZpbGUgVVJMLgoKKC1b
X1dLRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOgooLVtfV0tJbWFnZUZpbGVVcGxvYWRJdGVtIGlu
aXRXaXRoRmlsZVVSTDpvcmlnaW5hbEltYWdlOl0pOgooLVtfV0tWaWRlb0ZpbGVVcGxvYWRJdGVt
IGRpc3BsYXlJbWFnZV0pOgooV0tGaWxlVXBsb2FkUGFuZWwpOgpJbmhlcml0IGZyb20gVUlEb2N1
bWVudFBpY2tlckRlbGVnYXRlIGFuZCBVSURvY3VtZW50TWVudURlbGVnYXRlLiBBZGQKYW4gaXZh
ciBmb3IgdGhlIGRvY3VtZW50IG1lbnUgY29udHJvbGxlci4KCigtW1dLRmlsZVVwbG9hZFBhbmVs
IGRlYWxsb2NdKToKKC1bV0tGaWxlVXBsb2FkUGFuZWwgcHJlc2VudFdpdGhQYXJhbWV0ZXJzOnJl
c3VsdExpc3RlbmVyOl0pOgpJZiBpbnN0YW5jZXMgb2YgVUlEb2N1bWVudE1lbnVWaWV3Q29udHJv
bGxlciByZXNwb25kIHRvCi1fc2V0SWdub3JlQXBwbGljYXRpb25FbnRpdGxlbWVudEZvckltcG9y
dDosIG1lYW5pbmcgd2UgY2FuIGRpc2FibGUgdGhlCmFzc2VydGlvbiB0aGF0IHRoZSBjdXJyZW50
IGFwcCBoYXMgdGhlIGlDbG91ZCBEb2N1bWVudHMgZW50aXRsZW1lbnQsCnRoZW4gc2hvdyB0aGUg
ZG9jdW1lbnQgcGlja2VyIG1lbnUuIE90aGVyd2lzZSwgc2hvdyB0aGUgY3VycmVudCBzb3VyY2UK
c2VsZWN0aW9uIFVJLiBUaGUgcnVudGltZSBjaGVjayB3aWxsIGJlIHJlbW92ZWQgd2hlbiBhIG5l
d2VyIFVJS2l0IGlzCmF2YWlsYWJsZS4KCigtW1dLRmlsZVVwbG9hZFBhbmVsIF9VVElzRm9yTUlN
RVR5cGVzXSk6ClJldHVybiB0aGUgVVRJcyBmb3IgdGhlIDxpbnB1dD4gZWxlbWVudCdzICJhY2Nl
cHQiIGF0dHJpYnV0ZSdzIE1JTUUKdHlwZSBsaXN0LgoKKC1bV0tGaWxlVXBsb2FkUGFuZWwgX21l
ZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOl0pOgpDYWxsIC1fVVRJc0Zvck1JTUVUeXBlcy4g
RmFsbCBiYWNrIHRvIGF2YWlsYWJsZSBzb3VyY2UgdHlwZXMgZm9yIHRoaXMKcGlja2VyIHR5cGUu
CgooLVtXS0ZpbGVVcGxvYWRQYW5lbCBfbWVkaWFUeXBlc0ZvckRvY3VtZW50UGlja2VyTWVudV0p
OgpDYWxsIC1fVVRJc0Zvck1JTUVUeXBlcy4gRmFsbCBiYWNrIHRvIHRoZSBhbGwtZW5jb21wYXNz
aW5nCiJwdWJsaWMuaXRlbSIgVVRJLgoKKC1bV0tGaWxlVXBsb2FkUGFuZWwgX3Bob3RvTGlicmFy
eUJ1dHRvbkxhYmVsXSk6CigtW1dLRmlsZVVwbG9hZFBhbmVsIF9jYW1lcmFCdXR0b25MYWJlbF0p
OgpGYWN0b3JlZCBvdXQgb2YgLV9zaG93TWVkaWFTb3VyY2VTZWxlY3Rpb25TaGVldC4gUmV0dXJu
IHRoZQphcHByb3ByaWF0ZSBsYWJlbCBmb3IgdGhlIGNhbWVyYSBidXR0b24sIGJhc2VkIG9uIHdo
ZXRoZXIgaXQgY2FuIHRha2UgYQpwaG90byBvciB2aWRlbywgb3IgcmV0dXJuIG5pbCBpZiB0aGUg
Y2FtZXJhIGlzIG5vdCBhdmFpbGFibGUuCgooLVtXS0ZpbGVVcGxvYWRQYW5lbCBfc2hvd01lZGlh
U291cmNlU2VsZWN0aW9uU2hlZXRdKToKQ2hhbmdlZCB0byB1c2UgLV9jYW1lcmFCdXR0b25MYWJl
bCBhbmQKLV9wcmVzZW50Rm9yQ3VycmVudEludGVyZmFjZUlkaW9tOi4KCigtW1dLRmlsZVVwbG9h
ZFBhbmVsIF9zaG93RG9jdW1lbnRQaWNrZXJNZW51XSk6CkNyZWF0ZSBhIFVJRG9jdW1lbnRNZW51
Vmlld0NvbnRyb2xsZXIsIGFuZCBwb3B1bGF0ZSBpdCB3aXRoIG9wdGlvbnMgdG8Kb3BlbiB0aGUg
cGhvdG8gbGlicmFyeSBvciB0YWtlIGEgcGljdHVyZSBvciB2aWRlby4gSWYgaUNsb3VkIERyaXZl
IG9yCm90aGVyIGRvY3VtZW50IHNvdXJjZXMgYXJlIGF2YWlsYWJsZSwgdGhleSB3aWxsIGJlIGFk
ZGVkIGF1dG9tYXRpY2FsbHkuCgooLVtXS0ZpbGVVcGxvYWRQYW5lbCBfcHJlc2VudEZvckN1cnJl
bnRJbnRlcmZhY2VJZGlvbTpdKToKKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRNZW51OmRp
ZFBpY2tEb2N1bWVudFBpY2tlcjpdKToKKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRNZW51
V2FzQ2FuY2VsbGVkOl0pOgooLVtXS0ZpbGVVcGxvYWRQYW5lbCBkb2N1bWVudFBpY2tlcjpkaWRQ
aWNrRG9jdW1lbnRBdFVSTDpdKToKKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRQaWNrZXJX
YXNDYW5jZWxsZWQ6XSk6CigtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxvYWRJdGVtRnJvbU1lZGlh
SW5mbzpzdWNjZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0pOgoKKC1bX1dLSW1hZ2VGaWxlVXBsb2Fk
SXRlbSBpbml0V2l0aEZpbGVQYXRoOm9yaWdpbmFsSW1hZ2U6XSk6IERlbGV0ZWQuCigtW19XS0lt
YWdlRmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOiBEZWxldGVkLgooLVtfV0tWaWRlb0ZpbGVVcGxv
YWRJdGVtIGluaXRXaXRoRmlsZVBhdGg6bWVkaWFVUkw6XSk6IERlbGV0ZWQuCigtW19XS1ZpZGVv
RmlsZVVwbG9hZEl0ZW0gZmlsZVVSTF0pOiBEZWxldGVkLgotLS0KIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkwICsrKysrKysKIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCAgICAgICAgIHwgIDEyICsKIC4uLi9V
SVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tICAgICAgIHwgMjcwICsrKysr
KysrKysrKysrKy0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAzMDMgaW5zZXJ0aW9ucygrKSwgNjkg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDE5Zjk4MzIuLmM3NzBjZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw5MyBAQAorMjAxNS0wMy0xMiAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRA
YXBwbGUuY29tPgorCisgICAgICAgIFVzZSBVSURvY3VtZW50TWVudVZpZXdDb250cm9sbGVyIHRv
IGFsbG93IHNlbGVjdGlvbiBvZiBmaWxlcyBmcm9tCisgICAgICAgIGlDbG91ZCBEcml2ZSBpbiBX
S0ZpbGVVcGxvYWRQYW5lbAorCisgICAgICAgIFBhcnQgb2YgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTY+IFdlYktpdCBvbgorICAgICAgICBpT1Mgc2hvdWxk
IHN1cHBvcnQgZmlsZSB1cGxvYWQgZnJvbSBpQ2xvdWQgRHJpdmUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzEyMTc4OTkxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorICAgICAgICBJbmNsdWRl
IFVJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xsZXJfUHJpdmF0ZS5oIGlmIGl0IGV4aXN0cy4gSWYg
bm90LAorICAgICAgICBkZWNsYXJlIHRoaXMgbmV3IFNQSS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW06CisgICAgICAgIChmYWxsYmFja0ljb25G
b3JGaWxlKToKKyAgICAgICAgQ3JlYXRlIGEgVUlEb2N1bWVudEludGVyYWN0aW9uQ29udHJvbGxl
ciBmb3IgdGhlIGZpbGUsIGFuZCByZXR1cm4gYQorICAgICAgICB0aHVtYm5haWwgaW1hZ2UgZnJv
bSBpdHMgc21hbGxlc3QgaWNvbi4KKworICAgICAgICAoaWNvbkZvckltYWdlRmlsZSk6CisgICAg
ICAgIElmIHdlIGNhbiBnZXQgYSBVSUltYWdlIGZyb20gdGhlIGZpbGUsIGNyZWF0ZSBhIHRodW1i
bmFpbCBmcm9tIGl0LgorICAgICAgICBPdGhlcndpc2UsIGNhbGwgZmFsbGJhY2tJY29uRm9yRmls
ZSgpLgorCisgICAgICAgIChpY29uRm9yVmlkZW9GaWxlKToKKyAgICAgICAgQ29kZSBtb3ZlZCBm
cm9tIC1bX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBkaXNwbGF5SW1hZ2VdLgorCisgICAgICAgIChp
Y29uRm9yRmlsZSk6CisgICAgICAgIEdldCB0aGUgZmlsZSdzIGV4dGVuc2lvbiwgYW5kIGdldCB0
aGUgZXh0ZW5zaW9uJ3MgcHJlZmVycmVkIFVUSS4gSWYgdGhlCisgICAgICAgIFVUSSBpcyBhbiBp
bWFnZSB0eXBlLCBjYWxsIGljb25Gb3JJbWFnZUZpbGUoKS4gSWYgaXQncyBhIHZpZGVvIHR5cGUs
CisgICAgICAgIGNhbGwgaWNvbkZvclZpZGVvRmlsZSgpLiBPdGhlcndpc2UsIHJldHVybiB0aGUg
ZmFsbGJhY2sgaWNvbi4KKworICAgICAgICAoLVtfV0tGaWxlVXBsb2FkSXRlbSBpbml0V2l0aEZp
bGVVUkw6XSk6CisgICAgICAgIEFkZGVkIGFuIGluaXRpYWxpemVyIHRoYXQgdGFrZXMgYSBmaWxl
IFVSTC4KKworICAgICAgICAoLVtfV0tGaWxlVXBsb2FkSXRlbSBmaWxlVVJMXSk6CisgICAgICAg
ICgtW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gaW5pdFdpdGhGaWxlVVJMOm9yaWdpbmFsSW1hZ2U6
XSk6CisgICAgICAgICgtW19XS1ZpZGVvRmlsZVVwbG9hZEl0ZW0gZGlzcGxheUltYWdlXSk6Cisg
ICAgICAgIChXS0ZpbGVVcGxvYWRQYW5lbCk6CisgICAgICAgIEluaGVyaXQgZnJvbSBVSURvY3Vt
ZW50UGlja2VyRGVsZWdhdGUgYW5kIFVJRG9jdW1lbnRNZW51RGVsZWdhdGUuIEFkZAorICAgICAg
ICBhbiBpdmFyIGZvciB0aGUgZG9jdW1lbnQgbWVudSBjb250cm9sbGVyLgorCisgICAgICAgICgt
W1dLRmlsZVVwbG9hZFBhbmVsIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFu
ZWwgcHJlc2VudFdpdGhQYXJhbWV0ZXJzOnJlc3VsdExpc3RlbmVyOl0pOgorICAgICAgICBJZiBp
bnN0YW5jZXMgb2YgVUlEb2N1bWVudE1lbnVWaWV3Q29udHJvbGxlciByZXNwb25kIHRvCisgICAg
ICAgIC1fc2V0SWdub3JlQXBwbGljYXRpb25FbnRpdGxlbWVudEZvckltcG9ydDosIG1lYW5pbmcg
d2UgY2FuIGRpc2FibGUgdGhlCisgICAgICAgIGFzc2VydGlvbiB0aGF0IHRoZSBjdXJyZW50IGFw
cCBoYXMgdGhlIGlDbG91ZCBEb2N1bWVudHMgZW50aXRsZW1lbnQsCisgICAgICAgIHRoZW4gc2hv
dyB0aGUgZG9jdW1lbnQgcGlja2VyIG1lbnUuIE90aGVyd2lzZSwgc2hvdyB0aGUgY3VycmVudCBz
b3VyY2UKKyAgICAgICAgc2VsZWN0aW9uIFVJLiBUaGUgcnVudGltZSBjaGVjayB3aWxsIGJlIHJl
bW92ZWQgd2hlbiBhIG5ld2VyIFVJS2l0IGlzCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAg
ICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfVVRJc0Zvck1JTUVUeXBlc10pOgorICAgICAgICBSZXR1
cm4gdGhlIFVUSXMgZm9yIHRoZSA8aW5wdXQ+IGVsZW1lbnQncyAiYWNjZXB0IiBhdHRyaWJ1dGUn
cyBNSU1FCisgICAgICAgIHR5cGUgbGlzdC4KKworICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5l
bCBfbWVkaWFUeXBlc0ZvclBpY2tlclNvdXJjZVR5cGU6XSk6CisgICAgICAgIENhbGwgLV9VVElz
Rm9yTUlNRVR5cGVzLiBGYWxsIGJhY2sgdG8gYXZhaWxhYmxlIHNvdXJjZSB0eXBlcyBmb3IgdGhp
cworICAgICAgICBwaWNrZXIgdHlwZS4KKworICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBf
bWVkaWFUeXBlc0ZvckRvY3VtZW50UGlja2VyTWVudV0pOgorICAgICAgICBDYWxsIC1fVVRJc0Zv
ck1JTUVUeXBlcy4gRmFsbCBiYWNrIHRvIHRoZSBhbGwtZW5jb21wYXNzaW5nCisgICAgICAgICJw
dWJsaWMuaXRlbSIgVVRJLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9waG90b0xp
YnJhcnlCdXR0b25MYWJlbF0pOgorICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfY2FtZXJh
QnV0dG9uTGFiZWxdKToKKyAgICAgICAgRmFjdG9yZWQgb3V0IG9mIC1fc2hvd01lZGlhU291cmNl
U2VsZWN0aW9uU2hlZXQuIFJldHVybiB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgbGFiZWwgZm9y
IHRoZSBjYW1lcmEgYnV0dG9uLCBiYXNlZCBvbiB3aGV0aGVyIGl0IGNhbiB0YWtlIGEKKyAgICAg
ICAgcGhvdG8gb3IgdmlkZW8sIG9yIHJldHVybiBuaWwgaWYgdGhlIGNhbWVyYSBpcyBub3QgYXZh
aWxhYmxlLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9zaG93TWVkaWFTb3VyY2VT
ZWxlY3Rpb25TaGVldF0pOgorICAgICAgICBDaGFuZ2VkIHRvIHVzZSAtX2NhbWVyYUJ1dHRvbkxh
YmVsIGFuZAorICAgICAgICAtX3ByZXNlbnRGb3JDdXJyZW50SW50ZXJmYWNlSWRpb206LgorCisg
ICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9zaG93RG9jdW1lbnRQaWNrZXJNZW51XSk6Cisg
ICAgICAgIENyZWF0ZSBhIFVJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xsZXIsIGFuZCBwb3B1bGF0
ZSBpdCB3aXRoIG9wdGlvbnMgdG8KKyAgICAgICAgb3BlbiB0aGUgcGhvdG8gbGlicmFyeSBvciB0
YWtlIGEgcGljdHVyZSBvciB2aWRlby4gSWYgaUNsb3VkIERyaXZlIG9yCisgICAgICAgIG90aGVy
IGRvY3VtZW50IHNvdXJjZXMgYXJlIGF2YWlsYWJsZSwgdGhleSB3aWxsIGJlIGFkZGVkIGF1dG9t
YXRpY2FsbHkuCisKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX3ByZXNlbnRGb3JDdXJy
ZW50SW50ZXJmYWNlSWRpb206XSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIGRvY3Vt
ZW50TWVudTpkaWRQaWNrRG9jdW1lbnRQaWNrZXI6XSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9h
ZFBhbmVsIGRvY3VtZW50TWVudVdhc0NhbmNlbGxlZDpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBs
b2FkUGFuZWwgZG9jdW1lbnRQaWNrZXI6ZGlkUGlja0RvY3VtZW50QXRVUkw6XSk6CisgICAgICAg
ICgtW1dLRmlsZVVwbG9hZFBhbmVsIGRvY3VtZW50UGlja2VyV2FzQ2FuY2VsbGVkOl0pOgorICAg
ICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBfdXBsb2FkSXRlbUZyb21NZWRpYUluZm86c3VjY2Vz
c0Jsb2NrOmZhaWx1cmVCbG9jazpdKToKKworICAgICAgICAoLVtfV0tJbWFnZUZpbGVVcGxvYWRJ
dGVtIGluaXRXaXRoRmlsZVBhdGg6b3JpZ2luYWxJbWFnZTpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBmaWxlVVJMXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W19XS1ZpZGVvRmlsZVVwbG9hZEl0ZW0gaW5pdFdpdGhGaWxlUGF0aDptZWRpYVVSTDpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBmaWxlVVJMXSk6IERlbGV0
ZWQuCisKIDIwMTUtMDMtMTAgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3Nw
aS9pb3MvVUlLaXRTUEkuaAppbmRleCA4ZjFmNjM0Li4yNzI1YTI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC02OSw2ICs2OSwxNCBAQAogI2ltcG9y
dCA8VUlLaXQvX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbi5oPgogI2ltcG9ydCA8
VUlLaXQvX1VJTmF2aWdhdGlvblBhcmFsbGF4VHJhbnNpdGlvbi5oPgogCisjaWYgZGVmaW5lZChf
X2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxVSUtpdC9VSURvY3VtZW50TWVudVZpZXdD
b250cm9sbGVyX1ByaXZhdGUuaD4pCisjaW1wb3J0IDxVSUtpdC9VSURvY3VtZW50TWVudVZpZXdD
b250cm9sbGVyX1ByaXZhdGUuaD4KKyNlbHNlCitAaW50ZXJmYWNlIFVJRG9jdW1lbnRNZW51Vmll
d0NvbnRyb2xsZXIgKERldGFpbHMpCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCBzZXR0
ZXIgPSBfc2V0SWdub3JlQXBwbGljYXRpb25FbnRpdGxlbWVudEZvckltcG9ydDosIGdldHRlciA9
IF9pZ25vcmVBcHBsaWNhdGlvbkVudGl0bGVtZW50Rm9ySW1wb3J0KSBCT09MIF9pZ25vcmVBcHBs
aWNhdGlvbkVudGl0bGVtZW50Rm9ySW1wb3J0OworQGVuZAorI2VuZGlmCisKICNlbHNlCiAKIEBp
bnRlcmZhY2UgVUlBbGVydENvbnRyb2xsZXIgKERldGFpbHMpCkBAIC02NTgsNiArNjY2LDEwIEBA
IHR5cGVkZWYgZW51bSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBpbnB1dFZpZXdPYmV5
c0RPTUZvY3VzOwogQGVuZAogCitAaW50ZXJmYWNlIFVJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xs
ZXIgKERldGFpbHMpCitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduLCBzZXR0ZXIgPSBfc2V0
SWdub3JlQXBwbGljYXRpb25FbnRpdGxlbWVudEZvckltcG9ydDosIGdldHRlciA9IF9pZ25vcmVB
cHBsaWNhdGlvbkVudGl0bGVtZW50Rm9ySW1wb3J0KSBCT09MIF9pZ25vcmVBcHBsaWNhdGlvbkVu
dGl0bGVtZW50Rm9ySW1wb3J0OworQGVuZAorCiAjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKIAogQGludGVyZmFjZSBVSVZpZXcgKElQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tCmluZGV4IDU5ZmNj
YmYuLjIxMTYzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9y
bXMvV0tGaWxlVXBsb2FkUGFuZWwubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbQpAQCAtNTcsOCArNTcsNyBAQCBTT0ZUX0xJTktf
RlJBTUVXT1JLKENvcmVNZWRpYSk7CiBTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01U
aW1lWmVybywgQ01UaW1lKTsKICNkZWZpbmUga0NNVGltZVplcm8gZ2V0a0NNVGltZVplcm8oKQog
Ci0KLSNwcmFnbWEgbWFyayAtIF9XS0ZpbGVVcGxvYWRJdGVtCisjcHJhZ21hIG1hcmsgLSBJY29u
IGdlbmVyYXRpb24KIAogc3RhdGljIENHUmVjdCBzcXVhcmVDcm9wUmVjdEZvclNpemUoQ0dTaXpl
IHNpemUpCiB7CkBAIC0xMDUsMTQgKzEwNCw4NyBAQCBzdGF0aWMgVUlJbWFnZSAqdGh1bWJuYWls
U2l6ZWRJbWFnZUZvckltYWdlKFVJSW1hZ2UgKmltYWdlKQogICAgIHJldHVybiByZXN1bHRJbWFn
ZTsKIH0KIAorc3RhdGljIFVJSW1hZ2UqIGZhbGxiYWNrSWNvbkZvckZpbGUoTlNVUkwgKmZpbGUp
Cit7CisgICAgQVNTRVJUX0FSRyhmaWxlLCBbZmlsZSBpc0ZpbGVVUkxdKTsKKworICAgIFVJRG9j
dW1lbnRJbnRlcmFjdGlvbkNvbnRyb2xsZXIgKmludGVyYWN0aW9uQ29udHJvbGxlciA9IFtVSURv
Y3VtZW50SW50ZXJhY3Rpb25Db250cm9sbGVyIGludGVyYWN0aW9uQ29udHJvbGxlcldpdGhVUkw6
ZmlsZV07CisgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShpbnRlcmFjdGlv
bkNvbnRyb2xsZXIuaWNvbnNbMF0pOworfQorCitzdGF0aWMgVUlJbWFnZSogaWNvbkZvckltYWdl
RmlsZShOU1VSTCAqZmlsZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZpbGUsIFtmaWxlIGlzRmlsZVVS
TF0pOworCisgICAgaWYgKFVJSW1hZ2UgKmltYWdlID0gW1VJSW1hZ2UgaW1hZ2VXaXRoQ29udGVu
dHNPZkZpbGU6ZmlsZS5wYXRoXSkKKyAgICAgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VG
b3JJbWFnZShpbWFnZSk7CisKKyAgICBMT0dfRVJST1IoIl9XS1ZpZGVvRmlsZVVwbG9hZEl0ZW06
IEVycm9yIGNyZWF0aW5nIHRodW1ibmFpbCBpbWFnZSBmb3IgaW1hZ2U6ICVAIiwgZmlsZSk7Cisg
ICAgcmV0dXJuIGZhbGxiYWNrSWNvbkZvckZpbGUoZmlsZSk7Cit9CisKK3N0YXRpYyBVSUltYWdl
KiBpY29uRm9yVmlkZW9GaWxlKE5TVVJMICpmaWxlKQoreworICAgIEFTU0VSVF9BUkcoZmlsZSwg
W2ZpbGUgaXNGaWxlVVJMXSk7CisKKyAgICBSZXRhaW5QdHI8QVZVUkxBc3NldD4gYXNzZXQgPSBh
ZG9wdE5TKFthbGxvY0FWVVJMQXNzZXRJbnN0YW5jZSgpIGluaXRXaXRoVVJMOmZpbGUgb3B0aW9u
czpuaWxdKTsKKyAgICBSZXRhaW5QdHI8QVZBc3NldEltYWdlR2VuZXJhdG9yPiBnZW5lcmF0b3Ig
PSBhZG9wdE5TKFthbGxvY0FWQXNzZXRJbWFnZUdlbmVyYXRvckluc3RhbmNlKCkgaW5pdFdpdGhB
c3NldDphc3NldC5nZXQoKV0pOworICAgIFtnZW5lcmF0b3Igc2V0QXBwbGllc1ByZWZlcnJlZFRy
YWNrVHJhbnNmb3JtOllFU107CisKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VSZWYgPSBhZG9wdENGKFtnZW5lcmF0b3IgY29weUNHSW1h
Z2VBdFRpbWU6a0NNVGltZVplcm8gYWN0dWFsVGltZTpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIExPR19FUlJPUigiX1dLVmlkZW9GaWxlVXBsb2FkSXRlbTog
RXJyb3IgY3JlYXRpbmcgaW1hZ2UgZm9yIHZpZGVvOiAlQCIsIGZpbGUpOworICAgICAgICByZXR1
cm4gZmFsbGJhY2tJY29uRm9yRmlsZShmaWxlKTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8VUlJ
bWFnZT4gaW1hZ2UgPSBhZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmlt
YWdlUmVmLmdldCgpXSk7CisgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShp
bWFnZS5nZXQoKSk7Cit9CisKK3N0YXRpYyBVSUltYWdlKiBpY29uRm9yRmlsZShOU1VSTCAqZmls
ZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZpbGUsIFtmaWxlIGlzRmlsZVVSTF0pOworCisgICAgTlNT
dHJpbmcgKmZpbGVFeHRlbnNpb24gPSBmaWxlLnBhdGhFeHRlbnNpb247CisgICAgaWYgKCFmaWxl
RXh0ZW5zaW9uLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gZmlsZVVUSSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRp
ZmllckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uLCAoQ0ZTdHJpbmdSZWYpZmls
ZUV4dGVuc2lvbiwgMCkpOworCisgICAgaWYgKFVUVHlwZUNvbmZvcm1zVG8oZmlsZVVUSS5nZXQo
KSwga1VUVHlwZUltYWdlKSkKKyAgICAgICAgcmV0dXJuIGljb25Gb3JJbWFnZUZpbGUoZmlsZSk7
CisKKyAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhmaWxlVVRJLmdldCgpLCBrVVRUeXBlTW92aWUp
KQorICAgICAgICByZXR1cm4gaWNvbkZvclZpZGVvRmlsZShmaWxlKTsKKworICAgIHJldHVybiBm
YWxsYmFja0ljb25Gb3JGaWxlKGZpbGUpOworfQorCisKKyNwcmFnbWEgbWFyayAtIF9XS0ZpbGVV
cGxvYWRJdGVtCiAKIEBpbnRlcmZhY2UgX1dLRmlsZVVwbG9hZEl0ZW0gOiBOU09iamVjdAorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVVSTDooTlNVUkwgKilmaWxlVVJMOwogQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5LCBnZXR0ZXI9aXNWaWRlbykgQk9PTCB2aWRlbzsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNVUkwgKmZpbGVVUkw7CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIFVJSW1hZ2UgKmRpc3BsYXlJbWFnZTsKIEBlbmQKIAotQGltcGxl
bWVudGF0aW9uIF9XS0ZpbGVVcGxvYWRJdGVtCitAaW1wbGVtZW50YXRpb24gX1dLRmlsZVVwbG9h
ZEl0ZW0geworICAgIFJldGFpblB0cjxOU1VSTD4gX2ZpbGVVUkw7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEZpbGVVUkw6KE5TVVJMICopZmlsZVVSTAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgQVNTRVJUKFtmaWxl
VVJMIGlzRmlsZVVSTF0pOworICAgIEFTU0VSVChbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6ZmlsZVVSTC5wYXRoXSk7CisgICAgX2ZpbGVVUkwgPSBmaWxl
VVJMOworICAgIHJldHVybiBzZWxmOworfQogCiAtIChCT09MKWlzVmlkZW8KIHsKQEAgLTEyMiw4
ICsxOTQsNyBAQCAtIChCT09MKWlzVmlkZW8KIAogLSAoTlNVUkwgKilmaWxlVVJMCiB7Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gX2ZpbGVV
UkwuZ2V0KCk7CiB9CiAKIC0gKFVJSW1hZ2UgKilkaXNwbGF5SW1hZ2UKQEAgLTEzNiwxOSArMjA3
LDE4IEBAIEBlbmQKIAogCiBAaW50ZXJmYWNlIF9XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gOiBfV0tG
aWxlVXBsb2FkSXRlbQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRmlsZVBhdGg6KE5TU3RyaW5n
ICopZmlsZVBhdGggb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1hZ2U7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlVVJMOihOU1VSTCAqKWZpbGVVUkwgb3JpZ2luYWxJbWFn
ZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1hZ2U7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tJ
bWFnZUZpbGVVcGxvYWRJdGVtIHsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9maWxlUGF0aDsK
ICAgICBSZXRhaW5QdHI8VUlJbWFnZT4gX29yaWdpbmFsSW1hZ2U7CiB9CiAKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEZpbGVQYXRoOihOU1N0cmluZyAqKWZpbGVQYXRoIG9yaWdpbmFsSW1hZ2U6
KFVJSW1hZ2UgKilvcmlnaW5hbEltYWdlCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlVVJM
OihOU1VSTCAqKWZpbGVVUkwgb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9yaWdpbmFsSW1hZ2UK
IHsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoRmlsZVVSTDpmaWxlVVJMXSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAg
X2ZpbGVQYXRoID0gZmlsZVBhdGg7CisKICAgICBfb3JpZ2luYWxJbWFnZSA9IG9yaWdpbmFsSW1h
Z2U7CiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC0xNTgsMTEgKzIyOCw2IEBAIC0gKEJPT0wpaXNW
aWRlbwogICAgIHJldHVybiBOTzsKIH0KIAotLSAoTlNVUkwgKilmaWxlVVJMCi17Ci0gICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6X2ZpbGVQYXRoLmdldCgpXTsKLX0KLQogLSAoVUlJ
bWFnZSAqKWRpc3BsYXlJbWFnZQogewogICAgIHJldHVybiB0aHVtYm5haWxTaXplZEltYWdlRm9y
SW1hZ2UoX29yaWdpbmFsSW1hZ2UuZ2V0KCkpOwpAQCAtMTcyLDQ4ICsyMzcsMTggQEAgQGVuZAog
CiAKIEBpbnRlcmZhY2UgX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSA6IF9XS0ZpbGVVcGxvYWRJdGVt
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlUGF0aDooTlNTdHJpbmcgKilmaWxlUGF0aCBt
ZWRpYVVSTDooTlNVUkwgKiltZWRpYVVSTDsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIF9XS1Zp
ZGVvRmlsZVVwbG9hZEl0ZW0gewotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2ZpbGVQYXRoOwot
ICAgIFJldGFpblB0cjxOU1VSTD4gX21lZGlhVVJMOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGaWxlUGF0aDooTlNTdHJpbmcgKilmaWxlUGF0aCBtZWRpYVVSTDooTlNVUkwgKiltZWRp
YVVSTAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIF9maWxlUGF0aCA9IGZpbGVQYXRoOwotICAgIF9tZWRpYVVSTCA9IG1lZGlhVVJM
OwotICAgIHJldHVybiBzZWxmOwotfQorQGltcGxlbWVudGF0aW9uIF9XS1ZpZGVvRmlsZVVwbG9h
ZEl0ZW0KIAogLSAoQk9PTClpc1ZpZGVvCiB7CiAgICAgcmV0dXJuIFlFUzsKIH0KIAotLSAoTlNV
UkwgKilmaWxlVVJMCi17Ci0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6X2ZpbGVQ
YXRoLmdldCgpXTsKLX0KLQogLSAoVUlJbWFnZSAqKWRpc3BsYXlJbWFnZQogewotICAgIFJldGFp
blB0cjxBVlVSTEFzc2V0PiBhc3NldCA9IGFkb3B0TlMoW2FsbG9jQVZVUkxBc3NldEluc3RhbmNl
KCkgaW5pdFdpdGhVUkw6X21lZGlhVVJMLmdldCgpIG9wdGlvbnM6bmlsXSk7Ci0gICAgUmV0YWlu
UHRyPEFWQXNzZXRJbWFnZUdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gYWRvcHROUyhbYWxsb2NBVkFz
c2V0SW1hZ2VHZW5lcmF0b3JJbnN0YW5jZSgpIGluaXRXaXRoQXNzZXQ6YXNzZXQuZ2V0KCldKTsK
LSAgICBbZ2VuZXJhdG9yIHNldEFwcGxpZXNQcmVmZXJyZWRUcmFja1RyYW5zZm9ybTpZRVNdOwot
Ci0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlUmVmID0gYWRvcHRDRihbZ2VuZXJhdG9yIGNvcHlDR0ltYWdlQXRUaW1lOmtDTVRpbWVaZXJv
IGFjdHVhbFRpbWU6bmlsIGVycm9yOiZlcnJvcl0pOwotICAgIGlmIChlcnJvcikgewotICAgICAg
ICBMT0dfRVJST1IoIl9XS1ZpZGVvRmlsZVVwbG9hZEl0ZW06IEVycm9yIGNyZWF0aW5nIGltYWdl
IGZvciB2aWRlbzogJUAiLCBfbWVkaWFVUkwuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIH0KLQotICAgIFJldGFpblB0cjxVSUltYWdlPiBpbWFnZSA9IGFkb3B0TlMoW1tVSUltYWdl
IGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2VSZWYuZ2V0KCldKTsKLSAgICByZXR1cm4gdGh1
bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4gaWNvbkZv
clZpZGVvRmlsZShzZWxmLmZpbGVVUkwpOwogfQogCiBAZW5kCkBAIC0yMjEsNyArMjU2LDcgQEAg
QGVuZAogCiAjcHJhZ21hIG1hcmsgLSBXS0ZpbGVVcGxvYWRQYW5lbAogCi1AaW50ZXJmYWNlIFdL
RmlsZVVwbG9hZFBhbmVsICgpIDxVSVBvcG92ZXJDb250cm9sbGVyRGVsZWdhdGUsIFVJTmF2aWdh
dGlvbkNvbnRyb2xsZXJEZWxlZ2F0ZSwgVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJEZWxlZ2F0ZT4K
K0BpbnRlcmZhY2UgV0tGaWxlVXBsb2FkUGFuZWwgKCkgPFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxl
Z2F0ZSwgVUlOYXZpZ2F0aW9uQ29udHJvbGxlckRlbGVnYXRlLCBVSUltYWdlUGlja2VyQ29udHJv
bGxlckRlbGVnYXRlLCBVSURvY3VtZW50UGlja2VyRGVsZWdhdGUsIFVJRG9jdW1lbnRNZW51RGVs
ZWdhdGU+CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0ZpbGVVcGxvYWRQYW5lbCB7CkBAIC0y
MzIsOSArMjY3LDEwIEBAIEBpbXBsZW1lbnRhdGlvbiBXS0ZpbGVVcGxvYWRQYW5lbCB7CiAgICAg
Qk9PTCBfYWxsb3dNdWx0aXBsZUZpbGVzOwogICAgIEJPT0wgX3VzaW5nQ2FtZXJhOwogICAgIFJl
dGFpblB0cjxVSUltYWdlUGlja2VyQ29udHJvbGxlcj4gX2ltYWdlUGlja2VyOwotICAgIFJldGFp
blB0cjxVSUFsZXJ0Q29udHJvbGxlcj4gX2FjdGlvblNoZWV0Q29udHJvbGxlcjsKICAgICBSZXRh
aW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gX3ByZXNlbnRhdGlvblZpZXdDb250cm9sbGVyOyAvLyBp
UGhvbmUgYWx3YXlzLiBpUGFkIGZvciBGdWxsc2NyZWVuIENhbWVyYS4KICAgICBSZXRhaW5QdHI8
VUlQb3BvdmVyQ29udHJvbGxlcj4gX3ByZXNlbnRhdGlvblBvcG92ZXI7IC8vIGlQYWQgZm9yIGFj
dGlvbiBzaGVldCBhbmQgUGhvdG8gTGlicmFyeS4KKyAgICBSZXRhaW5QdHI8VUlEb2N1bWVudE1l
bnVWaWV3Q29udHJvbGxlcj4gX2RvY3VtZW50TWVudUNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRy
PFVJQWxlcnRDb250cm9sbGVyPiBfYWN0aW9uU2hlZXRDb250cm9sbGVyOwogfQogCiAtIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldwpAQCAtMjQ5LDYgKzI4
NSw4IEBAIC0gKHZvaWQpZGVhbGxvYwogewogICAgIFtfaW1hZ2VQaWNrZXIgc2V0RGVsZWdhdGU6
bmlsXTsKICAgICBbX3ByZXNlbnRhdGlvblBvcG92ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBb
X2RvY3VtZW50TWVudUNvbnRyb2xsZXIgc2V0RGVsZWdhdGU6bmlsXTsKKwogICAgIFtzdXBlciBk
ZWFsbG9jXTsKIH0KIApAQCAtMzA1LDYgKzM0MywxMiBAQCAtICh2b2lkKXByZXNlbnRXaXRoUGFy
YW1ldGVyczooV2ViS2l0OjpXZWJPcGVuUGFuZWxQYXJhbWV0ZXJzKilwYXJhbWV0ZXJzIHJlc3Vs
dAogICAgICAgICBbbWltZVR5cGVzIGFkZE9iamVjdDptaW1lVHlwZS0+c3RyaW5nKCldOwogICAg
IF9taW1lVHlwZXMgPSBhZG9wdE5TKFttaW1lVHlwZXMgY29weV0pOwogCisgICAgaWYgKFtVSURv
Y3VtZW50TWVudVZpZXdDb250cm9sbGVyIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihfc2V0SWdub3JlQXBwbGljYXRpb25FbnRpdGxlbWVudEZvckltcG9ydDopXSkgeworICAg
ICAgICBbc2VsZiBfc2hvd0RvY3VtZW50UGlja2VyTWVudV07CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGYWxsIGJhY2sgdG8gc2hvd2luZyB0aGUgb2xkLXN0eWxlIHNvdXJjZSBz
ZWxlY3Rpb24gc2hlZXQuCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gY2FtZXJhIG9yIHRoaXMgaXMg
dHlwZT1tdWx0aXBsZSwganVzdCBzaG93IHRoZSBpbWFnZSBwaWNrZXIgZm9yIHRoZSBwaG90byBs
aWJyYXJ5LgogICAgIC8vIE90aGVyd2lzZSwgc2hvdyBhbiBhY3Rpb24gc2hlZXQgZm9yIHRoZSB1
c2VyIHRvIGNob29zZSBiZXR3ZWVuIGNhbWVyYSBvciBsaWJyYXJ5LgogICAgIGlmIChfYWxsb3dN
dWx0aXBsZUZpbGVzIHx8ICFbVUlJbWFnZVBpY2tlckNvbnRyb2xsZXIgaXNTb3VyY2VUeXBlQXZh
aWxhYmxlOlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZUNhbWVyYV0pCkBAIC0zMzQs
NyArMzc4LDcgQEAgLSAodm9pZClfZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDooQk9PTClhbmltYXRl
ZAogICAgIH0KIH0KIAotI3ByYWdtYSBtYXJrIC0gQWN0aW9uIFNoZWV0CisjcHJhZ21hIG1hcmsg
LSBNZWRpYSBUeXBlcwogCiBzdGF0aWMgYm9vbCBzdHJpbmdIYXNQcmVmaXhDYXNlSW5zZW5zaXRp
dmUoTlNTdHJpbmcgKnN0ciwgTlNTdHJpbmcgKnByZWZpeCkKIHsKQEAgLTM0Miw3ICszODYsNyBA
QCBzdGF0aWMgYm9vbCBzdHJpbmdIYXNQcmVmaXhDYXNlSW5zZW5zaXRpdmUoTlNTdHJpbmcgKnN0
ciwgTlNTdHJpbmcgKnByZWZpeCkKICAgICByZXR1cm4gcmFuZ2UubG9jYXRpb24gIT0gTlNOb3RG
b3VuZDsKIH0KIAotLSAoTlNBcnJheSAqKV9tZWRpYVR5cGVzRm9yUGlja2VyU291cmNlVHlwZToo
VUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlKXNvdXJjZVR5cGUKKy0gKE5TQXJyYXkg
KilfVVRJc0Zvck1JTUVUeXBlcwogewogICAgIC8vIFRoZSBIVE1MNSBzcGVjIG1lbnRpb25zIHRo
ZSBsaXRlcmFsICJpbWFnZS8qIiBhbmQgInZpZGVvLyoiIHN0cmluZ3MuCiAgICAgLy8gV2Ugc3Vw
cG9ydCB0aGVzZSBhbmQgZ28gYSBzdGVwIGZ1cnRoZXIsIGlmIHRoZSBNSU1FIHR5cGUgc3RhcnRz
IHdpdGgKQEAgLTM1MCwzNiArMzk0LDY3IEBAIC0gKE5TQXJyYXkgKilfbWVkaWFUeXBlc0ZvclBp
Y2tlclNvdXJjZVR5cGU6KFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZSlzCiAgICAg
Ly8gU28sICJpbWFnZS9qcGVnIiB3b3VsZCBtYWtlIHRoZSBwaWNrZXIgZGlzcGxheSBhbGwgaW1h
Z2VzIHR5cGVzLgogICAgIE5TTXV0YWJsZVNldCAqbWVkaWFUeXBlcyA9IFtOU011dGFibGVTZXQg
c2V0XTsKICAgICBmb3IgKE5TU3RyaW5nICptaW1lVHlwZSBpbiBfbWltZVR5cGVzLmdldCgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIE1JTUUgdHlwZSAtPiBV
VEkgbWFwcGluZ3MuIDxodHRwOi8vd2Via2l0Lm9yZy9iLzE0MjYxND4KICAgICAgICAgaWYgKHN0
cmluZ0hhc1ByZWZpeENhc2VJbnNlbnNpdGl2ZShtaW1lVHlwZSwgQCJpbWFnZS8iKSkKICAgICAg
ICAgICAgIFttZWRpYVR5cGVzIGFkZE9iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlSW1hZ2VdOwog
ICAgICAgICBlbHNlIGlmIChzdHJpbmdIYXNQcmVmaXhDYXNlSW5zZW5zaXRpdmUobWltZVR5cGUs
IEAidmlkZW8vIikpCiAgICAgICAgICAgICBbbWVkaWFUeXBlcyBhZGRPYmplY3Q6KE5TU3RyaW5n
ICopa1VUVHlwZU1vdmllXTsKICAgICB9CiAKLSAgICBpZiAoW21lZGlhVHlwZXMgY291bnRdKQot
ICAgICAgICByZXR1cm4gW21lZGlhVHlwZXMgYWxsT2JqZWN0c107CisgICAgcmV0dXJuIG1lZGlh
VHlwZXMuYWxsT2JqZWN0czsKK30KKworLSAoTlNBcnJheSAqKV9tZWRpYVR5cGVzRm9yUGlja2Vy
U291cmNlVHlwZTooVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlKXNvdXJjZVR5cGUK
K3sKKyAgICBOU0FycmF5ICptZWRpYVR5cGVzID0gW3NlbGYgX1VUSXNGb3JNSU1FVHlwZXNdOwor
ICAgIGlmIChtZWRpYVR5cGVzLmNvdW50KQorICAgICAgICByZXR1cm4gbWVkaWFUeXBlczsKIAog
ICAgIC8vIEZhbGxiYWNrIHRvIGV2ZXJ5IHN1cHBvcnRlZCBtZWRpYSB0eXBlIGlmIHRoZXJlIGlz
IG5vIGZpbHRlci4KICAgICByZXR1cm4gW1VJSW1hZ2VQaWNrZXJDb250cm9sbGVyIGF2YWlsYWJs
ZU1lZGlhVHlwZXNGb3JTb3VyY2VUeXBlOnNvdXJjZVR5cGVdOwogfQogCi0tICh2b2lkKV9zaG93
TWVkaWFTb3VyY2VTZWxlY3Rpb25TaGVldAorLSAoTlNBcnJheSAqKV9tZWRpYVR5cGVzRm9yRG9j
dW1lbnRQaWNrZXJNZW51CiB7Ci0gICAgTlNTdHJpbmcgKmV4aXN0aW5nU3RyaW5nID0gV0VCX1VJ
X1NUUklOR19LRVkoIlBob3RvIExpYnJhcnkiLCAiUGhvdG8gTGlicmFyeSAoZmlsZSB1cGxvYWQg
YWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBidXR0b24gc3RyaW5nIGZv
ciBjaG9vc2luZyBhbiBleGlzdGluZyBtZWRpYSBpdGVtIGZyb20gdGhlIFBob3RvIExpYnJhcnki
KTsKLSAgICBOU1N0cmluZyAqY2FuY2VsU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVkoIkNhbmNl
bCIsICJDYW5jZWwgKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxl
cnQgc2hlZXQgYnV0dG9uIHN0cmluZyB0byBjYW5jZWwiKTsKKyAgICBOU0FycmF5ICptZWRpYVR5
cGVzID0gW3NlbGYgX1VUSXNGb3JNSU1FVHlwZXNdOworICAgIGlmIChtZWRpYVR5cGVzLmNvdW50
KQorICAgICAgICByZXR1cm4gbWVkaWFUeXBlczsKKworICAgIC8vIEZhbGxiYWNrIHRvIGV2ZXJ5
IHN1cHBvcnRlZCBtZWRpYSB0eXBlIGlmIHRoZXJlIGlzIG5vIGZpbHRlci4KKyAgICByZXR1cm4g
QFtAInB1YmxpYy5pdGVtIl07Cit9CisKKyNwcmFnbWEgbWFyayAtIFNvdXJjZSBzZWxlY3Rpb24g
bWVudQorCistIChOU1N0cmluZyAqKV9waG90b0xpYnJhcnlCdXR0b25MYWJlbAoreworICAgIHJl
dHVybiBXRUJfVUlfU1RSSU5HX0tFWSgiUGhvdG8gTGlicmFyeSIsICJQaG90byBMaWJyYXJ5IChm
aWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1dHRv
biBzdHJpbmcgZm9yIGNob29zaW5nIGFuIGV4aXN0aW5nIG1lZGlhIGl0ZW0gZnJvbSB0aGUgUGhv
dG8gTGlicmFyeSIpOworfQorCistIChOU1N0cmluZyAqKV9jYW1lcmFCdXR0b25MYWJlbAorewor
ICAgIGlmICghW1VJSW1hZ2VQaWNrZXJDb250cm9sbGVyIGlzU291cmNlVHlwZUF2YWlsYWJsZTpV
SUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGVDYW1lcmFdKQorICAgICAgICByZXR1cm4g
bmlsOwogCiAgICAgLy8gQ2hvb3NlIHRoZSBhcHByb3ByaWF0ZSBzdHJpbmcgZm9yIHRoZSBjYW1l
cmEgYnV0dG9uLgotICAgIE5TU3RyaW5nICpjYW1lcmFTdHJpbmc7CiAgICAgTlNBcnJheSAqZmls
dGVyZWRNZWRpYVR5cGVzID0gW3NlbGYgX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOlVJ
SW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZUNhbWVyYV07CiAgICAgQk9PTCBjb250YWlu
c0ltYWdlTWVkaWFUeXBlID0gW2ZpbHRlcmVkTWVkaWFUeXBlcyBjb250YWluc09iamVjdDooTlNT
dHJpbmcgKilrVVRUeXBlSW1hZ2VdOwogICAgIEJPT0wgY29udGFpbnNWaWRlb01lZGlhVHlwZSA9
IFtmaWx0ZXJlZE1lZGlhVHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nICopa1VUVHlwZU1v
dmllXTsKICAgICBBU1NFUlQoY29udGFpbnNJbWFnZU1lZGlhVHlwZSB8fCBjb250YWluc1ZpZGVv
TWVkaWFUeXBlKTsKICAgICBpZiAoY29udGFpbnNJbWFnZU1lZGlhVHlwZSAmJiBjb250YWluc1Zp
ZGVvTWVkaWFUeXBlKQotICAgICAgICBjYW1lcmFTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgi
VGFrZSBQaG90byBvciBWaWRlbyIsICJUYWtlIFBob3RvIG9yIFZpZGVvIChmaWxlIHVwbG9hZCBh
Y3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGNhbWVyYSBidXR0b24gc3Ry
aW5nIGZvciB0YWtpbmcgcGhvdG9zIG9yIHZpZGVvcyIpOwotICAgIGVsc2UgaWYgKGNvbnRhaW5z
VmlkZW9NZWRpYVR5cGUpCi0gICAgICAgIGNhbWVyYVN0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZ
KCJUYWtlIFZpZGVvIiwgIlRha2UgVmlkZW8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAi
RmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBv
bmx5IHZpZGVvcyIpOwotICAgIGVsc2UKLSAgICAgICAgY2FtZXJhU3RyaW5nID0gV0VCX1VJX1NU
UklOR19LRVkoIlRha2UgUGhvdG8iLCAiVGFrZSBQaG90byAoZmlsZSB1cGxvYWQgYWN0aW9uIHNo
ZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmluZyBmb3Ig
dGFraW5nIG9ubHkgcGhvdG9zIik7CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HX0tFWSgi
VGFrZSBQaG90byBvciBWaWRlbyIsICJUYWtlIFBob3RvIG9yIFZpZGVvIChmaWxlIHVwbG9hZCBh
Y3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGNhbWVyYSBidXR0b24gc3Ry
aW5nIGZvciB0YWtpbmcgcGhvdG9zIG9yIHZpZGVvcyIpOworCisgICAgaWYgKGNvbnRhaW5zVmlk
ZW9NZWRpYVR5cGUpCisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HX0tFWSgiVGFrZSBWaWRl
byIsICJUYWtlIFZpZGVvIChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2Fk
IGFsZXJ0IHNoZWV0IGNhbWVyYSBidXR0b24gc3RyaW5nIGZvciB0YWtpbmcgb25seSB2aWRlb3Mi
KTsKKworICAgIHJldHVybiBXRUJfVUlfU1RSSU5HX0tFWSgiVGFrZSBQaG90byIsICJUYWtlIFBo
b3RvIChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0
IGNhbWVyYSBidXR0b24gc3RyaW5nIGZvciB0YWtpbmcgb25seSBwaG90b3MiKTsKK30KKworLSAo
dm9pZClfc2hvd01lZGlhU291cmNlU2VsZWN0aW9uU2hlZXQKK3sKKyAgICBOU1N0cmluZyAqZXhp
c3RpbmdTdHJpbmcgPSBbc2VsZiBfcGhvdG9MaWJyYXJ5QnV0dG9uTGFiZWxdOworICAgIE5TU3Ry
aW5nICpjYW1lcmFTdHJpbmcgPSBbc2VsZiBfY2FtZXJhQnV0dG9uTGFiZWxdOworICAgIE5TU3Ry
aW5nICpjYW5jZWxTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiQ2FuY2VsIiwgIkNhbmNlbCAo
ZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBidXR0
b24gc3RyaW5nIHRvIGNhbmNlbCIpOwogCiAgICAgX2FjdGlvblNoZWV0Q29udHJvbGxlciA9IFtV
SUFsZXJ0Q29udHJvbGxlciBhbGVydENvbnRyb2xsZXJXaXRoVGl0bGU6bmlsIG1lc3NhZ2U6bmls
IHByZWZlcnJlZFN0eWxlOlVJQWxlcnRDb250cm9sbGVyU3R5bGVBY3Rpb25TaGVldF07CiAKQEAg
LTQwMiwxMCArNDc3LDMwIEBAIC0gKHZvaWQpX3Nob3dNZWRpYVNvdXJjZVNlbGVjdGlvblNoZWV0
CiAgICAgW19hY3Rpb25TaGVldENvbnRyb2xsZXIgYWRkQWN0aW9uOmNhbWVyYUFjdGlvbl07CiAg
ICAgW19hY3Rpb25TaGVldENvbnRyb2xsZXIgYWRkQWN0aW9uOnBob3RvTGlicmFyeUFjdGlvbl07
CiAKLSAgICBpZiAoVUlDdXJyZW50VXNlckludGVyZmFjZUlkaW9tSXNQYWQoKSkKLSAgICAgICAg
W3NlbGYgX3ByZXNlbnRQb3BvdmVyV2l0aENvbnRlbnRWaWV3Q29udHJvbGxlcjpfYWN0aW9uU2hl
ZXRDb250cm9sbGVyLmdldCgpIGFuaW1hdGVkOllFU107Ci0gICAgZWxzZQotICAgICAgICBbc2Vs
ZiBfcHJlc2VudEZ1bGxzY3JlZW5WaWV3Q29udHJvbGxlcjpfYWN0aW9uU2hlZXRDb250cm9sbGVy
LmdldCgpIGFuaW1hdGVkOllFU107CisgICAgW3NlbGYgX3ByZXNlbnRGb3JDdXJyZW50SW50ZXJm
YWNlSWRpb206X2FjdGlvblNoZWV0Q29udHJvbGxlci5nZXQoKV07Cit9CisKKy0gKHZvaWQpX3No
b3dEb2N1bWVudFBpY2tlck1lbnUKK3sKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBtdWx0aXBsZSBm
aWxlIHNlbGVjdGlvbiB3aGVuIGltcGxlbWVudGVkLiA8cmRhcjovLzE3MTc3OTgxPgorICAgIF9k
b2N1bWVudE1lbnVDb250cm9sbGVyID0gYWRvcHROUyhbVUlEb2N1bWVudE1lbnVWaWV3Q29udHJv
bGxlciBhbGxvY10pOworICAgIFtfZG9jdW1lbnRNZW51Q29udHJvbGxlciBfc2V0SWdub3JlQXBw
bGljYXRpb25FbnRpdGxlbWVudEZvckltcG9ydDpZRVNdOworICAgIFtfZG9jdW1lbnRNZW51Q29u
dHJvbGxlciBpbml0V2l0aERvY3VtZW50VHlwZXM6W3NlbGYgX21lZGlhVHlwZXNGb3JEb2N1bWVu
dFBpY2tlck1lbnVdIGluTW9kZTpVSURvY3VtZW50UGlja2VyTW9kZUltcG9ydF07CisgICAgW19k
b2N1bWVudE1lbnVDb250cm9sbGVyIHNldERlbGVnYXRlOnNlbGZdOworCisgICAgLy8gRklYTUU6
IE5lZWQgaWNvbnMgZm9yIENhbWVyYSBhbmQgUGhvdG8gTGlicmFyeSBvcHRpb25zLgorICAgIFtf
ZG9jdW1lbnRNZW51Q29udHJvbGxlciBhZGRPcHRpb25XaXRoVGl0bGU6W3NlbGYgX3Bob3RvTGli
cmFyeUJ1dHRvbkxhYmVsXSBpbWFnZTpuaWwgb3JkZXI6VUlEb2N1bWVudE1lbnVPcmRlckZpcnN0
IGhhbmRsZXI6XnsKKyAgICAgICAgW3NlbGYgX3Nob3dQaG90b1BpY2tlcldpdGhTb3VyY2VUeXBl
OlVJSW1hZ2VQaWNrZXJDb250cm9sbGVyU291cmNlVHlwZVBob3RvTGlicmFyeV07CisgICAgfV07
CisKKyAgICBpZiAoTlNTdHJpbmcgKmNhbWVyYVN0cmluZyA9IFtzZWxmIF9jYW1lcmFCdXR0b25M
YWJlbF0pIHsKKyAgICAgICAgW19kb2N1bWVudE1lbnVDb250cm9sbGVyIGFkZE9wdGlvbldpdGhU
aXRsZTpjYW1lcmFTdHJpbmcgaW1hZ2U6bmlsIG9yZGVyOlVJRG9jdW1lbnRNZW51T3JkZXJGaXJz
dCBoYW5kbGVyOl57CisgICAgICAgICAgICBfdXNpbmdDYW1lcmEgPSBZRVM7CisgICAgICAgICAg
ICBbc2VsZiBfc2hvd1Bob3RvUGlja2VyV2l0aFNvdXJjZVR5cGU6VUlJbWFnZVBpY2tlckNvbnRy
b2xsZXJTb3VyY2VUeXBlQ2FtZXJhXTsKKyAgICAgICAgfV07CisgICAgfQorCisgICAgW3NlbGYg
X3ByZXNlbnRGb3JDdXJyZW50SW50ZXJmYWNlSWRpb206X2RvY3VtZW50TWVudUNvbnRyb2xsZXIu
Z2V0KCldOwogfQogCiAjcHJhZ21hIG1hcmsgLSBJbWFnZSBQaWNrZXIKQEAgLTQzMSw2ICs1MjYs
MTQgQEAgLSAodm9pZClfc2hvd1Bob3RvUGlja2VyV2l0aFNvdXJjZVR5cGU6KFVJSW1hZ2VQaWNr
ZXJDb250cm9sbGVyU291cmNlVHlwZSlzb3VyY2UKIAogI3ByYWdtYSBtYXJrIC0gUHJlc2VudGlu
ZyBWaWV3IENvbnRyb2xsZXJzCiAKKy0gKHZvaWQpX3ByZXNlbnRGb3JDdXJyZW50SW50ZXJmYWNl
SWRpb206KFVJVmlld0NvbnRyb2xsZXIgKil2aWV3Q29udHJvbGxlcgoreworICAgIGlmIChVSUN1
cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpKQorICAgICAgICBbc2VsZiBfcHJlc2VudFBv
cG92ZXJXaXRoQ29udGVudFZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVyIGFuaW1hdGVkOllF
U107CisgICAgZWxzZQorICAgICAgICBbc2VsZiBfcHJlc2VudEZ1bGxzY3JlZW5WaWV3Q29udHJv
bGxlcjp2aWV3Q29udHJvbGxlciBhbmltYXRlZDpZRVNdOworfQorCiAtICh2b2lkKV9wcmVzZW50
UG9wb3ZlcldpdGhDb250ZW50Vmlld0NvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKiljb250
ZW50Vmlld0NvbnRyb2xsZXIgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQKIHsKICAgICBbc2VsZiBf
ZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDphbmltYXRlZF07CkBAIC00NTUsNiArNTU4LDM2IEBAIC0g
KHZvaWQpcG9wb3ZlckNvbnRyb2xsZXJEaWREaXNtaXNzUG9wb3ZlcjooVUlQb3BvdmVyQ29udHJv
bGxlciAqKXBvcG92ZXJDb250cm9sCiAgICAgW3NlbGYgX2NhbmNlbF07CiB9CiAKKyNwcmFnbWEg
bWFyayAtIFVJRG9jdW1lbnRNZW51RGVsZWdhdGUgaW1wbGVtZW50YXRpb24KKworLSAodm9pZClk
b2N1bWVudE1lbnU6KFVJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xsZXIgKilkb2N1bWVudE1lbnUg
ZGlkUGlja0RvY3VtZW50UGlja2VyOihVSURvY3VtZW50UGlja2VyVmlld0NvbnRyb2xsZXIgKilk
b2N1bWVudFBpY2tlcgoreworICAgIGRvY3VtZW50UGlja2VyLmRlbGVnYXRlID0gc2VsZjsKKyAg
ICBkb2N1bWVudFBpY2tlci5tb2RhbFByZXNlbnRhdGlvblN0eWxlID0gVUlNb2RhbFByZXNlbnRh
dGlvbkZ1bGxTY3JlZW47CisKKyAgICBbc2VsZiBfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJ
ZGlvbTpkb2N1bWVudFBpY2tlcl07Cit9CisKKy0gKHZvaWQpZG9jdW1lbnRNZW51V2FzQ2FuY2Vs
bGVkOihVSURvY3VtZW50TWVudVZpZXdDb250cm9sbGVyICopZG9jdW1lbnRNZW51Cit7CisgICAg
W3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6WUVTXTsKKyAgICBbc2VsZiBfY2FuY2VsXTsK
K30KKworI3ByYWdtYSBtYXJrIC0gVUlEb2N1bWVudFBpY2tlckNvbnRyb2xsZXJEZWxlZ2F0ZSBp
bXBsZW1lbnRhdGlvbgorCistICh2b2lkKWRvY3VtZW50UGlja2VyOihVSURvY3VtZW50UGlja2Vy
Vmlld0NvbnRyb2xsZXIgKilkb2N1bWVudFBpY2tlciBkaWRQaWNrRG9jdW1lbnRBdFVSTDooTlNV
UkwgKil1cmwKK3sKKyAgICBbc2VsZiBfZGlzbWlzc0Rpc3BsYXlBbmltYXRlZDpZRVNdOworICAg
IFtzZWxmIF9jaG9vc2VGaWxlczpAW3VybF0gZGlzcGxheVN0cmluZzp1cmwubGFzdFBhdGhDb21w
b25lbnQgaWNvbkltYWdlOmljb25Gb3JGaWxlKHVybCldOworfQorCistICh2b2lkKWRvY3VtZW50
UGlja2VyV2FzQ2FuY2VsbGVkOihVSURvY3VtZW50UGlja2VyVmlld0NvbnRyb2xsZXIgKilkb2N1
bWVudFBpY2tlcgoreworICAgIFtzZWxmIF9kaXNtaXNzRGlzcGxheUFuaW1hdGVkOllFU107Cisg
ICAgW3NlbGYgX2NhbmNlbF07Cit9CisKICNwcmFnbWEgbWFyayAtIFVJSW1hZ2VQaWNrZXJDb250
cm9sbGVyRGVsZWdhdGUgaW1wbGVtZW50YXRpb24KIAogLSAoQk9PTClfd2lsbE11bHRpcGxlU2Vs
ZWN0aW9uRGVsZWdhdGVCZUNhbGxlZApAQCAtNTc0LDggKzcwNyw3IEBAIC0gKHZvaWQpX3VwbG9h
ZEl0ZW1Gcm9tTWVkaWFJbmZvOihOU0RpY3Rpb25hcnkgKilpbmZvIHN1Y2Nlc3NCbG9jazoodm9p
ZCAoXikoX1dLCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBOU1N0
cmluZyAqZmlsZVBhdGggPSBbbWVkaWFVUkwgcGF0aF07Ci0gICAgICAgIHN1Y2Nlc3NCbG9jayhh
ZG9wdE5TKFtbX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBhbGxvY10gaW5pdFdpdGhGaWxlUGF0aDpm
aWxlUGF0aCBtZWRpYVVSTDptZWRpYVVSTF0pLmdldCgpKTsKKyAgICAgICAgc3VjY2Vzc0Jsb2Nr
KGFkb3B0TlMoW1tfV0tWaWRlb0ZpbGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVVUkw6
bWVkaWFVUkxdKS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYyNyw3ICs3
NTksNyBAQCAtICh2b2lkKV91cGxvYWRJdGVtRnJvbU1lZGlhSW5mbzooTlNEaWN0aW9uYXJ5ICop
aW5mbyBzdWNjZXNzQmxvY2s6KHZvaWQgKF4pKF9XSwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrKGFkb3B0TlMoW1tfV0tJ
bWFnZUZpbGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVQYXRoOmZpbGVQYXRoIG9yaWdp
bmFsSW1hZ2U6b3JpZ2luYWxJbWFnZV0pLmdldCgpKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NCbG9j
ayhhZG9wdE5TKFtbX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBhbGxvY10gaW5pdFdpdGhGaWxlVVJM
OltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZmlsZVBhdGhdIG9yaWdpbmFsSW1hZ2U6b3JpZ2luYWxJ
bWFnZV0pLmdldCgpKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0tIAoy
LjIuMSAoQXBwbGUgR2l0LTUzKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248571</attachid>
            <date>2015-03-12 23:09:44 -0700</date>
            <delta_ts>2015-03-12 23:20:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142596-20150312230917.patch</filename>
            <type>text/plain</type>
            <size>23346</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTlmOTgzMjk2YjQyMDE3
MzJhNDU3ZGQxNjA2NjVlZTY0ZmJhNjZhZi4uOWNkNTAwY2EzNjljOTUwZmQ3NjZmNWRmZWE3OGJj
OTBkZjljYzIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkzIEBACisyMDE1LTAzLTEyICBKb24g
SG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIFVJRG9jdW1l
bnRNZW51Vmlld0NvbnRyb2xsZXIgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGZpbGVzIGZyb20KKyAg
ICAgICAgaUNsb3VkIERyaXZlIGluIFdLRmlsZVVwbG9hZFBhbmVsCisKKyAgICAgICAgUGFydCBv
ZiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5Nj4gV2ViS2l0
IG9uCisgICAgICAgIGlPUyBzaG91bGQgc3VwcG9ydCBmaWxlIHVwbG9hZCBmcm9tIGlDbG91ZCBE
cml2ZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTIxNzg5OTE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0
U1BJLmg6CisgICAgICAgIEluY2x1ZGUgVUlEb2N1bWVudE1lbnVWaWV3Q29udHJvbGxlcl9Qcml2
YXRlLmggaWYgaXQgZXhpc3RzLiBJZiBub3QsCisgICAgICAgIGRlY2xhcmUgdGhpcyBuZXcgU1BJ
LgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5lbC5tbToK
KyAgICAgICAgKGZhbGxiYWNrSWNvbkZvckZpbGUpOgorICAgICAgICBDcmVhdGUgYSBVSURvY3Vt
ZW50SW50ZXJhY3Rpb25Db250cm9sbGVyIGZvciB0aGUgZmlsZSwgYW5kIHJldHVybiBhCisgICAg
ICAgIHRodW1ibmFpbCBpbWFnZSBmcm9tIGl0cyBzbWFsbGVzdCBpY29uLgorCisgICAgICAgIChp
Y29uRm9ySW1hZ2VGaWxlKToKKyAgICAgICAgSWYgd2UgY2FuIGdldCBhIFVJSW1hZ2UgZnJvbSB0
aGUgZmlsZSwgY3JlYXRlIGEgdGh1bWJuYWlsIGZyb20gaXQuCisgICAgICAgIE90aGVyd2lzZSwg
Y2FsbCBmYWxsYmFja0ljb25Gb3JGaWxlKCkuCisKKyAgICAgICAgKGljb25Gb3JWaWRlb0ZpbGUp
OgorICAgICAgICBDb2RlIG1vdmVkIGZyb20gLVtfV0tWaWRlb0ZpbGVVcGxvYWRJdGVtIGRpc3Bs
YXlJbWFnZV0uCisKKyAgICAgICAgKGljb25Gb3JGaWxlKToKKyAgICAgICAgR2V0IHRoZSBmaWxl
J3MgZXh0ZW5zaW9uLCBhbmQgZ2V0IHRoZSBleHRlbnNpb24ncyBwcmVmZXJyZWQgVVRJLiBJZiB0
aGUKKyAgICAgICAgVVRJIGlzIGFuIGltYWdlIHR5cGUsIGNhbGwgaWNvbkZvckltYWdlRmlsZSgp
LiBJZiBpdCdzIGEgdmlkZW8gdHlwZSwKKyAgICAgICAgY2FsbCBpY29uRm9yVmlkZW9GaWxlKCku
IE90aGVyd2lzZSwgcmV0dXJuIHRoZSBmYWxsYmFjayBpY29uLgorCisgICAgICAgICgtW19XS0Zp
bGVVcGxvYWRJdGVtIGluaXRXaXRoRmlsZVVSTDpdKToKKyAgICAgICAgQWRkZWQgYW4gaW5pdGlh
bGl6ZXIgdGhhdCB0YWtlcyBhIGZpbGUgVVJMLgorCisgICAgICAgICgtW19XS0ZpbGVVcGxvYWRJ
dGVtIGZpbGVVUkxdKToKKyAgICAgICAgKC1bX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSBpbml0V2l0
aEZpbGVVUkw6b3JpZ2luYWxJbWFnZTpdKToKKyAgICAgICAgKC1bX1dLVmlkZW9GaWxlVXBsb2Fk
SXRlbSBkaXNwbGF5SW1hZ2VdKToKKyAgICAgICAgKFdLRmlsZVVwbG9hZFBhbmVsKToKKyAgICAg
ICAgSW5oZXJpdCBmcm9tIFVJRG9jdW1lbnRQaWNrZXJEZWxlZ2F0ZSBhbmQgVUlEb2N1bWVudE1l
bnVEZWxlZ2F0ZS4gQWRkCisgICAgICAgIGFuIGl2YXIgZm9yIHRoZSBkb2N1bWVudCBtZW51IGNv
bnRyb2xsZXIuCisKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZGVhbGxvY10pOgorICAg
ICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBwcmVzZW50V2l0aFBhcmFtZXRlcnM6cmVzdWx0TGlz
dGVuZXI6XSk6CisgICAgICAgIElmIGluc3RhbmNlcyBvZiBVSURvY3VtZW50TWVudVZpZXdDb250
cm9sbGVyIHJlc3BvbmQgdG8KKyAgICAgICAgLV9zZXRJZ25vcmVBcHBsaWNhdGlvbkVudGl0bGVt
ZW50Rm9ySW1wb3J0OiwgbWVhbmluZyB3ZSBjYW4gZGlzYWJsZSB0aGUKKyAgICAgICAgYXNzZXJ0
aW9uIHRoYXQgdGhlIGN1cnJlbnQgYXBwIGhhcyB0aGUgaUNsb3VkIERvY3VtZW50cyBlbnRpdGxl
bWVudCwKKyAgICAgICAgdGhlbiBzaG93IHRoZSBkb2N1bWVudCBwaWNrZXIgbWVudS4gT3RoZXJ3
aXNlLCBzaG93IHRoZSBjdXJyZW50IHNvdXJjZQorICAgICAgICBzZWxlY3Rpb24gVUkuIFRoZSBy
dW50aW1lIGNoZWNrIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIGEgbmV3ZXIgVUlLaXQgaXMKKyAgICAg
ICAgYXZhaWxhYmxlLgorCisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9VVElzRm9yTUlN
RVR5cGVzXSk6CisgICAgICAgIFJldHVybiB0aGUgVVRJcyBmb3IgdGhlIDxpbnB1dD4gZWxlbWVu
dCdzICJhY2NlcHQiIGF0dHJpYnV0ZSdzIE1JTUUKKyAgICAgICAgdHlwZSBsaXN0LgorCisgICAg
ICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9tZWRpYVR5cGVzRm9yUGlja2VyU291cmNlVHlwZTpd
KToKKyAgICAgICAgQ2FsbCAtX1VUSXNGb3JNSU1FVHlwZXMuIEZhbGwgYmFjayB0byBhdmFpbGFi
bGUgc291cmNlIHR5cGVzIGZvciB0aGlzCisgICAgICAgIHBpY2tlciB0eXBlLgorCisgICAgICAg
ICgtW1dLRmlsZVVwbG9hZFBhbmVsIF9kb2N1bWVudFBpY2tlck1lbnVNZWRpYVR5cGVzXSk6Cisg
ICAgICAgIENhbGwgLV9VVElzRm9yTUlNRVR5cGVzLiBGYWxsIGJhY2sgdG8gdGhlIGFsbC1lbmNv
bXBhc3NpbmcKKyAgICAgICAgInB1YmxpYy5pdGVtIiBVVEkuCisKKyAgICAgICAgKC1bV0tGaWxl
VXBsb2FkUGFuZWwgX3Bob3RvTGlicmFyeUJ1dHRvbkxhYmVsXSk6CisgICAgICAgICgtW1dLRmls
ZVVwbG9hZFBhbmVsIF9jYW1lcmFCdXR0b25MYWJlbF0pOgorICAgICAgICBGYWN0b3JlZCBvdXQg
b2YgLV9zaG93TWVkaWFTb3VyY2VTZWxlY3Rpb25TaGVldC4gUmV0dXJuIHRoZQorICAgICAgICBh
cHByb3ByaWF0ZSBsYWJlbCBmb3IgdGhlIGNhbWVyYSBidXR0b24sIGJhc2VkIG9uIHdoZXRoZXIg
aXQgY2FuIHRha2UgYQorICAgICAgICBwaG90byBvciB2aWRlbywgb3IgcmV0dXJuIG5pbCBpZiB0
aGUgY2FtZXJhIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFu
ZWwgX3Nob3dNZWRpYVNvdXJjZVNlbGVjdGlvblNoZWV0XSk6CisgICAgICAgIENoYW5nZWQgdG8g
dXNlIC1fY2FtZXJhQnV0dG9uTGFiZWwgYW5kCisgICAgICAgIC1fcHJlc2VudEZvckN1cnJlbnRJ
bnRlcmZhY2VJZGlvbTouCisKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgX3Nob3dEb2N1
bWVudFBpY2tlck1lbnVdKToKKyAgICAgICAgQ3JlYXRlIGEgVUlEb2N1bWVudE1lbnVWaWV3Q29u
dHJvbGxlciwgYW5kIHBvcHVsYXRlIGl0IHdpdGggb3B0aW9ucyB0bworICAgICAgICBvcGVuIHRo
ZSBwaG90byBsaWJyYXJ5IG9yIHRha2UgYSBwaWN0dXJlIG9yIHZpZGVvLiBJZiBpQ2xvdWQgRHJp
dmUgb3IKKyAgICAgICAgb3RoZXIgZG9jdW1lbnQgc291cmNlcyBhcmUgYXZhaWxhYmxlLCB0aGV5
IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS4KKworICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQ
YW5lbCBfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJZGlvbTpdKToKKyAgICAgICAgKC1bV0tG
aWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRNZW51OmRpZFBpY2tEb2N1bWVudFBpY2tlcjpdKToKKyAg
ICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRNZW51V2FzQ2FuY2VsbGVkOl0pOgor
ICAgICAgICAoLVtXS0ZpbGVVcGxvYWRQYW5lbCBkb2N1bWVudFBpY2tlcjpkaWRQaWNrRG9jdW1l
bnRBdFVSTDpdKToKKyAgICAgICAgKC1bV0tGaWxlVXBsb2FkUGFuZWwgZG9jdW1lbnRQaWNrZXJX
YXNDYW5jZWxsZWQ6XSk6CisgICAgICAgICgtW1dLRmlsZVVwbG9hZFBhbmVsIF91cGxvYWRJdGVt
RnJvbU1lZGlhSW5mbzpzdWNjZXNzQmxvY2s6ZmFpbHVyZUJsb2NrOl0pOgorCisgICAgICAgICgt
W19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0gaW5pdFdpdGhGaWxlUGF0aDpvcmlnaW5hbEltYWdlOl0p
OiBEZWxldGVkLgorICAgICAgICAoLVtfV0tJbWFnZUZpbGVVcGxvYWRJdGVtIGZpbGVVUkxdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bX1dLVmlkZW9GaWxlVXBsb2FkSXRlbSBpbml0V2l0aEZpbGVQ
YXRoOm1lZGlhVVJMOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtfV0tWaWRlb0ZpbGVVcGxvYWRJ
dGVtIGZpbGVVUkxdKTogRGVsZXRlZC4KKwogMjAxNS0wMy0xMCAgVGltb3RoeSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBidWlsZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCmluZGV4IDhmMWY2MzQ0M2FlODgz
OWJlNDBmMTk0N2VlMzZmZmQ1Njc3ZDlkNDMuLjI3MjVhMjQ5ZjMyYmM2MzZhMzU4MWQ1YTFmNmUz
NTBiNDk5MjdkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3NwaS9pb3Mv
VUlLaXRTUEkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJ
LmgKQEAgLTY5LDYgKzY5LDE0IEBACiAjaW1wb3J0IDxVSUtpdC9fVUlOYXZpZ2F0aW9uSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9fVUlOYXZpZ2F0aW9uUGFyYWxsYXhU
cmFuc2l0aW9uLmg+CiAKKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1
ZGUoPFVJS2l0L1VJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xsZXJfUHJpdmF0ZS5oPikKKyNpbXBv
cnQgPFVJS2l0L1VJRG9jdW1lbnRNZW51Vmlld0NvbnRyb2xsZXJfUHJpdmF0ZS5oPgorI2Vsc2UK
K0BpbnRlcmZhY2UgVUlEb2N1bWVudE1lbnVWaWV3Q29udHJvbGxlciAoRGV0YWlscykKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24sIHNldHRlciA9IF9zZXRJZ25vcmVBcHBsaWNhdGlvbkVu
dGl0bGVtZW50Rm9ySW1wb3J0OiwgZ2V0dGVyID0gX2lnbm9yZUFwcGxpY2F0aW9uRW50aXRsZW1l
bnRGb3JJbXBvcnQpIEJPT0wgX2lnbm9yZUFwcGxpY2F0aW9uRW50aXRsZW1lbnRGb3JJbXBvcnQ7
CitAZW5kCisjZW5kaWYKKwogI2Vsc2UKIAogQGludGVyZmFjZSBVSUFsZXJ0Q29udHJvbGxlciAo
RGV0YWlscykKQEAgLTY1OCw2ICs2NjYsMTAgQEAgdHlwZWRlZiBlbnVtIHsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljKSBCT09MIGlucHV0Vmlld09iZXlzRE9NRm9jdXM7CiBAZW5kCiAKK0BpbnRlcmZh
Y2UgVUlEb2N1bWVudE1lbnVWaWV3Q29udHJvbGxlciAoRGV0YWlscykKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24sIHNldHRlciA9IF9zZXRJZ25vcmVBcHBsaWNhdGlvbkVudGl0bGVtZW50
Rm9ySW1wb3J0OiwgZ2V0dGVyID0gX2lnbm9yZUFwcGxpY2F0aW9uRW50aXRsZW1lbnRGb3JJbXBv
cnQpIEJPT0wgX2lnbm9yZUFwcGxpY2F0aW9uRW50aXRsZW1lbnRGb3JJbXBvcnQ7CitAZW5kCisK
ICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiBAaW50ZXJmYWNlIFVJVmlldyAo
SVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zp
bGVVcGxvYWRQYW5lbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tG
aWxlVXBsb2FkUGFuZWwubW0KaW5kZXggNTlmY2NiZjgxYjVjYTUzODRjN2I2ZDU5OTljMjAzMTBm
NjA1MjRmNC4uYzEyNWQ5YjhkY2Y1MzM5OGYwNTgzOGMzZWE2YTg5YTA0MmRlOGI3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0ZpbGVVcGxvYWRQYW5l
bC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9h
ZFBhbmVsLm1tCkBAIC01Nyw4ICs1Nyw3IEBAIFNPRlRfTElOS19GUkFNRVdPUksoQ29yZU1lZGlh
KTsKIFNPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVRpbWVaZXJvLCBDTVRpbWUpOwog
I2RlZmluZSBrQ01UaW1lWmVybyBnZXRrQ01UaW1lWmVybygpCiAKLQotI3ByYWdtYSBtYXJrIC0g
X1dLRmlsZVVwbG9hZEl0ZW0KKyNwcmFnbWEgbWFyayAtIEljb24gZ2VuZXJhdGlvbgogCiBzdGF0
aWMgQ0dSZWN0IHNxdWFyZUNyb3BSZWN0Rm9yU2l6ZShDR1NpemUgc2l6ZSkKIHsKQEAgLTEwNSwx
NCArMTA0LDg3IEBAIHN0YXRpYyBVSUltYWdlICp0aHVtYm5haWxTaXplZEltYWdlRm9ySW1hZ2Uo
VUlJbWFnZSAqaW1hZ2UpCiAgICAgcmV0dXJuIHJlc3VsdEltYWdlOwogfQogCitzdGF0aWMgVUlJ
bWFnZSogZmFsbGJhY2tJY29uRm9yRmlsZShOU1VSTCAqZmlsZSkKK3sKKyAgICBBU1NFUlRfQVJH
KGZpbGUsIFtmaWxlIGlzRmlsZVVSTF0pOworCisgICAgVUlEb2N1bWVudEludGVyYWN0aW9uQ29u
dHJvbGxlciAqaW50ZXJhY3Rpb25Db250cm9sbGVyID0gW1VJRG9jdW1lbnRJbnRlcmFjdGlvbkNv
bnRyb2xsZXIgaW50ZXJhY3Rpb25Db250cm9sbGVyV2l0aFVSTDpmaWxlXTsKKyAgICByZXR1cm4g
dGh1bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKGludGVyYWN0aW9uQ29udHJvbGxlci5pY29uc1sw
XSk7Cit9CisKK3N0YXRpYyBVSUltYWdlKiBpY29uRm9ySW1hZ2VGaWxlKE5TVVJMICpmaWxlKQor
eworICAgIEFTU0VSVF9BUkcoZmlsZSwgW2ZpbGUgaXNGaWxlVVJMXSk7CisKKyAgICBpZiAoVUlJ
bWFnZSAqaW1hZ2UgPSBbVUlJbWFnZSBpbWFnZVdpdGhDb250ZW50c09mRmlsZTpmaWxlLnBhdGhd
KQorICAgICAgICByZXR1cm4gdGh1bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKGltYWdlKTsKKwor
ICAgIExPR19FUlJPUigiV0tGaWxlVXBsb2FkUGFuZWw6IEVycm9yIGNyZWF0aW5nIHRodW1ibmFp
bCBpbWFnZSBmb3IgaW1hZ2U6ICVAIiwgZmlsZSk7CisgICAgcmV0dXJuIGZhbGxiYWNrSWNvbkZv
ckZpbGUoZmlsZSk7Cit9CisKK3N0YXRpYyBVSUltYWdlKiBpY29uRm9yVmlkZW9GaWxlKE5TVVJM
ICpmaWxlKQoreworICAgIEFTU0VSVF9BUkcoZmlsZSwgW2ZpbGUgaXNGaWxlVVJMXSk7CisKKyAg
ICBSZXRhaW5QdHI8QVZVUkxBc3NldD4gYXNzZXQgPSBhZG9wdE5TKFthbGxvY0FWVVJMQXNzZXRJ
bnN0YW5jZSgpIGluaXRXaXRoVVJMOmZpbGUgb3B0aW9uczpuaWxdKTsKKyAgICBSZXRhaW5QdHI8
QVZBc3NldEltYWdlR2VuZXJhdG9yPiBnZW5lcmF0b3IgPSBhZG9wdE5TKFthbGxvY0FWQXNzZXRJ
bWFnZUdlbmVyYXRvckluc3RhbmNlKCkgaW5pdFdpdGhBc3NldDphc3NldC5nZXQoKV0pOworICAg
IFtnZW5lcmF0b3Igc2V0QXBwbGllc1ByZWZlcnJlZFRyYWNrVHJhbnNmb3JtOllFU107CisKKyAg
ICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VS
ZWYgPSBhZG9wdENGKFtnZW5lcmF0b3IgY29weUNHSW1hZ2VBdFRpbWU6a0NNVGltZVplcm8gYWN0
dWFsVGltZTpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgaWYgKCFpbWFnZVJlZikgeworICAgICAg
ICBMT0dfRVJST1IoIldLRmlsZVVwbG9hZFBhbmVsOiBFcnJvciBjcmVhdGluZyBpbWFnZSBmb3Ig
dmlkZW8gJyVAJzogJUAiLCBmaWxlLCBlcnJvcik7CisgICAgICAgIHJldHVybiBmYWxsYmFja0lj
b25Gb3JGaWxlKGZpbGUpOworICAgIH0KKworICAgIFJldGFpblB0cjxVSUltYWdlPiBpbWFnZSA9
IGFkb3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2VSZWYuZ2V0KCld
KTsKKyAgICByZXR1cm4gdGh1bWJuYWlsU2l6ZWRJbWFnZUZvckltYWdlKGltYWdlLmdldCgpKTsK
K30KKworc3RhdGljIFVJSW1hZ2UqIGljb25Gb3JGaWxlKE5TVVJMICpmaWxlKQoreworICAgIEFT
U0VSVF9BUkcoZmlsZSwgW2ZpbGUgaXNGaWxlVVJMXSk7CisKKyAgICBOU1N0cmluZyAqZmlsZUV4
dGVuc2lvbiA9IGZpbGUucGF0aEV4dGVuc2lvbjsKKyAgICBpZiAoIWZpbGVFeHRlbnNpb24ubGVu
Z3RoKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBm
aWxlVVRJID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtV
VFRhZ0NsYXNzRmlsZW5hbWVFeHRlbnNpb24sIChDRlN0cmluZ1JlZilmaWxlRXh0ZW5zaW9uLCAw
KSk7CisKKyAgICBpZiAoVVRUeXBlQ29uZm9ybXNUbyhmaWxlVVRJLmdldCgpLCBrVVRUeXBlSW1h
Z2UpKQorICAgICAgICByZXR1cm4gaWNvbkZvckltYWdlRmlsZShmaWxlKTsKKworICAgIGlmIChV
VFR5cGVDb25mb3Jtc1RvKGZpbGVVVEkuZ2V0KCksIGtVVFR5cGVNb3ZpZSkpCisgICAgICAgIHJl
dHVybiBpY29uRm9yVmlkZW9GaWxlKGZpbGUpOworCisgICAgcmV0dXJuIGZhbGxiYWNrSWNvbkZv
ckZpbGUoZmlsZSk7Cit9CisKKworI3ByYWdtYSBtYXJrIC0gX1dLRmlsZVVwbG9hZEl0ZW0KIAog
QGludGVyZmFjZSBfV0tGaWxlVXBsb2FkSXRlbSA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhGaWxlVVJMOihOU1VSTCAqKWZpbGVVUkw7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHksIGdldHRlcj1pc1ZpZGVvKSBCT09MIHZpZGVvOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBOU1VSTCAqZmlsZVVSTDsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgVUlJbWFnZSAqZGlzcGxheUltYWdlOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gX1dL
RmlsZVVwbG9hZEl0ZW0KK0BpbXBsZW1lbnRhdGlvbiBfV0tGaWxlVXBsb2FkSXRlbSB7CisgICAg
UmV0YWluUHRyPE5TVVJMPiBfZmlsZVVSTDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
RmlsZVVSTDooTlNVUkwgKilmaWxlVVJMCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBBU1NFUlQoW2ZpbGVVUkwgaXNGaWxlVVJM
XSk7CisgICAgQVNTRVJUKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0
c0F0UGF0aDpmaWxlVVJMLnBhdGhdKTsKKyAgICBfZmlsZVVSTCA9IGZpbGVVUkw7CisgICAgcmV0
dXJuIHNlbGY7Cit9CiAKIC0gKEJPT0wpaXNWaWRlbwogewpAQCAtMTIyLDggKzE5NCw3IEBAIC0g
KEJPT0wpaXNWaWRlbwogCiAtIChOU1VSTCAqKWZpbGVVUkwKIHsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfZmlsZVVSTC5nZXQoKTsKIH0K
IAogLSAoVUlJbWFnZSAqKWRpc3BsYXlJbWFnZQpAQCAtMTM2LDE5ICsyMDcsMTggQEAgQGVuZAog
CiAKIEBpbnRlcmZhY2UgX1dLSW1hZ2VGaWxlVXBsb2FkSXRlbSA6IF9XS0ZpbGVVcGxvYWRJdGVt
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGaWxlUGF0aDooTlNTdHJpbmcgKilmaWxlUGF0aCBv
cmlnaW5hbEltYWdlOihVSUltYWdlICopb3JpZ2luYWxJbWFnZTsKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEZpbGVVUkw6KE5TVVJMICopZmlsZVVSTCBvcmlnaW5hbEltYWdlOihVSUltYWdlICop
b3JpZ2luYWxJbWFnZTsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIF9XS0ltYWdlRmlsZVVwbG9h
ZEl0ZW0gewotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2ZpbGVQYXRoOwogICAgIFJldGFpblB0
cjxVSUltYWdlPiBfb3JpZ2luYWxJbWFnZTsKIH0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
RmlsZVBhdGg6KE5TU3RyaW5nICopZmlsZVBhdGggb3JpZ2luYWxJbWFnZTooVUlJbWFnZSAqKW9y
aWdpbmFsSW1hZ2UKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZpbGVVUkw6KE5TVVJMICopZmls
ZVVSTCBvcmlnaW5hbEltYWdlOihVSUltYWdlICopb3JpZ2luYWxJbWFnZQogewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhG
aWxlVVJMOmZpbGVVUkxdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBfZmlsZVBhdGggPSBm
aWxlUGF0aDsKKwogICAgIF9vcmlnaW5hbEltYWdlID0gb3JpZ2luYWxJbWFnZTsKICAgICByZXR1
cm4gc2VsZjsKIH0KQEAgLTE1OCwxMSArMjI4LDYgQEAgLSAoQk9PTClpc1ZpZGVvCiAgICAgcmV0
dXJuIE5POwogfQogCi0tIChOU1VSTCAqKWZpbGVVUkwKLXsKLSAgICByZXR1cm4gW05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpfZmlsZVBhdGguZ2V0KCldOwotfQotCiAtIChVSUltYWdlICopZGlzcGxh
eUltYWdlCiB7CiAgICAgcmV0dXJuIHRodW1ibmFpbFNpemVkSW1hZ2VGb3JJbWFnZShfb3JpZ2lu
YWxJbWFnZS5nZXQoKSk7CkBAIC0xNzIsNDggKzIzNywxOCBAQCBAZW5kCiAKIAogQGludGVyZmFj
ZSBfV0tWaWRlb0ZpbGVVcGxvYWRJdGVtIDogX1dLRmlsZVVwbG9hZEl0ZW0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEZpbGVQYXRoOihOU1N0cmluZyAqKWZpbGVQYXRoIG1lZGlhVVJMOihOU1VS
TCAqKW1lZGlhVVJMOwogQGVuZAogCi1AaW1wbGVtZW50YXRpb24gX1dLVmlkZW9GaWxlVXBsb2Fk
SXRlbSB7Ci0gICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfZmlsZVBhdGg7Ci0gICAgUmV0YWluUHRy
PE5TVVJMPiBfbWVkaWFVUkw7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZpbGVQYXRo
OihOU1N0cmluZyAqKWZpbGVQYXRoIG1lZGlhVVJMOihOU1VSTCAqKW1lZGlhVVJMCi17Ci0gICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2Zp
bGVQYXRoID0gZmlsZVBhdGg7Ci0gICAgX21lZGlhVVJMID0gbWVkaWFVUkw7Ci0gICAgcmV0dXJu
IHNlbGY7Ci19CitAaW1wbGVtZW50YXRpb24gX1dLVmlkZW9GaWxlVXBsb2FkSXRlbQogCiAtIChC
T09MKWlzVmlkZW8KIHsKICAgICByZXR1cm4gWUVTOwogfQogCi0tIChOU1VSTCAqKWZpbGVVUkwK
LXsKLSAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpfZmlsZVBhdGguZ2V0KCldOwot
fQotCiAtIChVSUltYWdlICopZGlzcGxheUltYWdlCiB7Ci0gICAgUmV0YWluUHRyPEFWVVJMQXNz
ZXQ+IGFzc2V0ID0gYWRvcHROUyhbYWxsb2NBVlVSTEFzc2V0SW5zdGFuY2UoKSBpbml0V2l0aFVS
TDpfbWVkaWFVUkwuZ2V0KCkgb3B0aW9uczpuaWxdKTsKLSAgICBSZXRhaW5QdHI8QVZBc3NldElt
YWdlR2VuZXJhdG9yPiBnZW5lcmF0b3IgPSBhZG9wdE5TKFthbGxvY0FWQXNzZXRJbWFnZUdlbmVy
YXRvckluc3RhbmNlKCkgaW5pdFdpdGhBc3NldDphc3NldC5nZXQoKV0pOwotICAgIFtnZW5lcmF0
b3Igc2V0QXBwbGllc1ByZWZlcnJlZFRyYWNrVHJhbnNmb3JtOllFU107Ci0KLSAgICBOU0Vycm9y
ICplcnJvciA9IG5pbDsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VSZWYgPSBhZG9w
dENGKFtnZW5lcmF0b3IgY29weUNHSW1hZ2VBdFRpbWU6a0NNVGltZVplcm8gYWN0dWFsVGltZTpu
aWwgZXJyb3I6JmVycm9yXSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIExPR19FUlJPUigi
X1dLVmlkZW9GaWxlVXBsb2FkSXRlbTogRXJyb3IgY3JlYXRpbmcgaW1hZ2UgZm9yIHZpZGVvOiAl
QCIsIF9tZWRpYVVSTC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAg
UmV0YWluUHRyPFVJSW1hZ2U+IGltYWdlID0gYWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRX
aXRoQ0dJbWFnZTppbWFnZVJlZi5nZXQoKV0pOwotICAgIHJldHVybiB0aHVtYm5haWxTaXplZElt
YWdlRm9ySW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiBpY29uRm9yVmlkZW9GaWxlKHNl
bGYuZmlsZVVSTCk7CiB9CiAKIEBlbmQKQEAgLTIyMSw3ICsyNTYsNyBAQCBAZW5kCiAKICNwcmFn
bWEgbWFyayAtIFdLRmlsZVVwbG9hZFBhbmVsCiAKLUBpbnRlcmZhY2UgV0tGaWxlVXBsb2FkUGFu
ZWwgKCkgPFVJUG9wb3ZlckNvbnRyb2xsZXJEZWxlZ2F0ZSwgVUlOYXZpZ2F0aW9uQ29udHJvbGxl
ckRlbGVnYXRlLCBVSUltYWdlUGlja2VyQ29udHJvbGxlckRlbGVnYXRlPgorQGludGVyZmFjZSBX
S0ZpbGVVcGxvYWRQYW5lbCAoKSA8VUlQb3BvdmVyQ29udHJvbGxlckRlbGVnYXRlLCBVSU5hdmln
YXRpb25Db250cm9sbGVyRGVsZWdhdGUsIFVJSW1hZ2VQaWNrZXJDb250cm9sbGVyRGVsZWdhdGUs
IFVJRG9jdW1lbnRQaWNrZXJEZWxlZ2F0ZSwgVUlEb2N1bWVudE1lbnVEZWxlZ2F0ZT4KIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdLRmlsZVVwbG9hZFBhbmVsIHsKQEAgLTIzMiw5ICsyNjcsMTAg
QEAgQGltcGxlbWVudGF0aW9uIFdLRmlsZVVwbG9hZFBhbmVsIHsKICAgICBCT09MIF9hbGxvd011
bHRpcGxlRmlsZXM7CiAgICAgQk9PTCBfdXNpbmdDYW1lcmE7CiAgICAgUmV0YWluUHRyPFVJSW1h
Z2VQaWNrZXJDb250cm9sbGVyPiBfaW1hZ2VQaWNrZXI7Ci0gICAgUmV0YWluUHRyPFVJQWxlcnRD
b250cm9sbGVyPiBfYWN0aW9uU2hlZXRDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxVSVZpZXdD
b250cm9sbGVyPiBfcHJlc2VudGF0aW9uVmlld0NvbnRyb2xsZXI7IC8vIGlQaG9uZSBhbHdheXMu
IGlQYWQgZm9yIEZ1bGxzY3JlZW4gQ2FtZXJhLgogICAgIFJldGFpblB0cjxVSVBvcG92ZXJDb250
cm9sbGVyPiBfcHJlc2VudGF0aW9uUG9wb3ZlcjsgLy8gaVBhZCBmb3IgYWN0aW9uIHNoZWV0IGFu
ZCBQaG90byBMaWJyYXJ5LgorICAgIFJldGFpblB0cjxVSURvY3VtZW50TWVudVZpZXdDb250cm9s
bGVyPiBfZG9jdW1lbnRNZW51Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlBbGVydENvbnRy
b2xsZXI+IF9hY3Rpb25TaGVldENvbnRyb2xsZXI7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3CkBAIC0yNDksNiArMjg1LDggQEAgLSAodm9p
ZClkZWFsbG9jCiB7CiAgICAgW19pbWFnZVBpY2tlciBzZXREZWxlZ2F0ZTpuaWxdOwogICAgIFtf
cHJlc2VudGF0aW9uUG9wb3ZlciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfZG9jdW1lbnRNZW51
Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQog
CkBAIC0zMDUsNiArMzQzLDEyIEBAIC0gKHZvaWQpcHJlc2VudFdpdGhQYXJhbWV0ZXJzOihXZWJL
aXQ6OldlYk9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0CiAgICAgICAgIFtt
aW1lVHlwZXMgYWRkT2JqZWN0Om1pbWVUeXBlLT5zdHJpbmcoKV07CiAgICAgX21pbWVUeXBlcyA9
IGFkb3B0TlMoW21pbWVUeXBlcyBjb3B5XSk7CiAKKyAgICBpZiAoW1VJRG9jdW1lbnRNZW51Vmll
d0NvbnRyb2xsZXIgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKF9zZXRJZ25v
cmVBcHBsaWNhdGlvbkVudGl0bGVtZW50Rm9ySW1wb3J0OildKSB7CisgICAgICAgIFtzZWxmIF9z
aG93RG9jdW1lbnRQaWNrZXJNZW51XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEZhbGwgYmFjayB0byBzaG93aW5nIHRoZSBvbGQtc3R5bGUgc291cmNlIHNlbGVjdGlvbiBzaGVl
dC4KICAgICAvLyBJZiB0aGVyZSBpcyBubyBjYW1lcmEgb3IgdGhpcyBpcyB0eXBlPW11bHRpcGxl
LCBqdXN0IHNob3cgdGhlIGltYWdlIHBpY2tlciBmb3IgdGhlIHBob3RvIGxpYnJhcnkuCiAgICAg
Ly8gT3RoZXJ3aXNlLCBzaG93IGFuIGFjdGlvbiBzaGVldCBmb3IgdGhlIHVzZXIgdG8gY2hvb3Nl
IGJldHdlZW4gY2FtZXJhIG9yIGxpYnJhcnkuCiAgICAgaWYgKF9hbGxvd011bHRpcGxlRmlsZXMg
fHwgIVtVSUltYWdlUGlja2VyQ29udHJvbGxlciBpc1NvdXJjZVR5cGVBdmFpbGFibGU6VUlJbWFn
ZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlQ2FtZXJhXSkKQEAgLTMzNCw3ICszNzgsNyBAQCAt
ICh2b2lkKV9kaXNtaXNzRGlzcGxheUFuaW1hdGVkOihCT09MKWFuaW1hdGVkCiAgICAgfQogfQog
Ci0jcHJhZ21hIG1hcmsgLSBBY3Rpb24gU2hlZXQKKyNwcmFnbWEgbWFyayAtIE1lZGlhIFR5cGVz
CiAKIHN0YXRpYyBib29sIHN0cmluZ0hhc1ByZWZpeENhc2VJbnNlbnNpdGl2ZShOU1N0cmluZyAq
c3RyLCBOU1N0cmluZyAqcHJlZml4KQogewpAQCAtMzQyLDcgKzM4Niw3IEBAIHN0YXRpYyBib29s
IHN0cmluZ0hhc1ByZWZpeENhc2VJbnNlbnNpdGl2ZShOU1N0cmluZyAqc3RyLCBOU1N0cmluZyAq
cHJlZml4KQogICAgIHJldHVybiByYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kOwogfQogCi0t
IChOU0FycmF5ICopX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOihVSUltYWdlUGlja2Vy
Q29udHJvbGxlclNvdXJjZVR5cGUpc291cmNlVHlwZQorLSAoTlNBcnJheSAqKV9VVElzRm9yTUlN
RVR5cGVzCiB7CiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgbWVudGlvbnMgdGhlIGxpdGVyYWwgImlt
YWdlLyoiIGFuZCAidmlkZW8vKiIgc3RyaW5ncy4KICAgICAvLyBXZSBzdXBwb3J0IHRoZXNlIGFu
ZCBnbyBhIHN0ZXAgZnVydGhlciwgaWYgdGhlIE1JTUUgdHlwZSBzdGFydHMgd2l0aApAQCAtMzUw
LDM2ICszOTQsNjcgQEAgLSAoTlNBcnJheSAqKV9tZWRpYVR5cGVzRm9yUGlja2VyU291cmNlVHlw
ZTooVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VUeXBlKXMKICAgICAvLyBTbywgImltYWdl
L2pwZWciIHdvdWxkIG1ha2UgdGhlIHBpY2tlciBkaXNwbGF5IGFsbCBpbWFnZXMgdHlwZXMuCiAg
ICAgTlNNdXRhYmxlU2V0ICptZWRpYVR5cGVzID0gW05TTXV0YWJsZVNldCBzZXRdOwogICAgIGZv
ciAoTlNTdHJpbmcgKm1pbWVUeXBlIGluIF9taW1lVHlwZXMuZ2V0KCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgTUlNRSB0eXBlIC0+IFVUSSBtYXBwaW5ncy4g
PGh0dHA6Ly93ZWJraXQub3JnL2IvMTQyNjE0PgogICAgICAgICBpZiAoc3RyaW5nSGFzUHJlZml4
Q2FzZUluc2Vuc2l0aXZlKG1pbWVUeXBlLCBAImltYWdlLyIpKQogICAgICAgICAgICAgW21lZGlh
VHlwZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVJbWFnZV07CiAgICAgICAgIGVsc2Ug
aWYgKHN0cmluZ0hhc1ByZWZpeENhc2VJbnNlbnNpdGl2ZShtaW1lVHlwZSwgQCJ2aWRlby8iKSkK
ICAgICAgICAgICAgIFttZWRpYVR5cGVzIGFkZE9iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlTW92
aWVdOwogICAgIH0KIAotICAgIGlmIChbbWVkaWFUeXBlcyBjb3VudF0pCi0gICAgICAgIHJldHVy
biBbbWVkaWFUeXBlcyBhbGxPYmplY3RzXTsKKyAgICByZXR1cm4gbWVkaWFUeXBlcy5hbGxPYmpl
Y3RzOworfQorCistIChOU0FycmF5ICopX21lZGlhVHlwZXNGb3JQaWNrZXJTb3VyY2VUeXBlOihV
SUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGUpc291cmNlVHlwZQoreworICAgIE5TQXJy
YXkgKm1lZGlhVHlwZXMgPSBbc2VsZiBfVVRJc0Zvck1JTUVUeXBlc107CisgICAgaWYgKG1lZGlh
VHlwZXMuY291bnQpCisgICAgICAgIHJldHVybiBtZWRpYVR5cGVzOwogCiAgICAgLy8gRmFsbGJh
Y2sgdG8gZXZlcnkgc3VwcG9ydGVkIG1lZGlhIHR5cGUgaWYgdGhlcmUgaXMgbm8gZmlsdGVyLgog
ICAgIHJldHVybiBbVUlJbWFnZVBpY2tlckNvbnRyb2xsZXIgYXZhaWxhYmxlTWVkaWFUeXBlc0Zv
clNvdXJjZVR5cGU6c291cmNlVHlwZV07CiB9CiAKLS0gKHZvaWQpX3Nob3dNZWRpYVNvdXJjZVNl
bGVjdGlvblNoZWV0CistIChOU0FycmF5ICopX2RvY3VtZW50UGlja2VyTWVudU1lZGlhVHlwZXMK
IHsKLSAgICBOU1N0cmluZyAqZXhpc3RpbmdTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiUGhv
dG8gTGlicmFyeSIsICJQaG90byBMaWJyYXJ5IChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwg
IkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1dHRvbiBzdHJpbmcgZm9yIGNob29zaW5nIGFuIGV4
aXN0aW5nIG1lZGlhIGl0ZW0gZnJvbSB0aGUgUGhvdG8gTGlicmFyeSIpOwotICAgIE5TU3RyaW5n
ICpjYW5jZWxTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiQ2FuY2VsIiwgIkNhbmNlbCAoZmls
ZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVydCBzaGVldCBidXR0b24g
c3RyaW5nIHRvIGNhbmNlbCIpOworICAgIE5TQXJyYXkgKm1lZGlhVHlwZXMgPSBbc2VsZiBfVVRJ
c0Zvck1JTUVUeXBlc107CisgICAgaWYgKG1lZGlhVHlwZXMuY291bnQpCisgICAgICAgIHJldHVy
biBtZWRpYVR5cGVzOworCisgICAgLy8gRmFsbGJhY2sgdG8gZXZlcnkgc3VwcG9ydGVkIG1lZGlh
IHR5cGUgaWYgdGhlcmUgaXMgbm8gZmlsdGVyLgorICAgIHJldHVybiBAW0AicHVibGljLml0ZW0i
XTsKK30KKworI3ByYWdtYSBtYXJrIC0gU291cmNlIHNlbGVjdGlvbiBtZW51CisKKy0gKE5TU3Ry
aW5nICopX3Bob3RvTGlicmFyeUJ1dHRvbkxhYmVsCit7CisgICAgcmV0dXJuIFdFQl9VSV9TVFJJ
TkdfS0VZKCJQaG90byBMaWJyYXJ5IiwgIlBob3RvIExpYnJhcnkgKGZpbGUgdXBsb2FkIGFjdGlv
biBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgYnV0dG9uIHN0cmluZyBmb3IgY2hv
b3NpbmcgYW4gZXhpc3RpbmcgbWVkaWEgaXRlbSBmcm9tIHRoZSBQaG90byBMaWJyYXJ5Iik7Cit9
CisKKy0gKE5TU3RyaW5nICopX2NhbWVyYUJ1dHRvbkxhYmVsCit7CisgICAgaWYgKCFbVUlJbWFn
ZVBpY2tlckNvbnRyb2xsZXIgaXNTb3VyY2VUeXBlQXZhaWxhYmxlOlVJSW1hZ2VQaWNrZXJDb250
cm9sbGVyU291cmNlVHlwZUNhbWVyYV0pCisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBD
aG9vc2UgdGhlIGFwcHJvcHJpYXRlIHN0cmluZyBmb3IgdGhlIGNhbWVyYSBidXR0b24uCi0gICAg
TlNTdHJpbmcgKmNhbWVyYVN0cmluZzsKICAgICBOU0FycmF5ICpmaWx0ZXJlZE1lZGlhVHlwZXMg
PSBbc2VsZiBfbWVkaWFUeXBlc0ZvclBpY2tlclNvdXJjZVR5cGU6VUlJbWFnZVBpY2tlckNvbnRy
b2xsZXJTb3VyY2VUeXBlQ2FtZXJhXTsKICAgICBCT09MIGNvbnRhaW5zSW1hZ2VNZWRpYVR5cGUg
PSBbZmlsdGVyZWRNZWRpYVR5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKWtVVFR5cGVJ
bWFnZV07CiAgICAgQk9PTCBjb250YWluc1ZpZGVvTWVkaWFUeXBlID0gW2ZpbHRlcmVkTWVkaWFU
eXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilrVVRUeXBlTW92aWVdOwogICAgIEFTU0VS
VChjb250YWluc0ltYWdlTWVkaWFUeXBlIHx8IGNvbnRhaW5zVmlkZW9NZWRpYVR5cGUpOwogICAg
IGlmIChjb250YWluc0ltYWdlTWVkaWFUeXBlICYmIGNvbnRhaW5zVmlkZW9NZWRpYVR5cGUpCi0g
ICAgICAgIGNhbWVyYVN0cmluZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFBob3RvIG9yIFZp
ZGVvIiwgIlRha2UgUGhvdG8gb3IgVmlkZW8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAi
RmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBw
aG90b3Mgb3IgdmlkZW9zIik7Ci0gICAgZWxzZSBpZiAoY29udGFpbnNWaWRlb01lZGlhVHlwZSkK
LSAgICAgICAgY2FtZXJhU3RyaW5nID0gV0VCX1VJX1NUUklOR19LRVkoIlRha2UgVmlkZW8iLCAi
VGFrZSBWaWRlbyAoZmlsZSB1cGxvYWQgYWN0aW9uIHNoZWV0KSIsICJGaWxlIFVwbG9hZCBhbGVy
dCBzaGVldCBjYW1lcmEgYnV0dG9uIHN0cmluZyBmb3IgdGFraW5nIG9ubHkgdmlkZW9zIik7Ci0g
ICAgZWxzZQotICAgICAgICBjYW1lcmFTdHJpbmcgPSBXRUJfVUlfU1RSSU5HX0tFWSgiVGFrZSBQ
aG90byIsICJUYWtlIFBob3RvIChmaWxlIHVwbG9hZCBhY3Rpb24gc2hlZXQpIiwgIkZpbGUgVXBs
b2FkIGFsZXJ0IHNoZWV0IGNhbWVyYSBidXR0b24gc3RyaW5nIGZvciB0YWtpbmcgb25seSBwaG90
b3MiKTsKKyAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFBob3RvIG9yIFZp
ZGVvIiwgIlRha2UgUGhvdG8gb3IgVmlkZW8gKGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAi
RmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBw
aG90b3Mgb3IgdmlkZW9zIik7CisKKyAgICBpZiAoY29udGFpbnNWaWRlb01lZGlhVHlwZSkKKyAg
ICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFZpZGVvIiwgIlRha2UgVmlkZW8g
KGZpbGUgdXBsb2FkIGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2Ft
ZXJhIGJ1dHRvbiBzdHJpbmcgZm9yIHRha2luZyBvbmx5IHZpZGVvcyIpOworCisgICAgcmV0dXJu
IFdFQl9VSV9TVFJJTkdfS0VZKCJUYWtlIFBob3RvIiwgIlRha2UgUGhvdG8gKGZpbGUgdXBsb2Fk
IGFjdGlvbiBzaGVldCkiLCAiRmlsZSBVcGxvYWQgYWxlcnQgc2hlZXQgY2FtZXJhIGJ1dHRvbiBz
dHJpbmcgZm9yIHRha2luZyBvbmx5IHBob3RvcyIpOworfQorCistICh2b2lkKV9zaG93TWVkaWFT
b3VyY2VTZWxlY3Rpb25TaGVldAoreworICAgIE5TU3RyaW5nICpleGlzdGluZ1N0cmluZyA9IFtz
ZWxmIF9waG90b0xpYnJhcnlCdXR0b25MYWJlbF07CisgICAgTlNTdHJpbmcgKmNhbWVyYVN0cmlu
ZyA9IFtzZWxmIF9jYW1lcmFCdXR0b25MYWJlbF07CisgICAgTlNTdHJpbmcgKmNhbmNlbFN0cmlu
ZyA9IFdFQl9VSV9TVFJJTkdfS0VZKCJDYW5jZWwiLCAiQ2FuY2VsIChmaWxlIHVwbG9hZCBhY3Rp
b24gc2hlZXQpIiwgIkZpbGUgVXBsb2FkIGFsZXJ0IHNoZWV0IGJ1dHRvbiBzdHJpbmcgdG8gY2Fu
Y2VsIik7CiAKICAgICBfYWN0aW9uU2hlZXRDb250cm9sbGVyID0gW1VJQWxlcnRDb250cm9sbGVy
IGFsZXJ0Q29udHJvbGxlcldpdGhUaXRsZTpuaWwgbWVzc2FnZTpuaWwgcHJlZmVycmVkU3R5bGU6
VUlBbGVydENvbnRyb2xsZXJTdHlsZUFjdGlvblNoZWV0XTsKIApAQCAtNDAyLDEwICs0NzcsMzAg
QEAgLSAodm9pZClfc2hvd01lZGlhU291cmNlU2VsZWN0aW9uU2hlZXQKICAgICBbX2FjdGlvblNo
ZWV0Q29udHJvbGxlciBhZGRBY3Rpb246Y2FtZXJhQWN0aW9uXTsKICAgICBbX2FjdGlvblNoZWV0
Q29udHJvbGxlciBhZGRBY3Rpb246cGhvdG9MaWJyYXJ5QWN0aW9uXTsKIAotICAgIGlmIChVSUN1
cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZCgpKQotICAgICAgICBbc2VsZiBfcHJlc2VudFBv
cG92ZXJXaXRoQ29udGVudFZpZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0
KCkgYW5pbWF0ZWQ6WUVTXTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIF9wcmVzZW50RnVsbHNj
cmVlblZpZXdDb250cm9sbGVyOl9hY3Rpb25TaGVldENvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6
WUVTXTsKKyAgICBbc2VsZiBfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJZGlvbTpfYWN0aW9u
U2hlZXRDb250cm9sbGVyLmdldCgpXTsKK30KKworLSAodm9pZClfc2hvd0RvY3VtZW50UGlja2Vy
TWVudQoreworICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIGZpbGUgc2VsZWN0aW9uIHdo
ZW4gaW1wbGVtZW50ZWQuIDxyZGFyOi8vMTcxNzc5ODE+CisgICAgX2RvY3VtZW50TWVudUNvbnRy
b2xsZXIgPSBhZG9wdE5TKFtVSURvY3VtZW50TWVudVZpZXdDb250cm9sbGVyIGFsbG9jXSk7Cisg
ICAgW19kb2N1bWVudE1lbnVDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBsaWNhdGlvbkVudGl0bGVt
ZW50Rm9ySW1wb3J0OllFU107CisgICAgW19kb2N1bWVudE1lbnVDb250cm9sbGVyIGluaXRXaXRo
RG9jdW1lbnRUeXBlczpbc2VsZiBfZG9jdW1lbnRQaWNrZXJNZW51TWVkaWFUeXBlc10gaW5Nb2Rl
OlVJRG9jdW1lbnRQaWNrZXJNb2RlSW1wb3J0XTsKKyAgICBbX2RvY3VtZW50TWVudUNvbnRyb2xs
ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisKKyAgICAvLyBGSVhNRTogTmVlZCBpY29ucyBmb3IgQ2Ft
ZXJhIGFuZCBQaG90byBMaWJyYXJ5IG9wdGlvbnMuCisgICAgW19kb2N1bWVudE1lbnVDb250cm9s
bGVyIGFkZE9wdGlvbldpdGhUaXRsZTpbc2VsZiBfcGhvdG9MaWJyYXJ5QnV0dG9uTGFiZWxdIGlt
YWdlOm5pbCBvcmRlcjpVSURvY3VtZW50TWVudU9yZGVyRmlyc3QgaGFuZGxlcjpeeworICAgICAg
ICBbc2VsZiBfc2hvd1Bob3RvUGlja2VyV2l0aFNvdXJjZVR5cGU6VUlJbWFnZVBpY2tlckNvbnRy
b2xsZXJTb3VyY2VUeXBlUGhvdG9MaWJyYXJ5XTsKKyAgICB9XTsKKworICAgIGlmIChOU1N0cmlu
ZyAqY2FtZXJhU3RyaW5nID0gW3NlbGYgX2NhbWVyYUJ1dHRvbkxhYmVsXSkgeworICAgICAgICBb
X2RvY3VtZW50TWVudUNvbnRyb2xsZXIgYWRkT3B0aW9uV2l0aFRpdGxlOmNhbWVyYVN0cmluZyBp
bWFnZTpuaWwgb3JkZXI6VUlEb2N1bWVudE1lbnVPcmRlckZpcnN0IGhhbmRsZXI6XnsKKyAgICAg
ICAgICAgIF91c2luZ0NhbWVyYSA9IFlFUzsKKyAgICAgICAgICAgIFtzZWxmIF9zaG93UGhvdG9Q
aWNrZXJXaXRoU291cmNlVHlwZTpVSUltYWdlUGlja2VyQ29udHJvbGxlclNvdXJjZVR5cGVDYW1l
cmFdOworICAgICAgICB9XTsKKyAgICB9CisKKyAgICBbc2VsZiBfcHJlc2VudEZvckN1cnJlbnRJ
bnRlcmZhY2VJZGlvbTpfZG9jdW1lbnRNZW51Q29udHJvbGxlci5nZXQoKV07CiB9CiAKICNwcmFn
bWEgbWFyayAtIEltYWdlIFBpY2tlcgpAQCAtNDMxLDYgKzUyNiwxNCBAQCAtICh2b2lkKV9zaG93
UGhvdG9QaWNrZXJXaXRoU291cmNlVHlwZTooVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJTb3VyY2VU
eXBlKXNvdXJjZQogCiAjcHJhZ21hIG1hcmsgLSBQcmVzZW50aW5nIFZpZXcgQ29udHJvbGxlcnMK
IAorLSAodm9pZClfcHJlc2VudEZvckN1cnJlbnRJbnRlcmZhY2VJZGlvbTooVUlWaWV3Q29udHJv
bGxlciAqKXZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKFVJQ3VycmVudFVzZXJJbnRlcmZhY2VJ
ZGlvbUlzUGFkKCkpCisgICAgICAgIFtzZWxmIF9wcmVzZW50UG9wb3ZlcldpdGhDb250ZW50Vmll
d0NvbnRyb2xsZXI6dmlld0NvbnRyb2xsZXIgYW5pbWF0ZWQ6WUVTXTsKKyAgICBlbHNlCisgICAg
ICAgIFtzZWxmIF9wcmVzZW50RnVsbHNjcmVlblZpZXdDb250cm9sbGVyOnZpZXdDb250cm9sbGVy
IGFuaW1hdGVkOllFU107Cit9CisKIC0gKHZvaWQpX3ByZXNlbnRQb3BvdmVyV2l0aENvbnRlbnRW
aWV3Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKWNvbnRlbnRWaWV3Q29udHJvbGxlciBh
bmltYXRlZDooQk9PTClhbmltYXRlZAogewogICAgIFtzZWxmIF9kaXNtaXNzRGlzcGxheUFuaW1h
dGVkOmFuaW1hdGVkXTsKQEAgLTQ1NSw2ICs1NTgsMzYgQEAgLSAodm9pZClwb3BvdmVyQ29udHJv
bGxlckRpZERpc21pc3NQb3BvdmVyOihVSVBvcG92ZXJDb250cm9sbGVyICopcG9wb3ZlckNvbnRy
b2wKICAgICBbc2VsZiBfY2FuY2VsXTsKIH0KIAorI3ByYWdtYSBtYXJrIC0gVUlEb2N1bWVudE1l
bnVEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbgorCistICh2b2lkKWRvY3VtZW50TWVudTooVUlEb2N1
bWVudE1lbnVWaWV3Q29udHJvbGxlciAqKWRvY3VtZW50TWVudSBkaWRQaWNrRG9jdW1lbnRQaWNr
ZXI6KFVJRG9jdW1lbnRQaWNrZXJWaWV3Q29udHJvbGxlciAqKWRvY3VtZW50UGlja2VyCit7Cisg
ICAgZG9jdW1lbnRQaWNrZXIuZGVsZWdhdGUgPSBzZWxmOworICAgIGRvY3VtZW50UGlja2VyLm1v
ZGFsUHJlc2VudGF0aW9uU3R5bGUgPSBVSU1vZGFsUHJlc2VudGF0aW9uRnVsbFNjcmVlbjsKKwor
ICAgIFtzZWxmIF9wcmVzZW50Rm9yQ3VycmVudEludGVyZmFjZUlkaW9tOmRvY3VtZW50UGlja2Vy
XTsKK30KKworLSAodm9pZClkb2N1bWVudE1lbnVXYXNDYW5jZWxsZWQ6KFVJRG9jdW1lbnRNZW51
Vmlld0NvbnRyb2xsZXIgKilkb2N1bWVudE1lbnUKK3sKKyAgICBbc2VsZiBfZGlzbWlzc0Rpc3Bs
YXlBbmltYXRlZDpZRVNdOworICAgIFtzZWxmIF9jYW5jZWxdOworfQorCisjcHJhZ21hIG1hcmsg
LSBVSURvY3VtZW50UGlja2VyQ29udHJvbGxlckRlbGVnYXRlIGltcGxlbWVudGF0aW9uCisKKy0g
KHZvaWQpZG9jdW1lbnRQaWNrZXI6KFVJRG9jdW1lbnRQaWNrZXJWaWV3Q29udHJvbGxlciAqKWRv
Y3VtZW50UGlja2VyIGRpZFBpY2tEb2N1bWVudEF0VVJMOihOU1VSTCAqKXVybAoreworICAgIFtz
ZWxmIF9kaXNtaXNzRGlzcGxheUFuaW1hdGVkOllFU107CisgICAgW3NlbGYgX2Nob29zZUZpbGVz
OkBbdXJsXSBkaXNwbGF5U3RyaW5nOnVybC5sYXN0UGF0aENvbXBvbmVudCBpY29uSW1hZ2U6aWNv
bkZvckZpbGUodXJsKV07Cit9CisKKy0gKHZvaWQpZG9jdW1lbnRQaWNrZXJXYXNDYW5jZWxsZWQ6
KFVJRG9jdW1lbnRQaWNrZXJWaWV3Q29udHJvbGxlciAqKWRvY3VtZW50UGlja2VyCit7CisgICAg
W3NlbGYgX2Rpc21pc3NEaXNwbGF5QW5pbWF0ZWQ6WUVTXTsKKyAgICBbc2VsZiBfY2FuY2VsXTsK
K30KKwogI3ByYWdtYSBtYXJrIC0gVUlJbWFnZVBpY2tlckNvbnRyb2xsZXJEZWxlZ2F0ZSBpbXBs
ZW1lbnRhdGlvbgogCiAtIChCT09MKV93aWxsTXVsdGlwbGVTZWxlY3Rpb25EZWxlZ2F0ZUJlQ2Fs
bGVkCkBAIC01NzQsOCArNzA3LDcgQEAgLSAodm9pZClfdXBsb2FkSXRlbUZyb21NZWRpYUluZm86
KE5TRGljdGlvbmFyeSAqKWluZm8gc3VjY2Vzc0Jsb2NrOih2b2lkICheKShfV0sKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIE5TU3RyaW5nICpmaWxlUGF0aCA9IFtt
ZWRpYVVSTCBwYXRoXTsKLSAgICAgICAgc3VjY2Vzc0Jsb2NrKGFkb3B0TlMoW1tfV0tWaWRlb0Zp
bGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVQYXRoOmZpbGVQYXRoIG1lZGlhVVJMOm1l
ZGlhVVJMXSkuZ2V0KCkpOworICAgICAgICBzdWNjZXNzQmxvY2soYWRvcHROUyhbW19XS1ZpZGVv
RmlsZVVwbG9hZEl0ZW0gYWxsb2NdIGluaXRXaXRoRmlsZVVSTDptZWRpYVVSTF0pLmdldCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjI3LDcgKzc1OSw3IEBAIC0gKHZvaWQpX3Vw
bG9hZEl0ZW1Gcm9tTWVkaWFJbmZvOihOU0RpY3Rpb25hcnkgKilpbmZvIHN1Y2Nlc3NCbG9jazoo
dm9pZCAoXikoX1dLCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBzdWNjZXNzQmxvY2soYWRvcHROUyhbW19XS0ltYWdlRmlsZVVwbG9hZEl0ZW0g
YWxsb2NdIGluaXRXaXRoRmlsZVBhdGg6ZmlsZVBhdGggb3JpZ2luYWxJbWFnZTpvcmlnaW5hbElt
YWdlXSkuZ2V0KCkpOworICAgICAgICAgICAgc3VjY2Vzc0Jsb2NrKGFkb3B0TlMoW1tfV0tJbWFn
ZUZpbGVVcGxvYWRJdGVtIGFsbG9jXSBpbml0V2l0aEZpbGVVUkw6W05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpmaWxlUGF0aF0gb3JpZ2luYWxJbWFnZTpvcmlnaW5hbEltYWdlXSkuZ2V0KCkpOwogICAg
ICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
</data>
<flag name="review"
          id="273454"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
      

    </bug>

</bugzilla>