<?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>172891</bug_id>
          
          <creation_ts>2017-06-03 01:12:24 -0700</creation_ts>
          <short_desc>Refactor -[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:] to check readable types</short_desc>
          <delta_ts>2017-06-05 21:47:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1315375</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-06-03 01:12:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/32204540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315377</commentid>
    <comment_count>1</comment_count>
      <attachid>311907</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-06-03 01:40:23 -0700</bug_when>
    <thetext>Created attachment 311907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315548</commentid>
    <comment_count>2</comment_count>
      <attachid>311907</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-04 08:50:43 -0700</bug_when>
    <thetext>Comment on attachment 311907
Patch

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

I’m concerned that we don’t have coverage for the existing cases; the new tests only cover the new feature. The old code handled 13 different UTIs. Do we have tests that cover all 13 of those to make sure the new code path relying on UIKit methods still works with all 13 of them? And what about each UTI with each possible different type of data (string vs. attributed string, etc.)? What about UTIs we should definitely not handle; are there any of those we should be testing?

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:399
&gt; +    if (type == String(kUTTypeText) || type == String(kUTTypeHTML) || type == String(kUTTypePlainText)) {
&gt; +        ASSERT([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSAttributedString class]]);

Can all three of these really have NSAttributedString? Or is it only one or two of them?

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:321
&gt; +static Class classForTypeIdentifier(NSString *typeIdentifier, NSString **outTypeIdentifierToLoad)

The out argument could be a reference instead of a pointer. There is only one call site and it doesn’t need the flexibility to pass a null pointer in. Or we could still use a pointer, but no need for the null checks.

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:323
&gt; +    if (outTypeIdentifierToLoad)

This if statement isn’t needed.

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:336
&gt; +        if (outTypeIdentifierToLoad)

This if statement isn’t needed.

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:353
&gt; +        NSString *typeIdentifierToLoad = nil;

No need to initialize this to nil. The function never returns without setting this. But some people might be more comfortable if you left that in.

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:355
&gt; +        if (!readableClass || !typeIdentifierToLoad)

The null check for typeIdentifierToLoad here is unnecessary. The function doesn’t return a non-nil class and nil for a type identifier, and so we should not have a dead code path checking for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315737</commentid>
    <comment_count>3</comment_count>
      <attachid>311907</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-06-05 11:59:02 -0700</bug_when>
    <thetext>Comment on attachment 311907
Patch

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

Since WebItemProviderPasteboard is only used for drag and drop on iOS, I don&apos;t think there&apos;s significant risk to existing pasteboard-related functionality on iOS (e.g. copy and paste). The existing DataInteractionTests cover most of these codepaths by simulating external item providers (i.e. drops coming in from a different app). Part of the problem before was that this code previously attempted to map specific UTIs to object types, but UIKit already handles this responsibility, so there were many codepaths that didn&apos;t make sense before -- for instance, attempting to initialize an attributed string using kUTTypeHTML. Our testing for this codepath (drop handling) is centered around simulating scenarios that we encounter from other apps around the system, both from apps that use platform UIKit NSItemProviderWriting-conformant objects to generate item providers, and apps that directly write NSData to item providers for specific UTIs.

So far, these are some of the scenarios are tested for drops into web content:
- kUTTypeJSON as a file upload
- kUTTypeHTML both as file upload and insertion into rich editable
- NSAttributedString (kUTTypeRTFD) into rich editable
- NSString (kUTTypeUTF8PlainText) into rich/plain editable areas
- Web archive data into rich and plain editable areas
- kUTTypeURL into rich/plain editable areas
- kUTTypeGIF as file upload
- kUTTypePNG into rich editable areas/file inputs
- kUTTypeJPEG into file inputs

As you pointed out, we need more test coverage here to check for false positives (UTIs that WebKit believes can be handled, but end up doing nothing on drop). I&apos;ll be adding more tests for these cases in subsequent patches. It looks like there isn&apos;t test coverage of UIColor either, and this is something I&apos;ll add as well (it should change the typing style to the given color). I&apos;ll also add tests for kUTTypeUTF16PlainText into plaintext inputs and rich contenteditable areas.

&gt;&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:399
&gt;&gt; +        ASSERT([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSAttributedString class]]);
&gt; 
&gt; Can all three of these really have NSAttributedString? Or is it only one or two of them?

Good point -- we should never produce an attributed string for kUTTypePlainText. I&apos;ll split that out into a different case.

&gt;&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:321
&gt;&gt; +static Class classForTypeIdentifier(NSString *typeIdentifier, NSString **outTypeIdentifierToLoad)
&gt; 
&gt; The out argument could be a reference instead of a pointer. There is only one call site and it doesn’t need the flexibility to pass a null pointer in. Or we could still use a pointer, but no need for the null checks.

Sounds good! Changed to use a reference.

&gt;&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:323
&gt;&gt; +    if (outTypeIdentifierToLoad)
&gt; 
&gt; This if statement isn’t needed.

Removed.

&gt;&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:336
&gt;&gt; +        if (outTypeIdentifierToLoad)
&gt; 
&gt; This if statement isn’t needed.

Removed.

&gt;&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:353
&gt;&gt; +        NSString *typeIdentifierToLoad = nil;
&gt; 
&gt; No need to initialize this to nil. The function never returns without setting this. But some people might be more comfortable if you left that in.

This makes sense -- I&apos;ve removed this.

&gt;&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:355
&gt;&gt; +        if (!readableClass || !typeIdentifierToLoad)
&gt; 
&gt; The null check for typeIdentifierToLoad here is unnecessary. The function doesn’t return a non-nil class and nil for a type identifier, and so we should not have a dead code path checking for that.

Removed the null check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315882</commentid>
    <comment_count>4</comment_count>
      <attachid>312049</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-06-05 21:08:59 -0700</bug_when>
    <thetext>Created attachment 312049
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315891</commentid>
    <comment_count>5</comment_count>
      <attachid>312049</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-05 21:47:42 -0700</bug_when>
    <thetext>Comment on attachment 312049
Patch for landing

Clearing flags on attachment: 312049

Committed r217818: &lt;http://trac.webkit.org/changeset/217818&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311907</attachid>
            <date>2017-06-03 01:40:23 -0700</date>
            <delta_ts>2017-06-04 08:50:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172891-20170603014023.patch</filename>
            <type>text/plain</type>
            <size>14047</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE3Njg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRjOGMzZTcyNjNlN2I4
