<?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>185715</bug_id>
          
          <creation_ts>2018-05-17 01:21:09 -0700</creation_ts>
          <short_desc>Conversion between SecurityOriginData and DatabaseIdentifier is asymmetric when port is null</short_desc>
          <delta_ts>2018-05-22 14:14:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mitz</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1424641</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-17 01:21:09 -0700</bug_when>
    <thetext>Here is current case:
SecurityOriginData(port = null) -&gt; DatabaseIdentifier(port = 0) -&gt; SecurityOriginData(port = 0)
which should be:
SecurityOriginData(port = null) -&gt; DatabaseIdentifier -&gt; SecurityOriginData(port = null)

Currently LocalStorageDatabase sometimes unlinks database files when they are still in use. We have code to close the database before deletion, but due to the conversion issue about identifier, we failed to delete the correct database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1424643</commentid>
    <comment_count>1</comment_count>
      <attachid>340561</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-17 01:25:20 -0700</bug_when>
    <thetext>Created attachment 340561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425032</commentid>
    <comment_count>2</comment_count>
      <attachid>340672</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-17 18:47:39 -0700</bug_when>
    <thetext>Created attachment 340672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425037</commentid>
    <comment_count>3</comment_count>
      <attachid>340672</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-17 19:38:45 -0700</bug_when>
    <thetext>Comment on attachment 340672
Patch

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

Note that you could have written an API test specific to SecurityOriginData, instead of a higher level one, since you change is specific to SecurityOriginData. See SecurityOrigin.cpp in our API test folder for existing SecurityOrigin API tests.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Fixed the issue of null port when coverting between SecurityOriginData and DatabaseIdentifier.

Typo: coverting

&gt; Source/WebCore/page/SecurityOriginData.cpp:118
&gt; +        return SecurityOriginData {databaseIdentifier.substring(0, separator1), databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1), std::nullopt};

We may want to store databaseIdentifier.substring(0, separator1) and databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1) in local variables with meaningful names, to avoid duplication and improve readability.

We could also use &quot;, port ? make_optional&lt;uint16_t&gt;(port) : std::nullopt)&quot; below. This may actually be nicer.

Also, I know you copied the code below but we normally have spaces between the curly brackets. return SecurityOriginData { a, b, c };

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:153
&gt; +    auto array = [[NSMutableArray alloc] init];

initWithCapacity since we know the size in advance?

Also, may be nice to use NSMutableArray&lt;NSString *&gt; instead of auto here. I think auto ends up being NSMutableArray which is not as strongly typed.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:155
&gt; +        [array addObject:[[NSString alloc] initWithCString:origin.toString().utf8().data() encoding:NSUTF8StringEncoding]];

a WTF String can implicitly be converted into a NSString. I think this should work:
[array addObject:origin.toString()];
If not, maybe:
[array addObject:(NSString *)origin.toString()];

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:156
&gt; +    return array;

I suck at objc but aren&apos;t we supposed to autorelease here? since we transfer ownership.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:49
&gt; +- (NSArray&lt;NSString *&gt; *)_originsString WK_API_AVAILABLE(macosx(10.13.4), ios(11.3));

You always want this for new API:
WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:60
&gt; +    configuration.get().websiteDataStore = [WKWebsiteDataStore defaultDataStore];

Isn&apos;t this the default? If so, do we even need to pass in a configuration?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:62
&gt; +    webView.get().UIDelegate = [[LocalStorageUIDelegate alloc] init];

Isn&apos;t this leaking? We may want to store [[LocalStorageUIDelegate alloc] init] in a local RetainPtr&lt;&gt;, then then assign localStorageUIDelegate.get() here.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:67
&gt; +    TestWebKitAPI::Util::sleep(1);

Why is this needed? Are we sure this is not going to be flaky?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:75
&gt; +        EXPECT_TRUE([[origins objectAtIndex:0] isEqual:@&quot;http://localhost&quot;]);

Is there a way to make EXPECT_STREQ() work here? It would make the output more useful when failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425202</commentid>
    <comment_count>4</comment_count>
      <attachid>340716</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-18 11:35:55 -0700</bug_when>
    <thetext>Created attachment 340716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425213</commentid>
    <comment_count>5</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-18 11:51:59 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 340672 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=340672&amp;action=review
&gt; 
&gt; Note that you could have written an API test specific to SecurityOriginData,
&gt; instead of a higher level one, since you change is specific to
&gt; SecurityOriginData. See SecurityOrigin.cpp in our API test folder for
&gt; existing SecurityOrigin API tests.
&gt; 
This is the code path that I found the bug so it&apos;s natural to write an API test like this. Might also be a good start to write an API test for LocalStorageDatabaseTracker.

&gt; &gt; Source/WebCore/page/SecurityOriginData.cpp:118
&gt; &gt; +        return SecurityOriginData {databaseIdentifier.substring(0, separator1), databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1), std::nullopt};
&gt; 
&gt; We may want to store databaseIdentifier.substring(0, separator1) and
&gt; databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1) in
&gt; local variables with meaningful names, to avoid duplication and improve
&gt; readability.
&gt; 
&gt; We could also use &quot;, port ? make_optional&lt;uint16_t&gt;(port) : std::nullopt)&quot;
&gt; below. This may actually be nicer.
&gt; 
&gt; Also, I know you copied the code below but we normally have spaces between
&gt; the curly brackets. return SecurityOriginData { a, b, c };
&gt; 
Done. I tried using &quot;? A : B&quot;, but error for A and B are incompatible types.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:156
&gt; &gt; +    return array;
&gt; 
&gt; I suck at objc but aren&apos;t we supposed to autorelease here? since we transfer
&gt; ownership.
&gt; 
Yes! I didn&apos;t know that.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:62
&gt; &gt; +    webView.get().UIDelegate = [[LocalStorageUIDelegate alloc] init];
&gt; 
&gt; Isn&apos;t this leaking? We may want to store [[LocalStorageUIDelegate alloc]
&gt; init] in a local RetainPtr&lt;&gt;, then then assign localStorageUIDelegate.get()
&gt; here.
&gt; 
Ditto.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm:67
&gt; &gt; +    TestWebKitAPI::Util::sleep(1);
&gt; 
&gt; Why is this needed? Are we sure this is not going to be flaky?
&gt; 
LocalStorageDatabase&apos;s update interval is 1 sec, where it would create database file if not exists and notify LocalStorageDatabaseTracker to update the origins. So 1 second should be fine theoretically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425359</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-18 16:33:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/32620436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425360</commentid>
    <comment_count>7</comment_count>
      <attachid>340716</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-18 16:34:48 -0700</bug_when>
    <thetext>Comment on attachment 340716