MTQ1NWYzOTRlOTM3NWY0MTZkYTU0ZjQwYi4uMGM5NWQ2ZDhmOTZmNzBlOTYwMTBiN2I3MzlhODA0
MWViNTcwOWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA2LTAzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIC1b
V2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTppbkl0ZW1T
ZXQ6XSB0byBjaGVjayByZWFkYWJsZSB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyODkxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjIw
NDU0MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
d2Vha3Mgc29tZSBsb2dpYyBpbiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MgYW5kIFdlYkl0ZW1Qcm92
aWRlclBhc3RlYm9hcmQgdG8gY29ycmVjdGx5IGNvbnN0cnVjdCBvYmplY3RzIGluCisgICAgICAg
IC12YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTppbkl0ZW1TZXQ6LiBQcmV2aW91c2x5LCB3ZSBoYXZl
IGEgaGFyZC1jb2RlZCBtYXAgb2YgVVRJIHR5cGUgdG8gQ2xhc3MgaW4gdGhlIGZvcm0gb2YKKyAg
ICAgICAgc3RhdGljIGhlbHBlcnMgdGl0bGVkIGlze1JpY2hUZXh0LCBTdHJpbmcsIFVSTCwgSW1h
Z2UsIENvbG9yfVR5cGUgaW4gV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC4gV2Ugd291bGQgdXNl
CisgICAgICAgIHRoZXNlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBOU0F0dHJp
YnV0ZWRTdHJpbmcsIE5TU3RyaW5nLCBOU1VSTCwgVUlJbWFnZSBvciBVSUNvbG9yIHNob3VsZCBi
ZQorICAgICAgICBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgbG9hZGVkIGl0ZW0gcHJvdmlkZXIgZGF0
YS4gVGhpcyBpcyBpbmNvcnJlY3QgZm9yIHNvbWUgVVRJcywgc3VjaCBhcyBwdWJsaWMuaHRtbCwg
d2hpY2gKKyAgICAgICAgY2Fubm90IGFjdHVhbGx5IGJlIHVzZWQgdG8gY29uc3RydWN0IGFuIE5T
QXR0cmlidXRlZFN0cmluZyAtLSB0aGlzIGNhdXNlZCAtdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6
aW5JdGVtU2V0OiB0bworICAgICAgICBhbHdheXMgcmV0dXJuIG5pbCB3aGVuIGF0dGVtcHRpbmcg
dG8gY3JlYXRlIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHB1YmxpYy5odG1sLgorCisgICAg
ICAgIFRvIGZpeCB0aGlzLCB3ZSByZWZhY3RvciAtdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6aW5J
dGVtU2V0OiB0byBpbnN0ZWFkIGl0ZXJhdGUgdGhyb3VnaCBVSUl0ZW1Qcm92aWRlclJlYWRpbmct
CisgICAgICAgIGNvbmZvcm1hbnQgY2xhc3NlcyBpbiBzZWFyY2ggZm9yIGEgY2xhc3MgdGhhdCBj
YW4gYmUgY3JlYXRlZCBmb3IgdGhlIGdpdmVuIFVUSSB0eXBlLiBJZiBubyBzdWNoIGNsYXNzIGV4
aXN0cywgd2UKKyAgICAgICAgdGhlbiBmYWxsIGJhY2sgdG8gY3VzdG9tIFdlYktpdCBoYW5kbGlu
ZyBvZiB0aGUgZHJvcHBlZCBVVEkgdHlwZSwgd2hpY2ggc28gZmFyIG9ubHkgaW5jbHVkZXMgcmVh
ZGluZyBhbiBOU1N0cmluZworICAgICAgICB3aXRoIHB1YmxpYy5wbGFpbi10ZXh0IGlmIHRoZSBV
VEkgaXMgcHVibGljLmh0bWwgKGkuZS4gcmVhZGluZyB0aGUgSFRNTCBzb3VyY2UgZnJvbSBsb2Fk
ZWQgaXRlbSBwcm92aWRlciBkYXRhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IDIgbmV3IEFQSSB0
ZXN0czoKKyAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VIVE1MVG9D
b250ZW50RWRpdGFibGUKKyAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3Vy
Y2VBdHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUKKworICAgICAgICAqIHBsYXRmb3Jt
L2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Q
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nKToKKworICAgICAgICBJbiBzb21lIGNhc2VzLCAtW1dlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6aW5JdGVtU2V0Ol0g
bWF5IG5vdyByZXR1cm4gYW4KKyAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nIHdoZW4gYW4gTlNT
dHJpbmcgd2FzIHByZXZpb3VzbHkgY3JlYXRlZC4gVGhpcyBhZGp1c3RzIGZvciB0aGF0IHBvc3Np
YmlsaXR5IGJ5IHJldHVybmluZyBqdXN0CisgICAgICAgIHRoZSBwbGFpbiB0ZXh0LCAtW05TQXR0
cmlidXRlZFN0cmluZyBzdHJpbmddLCBpZiB0aGUgcmVhZCBvYmplY3Qgd2FzIGFuIE5TQXR0cmli
dXRlZFN0cmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkLm1tOgorICAgICAgICAoYWxsTG9hZGFibGVDbGFzc2VzKToKKyAgICAgICAgKGNsYXNz
Rm9yVHlwZUlkZW50aWZpZXIpOgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJk
IHZhbHVlc0ZvclBhc3RlYm9hcmRUeXBlOmluSXRlbVNldDpdKToKKworICAgICAgICBTZWUgZGVz
Y3JpcHRpb24gYWJvdmUgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAoaXNSaWNoVGV4dFR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoaXNTdHJpbmdUeXBlKTogRGVsZXRlZC4KKyAgICAgICAg
KGlzVVJMVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChpc0NvbG9yVHlwZSk6IERlbGV0ZWQuCisg
ICAgICAgIChpc0ltYWdlVHlwZSk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVtb3ZlcyB0aGVzZSBo
ZXVyaXN0aWNzIHRoYXQgYXR0ZW1wdCB0byAiZ3Vlc3MiIHRoZSBiZXN0IFVJSXRlbVByb3ZpZGVy
UmVhZGluZyBjbGFzcyB0byB0cnkgYW5kIGxvYWQgZm9yIGEKKyAgICAgICAgZ2l2ZW4gVVRJIHR5
cGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpkcmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmZzZXRzKToKKwor
ICAgICAgICBBZGRzIGEgbmlsIGNoZWNrIHRvIGZpeCBhIGRlYnVnIGFzc2VydGlvbiBoaXQgd2hl
biBydW5uaW5nIERhdGFJbnRlcmFjdGlvblRlc3RzLgorCiAyMDE3LTA2LTAxICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMTcy
OTYpOiBEcmFnZ2luZyBhIHZpZGVvIG9ubHkgc2hvd3MgY29udHJvbHMgZHVyaW5nIGRyYWcgZXZl
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3Rl
Ym9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJv
YXJkSU9TLm1tCmluZGV4IDBmMzVhNWMwY2IzZDU3YTg0MjQ0ZTk3NTg0YTdlNDE0OWMzZGVmYTMu
LmFiYWIwZDQ0NjYxYmVlNTc3ZWUwYWYwNjgxYjFiZDQ3NzUxNTZmOGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAt
MTE5LDYgKzExOSw5IEBAIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQogICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
VVJMIGNsYXNzXV0pCiAgICAgICAgICAgICByZXR1cm4gWyhOU1VSTCAqKXZhbHVlIGFic29sdXRl
U3RyaW5nXTsKIAorICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRl
ZFN0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJuIFsoTlNBdHRyaWJ1dGVkU3RyaW5n
ICopdmFsdWUgc3RyaW5nXTsKKwogICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIGNsYXNzXV0pCiAgICAgICAgICAgICByZXR1cm4gKE5TU3RyaW5nICopdmFsdWU7CiAg
ICAgfQpAQCAtMzkyLDEwICszOTUsMTIgQEAgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6cmVh
ZFN0cmluZyhpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgdHlwZSkKIAogICAgIGlkIHZhbHVlID0g
W3Bhc3RlYm9hcmRJdGVtIG9iamVjdEF0SW5kZXg6MF07CiAgICAgCi0gICAgaWYgKHR5cGUgPT0g
U3RyaW5nKGtVVFR5cGVUZXh0KSB8fCB0eXBlID09IFN0cmluZyhrVVRUeXBlUGxhaW5UZXh0KSkg
ewotICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0p
OworICAgIGlmICh0eXBlID09IFN0cmluZyhrVVRUeXBlVGV4dCkgfHwgdHlwZSA9PSBTdHJpbmco
a1VUVHlwZUhUTUwpIHx8IHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVQbGFpblRleHQpKSB7CisgICAg
ICAgIEFTU0VSVChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSB8fCBbdmFs
dWUgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV0pOwogICAgICAgICBp
ZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltO
U0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybiBbKE5TQXR0cmli
dXRlZFN0cmluZyAqKXZhbHVlIHN0cmluZ107CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFN0cmlu
ZyhrVVRUeXBlVVJMKSkgewogICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
VVJMIGNsYXNzXV0pOwogICAgICAgICBpZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNs
YXNzXV0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVBy
b3ZpZGVyUGFzdGVib2FyZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkLm1tCmluZGV4IDE4MzAyZTMxN2Q0ZGRmYWY4ODdmNDU4ODcxZTM1
ODA5ZmM5OTQ2ZjcuLjQ1Mzk2MmMzOWU0ZWNjZmFlYzM1YmU3ZjMxYjA5MTRiNzg4Y2ZhMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlk
ZXJQYXN0ZWJvYXJkLm1tCkBAIC01MSwzNCArNTEsNiBAQCBTT0ZUX0xJTktfQ0xBU1MoVUlLaXQs
IFVJSXRlbVByb3ZpZGVyKQogdHlwZWRlZiB2b2lkKF5JdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBs
ZXRpb25IYW5kbGVyKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKIHR5cGVkZWYgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIE5TVVJMICo+IFR5cGVUb0ZpbGVVUkxNYXA7CiAKLSNkZWZpbmUgTUFUQ0hF
U19VVElfVFlQRSh0eXBlLCBzdWZmaXgpIFt0eXBlIGlzRXF1YWxUb1N0cmluZzooX19icmlkZ2Ug
TlNTdHJpbmcgKilrVVRUeXBlICMjIHN1ZmZpeF0KLSNkZWZpbmUgTUFUQ0hFU19VSUtJVF9UWVBF
KHR5cGUsIHN1ZmZpeCkgW3R5cGUgaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLnVpa2l0LiAj
IyBzdWZmaXggIyMiXQotCi1zdGF0aWMgQk9PTCBpc1JpY2hUZXh0VHlwZShOU1N0cmluZyAqdHlw
ZSkKLXsKLSAgICByZXR1cm4gTUFUQ0hFU19VVElfVFlQRSh0eXBlLCBSVEYpIHx8IE1BVENIRVNf
VVRJX1RZUEUodHlwZSwgUlRGRCkgfHwgTUFUQ0hFU19VVElfVFlQRSh0eXBlLCBIVE1MKTsKLX0K
LQotc3RhdGljIEJPT0wgaXNTdHJpbmdUeXBlKE5TU3RyaW5nICp0eXBlKQotewotICAgIHJldHVy
biBNQVRDSEVTX1VUSV9UWVBFKHR5cGUsIFRleHQpIHx8IE1BVENIRVNfVVRJX1RZUEUodHlwZSwg
VVRGOFBsYWluVGV4dCkgfHwgTUFUQ0hFU19VVElfVFlQRSh0eXBlLCBVVEYxNlBsYWluVGV4dCkg
fHwgTUFUQ0hFU19VVElfVFlQRSh0eXBlLCBQbGFpblRleHQpOwotfQotCi1zdGF0aWMgQk9PTCBp
c1VSTFR5cGUoTlNTdHJpbmcgKnR5cGUpCi17Ci0gICAgcmV0dXJuIE1BVENIRVNfVVRJX1RZUEUo
dHlwZSwgVVJMKTsKLX0KLQotc3RhdGljIEJPT0wgaXNDb2xvclR5cGUoTlNTdHJpbmcgKnR5cGUp
Ci17Ci0gICAgcmV0dXJuIE1BVENIRVNfVUlLSVRfVFlQRSh0eXBlLCBjb2xvcik7Ci19Ci0KLXN0
YXRpYyBCT09MIGlzSW1hZ2VUeXBlKE5TU3RyaW5nICp0eXBlKQotewotICAgIHJldHVybiBNQVRD
SEVTX1VUSV9UWVBFKHR5cGUsIFBORykgfHwgTUFUQ0hFU19VVElfVFlQRSh0eXBlLCBKUEVHKSB8
fCBNQVRDSEVTX1VUSV9UWVBFKHR5cGUsIEdJRikgfHwgTUFUQ0hFU19VSUtJVF9UWVBFKHR5cGUs
IGltYWdlKTsKLX0KLQogQGludGVyZmFjZSBXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZv
ICgpCiB7CiAgICAgUmV0YWluUHRyPGlkIDxVSUl0ZW1Qcm92aWRlcldyaXRpbmc+PiBfcmVwcmVz
ZW50aW5nT2JqZWN0OwpAQCAtMzQxLDIyICszMTMsMzAgQEAgLSAoTlNBcnJheSAqKWRhdGFGb3JQ
YXN0ZWJvYXJkVHlwZTooTlNTdHJpbmcgKilwYXN0ZWJvYXJkVHlwZSBpbkl0ZW1TZXQ6KE5TSW5k
ZXgKICAgICByZXR1cm4gdmFsdWVzLmF1dG9yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBDbGFzcyBj
bGFzc0ZvclR5cGVJZGVudGlmaWVyKE5TU3RyaW5nICp0eXBlSWRlbnRpZmllcikKK3N0YXRpYyBO
U0FycmF5PENsYXNzPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4+ICphbGxMb2FkYWJsZUNsYXNzZXMo
KQogewotICAgIGlmIChpc0NvbG9yVHlwZSh0eXBlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVy
biBbZ2V0VUlDb2xvckNsYXNzKCkgY2xhc3NdOwotCi0gICAgaWYgKGlzSW1hZ2VUeXBlKHR5cGVJ
ZGVudGlmaWVyKSkKLSAgICAgICAgcmV0dXJuIFtnZXRVSUltYWdlQ2xhc3MoKSBjbGFzc107Cisg
ICAgcmV0dXJuIEBbIFtnZXRVSUNvbG9yQ2xhc3MoKSBjbGFzc10sIFtnZXRVSUltYWdlQ2xhc3Mo
KSBjbGFzc10sIFtOU1VSTCBjbGFzc10sIFtOU1N0cmluZyBjbGFzc10sIFtOU0F0dHJpYnV0ZWRT
dHJpbmcgY2xhc3NdIF07Cit9CiAKLSAgICBpZiAoaXNVUkxUeXBlKHR5cGVJZGVudGlmaWVyKSkK
LSAgICAgICAgcmV0dXJuIFtOU1VSTCBjbGFzc107CitzdGF0aWMgQ2xhc3MgY2xhc3NGb3JUeXBl
SWRlbnRpZmllcihOU1N0cmluZyAqdHlwZUlkZW50aWZpZXIsIE5TU3RyaW5nICoqb3V0VHlwZUlk
ZW50aWZpZXJUb0xvYWQpCit7CisgICAgaWYgKG91dFR5cGVJZGVudGlmaWVyVG9Mb2FkKQorICAg
ICAgICAqb3V0VHlwZUlkZW50aWZpZXJUb0xvYWQgPSB0eXBlSWRlbnRpZmllcjsKIAotICAgIGlm
IChpc1JpY2hUZXh0VHlwZSh0eXBlSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybiBbTlNBdHRy
aWJ1dGVkU3RyaW5nIGNsYXNzXTsKKyAgICAvLyBGaXJzdCwgdHJ5IHRvIGxvYWQgYSBwbGF0Zm9y
bSBVSUl0ZW1Qcm92aWRlclJlYWRpbmctY29uZm9ybWFudCBvYmplY3QgYXMtaXMuCisgICAgZm9y
IChDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+IGxvYWRhYmxlQ2xhc3MgaW4gYWxsTG9hZGFi
bGVDbGFzc2VzKCkpIHsKKyAgICAgICAgaWYgKFtbbG9hZGFibGVDbGFzcyByZWFkYWJsZVR5cGVJ
ZGVudGlmaWVyc0Zvckl0ZW1Qcm92aWRlcl0gY29udGFpbnNPYmplY3Q6dHlwZUlkZW50aWZpZXJd
KQorICAgICAgICAgICAgcmV0dXJuIGxvYWRhYmxlQ2xhc3M7CisgICAgfQogCi0gICAgaWYgKGlz
U3RyaW5nVHlwZSh0eXBlSWRlbnRpZmllcikpCisgICAgLy8gSWYgd2Ugd2VyZSB1bmFibGUgdG8g
bG9hZCBhbnkgb2JqZWN0LCBjaGVjayBpZiB0aGUgZ2l2ZW4gdHlwZSBpZGVudGlmaWVyIGlzIHN0
aWxsIHNvbWV0aGluZworICAgIC8vIFdlYktpdCBrbm93cyBob3cgdG8gaGFuZGxlLgorICAgIGlm
IChbdHlwZUlkZW50aWZpZXIgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVIVE1M
XSkgeworICAgICAgICAvLyBMb2FkIGtVVFR5cGVIVE1MIGFzIGEgcGxhaW4gdGV4dCBIVE1MIHN0
cmluZy4KKyAgICAgICAgaWYgKG91dFR5cGVJZGVudGlmaWVyVG9Mb2FkKQorICAgICAgICAgICAg
Km91dFR5cGVJZGVudGlmaWVyVG9Mb2FkID0gKE5TU3RyaW5nICopa1VUVHlwZVBsYWluVGV4dDsK
ICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBjbGFzc107CisgICAgfQogCiAgICAgcmV0dXJuIG5p
bDsKIH0KQEAgLTM3MCwxNiArMzUwLDE3IEBAIC0gKE5TQXJyYXkgKil2YWx1ZXNGb3JQYXN0ZWJv
YXJkVHlwZTooTlNTdHJpbmcgKilwYXN0ZWJvYXJkVHlwZSBpbkl0ZW1TZXQ6KE5TSW5kCiAgICAg
ICAgIGlmICghcHJvdmlkZXIpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ2xhc3Mg
cmVhZGFibGVDbGFzcyA9IGNsYXNzRm9yVHlwZUlkZW50aWZpZXIocGFzdGVib2FyZFR5cGUpOwot
ICAgICAgICBpZiAoIXJlYWRhYmxlQ2xhc3MpCisgICAgICAgIE5TU3RyaW5nICp0eXBlSWRlbnRp
ZmllclRvTG9hZCA9IG5pbDsKKyAgICAgICAgQ2xhc3MgcmVhZGFibGVDbGFzcyA9IGNsYXNzRm9y
VHlwZUlkZW50aWZpZXIocGFzdGVib2FyZFR5cGUsICZ0eXBlSWRlbnRpZmllclRvTG9hZCk7Cisg
ICAgICAgIGlmICghcmVhZGFibGVDbGFzcyB8fCAhdHlwZUlkZW50aWZpZXJUb0xvYWQpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWQgPFVJSXRlbVByb3ZpZGVyUmVhZGluZz4gcmVh
ZE9iamVjdCA9IG5pbDsKLSAgICAgICAgaWYgKE5TRGF0YSAqcHJlbG9hZGVkRGF0YSA9IFtyZXRh
aW5lZFNlbGYgX3ByZUxvYWRlZERhdGFDb25mb3JtaW5nVG9UeXBlOnBhc3RlYm9hcmRUeXBlIGZv
ckl0ZW1Qcm92aWRlckF0SW5kZXg6aW5kZXhdKQotICAgICAgICAgICAgcmVhZE9iamVjdCA9IFtb
cmVhZGFibGVDbGFzcyBhbGxvY10gaW5pdFdpdGhJdGVtUHJvdmlkZXJEYXRhOnByZWxvYWRlZERh
dGEgdHlwZUlkZW50aWZpZXI6cGFzdGVib2FyZFR5cGUgZXJyb3I6bmlsXTsKKyAgICAgICAgTlNE
YXRhICpwcmVsb2FkZWREYXRhID0gW3JldGFpbmVkU2VsZiBfcHJlTG9hZGVkRGF0YUNvbmZvcm1p
bmdUb1R5cGU6cGFzdGVib2FyZFR5cGUgZm9ySXRlbVByb3ZpZGVyQXRJbmRleDppbmRleF07Cisg
ICAgICAgIGlmICghcHJlbG9hZGVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICBpZiAocmVhZE9iamVjdCkKLSAgICAgICAgICAgIFt2YWx1ZXMgYWRkT2JqZWN0OnJlYWRPYmpl
Y3RdOworICAgICAgICBpZiAoYXV0byByZWFkT2JqZWN0ID0gYWRvcHROUyhbW3JlYWRhYmxlQ2xh
c3MgYWxsb2NdIGluaXRXaXRoSXRlbVByb3ZpZGVyRGF0YTpwcmVsb2FkZWREYXRhIHR5cGVJZGVu
dGlmaWVyOnR5cGVJZGVudGlmaWVyVG9Mb2FkIGVycm9yOm5pbF0pKQorICAgICAgICAgICAgW3Zh
bHVlcyBhZGRPYmplY3Q6cmVhZE9iamVjdC5nZXQoKV07CiAgICAgfV07CiAKICAgICByZXR1cm4g
dmFsdWVzLmF1dG9yZWxlYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKaW5kZXggOGE3YzU3NDVjYjY0Nzc4NTRkMDFmNzUzNjliOTBiZmMyY2EyMGM1YS4uMDczMTE1
YjMwYzI4OGY5YWUzYjBkNjBkZDJjODNkYWEwNGYwMGQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMTA2OCw2ICsxMDY4LDkgQEAgYm9vbCBSZW5kZXJUZXh0
Ojpjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29u
c3QKIAogVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+PiBSZW5kZXJUZXh0Ojpk
cmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmZzZXRzKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQpIGNvbnN0CiB7CisgICAgaWYgKCF0ZXh0Tm9kZSgpKQorICAgICAg
ICByZXR1cm4geyB9OworCiAgICAgYXV0byBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0Zvcih0ZXh0Tm9kZSgpLCBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpOwog
ICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0YjAzYTUxMzYxZmJi
M2Q4NjcxZDM4M2U5YjM5MTI3YTQ3MDRhOTQ0Li42N2E2NTc5MTQ3Y2U2NDk5MGQ1NTI3YTQwNDI3
NWY5Nzg0MzM1NTk0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDYtMDMgIFdlbnNvbiBIc2llaCAgPHdlbnNv
bl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgLVtXZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkIHZhbHVlc0ZvclBhc3RlYm9hcmRUeXBlOmluSXRlbVNldDpdIHRvIGNoZWNrIHJl
YWRhYmxlIHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzI4OTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMyMjA0NTQwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgMiBuZXcgQVBJIHRl
c3RzIHRvIGV4ZXJjaXNlIGRhdGEgaW50ZXJhY3Rpb24gb2YgSFRNTCBkYXRhIGFuZCBhbiBhdHRy
aWJ1dGVkIHN0cmluZyBpbnRvIGEgcmljaAorICAgICAgICBjb250ZW50ZWRpdGFibGUuIFNlZSBX
ZWJDb3JlIENoYW5nZUxvZyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKwogMjAxNy0wNi0wMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQnVtcCBHVEsrIGFuZCBpdHMgZGVwZW5k
ZW5jaWVzIGluIGpoYnVpbGQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
aW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9p
b3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0KaW5kZXggM2FkN2VjZDNkNzE2YTlhNzViNjU0ZDc0
ZDIzZTA5ZWQzODI1MDgwMy4uNWQ5ZGZlNjRkNTJhMDdkYjNlZWU2MDBhY2ZlNDcxMzkwMzY5N2Vi
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0
aW9uVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVy
YWN0aW9uVGVzdHMubW0KQEAgLTUxOSw2ICs1MTksNDAgQEAgVEVTVChEYXRhSW50ZXJhY3Rpb25U
ZXN0cywgRXh0ZXJuYWxTb3VyY2VJbWFnZUFuZEhUTUxUb1VwbG9hZEFyZWEpCiAgICAgRVhQRUNU
X1dLX1NUUkVRKCJpbWFnZS9qcGVnLCB0ZXh0L2h0bWwsIHRleHQvaHRtbCIsIG91dHB1dFZhbHVl
LlVURjhTdHJpbmcpOwogfQogCitURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNv
dXJjZUhUTUxUb0NvbnRlbnRFZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpA
ImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsKKwor
ICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAg
ICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOworICAgIE5TRGF0YSAqaHRtbERhdGEgPSBbQCI8aDE+VGhpcyBpcyBhIHRlc3Q8L2gxPiIg
ZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtpdGVtUHJvdmlk
ZXIgcmVnaXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcg
KilrVVRUeXBlSFRNTCB3aXRoRGF0YTpodG1sRGF0YV07CisgICAgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbVByb3ZpZGVyLmdldCgpIF1d
OworICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAs
IDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKworICAgIE5TU3RyaW5nICp0ZXh0Q29u
dGVudCA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJlZGl0b3IudGV4
dENvbnRlbnQiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0IiwgdGV4dENv
bnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAIiEhZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ2gxJykiXS5ib29sVmFs
dWUpOworfQorCitURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUF0dHJp
YnV0ZWRTdHJpbmdUb0NvbnRlbnRFZGl0YWJsZSkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAs
IDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1l
ZDpAImF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkiXTsK
KworICAgIGF1dG8gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
KyAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsgTlNGb250QXR0cmlidXRlTmFt
ZTogW1VJRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZToyMF0gfTsKKyAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKnJpY2hUZXh0ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOkAiVGhpcyBpcyBhIHRlc3QiIGF0dHJpYnV0ZXM6dGV4dEF0dHJpYnV0ZXNdOworICAgIGF1
dG8gaXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0V2l0
aE9iamVjdDpyaWNoVGV4dF0pOworICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0
ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9p
bnRNYWtlKDEwMCwgMzAwKV07CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXMgaXMgYSB0ZXN0
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29u
dGVudCJdLlVURjhTdHJpbmcpOworfQorCiBURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRl
cm5hbFNvdXJjZU11bHRpcGxlVVJMc1RvQ29udGVudEVkaXRhYmxlKQogewogICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cg==
</data>
<flag name="review"
          id="332857"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312049</attachid>
            <date>2017-06-05 21:08:59 -0700</date>
            <delta_ts>2017-06-05 21:47:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-172891-20170605210858.patch</filename>
            <type>text/plain</type>
            <size>13955</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE3ODE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI4NjI0ZWJhNmUzM2U1
MTljMWMxM2JkMjNmMTQ4ODdiYWNlMzk5NS4uZDVmZWRhMjE3MGVkNzllNGY3MjExYzhmNGY5ZGMz
M2E5NmE0M2VjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA2LTA1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIC1b
V2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTppbkl0ZW1T
ZXQ6XSB0byBjaGVjayByZWFkYWJsZSB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyODkxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjIw
NDU0MD4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUd2Vh
a3Mgc29tZSBsb2dpYyBpbiBQbGF0Zm9ybVBhc3RlYm9hcmRJT1MgYW5kIFdlYkl0ZW1Qcm92aWRl
clBhc3RlYm9hcmQgdG8gY29ycmVjdGx5IGNvbnN0cnVjdCBvYmplY3RzIGluCisgICAgICAgIC12
YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTppbkl0ZW1TZXQ6LiBQcmV2aW91c2x5LCB3ZSBoYXZlIGEg
aGFyZC1jb2RlZCBtYXAgb2YgVVRJIHR5cGUgdG8gQ2xhc3MgaW4gdGhlIGZvcm0gb2YKKyAgICAg
ICAgc3RhdGljIGhlbHBlcnMgdGl0bGVkIGlze1JpY2hUZXh0LCBTdHJpbmcsIFVSTCwgSW1hZ2Us
IENvbG9yfVR5cGUgaW4gV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC4gV2Ugd291bGQgdXNlCisg
ICAgICAgIHRoZXNlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBOU0F0dHJpYnV0
ZWRTdHJpbmcsIE5TU3RyaW5nLCBOU1VSTCwgVUlJbWFnZSBvciBVSUNvbG9yIHNob3VsZCBiZQor
ICAgICAgICBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgbG9hZGVkIGl0ZW0gcHJvdmlkZXIgZGF0YS4g
VGhpcyBpcyBpbmNvcnJlY3QgZm9yIHNvbWUgVVRJcywgc3VjaCBhcyBwdWJsaWMuaHRtbCwgd2hp
Y2gKKyAgICAgICAgY2Fubm90IGFjdHVhbGx5IGJlIHVzZWQgdG8gY29uc3RydWN0IGFuIE5TQXR0
cmlidXRlZFN0cmluZyAtLSB0aGlzIGNhdXNlZCAtdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6aW5J
dGVtU2V0OiB0bworICAgICAgICBhbHdheXMgcmV0dXJuIG5pbCB3aGVuIGF0dGVtcHRpbmcgdG8g
Y3JlYXRlIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHB1YmxpYy5odG1sLgorCisgICAgICAg
IFRvIGZpeCB0aGlzLCB3ZSByZWZhY3RvciAtdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6aW5JdGVt
U2V0OiB0byBpbnN0ZWFkIGl0ZXJhdGUgdGhyb3VnaCBVSUl0ZW1Qcm92aWRlclJlYWRpbmctCisg
ICAgICAgIGNvbmZvcm1hbnQgY2xhc3NlcyBpbiBzZWFyY2ggZm9yIGEgY2xhc3MgdGhhdCBjYW4g
YmUgY3JlYXRlZCBmb3IgdGhlIGdpdmVuIFVUSSB0eXBlLiBJZiBubyBzdWNoIGNsYXNzIGV4aXN0
cywgd2UKKyAgICAgICAgdGhlbiBmYWxsIGJhY2sgdG8gY3VzdG9tIFdlYktpdCBoYW5kbGluZyBv
ZiB0aGUgZHJvcHBlZCBVVEkgdHlwZSwgd2hpY2ggc28gZmFyIG9ubHkgaW5jbHVkZXMgcmVhZGlu
ZyBhbiBOU1N0cmluZworICAgICAgICB3aXRoIHB1YmxpYy5wbGFpbi10ZXh0IGlmIHRoZSBVVEkg
aXMgcHVibGljLmh0bWwgKGkuZS4gcmVhZGluZyB0aGUgSFRNTCBzb3VyY2UgZnJvbSBsb2FkZWQg
aXRlbSBwcm92aWRlciBkYXRhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IDIgbmV3IEFQSSB0ZXN0
czoKKyAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VIVE1MVG9Db250
ZW50RWRpdGFibGUKKyAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VB
dHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUKKworICAgICAgICAqIHBsYXRmb3JtL2lv
cy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnN0cmluZ0ZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nKToKKworICAgICAgICBJbiBzb21lIGNhc2VzLCAtW1dlYkl0ZW1Q
cm92aWRlclBhc3RlYm9hcmQgdmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6aW5JdGVtU2V0Ol0gbWF5
IG5vdyByZXR1cm4gYW4KKyAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nIHdoZW4gYW4gTlNTdHJp
bmcgd2FzIHByZXZpb3VzbHkgY3JlYXRlZC4gVGhpcyBhZGp1c3RzIGZvciB0aGF0IHBvc3NpYmls
aXR5IGJ5IHJldHVybmluZyBqdXN0CisgICAgICAgIHRoZSBwbGFpbiB0ZXh0LCAtW05TQXR0cmli
dXRlZFN0cmluZyBzdHJpbmddLCBpZiB0aGUgcmVhZCBvYmplY3Qgd2FzIGFuIE5TQXR0cmlidXRl
ZFN0cmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJv
YXJkLm1tOgorICAgICAgICAoYWxsTG9hZGFibGVDbGFzc2VzKToKKyAgICAgICAgKGNsYXNzRm9y
VHlwZUlkZW50aWZpZXIpOgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHZh
bHVlc0ZvclBhc3RlYm9hcmRUeXBlOmluSXRlbVNldDpdKToKKworICAgICAgICBTZWUgZGVzY3Jp
cHRpb24gYWJvdmUgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAoaXNSaWNoVGV4dFR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoaXNTdHJpbmdUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKGlz
VVJMVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChpc0NvbG9yVHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgIChpc0ltYWdlVHlwZSk6IERlbGV0ZWQuCisKKyAgICAgICAgUmVtb3ZlcyB0aGVzZSBoZXVy
aXN0aWNzIHRoYXQgYXR0ZW1wdCB0byAiZ3Vlc3MiIHRoZSBiZXN0IFVJSXRlbVByb3ZpZGVyUmVh
ZGluZyBjbGFzcyB0byB0cnkgYW5kIGxvYWQgZm9yIGEKKyAgICAgICAgZ2l2ZW4gVVRJIHR5cGUu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpkcmFnZ2VkQ29udGVudFJhbmdlc0JldHdlZW5PZmZzZXRzKToKKworICAg
ICAgICBBZGRzIGEgbmlsIGNoZWNrIHRvIGZpeCBhIGRlYnVnIGFzc2VydGlvbiBoaXQgd2hlbiBy
dW5uaW5nIERhdGFJbnRlcmFjdGlvblRlc3RzLgorCiAyMDE3LTA2LTA1ICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBtYWNPUyAxMC4xMgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2Fy
ZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJ
T1MubW0KaW5kZXggMGYzNWE1YzBjYjNkNTdhODQyNDRlOTc1ODRhN2U0MTQ5YzNkZWZhMy4uMzE2
ZGEyYzU0ZTIxNGIwZjYzNTg2YTU1NDgyZDE0NGJhMGJmMDgwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC0xMTks
NiArMTE5LDkgQEAgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6c3RyaW5nRm9yVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUpCiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNVUkwg
Y2xhc3NdXSkKICAgICAgICAgICAgIHJldHVybiBbKE5TVVJMICopdmFsdWUgYWJzb2x1dGVTdHJp
bmddOwogCisgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gWyhOU0F0dHJpYnV0ZWRTdHJpbmcgKil2
YWx1ZSBzdHJpbmddOworCiAgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJp
bmcgY2xhc3NdXSkKICAgICAgICAgICAgIHJldHVybiAoTlNTdHJpbmcgKil2YWx1ZTsKICAgICB9
CkBAIC0zOTIsMTAgKzM5NSwxNiBAQCBTdHJpbmcgUGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkU3Ry
aW5nKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAgaWQgdmFsdWUgPSBbcGFz
dGVib2FyZEl0ZW0gb2JqZWN0QXRJbmRleDowXTsKICAgICAKLSAgICBpZiAodHlwZSA9PSBTdHJp
bmcoa1VUVHlwZVRleHQpIHx8IHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVQbGFpblRleHQpKSB7Cisg
ICAgaWYgKHR5cGUgPT0gU3RyaW5nKGtVVFR5cGVQbGFpblRleHQpIHx8IHR5cGUgPT0gU3RyaW5n
KGtVVFR5cGVIVE1MKSkgewogICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIGNsYXNzXV0pOworICAgICAgICByZXR1cm4gW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05T
U3RyaW5nIGNsYXNzXV0gPyB2YWx1ZSA6IG5pbDsKKyAgICB9CisgICAgaWYgKHR5cGUgPT0gU3Ry
aW5nKGtVVFR5cGVUZXh0KSkgeworICAgICAgICBBU1NFUlQoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0gfHwgW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0
cmluZyBjbGFzc11dKTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgICAgIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNBdHRy
aWJ1dGVkU3RyaW5nIGNsYXNzXV0pCisgICAgICAgICAgICByZXR1cm4gWyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKil2YWx1ZSBzdHJpbmddOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBTdHJpbmcoa1VU
VHlwZVVSTCkpIHsKICAgICAgICAgQVNTRVJUKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1VSTCBj
bGFzc11dKTsKICAgICAgICAgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1VSTCBjbGFzc11d
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRl
clBhc3RlYm9hcmQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3Zp
ZGVyUGFzdGVib2FyZC5tbQppbmRleCAxODMwMmUzMTdkNGRkZmFmODg3ZjQ1ODg3MWUzNTgwOWZj
OTk0NmY3Li4wNGQ3MjI2ZDc5OWJjZjIwNDY0NzE0YzRmMThhODZjMzE2MTIwMzQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2Fy
ZC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFz
dGVib2FyZC5tbQpAQCAtNTEsMzQgKzUxLDYgQEAgU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUl0
ZW1Qcm92aWRlcikKIHR5cGVkZWYgdm9pZCheSXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9u
SGFuZGxlcikoTlNEYXRhICosIE5TRXJyb3IgKik7CiB0eXBlZGVmIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBOU1VSTCAqPiBUeXBlVG9GaWxlVVJMTWFwOwogCi0jZGVmaW5lIE1BVENIRVNfVVRJ
X1RZUEUodHlwZSwgc3VmZml4KSBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6KF9fYnJpZGdlIE5TU3Ry
aW5nICopa1VUVHlwZSAjIyBzdWZmaXhdCi0jZGVmaW5lIE1BVENIRVNfVUlLSVRfVFlQRSh0eXBl
LCBzdWZmaXgpIFt0eXBlIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS51aWtpdC4gIyMgc3Vm
Zml4ICMjIl0KLQotc3RhdGljIEJPT0wgaXNSaWNoVGV4dFR5cGUoTlNTdHJpbmcgKnR5cGUpCi17
Ci0gICAgcmV0dXJuIE1BVENIRVNfVVRJX1RZUEUodHlwZSwgUlRGKSB8fCBNQVRDSEVTX1VUSV9U
WVBFKHR5cGUsIFJURkQpIHx8IE1BVENIRVNfVVRJX1RZUEUodHlwZSwgSFRNTCk7Ci19Ci0KLXN0
YXRpYyBCT09MIGlzU3RyaW5nVHlwZShOU1N0cmluZyAqdHlwZSkKLXsKLSAgICByZXR1cm4gTUFU
Q0hFU19VVElfVFlQRSh0eXBlLCBUZXh0KSB8fCBNQVRDSEVTX1VUSV9UWVBFKHR5cGUsIFVURjhQ
bGFpblRleHQpIHx8IE1BVENIRVNfVVRJX1RZUEUodHlwZSwgVVRGMTZQbGFpblRleHQpIHx8IE1B
VENIRVNfVVRJX1RZUEUodHlwZSwgUGxhaW5UZXh0KTsKLX0KLQotc3RhdGljIEJPT0wgaXNVUkxU
eXBlKE5TU3RyaW5nICp0eXBlKQotewotICAgIHJldHVybiBNQVRDSEVTX1VUSV9UWVBFKHR5cGUs
IFVSTCk7Ci19Ci0KLXN0YXRpYyBCT09MIGlzQ29sb3JUeXBlKE5TU3RyaW5nICp0eXBlKQotewot
ICAgIHJldHVybiBNQVRDSEVTX1VJS0lUX1RZUEUodHlwZSwgY29sb3IpOwotfQotCi1zdGF0aWMg
Qk9PTCBpc0ltYWdlVHlwZShOU1N0cmluZyAqdHlwZSkKLXsKLSAgICByZXR1cm4gTUFUQ0hFU19V
VElfVFlQRSh0eXBlLCBQTkcpIHx8IE1BVENIRVNfVVRJX1RZUEUodHlwZSwgSlBFRykgfHwgTUFU
Q0hFU19VVElfVFlQRSh0eXBlLCBHSUYpIHx8IE1BVENIRVNfVUlLSVRfVFlQRSh0eXBlLCBpbWFn
ZSk7Ci19Ci0KIEBpbnRlcmZhY2UgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mbyAoKQog
ewogICAgIFJldGFpblB0cjxpZCA8VUlJdGVtUHJvdmlkZXJXcml0aW5nPj4gX3JlcHJlc2VudGlu
Z09iamVjdDsKQEAgLTM0MSwyMiArMzEzLDI4IEBAIC0gKE5TQXJyYXkgKilkYXRhRm9yUGFzdGVi
b2FyZFR5cGU6KE5TU3RyaW5nICopcGFzdGVib2FyZFR5cGUgaW5JdGVtU2V0OihOU0luZGV4CiAg
ICAgcmV0dXJuIHZhbHVlcy5hdXRvcmVsZWFzZSgpOwogfQogCi1zdGF0aWMgQ2xhc3MgY2xhc3NG
b3JUeXBlSWRlbnRpZmllcihOU1N0cmluZyAqdHlwZUlkZW50aWZpZXIpCitzdGF0aWMgTlNBcnJh
eTxDbGFzczxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+PiAqYWxsTG9hZGFibGVDbGFzc2VzKCkKIHsK
LSAgICBpZiAoaXNDb2xvclR5cGUodHlwZUlkZW50aWZpZXIpKQotICAgICAgICByZXR1cm4gW2dl
dFVJQ29sb3JDbGFzcygpIGNsYXNzXTsKLQotICAgIGlmIChpc0ltYWdlVHlwZSh0eXBlSWRlbnRp
ZmllcikpCi0gICAgICAgIHJldHVybiBbZ2V0VUlJbWFnZUNsYXNzKCkgY2xhc3NdOworICAgIHJl
dHVybiBAWyBbZ2V0VUlDb2xvckNsYXNzKCkgY2xhc3NdLCBbZ2V0VUlJbWFnZUNsYXNzKCkgY2xh
c3NdLCBbTlNVUkwgY2xhc3NdLCBbTlNTdHJpbmcgY2xhc3NdLCBbTlNBdHRyaWJ1dGVkU3RyaW5n
IGNsYXNzXSBdOworfQogCi0gICAgaWYgKGlzVVJMVHlwZSh0eXBlSWRlbnRpZmllcikpCi0gICAg
ICAgIHJldHVybiBbTlNVUkwgY2xhc3NdOworc3RhdGljIENsYXNzIGNsYXNzRm9yVHlwZUlkZW50
aWZpZXIoTlNTdHJpbmcgKnR5cGVJZGVudGlmaWVyLCBOU1N0cmluZyAqJm91dFR5cGVJZGVudGlm
aWVyVG9Mb2FkKQoreworICAgIG91dFR5cGVJZGVudGlmaWVyVG9Mb2FkID0gdHlwZUlkZW50aWZp
ZXI7CiAKLSAgICBpZiAoaXNSaWNoVGV4dFR5cGUodHlwZUlkZW50aWZpZXIpKQotICAgICAgICBy
ZXR1cm4gW05TQXR0cmlidXRlZFN0cmluZyBjbGFzc107CisgICAgLy8gRmlyc3QsIHRyeSB0byBs
b2FkIGEgcGxhdGZvcm0gVUlJdGVtUHJvdmlkZXJSZWFkaW5nLWNvbmZvcm1hbnQgb2JqZWN0IGFz
LWlzLgorICAgIGZvciAoQ2xhc3M8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPiBsb2FkYWJsZUNsYXNz
IGluIGFsbExvYWRhYmxlQ2xhc3NlcygpKSB7CisgICAgICAgIGlmIChbW2xvYWRhYmxlQ2xhc3Mg
cmVhZGFibGVUeXBlSWRlbnRpZmllcnNGb3JJdGVtUHJvdmlkZXJdIGNvbnRhaW5zT2JqZWN0OihO
U1N0cmluZyAqKXR5cGVJZGVudGlmaWVyXSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkYWJsZUNs
YXNzOworICAgIH0KIAotICAgIGlmIChpc1N0cmluZ1R5cGUodHlwZUlkZW50aWZpZXIpKQorICAg
IC8vIElmIHdlIHdlcmUgdW5hYmxlIHRvIGxvYWQgYW55IG9iamVjdCwgY2hlY2sgaWYgdGhlIGdp
dmVuIHR5cGUgaWRlbnRpZmllciBpcyBzdGlsbCBzb21ldGhpbmcKKyAgICAvLyBXZWJLaXQga25v
d3MgaG93IHRvIGhhbmRsZS4KKyAgICBpZiAoW3R5cGVJZGVudGlmaWVyIGlzRXF1YWxUb1N0cmlu
ZzooTlNTdHJpbmcgKilrVVRUeXBlSFRNTF0pIHsKKyAgICAgICAgLy8gTG9hZCBrVVRUeXBlSFRN
TCBhcyBhIHBsYWluIHRleHQgSFRNTCBzdHJpbmcuCisgICAgICAgIG91dFR5cGVJZGVudGlmaWVy
VG9Mb2FkID0gKE5TU3RyaW5nICopa1VUVHlwZVBsYWluVGV4dDsKICAgICAgICAgcmV0dXJuIFtO
U1N0cmluZyBjbGFzc107CisgICAgfQogCiAgICAgcmV0dXJuIG5pbDsKIH0KQEAgLTM3MCwxNiAr
MzQ4LDE3IEBAIC0gKE5TQXJyYXkgKil2YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTooTlNTdHJpbmcg
KilwYXN0ZWJvYXJkVHlwZSBpbkl0ZW1TZXQ6KE5TSW5kCiAgICAgICAgIGlmICghcHJvdmlkZXIp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ2xhc3MgcmVhZGFibGVDbGFzcyA9IGNs
YXNzRm9yVHlwZUlkZW50aWZpZXIocGFzdGVib2FyZFR5cGUpOworICAgICAgICBOU1N0cmluZyAq
dHlwZUlkZW50aWZpZXJUb0xvYWQ7CisgICAgICAgIENsYXNzIHJlYWRhYmxlQ2xhc3MgPSBjbGFz
c0ZvclR5cGVJZGVudGlmaWVyKHBhc3RlYm9hcmRUeXBlLCB0eXBlSWRlbnRpZmllclRvTG9hZCk7
CiAgICAgICAgIGlmICghcmVhZGFibGVDbGFzcykKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBpZCA8VUlJdGVtUHJvdmlkZXJSZWFkaW5nPiByZWFkT2JqZWN0ID0gbmlsOwotICAgICAg
ICBpZiAoTlNEYXRhICpwcmVsb2FkZWREYXRhID0gW3JldGFpbmVkU2VsZiBfcHJlTG9hZGVkRGF0
YUNvbmZvcm1pbmdUb1R5cGU6cGFzdGVib2FyZFR5cGUgZm9ySXRlbVByb3ZpZGVyQXRJbmRleDpp
bmRleF0pCi0gICAgICAgICAgICByZWFkT2JqZWN0ID0gW1tyZWFkYWJsZUNsYXNzIGFsbG9jXSBp
bml0V2l0aEl0ZW1Qcm92aWRlckRhdGE6cHJlbG9hZGVkRGF0YSB0eXBlSWRlbnRpZmllcjpwYXN0
ZWJvYXJkVHlwZSBlcnJvcjpuaWxdOworICAgICAgICBOU0RhdGEgKnByZWxvYWRlZERhdGEgPSBb
cmV0YWluZWRTZWxmIF9wcmVMb2FkZWREYXRhQ29uZm9ybWluZ1RvVHlwZTpwYXN0ZWJvYXJkVHlw
ZSBmb3JJdGVtUHJvdmlkZXJBdEluZGV4OmluZGV4XTsKKyAgICAgICAgaWYgKCFwcmVsb2FkZWRE
YXRhKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChyZWFkT2JqZWN0KQotICAg
ICAgICAgICAgW3ZhbHVlcyBhZGRPYmplY3Q6cmVhZE9iamVjdF07CisgICAgICAgIGlmIChhdXRv
IHJlYWRPYmplY3QgPSBhZG9wdE5TKFtbcmVhZGFibGVDbGFzcyBhbGxvY10gaW5pdFdpdGhJdGVt
UHJvdmlkZXJEYXRhOnByZWxvYWRlZERhdGEgdHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlw
ZUlkZW50aWZpZXJUb0xvYWQgZXJyb3I6bmlsXSkpCisgICAgICAgICAgICBbdmFsdWVzIGFkZE9i
amVjdDpyZWFkT2JqZWN0LmdldCgpXTsKICAgICB9XTsKIAogICAgIHJldHVybiB2YWx1ZXMuYXV0
b3JlbGVhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA4
YTdjNTc0NWNiNjQ3Nzg1NGQwMWY3NTM2OWI5MGJmYzJjYTIwYzVhLi4wNzMxMTViMzBjMjg4Zjlh
ZTNiMGQ2MGRkMmM4M2RhYTA0ZjAwZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCkBAIC0xMDY4LDYgKzEwNjgsOSBAQCBib29sIFJlbmRlclRleHQ6OmNvbnRhaW5z
T25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdAogCiBWZWN0
b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4+IFJlbmRlclRleHQ6OmRyYWdnZWRDb250
ZW50UmFuZ2VzQmV0d2Vlbk9mZnNldHModW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCkgY29uc3QKIHsKKyAgICBpZiAoIXRleHROb2RlKCkpCisgICAgICAgIHJldHVybiB7
IH07CisKICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzRm9y
KHRleHROb2RlKCksIERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCk7CiAgICAgaWYgKG1h
cmtlcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDlmNGJmMTcwMjBhNTUyMjMzZDQyMDMz
Yjg4Y2Q0OTBmYjMzN2YwNjEuLmNhYzk0NWU5ZDkzODFhYTM1NDdmNTdjNjY2YzkwZDZiMzQ5OGVi
YzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxNy0wNi0wNSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciAtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQg
dmFsdWVzRm9yUGFzdGVib2FyZFR5cGU6aW5JdGVtU2V0Ol0gdG8gY2hlY2sgcmVhZGFibGUgdHlw
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mjg5
MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzIyMDQ1NDA+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkcyAyIG5ldyBBUEkgdGVzdHMgdG8gZXhlcmNp
c2UgZGF0YSBpbnRlcmFjdGlvbiBvZiBIVE1MIGRhdGEgYW5kIGFuIGF0dHJpYnV0ZWQgc3RyaW5n
IGludG8gYSByaWNoCisgICAgICAgIGNvbnRlbnRlZGl0YWJsZS4gU2VlIFdlYkNvcmUgQ2hhbmdl
TG9nIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lv
cy9EYXRhSW50ZXJhY3Rpb25UZXN0cy5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorCiAyMDE3LTA2LTA1ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAg
ICAgICB3ZWJraXRweTogQWJzdHJhY3QgRXhlY3V0aXZlIGNsYXNzCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0cy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCmluZGV4IDNh
ZDdlY2QzZDcxNmE5YTc1YjY1NGQ3NGQyM2UwOWVkMzgyNTA4MDMuLjVkOWRmZTY0ZDUyYTA3ZGIz
ZWVlNjAwYWNmZTQ3MTM5MDM2OTdlYjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCkBAIC01MTksNiArNTE5LDQwIEBA
IFRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9V
cGxvYWRBcmVhKQogICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvanBlZywgdGV4dC9odG1sLCB0
ZXh0L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKIH0KIAorVEVTVChEYXRhSW50ZXJh
Y3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VIVE1MVG9Db250ZW50RWRpdGFibGUpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07CisgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigpLnJl
bW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7CisgICAgYXV0byBpdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGgx
PlRoaXMgaXMgYSB0ZXN0PC9oMT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXTsKKyAgICBbaXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9uRm9yVHlw
ZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6aHRtbERhdGFdOwor
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IGl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1
bkZyb206Q0dQb2ludE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CisK
KyAgICBOU1N0cmluZyAqdGV4dENvbnRlbnQgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZWRpdG9yLnRleHRDb250ZW50Il07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJU
aGlzIGlzIGEgdGVzdCIsIHRleHRDb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9UUlVF
KFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCIhIWVkaXRvci5xdWVyeVNl
bGVjdG9yKCdoMScpIl0uYm9vbFZhbHVlKTsKK30KKworVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0
cywgRXh0ZXJuYWxTb3VyY2VBdHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUpCit7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlIl07Cisg
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigp
LnJlbW92ZUFsbFJhbmdlcygpIl07CisKKyAgICBhdXRvIGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9
IEB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MjBd
IH07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyaWNoVGV4dCA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlRoaXMgaXMgYSB0ZXN0IiBhdHRyaWJ1dGVzOnRl
eHRBdHRyaWJ1dGVzXTsKKyAgICBhdXRvIGl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdFdpdGhPYmplY3Q6cmljaFRleHRdKTsKKyAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIu
Z2V0KCkgXV07CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDMwMCwgNDAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgRVhQRUNUX1dL
X1NUUkVRKCJUaGlzIGlzIGEgdGVzdCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJlZGl0b3IudGV4dENvbnRlbnQiXS5VVEY4U3RyaW5nKTsKK30KKwogVEVTVChEYXRh
SW50ZXJhY3Rpb25UZXN0cywgRXh0ZXJuYWxTb3VyY2VNdWx0aXBsZVVSTHNUb0NvbnRlbnRFZGl0
YWJsZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>