Patch

I will let someone else review due to the ObjC SPI bits. WebCore code LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425362</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2018-05-18 16:38:23 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #6)
&gt; &lt;rdar://problem/32620436&gt;

Is this right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425376</commentid>
    <comment_count>9</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-05-18 17:11:21 -0700</bug_when>
    <thetext>(In reply to mitz from comment #8)
&gt; (In reply to Sihui Liu from comment #6)
&gt; &gt; &lt;rdar://problem/32620436&gt;
&gt; 
&gt; Is this right?

This is the cause (or one of the causes) of the synthetic crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425717</commentid>
    <comment_count>10</comment_count>
      <attachid>340716</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-05-21 11:09:18 -0700</bug_when>
    <thetext>Comment on attachment 340716
Patch

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

&gt; Source/WebCore/page/SecurityOriginData.cpp:119
&gt; +    if (!port)

Do we need to check portAbsent here? It&apos;s weird that we check portAbsent above but not here.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:154
&gt; +    NSMutableArray&lt;NSString *&gt; *array = [[NSMutableArray alloc] initWithCapacity:origins.size()];

Most ObjC classes provide a simpler alternative that performs alloc + init + autorelease for you. In this case, you can use &quot;[NSMutableArray arrayWithCapacity:origins.size()]&quot;, and then no autorelease below. I would use that here.

It&apos;s not a big deal, but it&apos;s a nice idiom to get familiar with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425809</commentid>
    <comment_count>11</comment_count>
      <attachid>340716</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-05-21 14:08:01 -0700</bug_when>
    <thetext>Comment on attachment 340716
Patch

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

&gt;&gt; Source/WebCore/page/SecurityOriginData.cpp:119
&gt;&gt; +    if (!port)
&gt; 
&gt; Do we need to check portAbsent here? It&apos;s weird that we check portAbsent above but not here.

toInt() would have returned 0 if the String was empty (or null) so checking portAbsent does not seems required to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426273</commentid>
    <comment_count>12</comment_count>
      <attachid>340716</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-05-22 13:46:31 -0700</bug_when>
    <thetext>Comment on attachment 340716
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426300</commentid>
    <comment_count>13</comment_count>
      <attachid>340716</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-22 14:14:05 -0700</bug_when>
    <thetext>Comment on attachment 340716
Patch

Clearing flags on attachment: 340716

Committed r232079: &lt;https://trac.webkit.org/changeset/232079&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426301</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-22 14:14:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340561</attachid>
            <date>2018-05-17 01:25:20 -0700</date>
            <delta_ts>2018-05-17 18:47:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185715-20180517012520.patch</filename>
            <type>text/plain</type>
            <size>1712</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFkZWY2NDI1Y2I2Zjhi
ZjA1OGFlNWY5YjJkMDBhNzA3Y2QxY2E4YS4uMGE5NWUzMGMyYmM1YWM1YWRlNjVlOTIwOGMxNThi
OTUxMzNjMzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTA1LTE3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENvbnZlcnNpb24gYmV0d2Vl
biBTZWN1cml0eU9yaWdpbkRhdGEgYW5kIERhdGFiYXNlSWRlbnRpZmllciBpcyBhc3ltbWV0cmlj
IHdoZW4gcG9ydCBpcyBudWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODU3MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXhlZCB0aGUgaXNzdWUgaW4gY29udmVyc2lvbiBiZXR3ZWVuIFNlY3VyaXR5
T3JpZ2luRGF0YSBhbmQgRGF0YWJhc2VJZGVudGlmaWVyLgorIAorICAgICAgICAqIHBhZ2UvU2Vj
dXJpdHlPcmlnaW5EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcik6CisKIDIwMTgtMDUtMTYgIENocmlzIE5hcmRpICA8
Y25hcmRpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgRG9jdW1lbnQjc2VsZWN0ZWRT
dHlsZXNoZWV0U2V0L3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2VjdXJpdHlPcmlnaW5EYXRhLmNwcAppbmRleCAyYWFjOGVlOGQzYmRiMGI1YWRkODYzMTUwNTQ1
MDI2NGMxYzI3NTkyLi42MzJhMjIzMzc4MWViYTg2NTNkYTJkNmVhZTBmMjlmODc3Y2FhNGY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCkBAIC0xMTQsNiAr
MTE0LDkgQEAgc3RkOjpvcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5T3JpZ2lu
RGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihjb24KICAgICBpZiAocG9ydCA8IDAgfHwgcG9y
dCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICAKKyAgICBpZiAoIXBvcnQpCisgICAgICAgIHJldHVybiBTZWN1
cml0eU9yaWdpbkRhdGEge2RhdGFiYXNlSWRlbnRpZmllci5zdWJzdHJpbmcoMCwgc2VwYXJhdG9y
MSksIGRhdGFiYXNlSWRlbnRpZmllci5zdWJzdHJpbmcoc2VwYXJhdG9yMSArIDEsIHNlcGFyYXRv
cjIgLSBzZXBhcmF0b3IxIC0gMSksIHN0ZDo6bnVsbG9wdH07CisgICAgCiAgICAgcmV0dXJuIFNl
Y3VyaXR5T3JpZ2luRGF0YSB7ZGF0YWJhc2VJZGVudGlmaWVyLnN1YnN0cmluZygwLCBzZXBhcmF0
b3IxKSwgZGF0YWJhc2VJZGVudGlmaWVyLnN1YnN0cmluZyhzZXBhcmF0b3IxICsgMSwgc2VwYXJh
dG9yMiAtIHNlcGFyYXRvcjEgLSAxKSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHBvcnQpfTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340672</attachid>
            <date>2018-05-17 18:47:39 -0700</date>
            <delta_ts>2018-05-18 11:35:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185715-20180517184738.patch</filename>
            <type>text/plain</type>
            <size>13343</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFkZWY2NDI1Y2I2Zjhi
ZjA1OGFlNWY5YjJkMDBhNzA3Y2QxY2E4YS4uOTgxODY5MWYxNWI0MjE3ODc0NjVhM2M3YWNkYmMx
Y2RmM2ViMGZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE4LTA1LTE3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENvbnZlcnNpb24gYmV0d2Vl
biBTZWN1cml0eU9yaWdpbkRhdGEgYW5kIERhdGFiYXNlSWRlbnRpZmllciBpcyBhc3ltbWV0cmlj
IHdoZW4gcG9ydCBpcyBudWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODU3MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXhlZCB0aGUgaXNzdWUgb2YgbnVsbCBwb3J0IHdoZW4gY292ZXJ0aW5nIGJl
dHdlZW4gU2VjdXJpdHlPcmlnaW5EYXRhIGFuZCBEYXRhYmFzZUlkZW50aWZpZXIuCisKKyAgICAg
ICAgVGVzdDogV0tXZWJWaWV3LkxvY2FsU3RvcmFnZUZldGNoRGF0YVJlY29yZHMuCisKKyAgICAg
ICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIpOgorCiAyMDE4LTA1LTE2ICBD
aHJpcyBOYXJkaSAgPGNuYXJkaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIERvY3Vt
ZW50I3NlbGVjdGVkU3R5bGVzaGVldFNldC9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDExNmQ1OTJmYmY1YjNkM2UzZTVkNGZlY2JmNjNkOTBkODQ3ZTRiNjUuLjFiY2E0MTE3Yjlj
Yzg3YjkyNTU2NWYzOGUxODAzNjFlNWI2N2EyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTgtMDUtMTcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAg
Q29udmVyc2lvbiBiZXR3ZWVuIFNlY3VyaXR5T3JpZ2luRGF0YSBhbmQgRGF0YWJhc2VJZGVudGlm
aWVyIGlzIGFzeW1tZXRyaWMgd2hlbiBwb3J0IGlzIG51bGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTcxNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBnZXR0ZXIgZm9yIG9yaWdpbnMgaW4gV0tX
ZWJzaXRlRGF0YVJlY29yZCBmb3IgdGVzdGluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVJl
Y29yZCBfb3JpZ2luc1N0cmluZ10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJzaXRlRGF0YVJlY29yZFByaXZhdGUuaDoKKworCiAyMDE4LTA1LTE2ICBDaHJpcyBOYXJkaSAg
PGNuYXJkaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIERvY3VtZW50I3NlbGVjdGVk
U3R5bGVzaGVldFNldC9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKaW5kZXggMmFhYzhlZThkM2JkYjBiNWFkZDg2MzE1MDU0
NTAyNjRjMWMyNzU5Mi4uNjMyYTIyMzM3ODFlYmE4NjUzZGEyZDZlYWUwZjI5Zjg3N2NhYTRmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcApAQCAtMTE0LDYg
KzExNCw5IEBAIHN0ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiBTZWN1cml0eU9yaWdp
bkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIoY29uCiAgICAgaWYgKHBvcnQgPCAwIHx8IHBv
cnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgCisgICAgaWYgKCFwb3J0KQorICAgICAgICByZXR1cm4gU2Vj
dXJpdHlPcmlnaW5EYXRhIHtkYXRhYmFzZUlkZW50aWZpZXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRv
cjEpLCBkYXRhYmFzZUlkZW50aWZpZXIuc3Vic3RyaW5nKHNlcGFyYXRvcjEgKyAxLCBzZXBhcmF0
b3IyIC0gc2VwYXJhdG9yMSAtIDEpLCBzdGQ6Om51bGxvcHR9OworICAgIAogICAgIHJldHVybiBT
ZWN1cml0eU9yaWdpbkRhdGEge2RhdGFiYXNlSWRlbnRpZmllci5zdWJzdHJpbmcoMCwgc2VwYXJh
dG9yMSksIGRhdGFiYXNlSWRlbnRpZmllci5zdWJzdHJpbmcoc2VwYXJhdG9yMSArIDEsIHNlcGFy
YXRvcjIgLSBzZXBhcmF0b3IxIC0gMSksIHN0YXRpY19jYXN0PHVpbnQxNl90Pihwb3J0KX07CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhUmVjb3JkLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
c2l0ZURhdGFSZWNvcmQubW0KaW5kZXggZjdhNmJmYmE2M2YzMmU3NjcwYzRiYTEwZjQ2MjQ2YzQz
YTJjZmNkYS4uNTIxOTA1MTMyMGQyMzFkYzEzZmIxZDcxNjJkYjE2OGMyODA4MmE3OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNv
cmQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFSZWNvcmQubW0KQEAgLTI5LDYgKzI5LDggQEAKICNpZiBXS19BUElfRU5BQkxFRAogCiAjaW1w
b3J0ICJfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1
cml0eU9yaWdpbkRhdGEuaD4KKyNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CiAKIE5TU3RyaW5nICog
Y29uc3QgV0tXZWJzaXRlRGF0YVR5cGVGZXRjaENhY2hlID0gQCJXS1dlYnNpdGVEYXRhVHlwZUZl
dGNoQ2FjaGUiOwogTlNTdHJpbmcgKiBjb25zdCBXS1dlYnNpdGVEYXRhVHlwZURpc2tDYWNoZSA9
IEAiV0tXZWJzaXRlRGF0YVR5cGVEaXNrQ2FjaGUiOwpAQCAtMTQ2LDYgKzE0OCwxNCBAQCAtIChf
V0tXZWJzaXRlRGF0YVNpemUgKilfZGF0YVNpemUKICAgICByZXR1cm4gW1tbX1dLV2Vic2l0ZURh
dGFTaXplIGFsbG9jXSBpbml0V2l0aFNpemU6KnNpemVdIGF1dG9yZWxlYXNlXTsKIH0KIAorLSAo
TlNBcnJheTxOU1N0cmluZyAqPiAqKV9vcmlnaW5zU3RyaW5nCit7CisgICAgYXV0byBhcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIGZvciAoYXV0byYgb3JpZ2luIDog
X3dlYnNpdGVEYXRhUmVjb3JkLT53ZWJzaXRlRGF0YVJlY29yZCgpLm9yaWdpbnMpCisgICAgICAg
IFthcnJheSBhZGRPYmplY3Q6W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDU3RyaW5nOm9yaWdp
bi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmdd
XTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVj
b3JkUHJpdmF0ZS5oCmluZGV4IDUzNmNiY2Q0Yzk4ZGNhYmMxM2ZlZTU5ZjQyZDVmMTcxYWIwYmFl
MzQuLmQxOTA2MzczYjE3MTAwNDRlOTNkOWViMmE3Y2Y0YmVhZDkxMjhkNWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhUmVjb3JkUHJpdmF0ZS5oCkBAIC00Niw2ICs0Niw4IEBAIFdLX0VYVEVSTiBOU1N0cmluZyAq
IGNvbnN0IF9XS1dlYnNpdGVEYXRhVHlwZVBsdWdJbkRhdGEgV0tfQVBJX0FWQUlMQUJMRShtYWNv
c3goCiAKIEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS1dlYnNp
dGVEYXRhU2l6ZSAqX2RhdGFTaXplOwogCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX29yaWdp
bnNTdHJpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMuNCksIGlvcygxMS4zKSk7CisK
IEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2E2Njg0MjU1NGFhMzU4Zjg0MzliZTc2MzlkMmNl
NmNhNDc4ZmQyYy4uNGVhODg0MGNmMDhiNzIxNTMzMGUyMDg4OTEyMDJmYTQxMWI3MGNhOSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDE4LTA1LTE3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisg
ICAgICAgIENvbnZlcnNpb24gYmV0d2VlbiBTZWN1cml0eU9yaWdpbkRhdGEgYW5kIERhdGFiYXNl
SWRlbnRpZmllciBpcyBhc3ltbWV0cmljIHdoZW4gcG9ydCBpcyBudWxsCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3MTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2Uu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbTogQWRkZWQuCisgICAgICAgICgtW0xvY2FsU3Rv
cmFnZVVJRGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
OmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChURVNUKToK
KwogMjAxOC0wNS0xNiAgVmFsZXJpZSBSIFlvdW5nICA8dmFsZXJpZUBib2NvdXAuY29tPgogCiAg
ICAgICAgIHRlc3QyNjIvUnVubmVyLnBtOiBzYXZlIHRvIHN1cHBsaWVkIGV4cGVjdGF0aW9uIGZp
bGUgaWYgc3VwcGxpZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjIwYmFhY2IxODFkMGU3
MTg3NmMxM2UwZTg2ZDM0Y2I3NmVkOTIwYi4uNjZmYTQ5ODQ0MGE2NjBmOGZhMmFiNTBlZGFlZjE5
Y2IzMjU1MDM2YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY5Nyw2ICs2OTcsNyBAQAog
CQlDOUM2MEU2NTFFNTNBOURDMDA2REExODEgLyogYXV0b3BsYXktY2hlY2stZnJhbWUuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOUM2
MEU2MzFFNTNBOUJBMDA2REExODEgLyogYXV0b3BsYXktY2hlY2stZnJhbWUuaHRtbCAqLzsgfTsK
IAkJQzlDNjBFNjYxRTUzQTlEQzAwNkRBMTgxIC8qIGF1dG9wbGF5LWNoZWNrLWluLWlmcmFtZS5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM5QzYwRTY0MUU1M0E5QkEwMDZEQTE4MSAvKiBhdXRvcGxheS1jaGVjay1pbi1pZnJhbWUuaHRt
bCAqLzsgfTsKIAkJQzlFNkREMzUxRUE5N0QwODAwREQ3OEFBIC8qIEZpcnN0UmVzcG9uZGVyU3Vw
cHJlc3Npb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDOUU2REQzMTFFQTk3MkQ4MDBERDc4QUEgLyogRmlyc3RSZXNwb25kZXJTdXBwcmVzc2lvbi5t
bSAqLzsgfTsKKwkJQ0EzODQ1OTYyMEFFMTdBOTAwOTkwRDNCIC8qIExvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENBMzg0NTk1MjBBRTAxMkUwMDk5MEQzQiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXIubW0gKi87IH07CiAJCUNEMEJEMEE2MUY3OTkyNEQwMDFBQjJDRiAvKiBDb250ZXh0TWVudUlt
Z1dpdGhWaWRlby5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEMEJEMEE1MUY3OTkyMjAwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRlby5t
bSAqLzsgfTsKIAkJQ0QwQkQwQTgxRjc5OTgyRDAwMUFCMkNGIC8qIENvbnRleHRNZW51SW1nV2l0
aFZpZGVvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0QwQkQwQTcxRjc5OTdDMjAwMUFCMkNGIC8qIENvbnRleHRNZW51SW1nV2l0aFZp
ZGVvLmh0bWwgKi87IH07CiAJCUNEMzIxQjA0MUUzQTg1RkEwMEVCMjFDOCAvKiB2aWRlby13aXRo
LW11dGVkLWF1ZGlvLWFuZC13ZWJhdWRpby5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMzIxQjAzMUUzQTg0QjcwMEVCMjFDOCAvKiB2
aWRlby13aXRoLW11dGVkLWF1ZGlvLWFuZC13ZWJhdWRpby5odG1sICovOyB9OwpAQCAtMTg0MSw2
ICsxODQyLDcgQEAKIAkJQzlDNjBFNjMxRTUzQTlCQTAwNkRBMTgxIC8qIGF1dG9wbGF5LWNoZWNr
LWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0b3BsYXktY2hlY2st
ZnJhbWUuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM5QzYwRTY0MUU1M0E5
QkEwMDZEQTE4MSAvKiBhdXRvcGxheS1jaGVjay1pbi1pZnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9ICJhdXRvcGxheS1jaGVjay1pbi1pZnJhbWUuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM5RTZERDMxMUVBOTcyRDgwMERENzhBQSAvKiBGaXJzdFJl
c3BvbmRlclN1cHByZXNzaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmlyc3RSZXNwb25k
ZXJTdXBwcmVzc2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0EzODQ1OTUy
MEFFMDEyRTAwOTkwRDNCIC8qIExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsU3RvcmFnZURhdGFiYXNlVHJh
Y2tlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0QwQkQwQTUxRjc5OTIyMDAw
MUFCMkNGIC8qIENvbnRleHRNZW51SW1nV2l0aFZpZGVvLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQ29udGV4dE1lbnVJbWdXaXRoVmlkZW8ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEMEJEMEE3MUY3OTk3QzIwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRlby5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gQ29udGV4dE1lbnVJbWdXaXRoVmlkZW8uaHRtbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQ0QyMjVDMDcxQzQ1QTY5MjAwMTQwNzYxIC8qIFBhcnNlZENvbnRl
bnRSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJzZWRD
b250ZW50UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMSw2ICsy
MjEzLDcgQEAKIAkJCQlBMTI1NDc4RDFEQjE4Qjk0MDAzNTg1NjQgLyogTG9hZERhdGFXaXRoTmls
TUlNRVR5cGUubW0gKi8sCiAJCQkJNTc5MDFGQUMxQ0FGMTJDMjAwRUQ2NEY5IC8qIExvYWRJbnZh
bGlkVVJMUmVxdWVzdC5tbSAqLywKIAkJCQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9j
YWxTdG9yYWdlQ2xlYXIubW0gKi8sCisJCQkJQ0EzODQ1OTUyMEFFMDEyRTAwOTkwRDNCIC8qIExv
Y2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbSAqLywKIAkJCQk0NkM1MTlEODFEMzU1QTczMDBE
QUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMubW0gKi8sCiAJCQkJOEMxMEFGOTYyMDY0
Njc3NzAwMThGRDkwIC8qIExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tICovLAogCQkJCTdBNkEy
QzZGMURDQ0Y4N0IwMEMwRDA4NSAvKiBMb2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0gKi8sCkBAIC0z
NjQ2LDYgKzM2NDksNyBAQAogCQkJCTdDQ0U3RjAwMUE0MTFBRTYwMDQ0N0M0QyAvKiBMb2FkUGFn
ZU9uQ3Jhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTc0RjU1Q0YyMDREMzdDNTAwMjk0OEM2
IC8qIExvY2FsQXV0aGVudGljYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTZBODk0MUQy
RjFDMEEwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUNBMzg0NTk2MjBBRTE3QTkwMDk5MEQzQiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk0NkM1MTlEQTFEMzU1QUIyMDBEQUE1MUEgLyogTG9jYWxT
dG9yYWdlTnVsbEVudHJpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk4QzEwQUY5OTIwNjQ2N0E5
MDAxOEZEOTAgLyogTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk3QTZBMkM3MDFEQ0NGQThDMDBDMEQwODUgLyogTG9jYWxTdG9yYWdlUXVpcmtUZXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFja2VyLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMxYTMwYzgwOTFkMTI3NmI3MDA0ZmU3MjMyNjJmNzcwNWNkZTljNTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3Rv
cmFnZURhdGFiYXNlVHJhY2tlci5tbQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0
ICJUZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVJlY29yZFByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworc3RhdGljIGJvb2wgcmVhZHlUb0NvbnRpbnVlOwor
CitAaW50ZXJmYWNlIExvY2FsU3RvcmFnZVVJRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gTG9jYWxTdG9yYWdlVUlEZWxlZ2F0ZQorLSAo
dm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1l
SW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgoreworICAgIEVYUEVDVF9TVFJFUSgidGVzdFZhbHVlIiwgbWVzc2FnZS5VVEY4U3Ry
aW5nKTsKKyAgICByZWFkeVRvQ29udGludWUgPSB0cnVlOworICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Cit9CitAZW5kCisKK1RFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3JhZ2VGZXRjaERhdGFSZWNv
cmRzKQoreworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIFtbV0tXZWJzaXRlRGF0
YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdIHJlbW92ZURhdGFPZlR5cGVzOltXS1dlYnNpdGVEYXRh
U3RvcmUgYWxsV2Vic2l0ZURhdGFUeXBlc10gbW9kaWZpZWRTaW5jZTpbTlNEYXRlIGRpc3RhbnRQ
YXN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKCkgeworICAgICAgICByZWFkeVRvQ29udGludWUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRp
bnVlKTsKKworICAgIHJlYWR5VG9Db250aW51ZSA9IGZhbHNlOworICAgIGF1dG8gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Cisg
ICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFT
dG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIHdlYlZpZXcuZ2V0KCkuVUlE
ZWxlZ2F0ZSA9IFtbTG9jYWxTdG9yYWdlVUlEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgW3dl
YlZpZXcgbG9hZEhUTUxTdHJpbmc6QCI8c2NyaXB0PmxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0
S2V5JywgJ3Rlc3RWYWx1ZScpO2FsZXJ0KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZXN0S2V5Jykp
Ozwvc2NyaXB0PiIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9sb2NhbGhv
c3QiXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOwor
CisgICAgLy8gTG9jYWwgc3RvcmFnZSBkYXRhYmFzZSB1cGRhdGUgaW50ZXJ2YWwuCisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c2xlZXAoMSk7CisKKyAgICByZWFkeVRvQ29udGludWUgPSBmYWxz
ZTsKKyAgICBbW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSBmZXRjaERhdGFS
ZWNvcmRzT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIGNv
bXBsZXRpb25IYW5kbGVyOl4oTlNBcnJheTxXS1dlYnNpdGVEYXRhUmVjb3JkICo+ICpkYXRhUmVj
b3JkcykgeworICAgICAgICByZWFkeVRvQ29udGludWUgPSB0cnVlOworICAgICAgICBBU1NFUlRf
RVEoMXUsIGRhdGFSZWNvcmRzLmNvdW50KTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gW1tkYXRh
UmVjb3JkcyBvYmplY3RBdEluZGV4OjBdIF9vcmlnaW5zU3RyaW5nXTsKKyAgICAgICAgQVNTRVJU
X0VRKDF1LCBvcmlnaW5zLmNvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW1tvcmlnaW5zIG9i
amVjdEF0SW5kZXg6MF0gaXNFcXVhbDpAImh0dHA6Ly9sb2NhbGhvc3QiXSk7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUpOworfQorCisjZW5k
aWYKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340716</attachid>
            <date>2018-05-18 11:35:55 -0700</date>
            <delta_ts>2018-05-22 14:14:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185715-20180518113554.patch</filename>
            <type>text/plain</type>
            <size>13521</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFkZWY2NDI1Y2I2Zjhi
ZjA1OGFlNWY5YjJkMDBhNzA3Y2QxY2E4YS4uNzkxNDM0YjlmYjYwMmUyOTQwYjE4MmJhZTQ2NjVi
ZWE2ZjI3YjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE4LTA1LTE3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENvbnZlcnNpb24gYmV0d2Vl
biBTZWN1cml0eU9yaWdpbkRhdGEgYW5kIERhdGFiYXNlSWRlbnRpZmllciBpcyBhc3ltbWV0cmlj
IHdoZW4gcG9ydCBpcyBudWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODU3MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXhlZCB0aGUgaXNzdWUgb2YgbnVsbCBwb3J0IHdoZW4gY29udmVydGluZyBi
ZXR3ZWVuIFNlY3VyaXR5T3JpZ2luRGF0YSBhbmQgRGF0YWJhc2VJZGVudGlmaWVyLgorCisgICAg
ICAgIFRlc3Q6IFdLV2ViVmlldy5Mb2NhbFN0b3JhZ2VGZXRjaERhdGFSZWNvcmRzLgorCisgICAg
ICAgICogcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhOjpmcm9tRGF0YWJhc2VJZGVudGlmaWVyKToKKwogMjAxOC0wNS0xNiAg
Q2hyaXMgTmFyZGkgIDxjbmFyZGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBEb2N1
bWVudCNzZWxlY3RlZFN0eWxlc2hlZXRTZXQvcHJlZmVycmVkU3R5bGVzaGVldFNldApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCAxMTZkNTkyZmJmNWIzZDNlM2U1ZDRmZWNiZjYzZDkwZDg0N2U0YjY1Li4xYmNhNDExN2I5
Y2M4N2I5MjU1NjVmMzhlMTgwMzYxZTViNjdhMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDE4LTA1LTE3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAg
IENvbnZlcnNpb24gYmV0d2VlbiBTZWN1cml0eU9yaWdpbkRhdGEgYW5kIERhdGFiYXNlSWRlbnRp
ZmllciBpcyBhc3ltbWV0cmljIHdoZW4gcG9ydCBpcyBudWxsCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU3MTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZ2V0dGVyIGZvciBvcmlnaW5zIGluIFdL
V2Vic2l0ZURhdGFSZWNvcmQgZm9yIHRlc3RpbmcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFS
ZWNvcmQgX29yaWdpbnNTdHJpbmddKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFSZWNvcmRQcml2YXRlLmg6CisKKwogMjAxOC0wNS0xNiAgQ2hyaXMgTmFyZGkg
IDxjbmFyZGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBEb2N1bWVudCNzZWxlY3Rl
ZFN0eWxlc2hlZXRTZXQvcHJlZmVycmVkU3R5bGVzaGVldFNldApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCmluZGV4IDJhYWM4ZWU4ZDNiZGIwYjVhZGQ4NjMxNTA1
NDUwMjY0YzFjMjc1OTIuLjEyYTk5ZTFjMzJjNTcxZmY5ZDFjNmFlYWY3NmIyOTk1NjI3ZWY2ZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW5EYXRhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5jcHAKQEAgLTExNCw3
ICsxMTQsMTIgQEAgc3RkOjpvcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbURhdGFiYXNlSWRlbnRpZmllcihjb24KICAgICBpZiAocG9ydCA8IDAgfHwg
cG9ydCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAKLSAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhIHtk
YXRhYmFzZUlkZW50aWZpZXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRvcjEpLCBkYXRhYmFzZUlkZW50
aWZpZXIuc3Vic3RyaW5nKHNlcGFyYXRvcjEgKyAxLCBzZXBhcmF0b3IyIC0gc2VwYXJhdG9yMSAt
IDEpLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocG9ydCl9OworICAgIGF1dG8gcHJvdG9jb2wgPSBk
YXRhYmFzZUlkZW50aWZpZXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRvcjEpOworICAgIGF1dG8gaG9z
dCA9IGRhdGFiYXNlSWRlbnRpZmllci5zdWJzdHJpbmcoc2VwYXJhdG9yMSArIDEsIHNlcGFyYXRv
cjIgLSBzZXBhcmF0b3IxIC0gMSk7CisgICAgaWYgKCFwb3J0KQorICAgICAgICByZXR1cm4gU2Vj
dXJpdHlPcmlnaW5EYXRhIHsgcHJvdG9jb2wsIGhvc3QsIHN0ZDo6bnVsbG9wdCB9OworCisgICAg
cmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YSB7IHByb3RvY29sLCBob3N0LCBzdGF0aWNfY2FzdDx1
aW50MTZfdD4ocG9ydCkgfTsKIH0KIAogU2VjdXJpdHlPcmlnaW5EYXRhIFNlY3VyaXR5T3JpZ2lu
RGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KaW5kZXggZjdhNmJmYmE2
M2YzMmU3NjcwYzRiYTEwZjQ2MjQ2YzQzYTJjZmNkYS4uYThlNDBkMDM5MmYzNDFiOTFlODQzNmIy
YzZjNTJhMWM4NjNjOTBiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KQEAgLTI5LDYgKzI5LDggQEAKICNp
ZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJfV0tXZWJzaXRlRGF0YVNpemVJbnRlcm5hbC5o
IgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbXBvcnQgPHd0Zi9I
YXNoU2V0Lmg+CiAKIE5TU3RyaW5nICogY29uc3QgV0tXZWJzaXRlRGF0YVR5cGVGZXRjaENhY2hl
ID0gQCJXS1dlYnNpdGVEYXRhVHlwZUZldGNoQ2FjaGUiOwogTlNTdHJpbmcgKiBjb25zdCBXS1dl
YnNpdGVEYXRhVHlwZURpc2tDYWNoZSA9IEAiV0tXZWJzaXRlRGF0YVR5cGVEaXNrQ2FjaGUiOwpA
QCAtMTQ2LDYgKzE0OCwxNSBAQCAtIChfV0tXZWJzaXRlRGF0YVNpemUgKilfZGF0YVNpemUKICAg
ICByZXR1cm4gW1tbX1dLV2Vic2l0ZURhdGFTaXplIGFsbG9jXSBpbml0V2l0aFNpemU6KnNpemVd
IGF1dG9yZWxlYXNlXTsKIH0KIAorLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKV9vcmlnaW5zU3Ry
aW5ncworeworICAgIGF1dG8gb3JpZ2lucyA9IF93ZWJzaXRlRGF0YVJlY29yZC0+d2Vic2l0ZURh
dGFSZWNvcmQoKS5vcmlnaW5zOworICAgIE5TTXV0YWJsZUFycmF5PE5TU3RyaW5nICo+ICphcnJh
eSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3JpZ2lucy5zaXpl
KCldOworICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lucykKKyAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDooTlNTdHJpbmcgKilvcmlnaW4udG9TdHJpbmcoKV07CisgICAgcmV0dXJuIFthcnJh
eSBhdXRvcmVsZWFzZV07Cit9CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkUHJp
dmF0ZS5oCmluZGV4IDUzNmNiY2Q0Yzk4ZGNhYmMxM2ZlZTU5ZjQyZDVmMTcxYWIwYmFlMzQuLmY3
YjJlZWQ3YzA4ZTBlMjIyZTUwMTE0ZjU3MmE1MDM0ZTZjMmZmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVj
b3JkUHJpdmF0ZS5oCkBAIC00Niw2ICs0Niw4IEBAIFdLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0
IF9XS1dlYnNpdGVEYXRhVHlwZVBsdWdJbkRhdGEgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goCiAK
IEBwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS1dlYnNpdGVEYXRh
U2l6ZSAqX2RhdGFTaXplOwogCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX29yaWdpbnNTdHJp
bmdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdhNjY4NDI1NTRhYTM1OGY4NDM5YmU3NjM5
ZDJjZTZjYTQ3OGZkMmMuLjRlYTg4NDBjZjA4YjcyMTUzMzBlMjA4ODkxMjAyZmE0MTFiNzBjYTkg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOC0wNS0xNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4K
KworICAgICAgICBDb252ZXJzaW9uIGJldHdlZW4gU2VjdXJpdHlPcmlnaW5EYXRhIGFuZCBEYXRh
YmFzZUlkZW50aWZpZXIgaXMgYXN5bW1ldHJpYyB3aGVuIHBvcnQgaXMgbnVsbAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NzE1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGNvdmVy
YWdlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW06IEFkZGVkLgorICAgICAgICAoLVtMb2Nh
bFN0b3JhZ2VVSURlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoVEVT
VCk6CisKIDIwMTgtMDUtMTYgIFZhbGVyaWUgUiBZb3VuZyAgPHZhbGVyaWVAYm9jb3VwLmNvbT4K
IAogICAgICAgICB0ZXN0MjYyL1J1bm5lci5wbTogc2F2ZSB0byBzdXBwbGllZCBleHBlY3RhdGlv
biBmaWxlIGlmIHN1cHBsaWVkCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIyMGJhYWNiMTgx
ZDBlNzE4NzZjMTNlMGU4NmQzNGNiNzZlZDkyMGIuLjY2ZmE0OTg0NDBhNjYwZjhmYTJhYjUwZWRh
ZWYxOWNiMzI1NTAzNmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02OTcsNiArNjk3LDcg
QEAKIAkJQzlDNjBFNjUxRTUzQTlEQzAwNkRBMTgxIC8qIGF1dG9wbGF5LWNoZWNrLWZyYW1lLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzlDNjBFNjMxRTUzQTlCQTAwNkRBMTgxIC8qIGF1dG9wbGF5LWNoZWNrLWZyYW1lLmh0bWwgKi87
IH07CiAJCUM5QzYwRTY2MUU1M0E5REMwMDZEQTE4MSAvKiBhdXRvcGxheS1jaGVjay1pbi1pZnJh
bWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDOUM2MEU2NDFFNTNBOUJBMDA2REExODEgLyogYXV0b3BsYXktY2hlY2staW4taWZyYW1l
Lmh0bWwgKi87IH07CiAJCUM5RTZERDM1MUVBOTdEMDgwMERENzhBQSAvKiBGaXJzdFJlc3BvbmRl
clN1cHByZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzlFNkREMzExRUE5NzJEODAwREQ3OEFBIC8qIEZpcnN0UmVzcG9uZGVyU3VwcHJlc3Np
b24ubW0gKi87IH07CisJCUNBMzg0NTk2MjBBRTE3QTkwMDk5MEQzQiAvKiBMb2NhbFN0b3JhZ2VE
YXRhYmFzZVRyYWNrZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDQTM4NDU5NTIwQUUwMTJFMDA5OTBEM0IgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VU
cmFja2VyLm1tICovOyB9OwogCQlDRDBCRDBBNjFGNzk5MjREMDAxQUIyQ0YgLyogQ29udGV4dE1l
bnVJbWdXaXRoVmlkZW8ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDBCRDBBNTFGNzk5MjIwMDAxQUIyQ0YgLyogQ29udGV4dE1lbnVJbWdXaXRoVmlk
ZW8ubW0gKi87IH07CiAJCUNEMEJEMEE4MUY3OTk4MkQwMDFBQjJDRiAvKiBDb250ZXh0TWVudUlt
Z1dpdGhWaWRlby5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENEMEJEMEE3MUY3OTk3QzIwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dp
dGhWaWRlby5odG1sICovOyB9OwogCQlDRDMyMUIwNDFFM0E4NUZBMDBFQjIxQzggLyogdmlkZW8t
d2l0aC1tdXRlZC1hdWRpby1hbmQtd2ViYXVkaW8uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDMyMUIwMzFFM0E4NEI3MDBFQjIxQzgg
LyogdmlkZW8td2l0aC1tdXRlZC1hdWRpby1hbmQtd2ViYXVkaW8uaHRtbCAqLzsgfTsKQEAgLTE4
NDEsNiArMTg0Miw3IEBACiAJCUM5QzYwRTYzMUU1M0E5QkEwMDZEQTE4MSAvKiBhdXRvcGxheS1j
aGVjay1mcmFtZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG9wbGF5LWNo
ZWNrLWZyYW1lLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDOUM2MEU2NDFF
NTNBOUJBMDA2REExODEgLyogYXV0b3BsYXktY2hlY2staW4taWZyYW1lLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXV0b3BsYXktY2hlY2staW4taWZyYW1lLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDOUU2REQzMTFFQTk3MkQ4MDBERDc4QUEgLyogRmly
c3RSZXNwb25kZXJTdXBwcmVzc2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZpcnN0UmVz
cG9uZGVyU3VwcHJlc3Npb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNBMzg0
NTk1MjBBRTAxMkUwMDk5MEQzQiAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVRyYWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMEJEMEE1MUY3OTky
MjAwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRlby5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvbnRleHRNZW51SW1nV2l0aFZpZGVvLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRDBCRDBBNzFGNzk5N0MyMDAxQUIyQ0YgLyogQ29udGV4dE1lbnVJbWdXaXRoVmlk
ZW8uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9IENvbnRleHRNZW51SW1nV2l0aFZpZGVvLmh0bWw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMjI1QzA3MUM0NUE2OTIwMDE0MDc2MSAvKiBQYXJzZWRD
b250ZW50UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFy
c2VkQ29udGVudFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMTEs
NiArMjIxMyw3IEBACiAJCQkJQTEyNTQ3OEQxREIxOEI5NDAwMzU4NTY0IC8qIExvYWREYXRhV2l0
aE5pbE1JTUVUeXBlLm1tICovLAogCQkJCTU3OTAxRkFDMUNBRjEyQzIwMEVENjRGOSAvKiBMb2Fk
SW52YWxpZFVSTFJlcXVlc3QubW0gKi8sCiAJCQkJNTFFNkE4OTIxRDJGMUJFQzAwQzAwNEI2IC8q
IExvY2FsU3RvcmFnZUNsZWFyLm1tICovLAorCQkJCUNBMzg0NTk1MjBBRTAxMkUwMDk5MEQzQiAv
KiBMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW0gKi8sCiAJCQkJNDZDNTE5RDgxRDM1NUE3
MzAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLm1tICovLAogCQkJCThDMTBBRjk2
MjA2NDY3NzcwMDE4RkQ5MCAvKiBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSAqLywKIAkJCQk3
QTZBMkM2RjFEQ0NGODdCMDBDMEQwODUgLyogTG9jYWxTdG9yYWdlUXVpcmtUZXN0Lm1tICovLApA
QCAtMzY0Niw2ICszNjQ5LDcgQEAKIAkJCQk3Q0NFN0YwMDFBNDExQUU2MDA0NDdDNEMgLyogTG9h
ZFBhZ2VPbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3NEY1NUNGMjA0RDM3QzUwMDI5
NDhDNiAvKiBMb2NhbEF1dGhlbnRpY2F0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUU2QTg5
NDFEMkYxQzBBMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIubW0gaW4gU291cmNlcyAqLywK
KwkJCQlDQTM4NDU5NjIwQUUxN0E5MDA5OTBEM0IgLyogTG9jYWxTdG9yYWdlRGF0YWJhc2VUcmFj
a2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5REExRDM1NUFCMjAwREFBNTFBIC8qIExv
Y2FsU3RvcmFnZU51bGxFbnRyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOEMxMEFGOTkyMDY0
NjdBOTAwMThGRDkwIC8qIExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0E2QTJDNzAxRENDRkE4QzAwQzBEMDg1IC8qIExvY2FsU3RvcmFnZVF1aXJrVGVzdC5t
bSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43Yjg0YTNkMzJmYzAwY2U5Y2Q4YzlkMmExMGE0NzBmMDY1NGNhOWE0Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2Nh
bFN0b3JhZ2VEYXRhYmFzZVRyYWNrZXIubW0KQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2lt
cG9ydCAiVGVzdC5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFSZWNvcmRQcml2YXRl
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK3N0YXRpYyBib29sIHJlYWR5VG9Db250aW51
ZTsKKworQGludGVyZmFjZSBMb2NhbFN0b3JhZ2VVSURlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlE
ZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIExvY2FsU3RvcmFnZVVJRGVsZWdhdGUK
Ky0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5KYXZhU2NyaXB0QWxlcnRQ
YW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTooV0tG
cmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXIKK3sKKyAgICBFWFBFQ1RfU1RSRVEoInRlc3RWYWx1ZSIsIG1lc3NhZ2UuVVRG
OFN0cmluZyk7CisgICAgcmVhZHlUb0NvbnRpbnVlID0gdHJ1ZTsKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworfQorQGVuZAorCitURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlRmV0Y2hEYXRh
UmVjb3JkcykKK3sKKyAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKKyAgICBbW1dLV2Vic2l0
ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0
YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsKKyAgICAgICAgcmVhZHlUb0NvbnRpbnVl
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9D
b250aW51ZSk7CisKKyAgICByZWFkeVRvQ29udGludWUgPSBmYWxzZTsKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CisgICAgd2ViVmlldy5nZXQoKS5VSURlbGVnYXRlID0gW1tbTG9jYWxTdG9y
YWdlVUlEZWxlZ2F0ZSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJWaWV3IGxv
YWRIVE1MU3RyaW5nOkAiPHNjcmlwdD5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGVzdEtleScsICd0
ZXN0VmFsdWUnKTthbGVydChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVzdEtleScpKTs8L3Njcmlw
dD4iIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vbG9jYWxob3N0Il1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKKworICAgIC8v
IExvY2FsIHN0b3JhZ2UgZGF0YWJhc2UgdXBkYXRlIGludGVydmFsIGlzIDEgc2Vjb25kLgorICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNsZWVwKDEpOworCisgICAgcmVhZHlUb0NvbnRpbnVlID0g
ZmFsc2U7CisgICAgW1tXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0gZmV0Y2hE
YXRhUmVjb3Jkc09mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxXZWJzaXRlRGF0YVR5cGVz
XSBjb21wbGV0aW9uSGFuZGxlcjpeKE5TQXJyYXk8V0tXZWJzaXRlRGF0YVJlY29yZCAqPiAqZGF0
YVJlY29yZHMpIHsKKyAgICAgICAgcmVhZHlUb0NvbnRpbnVlID0gdHJ1ZTsKKyAgICAgICAgQVNT
RVJUX0VRKDF1LCBkYXRhUmVjb3Jkcy5jb3VudCk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IFtb
ZGF0YVJlY29yZHMgb2JqZWN0QXRJbmRleDowXSBfb3JpZ2luc1N0cmluZ3NdOworICAgICAgICBB
U1NFUlRfRVEoMXUsIG9yaWdpbnMuY291bnQpOworICAgICAgICBFWFBFQ1RfU1RSRVEoImh0dHA6
Ly9sb2NhbGhvc3QiLCBbb3JpZ2lucyBvYmplY3RBdEluZGV4OjBdLlVURjhTdHJpbmcpOworICAg
IH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVhZHlUb0NvbnRpbnVlKTsKK30K
KworI2VuZGlmCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>