<?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>180365</bug_id>
          
          <creation_ts>2017-12-04 10:12:13 -0800</creation_ts>
          <short_desc>Limit user agent versioning to an upper bound</short_desc>
          <delta_ts>2018-12-18 09:41:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>
          
          <blocked>182629</blocked>
    
    <blocked>192809</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1377740</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-04 10:12:13 -0800</bug_when>
    <thetext>Stop reporting more recent user agent version strings, freezing the version at a specific moment in time. We should do this for a number of reasons:
(1) User Agent sniffing is a terrible way to determine whether a browser supports certain features.
(2) Bad User Agent sniffing code on the web create compatibility problems every time we update the versions.
(3) Overly-specific version information provides useful fingerprinting data while providing almost no user benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377741</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-04 10:12:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/34550617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377784</commentid>
    <comment_count>2</comment_count>
      <attachid>328364</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-04 11:12:28 -0800</bug_when>
    <thetext>Created attachment 328364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377796</commentid>
    <comment_count>3</comment_count>
      <attachid>328366</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-04 11:35:28 -0800</bug_when>
    <thetext>Created attachment 328366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378242</commentid>
    <comment_count>4</comment_count>
      <attachid>328366</attachid>
    <who name="">mitz</who>
    <bug_when>2017-12-05 11:13:58 -0800</bug_when>
    <thetext>Comment on attachment 328366
Patch

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

&gt; Source/WebCore/page/cocoa/UserAgent.mm:55
&gt; +#if __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101304

Looking at the WebKit builds that Apple has shipped so far, they seem to always build with a __MAC_OS_X_VERSION_MIN_REQUIRED ending with “00” (both in system updates and in Safari Technology Preview), so this condition is practically equivalent to __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101300. So this will make all builds targeting some version of High Sierra or later to use 10_13_4, which seems fine, but is better expressed by explicitly writing 101300. On the other hand, when targeting Sierra and El Capitan, we already know their currently shipping versions, so it seems unnecessary to refer to systemMarketingVersion().

A way to write this that is both explicit and will lend itself to gradual simplification as WebKit drops support for older OSes and that follows our convention of putting the “present and future” case ahead of the “legacy” case would be something like
#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300
    return &quot;10_13_4&quot;;
#elif __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200
    return &quot;10_12_6&quot;;
#else
    return &quot;10_11_6&quot;;
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378287</commentid>
    <comment_count>5</comment_count>
      <attachid>328366</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-05 12:32:18 -0800</bug_when>
    <thetext>Comment on attachment 328366
Patch

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

&gt;&gt; Source/WebCore/page/cocoa/UserAgent.mm:55
&gt;&gt; +#if __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101304
&gt; 
&gt; Looking at the WebKit builds that Apple has shipped so far, they seem to always build with a __MAC_OS_X_VERSION_MIN_REQUIRED ending with “00” (both in system updates and in Safari Technology Preview), so this condition is practically equivalent to __MAC_OS_X_VERSION_MIN_REQUIRED &lt; 101300. So this will make all builds targeting some version of High Sierra or later to use 10_13_4, which seems fine, but is better expressed by explicitly writing 101300. On the other hand, when targeting Sierra and El Capitan, we already know their currently shipping versions, so it seems unnecessary to refer to systemMarketingVersion().
&gt; 
&gt; A way to write this that is both explicit and will lend itself to gradual simplification as WebKit drops support for older OSes and that follows our convention of putting the “present and future” case ahead of the “legacy” case would be something like
&gt; #if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300
&gt;     return &quot;10_13_4&quot;;
&gt; #elif __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200
&gt;     return &quot;10_12_6&quot;;
&gt; #else
&gt;     return &quot;10_11_6&quot;;
&gt; #endif

I like this much better! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378291</commentid>
    <comment_count>6</comment_count>
      <attachid>328485</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-05 12:45:06 -0800</bug_when>
    <thetext>Created attachment 328485
Patch w/ Dan&apos;s improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378348</commentid>
    <comment_count>7</comment_count>
      <attachid>328485</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-05 13:59:01 -0800</bug_when>
    <thetext>Comment on attachment 328485
Patch w/ Dan&apos;s improvements

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

&gt; Source/WebCore/page/cocoa/UserAgent.mm:37
&gt; +#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300

I think this means that the UserAgent numbers are fixed from the system that built WebKit and not from the system that WebKit is running on? Is that what we expect? I guess it is irrelevant as time goes by though, so the simplicity is nice.

&gt; Source/WebCore/page/cocoa/UserAgent.mm:38
&gt; +    return &quot;10_13_4&quot;;

Nit: ASCIILiteral() can save a copy. (For each of these char* =&gt; WTF::String conversions from a literal):
https://trac.webkit.org/wiki/EfficientStrings

&gt; Source/WebCore/page/cocoa/UserAgent.mm:51
&gt; +    return &quot;605.1.15&quot;;

Nit: ASCIILiteral() can save a copy.

&gt; Source/WebKitLegacy/mac/ChangeLog:11
&gt; +        creatin the User Agent string.

Typo: creatin

&gt; LayoutTests/fast/dom/navigator-userAgent-frozen.html:64
&gt; +    if (window.testRunner)
&gt; +        testRunner.dumpAsText();
&gt; +
&gt; +    testVersion(navigator.userAgent);

Style: Weird indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378351</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2017-12-05 14:02:34 -0800</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #7)
&gt; Comment on attachment 328485 [details]
&gt; Patch w/ Dan&apos;s improvements
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=328485&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/cocoa/UserAgent.mm:37
&gt; &gt; +#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300
&gt; 
&gt; I think this means that the UserAgent numbers are fixed from the system that
&gt; built WebKit and not from the system that WebKit is running on?

__MAC_OS_X_VERSION_MIN_REQUIRED is based on the deployment target. WebKit built for one major macOS release can’t run on earlier releases and isn’t supported on later releases, so there is nothing to query at runtime that isn’t know at build time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378363</commentid>
    <comment_count>9</comment_count>
      <attachid>328485</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-05 14:23:26 -0800</bug_when>
    <thetext>Comment on attachment 328485
Patch w/ Dan&apos;s improvements

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

&gt;&gt; Source/WebCore/page/cocoa/UserAgent.mm:38
&gt;&gt; +    return &quot;10_13_4&quot;;
&gt; 
&gt; Nit: ASCIILiteral() can save a copy. (For each of these char* =&gt; WTF::String conversions from a literal):
&gt; https://trac.webkit.org/wiki/EfficientStrings

Will do!

&gt;&gt; Source/WebCore/page/cocoa/UserAgent.mm:51
&gt;&gt; +    return &quot;605.1.15&quot;;
&gt; 
&gt; Nit: ASCIILiteral() can save a copy.

Will do.

&gt;&gt; Source/WebKitLegacy/mac/ChangeLog:11
&gt;&gt; +        creatin the User Agent string.
&gt; 
&gt; Typo: creatin

Oops!

&gt;&gt; LayoutTests/fast/dom/navigator-userAgent-frozen.html:64
&gt;&gt; +    testVersion(navigator.userAgent);
&gt; 
&gt; Style: Weird indentation.

Whoops! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378366</commentid>
    <comment_count>10</comment_count>
      <attachid>328500</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-05 14:24:40 -0800</bug_when>
    <thetext>Created attachment 328500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378372</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-05 14:29:52 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/page/cocoa/UserAgent.mm:37
&gt; &gt; &gt; +#if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101300
&gt; &gt; 
&gt; &gt; I think this means that the UserAgent numbers are fixed from the system that
&gt; &gt; built WebKit and not from the system that WebKit is running on?
&gt; 
&gt; __MAC_OS_X_VERSION_MIN_REQUIRED is based on the deployment target. WebKit
&gt; built for one major macOS release can’t run on earlier releases and isn’t
&gt; supported on later releases, so there is nothing to query at runtime that
&gt; isn’t know at build time.

I see. Thanks for the explanation!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378458</commentid>
    <comment_count>12</comment_count>
      <attachid>328500</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-05 16:55:09 -0800</bug_when>
    <thetext>Comment on attachment 328500
Patch

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

r=me, but since neither of us are a WebKit Owner I suspect you&apos;ll need a nod from one.

&gt; LayoutTests/fast/dom/navigator-userAgent-frozen.html:34
&gt; +    var versionComponents = version.split(&apos;.&apos;);
&gt; +    if (versionComponents.length == 0) {

I don&apos;t think String.prototype.split can ever return an empty array, it would always return at least 1 value (the original string). But you could compare `length &lt;= 1` and I think that would be fine for this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378470</commentid>
    <comment_count>13</comment_count>
      <attachid>328533</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-12-05 17:16:24 -0800</bug_when>
    <thetext>Created attachment 328533
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378496</commentid>
    <comment_count>14</comment_count>
      <attachid>328533</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-05 17:59:57 -0800</bug_when>
    <thetext>Comment on attachment 328533
Patch for landing

Clearing flags on attachment: 328533

Committed r225562: &lt;https://trac.webkit.org/changeset/225562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378497</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-05 17:59:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418490</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2018-04-27 08:37:59 -0700</bug_when>
    <thetext>Note that OS marketing version was re-added to UserAgent in Bug 182629.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328364</attachid>
            <date>2017-12-04 11:12:28 -0800</date>
            <delta_ts>2017-12-04 11:35:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180365-20171204111228.patch</filename>
            <type>text/plain</type>
            <size>17249</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTEyLTA0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQg
dmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1
MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
cmVlemUgdGhlIHZlcnNpb24gcmVwb3J0ZWQgYXMgVXNlciBBZ2VudCB0byBPUyAxMC4xMy40IChP
UyAxMS4zIG9uIGlPUykgYW5kIFdlYktpdCA2MDUuMS4xNQorICAgICAgICBmb3IgVXNlciBBZ2Vu
dCBwdXJwb3Nlcy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50
LWZyb3plbi5odG1sCisKKyAgICAgICAgKiBwYWdlL2NvY29hL1VzZXJBZ2VudC5oOgorICAgICAg
ICAqIHBhZ2UvY29jb2EvVXNlckFnZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6dmVyc2lvblBy
ZWRhdGVzRnJlZXplKTogSGVscGVyIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgZm9yIFZlcnNpb24g
MTAuMTMuMyBvciBvbGRlci4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbU1hcmtldGluZ1ZlcnNp
b25Gb3JVc2VyQWdlbnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50QnVuZGxl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjp1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNp
b25Gcm9tRnVsbFZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50
QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
cGFnZS9pb3MvVXNlckFnZW50SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2Vy
QWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKTogRG9uJ3QgdGFrZSB0aGUgV2ViS2l0IGJ1bmRsZSB2
ZXJzaW9uCisgICAgICAgIGFzIGFuIGFyZ3VtZW50LCBvciBwYXNzIGl0IHRvIHRoZSB1c2VyIGFn
ZW50IHN0cmluZyBnZW5lcmF0b3IuCisgICAgICAgICogcGFnZS9tYWMvVXNlckFnZW50TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1l
KTogRGl0dG8uIAorCiAyMDE3LTExLTMwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ29vcmRHcmFwaGljc10gTW92ZSBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIgcGFpbnRpbmcgYmVoaW5kIE5pY29zaWE6OlBhaW50aW5nRW5naW5lCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMw
LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0
YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiB3ZWJraXRWZXJzaW9uU3RyaW5nKTsKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3Ry
aW5nJiBhcHBsaWNhdGlvbk5hbWUpOwogCiBTdHJpbmcgc3lzdGVtTWFya2V0aW5nVmVyc2lvbkZv
clVzZXJBZ2VudFN0cmluZygpOwotU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNpb25Gcm9tRnVs
bFZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJik7CitTdHJpbmcgdXNlckFnZW50QnVuZGxlVmVy
c2lvbigpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1t
CShyZXZpc2lvbiAyMjUzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2Vu
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCw0MyArMzAsNDAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitzdGF0aWMgYm9vbCB2ZXJzaW9uUHJlZGF0ZXNGcmVlemUoTlNTdHJpbmcgKnZlcnNpb24p
Cit7CisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqdmVyc2lvblBhcnRzID0gW3ZlcnNpb24gY29t
cG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOiBAIi4iXTsKKyAgICBpZiAodmVyc2lvblBhcnRzLmNv
dW50IDwgMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAodmVyc2lvblBhcnRzWzBd
LmludFZhbHVlIDwgMTEgJiYgdmVyc2lvblBhcnRzWzFdLmludFZhbHVlIDwgMTQpIHsKKyAgICAg
ICAgaWYgKHZlcnNpb25QYXJ0cy5jb3VudCA8IDMgfHwgdmVyc2lvblBhcnRzWzJdLmludFZhbHVl
IDwgNCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogU3RyaW5nIHN5c3RlbU1hcmtldGluZ1ZlcnNpb25Gb3JVc2VyQWdlbnRTdHJpbmco
KQogewogICAgIC8vIFVzZSB1bmRlcnNjb3JlcyBpbnN0ZWFkIG9mIGRvdHMgYmVjYXVzZSB3aGVu
IHdlIGZpcnN0IGFkZGVkIHRoZSBNYWMgT1MgWCB2ZXJzaW9uIHRvIHRoZSB1c2VyIGFnZW50IHN0
cmluZwogICAgIC8vIHdlIHdlcmUgY29uY2VybmVkIGFib3V0IG9sZCBESFRNTCBsaWJyYXJpZXMg
aW50ZXJwcmV0aW5nICI0LiIgYXMgTmV0c2NhcGUgNC4gVGhhdCdzIG5vIGxvbmdlciBhIGNvbmNl
cm4gZm9yIHVzCiAgICAgLy8gYnV0IHdlJ3JlIHN0aWNraW5nIHdpdGggdGhlIHVuZGVyc2NvcmVz
IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGZvcm1hdCB1c2VkIGJ5IG9sZGVyIHZlcnNpb25z
IG9mIFNhZmFyaS4KLSAgICByZXR1cm4gW3N5c3RlbU1hcmtldGluZ1ZlcnNpb24oKSBzdHJpbmdC
eVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIuIiB3aXRoU3RyaW5nOkAiXyJdOwotfQot
Ci1zdGF0aWMgTlNTdHJpbmcgKnVzZXJWaXNpYmxlV2ViS2l0QnVuZGxlVmVyc2lvbkZyb21GdWxs
VmVyc2lvbihOU1N0cmluZyAqZnVsbFdlYktpdFZlcnNpb24pCi17Ci0gICAgLy8gSWYgdGhlIHZl
cnNpb24gaXMgbG9uZ2VyIHRoYW4gMyBkaWdpdHMgdGhlbiB0aGUgbGVhZGluZyBkaWdpdHMgcmVw
cmVzZW50IHRoZSB2ZXJzaW9uIG9mIHRoZSBPUy4gT3VyIHVzZXIgYWdlbnQKLSAgICAvLyBzdHJp
bmcgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBsZWFkaW5nIGRpZ2l0cywgc28gc3RyaXAgdGhlbSBv
ZmYgYW5kIHJlcG9ydCB0aGUgcmVzdCBhcyB0aGUgdmVyc2lvbi4gPHJkYXI6Ly9wcm9ibGVtLzQ5
OTc1NDc+Ci0gICAgTlNSYW5nZSBub25EaWdpdFJhbmdlID0gW2Z1bGxXZWJLaXRWZXJzaW9uIHJh
bmdlT2ZDaGFyYWN0ZXJGcm9tU2V0OltbTlNDaGFyYWN0ZXJTZXQgZGVjaW1hbERpZ2l0Q2hhcmFj
dGVyU2V0XSBpbnZlcnRlZFNldF1dOwotICAgIGlmIChub25EaWdpdFJhbmdlLmxvY2F0aW9uID09
IE5TTm90Rm91bmQgJiYgZnVsbFdlYktpdFZlcnNpb24ubGVuZ3RoID4gMykKLSAgICAgICAgcmV0
dXJuIFtmdWxsV2ViS2l0VmVyc2lvbiBzdWJzdHJpbmdGcm9tSW5kZXg6ZnVsbFdlYktpdFZlcnNp
b24ubGVuZ3RoIC0gM107Ci0gICAgaWYgKG5vbkRpZ2l0UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCAmJiBub25EaWdpdFJhbmdlLmxvY2F0aW9uID4gMykKLSAgICAgICAgcmV0dXJuIFtmdWxs
V2ViS2l0VmVyc2lvbiBzdWJzdHJpbmdGcm9tSW5kZXg6bm9uRGlnaXRSYW5nZS5sb2NhdGlvbiAt
IDNdOwotICAgIHJldHVybiBmdWxsV2ViS2l0VmVyc2lvbjsKKyNpZiBQTEFURk9STShNQUMpCisj
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTMwNAorICAgIE5TU3RyaW5n
ICptYXJrZXRpbmdWZXJzaW9uID0gc3lzdGVtTWFya2V0aW5nVmVyc2lvbigpOworICAgIGlmICh2
ZXJzaW9uUHJlZGF0ZXNGcmVlemUobWFya2V0aW5nVmVyc2lvbikpCisgICAgICAgIHJldHVybiBb
bWFya2V0aW5nVmVyc2lvbiBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIu
IiB3aXRoU3RyaW5nOkAiXyJdOworI2VuZGlmCisgICAgcmV0dXJuICIxMF8xM180IjsKKyNlbHNl
CisgICAgcmV0dXJuICIxMV8zIjsKKyNlbmRpZgogfQogCi1TdHJpbmcgdXNlckFnZW50QnVuZGxl
VmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIGZ1bGxXZWJLaXRWZXJz
aW9uKQorU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNpb24oKQogewotICAgIC8vIFdlIGluY2x1
ZGUgYXQgbW9zdCB0aHJlZSBjb21wb25lbnRzIG9mIHRoZSBidW5kbGUgdmVyc2lvbiBpbiB0aGUg
dXNlciBhZ2VudCBzdHJpbmcuCi0gICAgTlNTdHJpbmcgKmJ1bmRsZVZlcnNpb24gPSB1c2VyVmlz
aWJsZVdlYktpdEJ1bmRsZVZlcnNpb25Gcm9tRnVsbFZlcnNpb24oZnVsbFdlYktpdFZlcnNpb24p
OwotICAgIE5TU2Nhbm5lciAqc2Nhbm5lciA9IFtOU1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6
YnVuZGxlVmVyc2lvbl07Ci0gICAgTlNJbnRlZ2VyIHBlcmlvZENvdW50ID0gMDsKLSAgICB3aGls
ZSAodHJ1ZSkgewotICAgICAgICBpZiAoIVtzY2FubmVyIHNjYW5VcFRvU3RyaW5nOkAiLiIgaW50
b1N0cmluZzpudWxscHRyXSB8fCBzY2FubmVyLmlzQXRFbmQpCi0gICAgICAgICAgICByZXR1cm4g
YnVuZGxlVmVyc2lvbjsKLQotICAgICAgICBpZiAoKytwZXJpb2RDb3VudCA9PSAzKQotICAgICAg
ICAgICAgcmV0dXJuIFtidW5kbGVWZXJzaW9uIHN1YnN0cmluZ1RvSW5kZXg6c2Nhbm5lci5zY2Fu
TG9jYXRpb25dOwotCi0gICAgICAgICsrc2Nhbm5lci5zY2FuTG9jYXRpb247Ci0gICAgfQotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICI2MDUuMS4xNSI7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJB
Z2VudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9Vc2VyQWdl
bnRJT1MubW0JKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1Vz
ZXJBZ2VudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBpbmxpbmUg
TlNTdHJpbmcgKmRldmljZU5hbWVGb3JVc2UKICAgICByZXR1cm4gbmFtZS5hdXRvcmVsZWFzZSgp
OwogfQogCi1TdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0
IFN0cmluZyYgYXBwbGljYXRpb25OYW1lLCBjb25zdCBTdHJpbmcmIGZ1bGxXZWJLaXRWZXJzaW9u
U3RyaW5nKQorU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25z
dCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSkKIHsKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
cmUgaXMgYSB1c2VyIGFnZW50IG92ZXJyaWRlIGZvciBhbGwgV2ViS2l0IGNsaWVudHMuCiAgICAg
Q0ZQcm9wZXJ0eUxpc3RSZWYgb3ZlcnJpZGUgPSBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKENG
U1RSKCJVc2VyQWdlbnQiKSwgQ0ZTVFIoImNvbS5hcHBsZS5XZWJGb3VuZGF0aW9uIikpOwpAQCAt
ODgsNyArODgsNyBAQCBTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OCiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRoIFN0cmlu
ZyBhbmQvb3IgU3RyaW5nQnVpbGRlciBpbnN0ZWFkLgotICAgIE5TU3RyaW5nICp3ZWJLaXRWZXJz
aW9uID0gdXNlckFnZW50QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyhmdWxsV2Vi
S2l0VmVyc2lvblN0cmluZyk7CisgICAgTlNTdHJpbmcgKndlYktpdFZlcnNpb24gPSB1c2VyQWdl
bnRCdW5kbGVWZXJzaW9uKCk7CiAgICAgTlNTdHJpbmcgKm9zTWFya2V0aW5nVmVyc2lvblN0cmlu
ZyA9IHN5c3RlbU1hcmtldGluZ1ZlcnNpb25Gb3JVc2VyQWdlbnRTdHJpbmcoKTsKICAgICBpZiAo
YXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiTW96aWxsYS81LjAgKCVAOyBDUFUgJUAgJUAgbGlrZSBNYWMgT1MgWCkg
QXBwbGVXZWJLaXQvJUAgKEtIVE1MLCBsaWtlIEdlY2tvKSIsIGRldmljZU5hbWVGb3JVc2VyQWdl
bnQoKSwgb3NOYW1lRm9yVXNlckFnZW50KCksIG9zTWFya2V0aW5nVmVyc2lvblN0cmluZywgd2Vi
S2l0VmVyc2lvbl07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9Vc2VyQWdlbnRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVXNlckFnZW50TWFjLm1t
CShyZXZpc2lvbiAyMjUzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9Vc2VyQWdlbnRN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNlcnJvciBVbmtub3duIGFyY2hpdGVjdHVyZQogI2VuZGlmCiAKLVN0cmluZyBzdGFuZGFyZFVz
ZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUs
IGNvbnN0IFN0cmluZyYgZnVsbFdlYktpdFZlcnNpb25TdHJpbmcpCitTdHJpbmcgc3RhbmRhcmRV
c2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1l
KQogewogICAgIFN0cmluZyBvc1ZlcnNpb24gPSBzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uRm9yVXNl
ckFnZW50U3RyaW5nKCk7Ci0gICAgU3RyaW5nIHdlYktpdFZlcnNpb25TdHJpbmcgPSB1c2VyQWdl
bnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxWZXJzaW9uU3RyaW5nKGZ1bGxXZWJLaXRWZXJzaW9uU3Ry
aW5nKTsKKyAgICBTdHJpbmcgd2ViS2l0VmVyc2lvblN0cmluZyA9IHVzZXJBZ2VudEJ1bmRsZVZl
cnNpb24oKTsKIAogICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgIiBQUk9DRVNTT1IgIiBN
YWMgT1MgWCAiLCBvc1ZlcnNpb24sICIpIEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb25TdHJp
bmcsICIgKEtIVE1MLCBsaWtlIEdlY2tvKSIpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQ4
MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMTctMTItMDQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgTGltaXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5nIHRvIGFuIHVwcGVyIGJvdW5kCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzNjUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOiBE
b24ndCBwYXNzIHRoZSBXZWJLaXQgYnVuZGxlIHZlcnNpb24gd2hlbgorICAgICAgICBjcmVhdGlu
IHRoZSBVc2VyIEFnZW50IHN0cmluZy4KKyAgICAgICAgKFdlYktpdDo6d2ViS2l0QnVuZGxlVmVy
c2lvblN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJv
eHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6d2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6
IERlbGV0ZWQuCisKIDIwMTctMTItMDQgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1ha2UgU2Nyb2xsaW5nVHJlZU5vZGU6OmVuY2xvc2luZ0ZyYW1lTm9kZSBy
ZXR1cm4gdGhlIG5vZGUgaXRzZWxmIGZvciBmcmFtZSBub2RlcwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMjUzMjkp
CisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjgsMTQgKzY4LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCiB7CiB9CiAKLXN0YXRpYyBTdHJpbmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0
cmluZygpCi17Ci0gICAgcmV0dXJuIFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zy
b21TdHJpbmcoQCJXS1dlYlZpZXciKV0gb2JqZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6KE5TU3Ry
aW5nICopa0NGQnVuZGxlVmVyc2lvbktleV07Ci19Ci0KIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0
YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
KQogewotICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBw
bGljYXRpb25OYW1lRm9yVXNlckFnZW50LCB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkpOwor
ICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRp
b25OYW1lRm9yVXNlckFnZW50KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldElzU3BlYWtp
bmcoYm9vbCYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdl
UHJveHlNYWMubW0JKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSwxNCArOTEsOSBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBzZXRTaG91bGRV
c2VJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKGNsaWVudEV4cGVjdHNMZWdhY3lJbXBsaWNpdFJ1
YmJlckJhbmRDb250cm9sKTsKIH0KIAotc3RhdGljIFN0cmluZyB3ZWJLaXRCdW5kbGVWZXJzaW9u
U3RyaW5nKCkKLXsKLSAgICByZXR1cm4gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpOU0NsYXNz
RnJvbVN0cmluZyhAIldLVmlldyIpXSBvYmplY3RGb3JJbmZvRGljdGlvbmFyeUtleTooTlNTdHJp
bmcgKilrQ0ZCdW5kbGVWZXJzaW9uS2V5XTsKLX0KLQogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3Rh
bmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQp
CiB7Ci0gICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBs
aWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQsIHdlYktpdEJ1bmRsZVZlcnNpb25TdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlv
bk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0SXNTcGVha2lu
Zyhib29sJiBpc1NwZWFraW5nKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2
aXNpb24gMjI1MzI5KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMTItMDQgIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTGltaXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5n
IHRvIGFuIHVwcGVyIGJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODAzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9zdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBs
aWNhdGlvbk5hbWU6XSk6IERvbid0IHBhc3MgdGhlIFdlYktpdCBidW5kbGUgdmVyc2lvbiB3aGVu
CisgICAgICAgIGNyZWF0aW4gdGhlIFVzZXIgQWdlbnQgc3RyaW5nLgorICAgICAgICAod2ViS2l0
QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisKIDIwMTctMTEtMjkgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIElt
YWdlU291cmNlIGZyb20gdGhlIGNsYXNzIGhpZXJhcmNoeSB0aGF0IGNvbm5lY3RzIEJpdG1hcElt
YWdlIHRvIEltYWdlRnJhbWUKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzMiwxNCArMTEzMiw5IEBA
IC0gKHZvaWQpX2FkZFRvQWxsV2ViVmlld3NTZXQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcg
KFdlYlByaXZhdGUpCiAKLXN0YXRpYyBTdHJpbmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygp
Ci17Ci0gICAgcmV0dXJuIFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYlZpZXcgY2xhc3Nd
XSBvYmplY3RGb3JJbmZvRGljdGlvbmFyeUtleTooTlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJzaW9u
S2V5XTsKLX0KLQogKyAoTlNTdHJpbmcgKilfc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRp
b25OYW1lOihOU1N0cmluZyAqKWFwcGxpY2F0aW9uTmFtZQogewotICAgIHJldHVybiBzdGFuZGFy
ZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lLCB3ZWJLaXRCdW5k
bGVWZXJzaW9uU3RyaW5nKCkpOworICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBs
aWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIyNTQ4MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3LTEyLTA0ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQgdmVyc2lvbmluZyB0
byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1MDYxNz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL25h
dmlnYXRvci11c2VyQWdlbnQtZnJvemVuLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4uaHRtbDogQWRkZWQuCisKIDIwMTct
MTItMDQgIE1zMmdlciAgPE1zMmdlckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJlYmFz
ZWxpbmUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9pbnRl
cmFjdGl2ZS1lbGVtZW50cy90aGUtZGlhbG9nLWVsZW1lbnQvZGlhbG9nLXNob3dNb2RhbC5odG1s
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vbmF2aWdhdG9y
LXVzZXJBZ2VudC1mcm96ZW4tZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitDb25maXJtIFdlYktpdCBkb2VzIG5vdCByZXBv
cnQgdmVyc2lvbnMgYWJvdmUgdGhlIGZyb3plbiBtYXhpbXVtcy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1MgTWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5k
cy4KK1BBU1MgTWlub3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4KK1BBU1MgVGlu
eSB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gYm91bmRzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9t
L25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4uaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKzwhRE9DVFlQRSBodG1sPg0KKzxodG1s
Pg0KKzxoZWFkPg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9z
Y3JpcHQ+DQorPHNjcmlwdD4NCitkZXNjcmlwdGlvbigiQ29uZmlybSBXZWJLaXQgZG9lcyBub3Qg
cmVwb3J0IHZlcnNpb25zIGFib3ZlIHRoZSBmcm96ZW4gbWF4aW11bXMuIik7DQorPC9zY3JpcHQ+
DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxzY3JpcHQ+DQorZnVuY3Rpb24gdGVzdFZlcnNpb24odXNl
ckFnZW50KQ0KK3sNCisgICAgdmFyIHN0YXJ0ID0gdXNlckFnZW50LmluZGV4T2YoIkFwcGxlV2Vi
S2l0LyIpOw0KKyAgICBpZiAoc3RhcnQgPCAwKSB7DQorICAgICAgICB0ZXN0RmFpbGVkKCJVc2Vy
IGFnZW50IGRpZCBub3QgY29udGFpbiBXZWJLaXQgdmVyc2lvbi4iKTsNCisgICAgICAgIHJldHVy
bjsNCisgICAgfQ0KKw0KKyAgICBzdGFydCArPSAxMjsNCisNCisgICAgdmFyIGVuZCA9IHVzZXJB
Z2VudC5pbmRleE9mKCIgIiwgc3RhcnQpOw0KKyAgICBpZiAoZW5kIDwgMCkgew0KKyAgICAgICAg
dGVzdEZhaWxlZCgiQ291bGRuJ3QgZmluZCBlbmQgb2YgdGhlIHZlcnNpb24gc3RyaW5nLiIpOw0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50
LnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpOw0KKyAgICBpZiAodmVyc2lvbiA9PSAiIikgew0K
KyAgICAgICAgdGVzdEZhaWxlZCgiTWFsZm9ybWVkIHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAg
ICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAgICB2YXIgdmVyc2lvbkNvbXBvbmVudHMgPSB2
ZXJzaW9uLnNwbGl0KCcuJyk7DQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50cy5sZW5ndGggPT0g
MCkgew0KKyAgICAgICAgdGVzdEZhaWxlZCgiTWFsZm9ybWVkIHZlcnNpb24gc3RyaW5nLiIpOw0K
KyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50c1sw
XSA8PSA2MDUpDQorICAgICAgICB0ZXN0UGFzc2VkKCJNYWpvciB2ZXJzaW9uIG51bWJlciBpcyB3
aXRoaW4gYm91bmRzLiIpOw0KKyAgICBlbHNlDQorICAgICAgICB0ZXN0RmFpbGVkKCJNYWpvciB2
ZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMF0pOw0KKw0KKyAgICBpZiAo
dmVyc2lvbkNvbXBvbmVudHMubGVuZ3RoIDwgMikNCisgICAgICAgIHJldHVybjsNCisNCisgICAg
aWYgKHZlcnNpb25Db21wb25lbnRzWzBdIDwgNjA1IHx8IHZlcnNpb25Db21wb25lbnRzWzFdIDw9
IDEpDQorICAgICAgICB0ZXN0UGFzc2VkKCJNaW5vciB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4g
Ym91bmRzLiIpOw0KKyAgICBlbHNlDQorICAgICAgICB0ZXN0RmFpbGVkKCJNaW5vciB2ZXJzaW9u
IG51bWJlciBpcyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMV0pOw0KKw0KKyAgICBpZiAodmVyc2lv
bkNvbXBvbmVudHMubGVuZ3RoIDwgMykNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKHZl
cnNpb25Db21wb25lbnRzWzBdIDwgNjA1IHx8IHZlcnNpb25Db21wb25lbnRzWzFdIDwgMSB8fCB2
ZXJzaW9uQ29tcG9uZW50c1syXSA8PSAxNSkNCisgICAgICAgIHRlc3RQYXNzZWQoIlRpbnkgdmVy
c2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4iKTsNCisgICAgZWxzZQ0KKyAgICAgICAgdGVz
dEZhaWxlZCgiVGlueSB2ZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMl0p
Ow0KK30NCisNCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQ0KKyAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7DQorDQorICAgIHRlc3RWZXJzaW9uKG5hdmlnYXRvci51c2VyQWdlbnQp
Ow0KKzwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328366</attachid>
            <date>2017-12-04 11:35:28 -0800</date>
            <delta_ts>2017-12-05 12:45:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180365-20171204113528.patch</filename>
            <type>text/plain</type>
            <size>17276</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTEyLTA0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQg
dmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1
MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
cmVlemUgdGhlIHZlcnNpb24gcmVwb3J0ZWQgYXMgVXNlciBBZ2VudCB0byBPUyAxMC4xMy40IChP
UyAxMS4zIG9uIGlPUykgYW5kIFdlYktpdCA2MDUuMS4xNQorICAgICAgICBmb3IgVXNlciBBZ2Vu
dCBwdXJwb3Nlcy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50
LWZyb3plbi5odG1sCisKKyAgICAgICAgKiBwYWdlL2NvY29hL1VzZXJBZ2VudC5oOgorICAgICAg
ICAqIHBhZ2UvY29jb2EvVXNlckFnZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6dmVyc2lvblBy
ZWRhdGVzRnJlZXplKTogSGVscGVyIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgZm9yIFZlcnNpb24g
MTAuMTMuMyBvciBvbGRlci4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbU1hcmtldGluZ1ZlcnNp
b25Gb3JVc2VyQWdlbnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50QnVuZGxl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjp1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNp
b25Gcm9tRnVsbFZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50
QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
cGFnZS9pb3MvVXNlckFnZW50SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2Vy
QWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKTogRG9uJ3QgdGFrZSB0aGUgV2ViS2l0IGJ1bmRsZSB2
ZXJzaW9uCisgICAgICAgIGFzIGFuIGFyZ3VtZW50LCBvciBwYXNzIGl0IHRvIHRoZSB1c2VyIGFn
ZW50IHN0cmluZyBnZW5lcmF0b3IuCisgICAgICAgICogcGFnZS9tYWMvVXNlckFnZW50TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1l
KTogRGl0dG8uIAorCiAyMDE3LTExLTMwICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ29vcmRHcmFwaGljc10gTW92ZSBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIgcGFpbnRpbmcgYmVoaW5kIE5pY29zaWE6OlBhaW50aW5nRW5naW5lCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHJldmlzaW9uIDIyNTMyOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMw
LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0
YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiB3ZWJraXRWZXJzaW9uU3RyaW5nKTsKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3Ry
aW5nJiBhcHBsaWNhdGlvbk5hbWUpOwogCiBTdHJpbmcgc3lzdGVtTWFya2V0aW5nVmVyc2lvbkZv
clVzZXJBZ2VudFN0cmluZygpOwotU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNpb25Gcm9tRnVs
bFZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJik7CitTdHJpbmcgdXNlckFnZW50QnVuZGxlVmVy
c2lvbigpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1t
CShyZXZpc2lvbiAyMjUzMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2Vu
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMCw0MyArMzAsNDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIGJvb2wgdmVyc2lvblByZWRhdGVzRnJlZXpl
KE5TU3RyaW5nICp2ZXJzaW9uKQoreworICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKnZlcnNpb25Q
YXJ0cyA9IFt2ZXJzaW9uIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzogQCIuIl07CisgICAg
aWYgKHZlcnNpb25QYXJ0cy5jb3VudCA8IDIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKHZlcnNpb25QYXJ0c1swXS5pbnRWYWx1ZSA8IDExICYmIHZlcnNpb25QYXJ0c1sxXS5pbnRW
YWx1ZSA8IDE0KSB7CisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuY291bnQgPCAzIHx8IHZlcnNp
b25QYXJ0c1syXS5pbnRWYWx1ZSA8IDQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogU3RyaW5nIHN5c3RlbU1hcmtldGlu
Z1ZlcnNpb25Gb3JVc2VyQWdlbnRTdHJpbmcoKQogewogICAgIC8vIFVzZSB1bmRlcnNjb3JlcyBp
bnN0ZWFkIG9mIGRvdHMgYmVjYXVzZSB3aGVuIHdlIGZpcnN0IGFkZGVkIHRoZSBNYWMgT1MgWCB2
ZXJzaW9uIHRvIHRoZSB1c2VyIGFnZW50IHN0cmluZwogICAgIC8vIHdlIHdlcmUgY29uY2VybmVk
IGFib3V0IG9sZCBESFRNTCBsaWJyYXJpZXMgaW50ZXJwcmV0aW5nICI0LiIgYXMgTmV0c2NhcGUg
NC4gVGhhdCdzIG5vIGxvbmdlciBhIGNvbmNlcm4gZm9yIHVzCiAgICAgLy8gYnV0IHdlJ3JlIHN0
aWNraW5nIHdpdGggdGhlIHVuZGVyc2NvcmVzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGZv
cm1hdCB1c2VkIGJ5IG9sZGVyIHZlcnNpb25zIG9mIFNhZmFyaS4KLSAgICByZXR1cm4gW3N5c3Rl
bU1hcmtldGluZ1ZlcnNpb24oKSBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6
QCIuIiB3aXRoU3RyaW5nOkAiXyJdOwotfQotCi1zdGF0aWMgTlNTdHJpbmcgKnVzZXJWaXNpYmxl
V2ViS2l0QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvbihOU1N0cmluZyAqZnVsbFdlYktpdFZl
cnNpb24pCi17Ci0gICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgbG9uZ2VyIHRoYW4gMyBkaWdpdHMg
dGhlbiB0aGUgbGVhZGluZyBkaWdpdHMgcmVwcmVzZW50IHRoZSB2ZXJzaW9uIG9mIHRoZSBPUy4g
T3VyIHVzZXIgYWdlbnQKLSAgICAvLyBzdHJpbmcgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBsZWFk
aW5nIGRpZ2l0cywgc28gc3RyaXAgdGhlbSBvZmYgYW5kIHJlcG9ydCB0aGUgcmVzdCBhcyB0aGUg
dmVyc2lvbi4gPHJkYXI6Ly9wcm9ibGVtLzQ5OTc1NDc+Ci0gICAgTlNSYW5nZSBub25EaWdpdFJh
bmdlID0gW2Z1bGxXZWJLaXRWZXJzaW9uIHJhbmdlT2ZDaGFyYWN0ZXJGcm9tU2V0OltbTlNDaGFy
YWN0ZXJTZXQgZGVjaW1hbERpZ2l0Q2hhcmFjdGVyU2V0XSBpbnZlcnRlZFNldF1dOwotICAgIGlm
IChub25EaWdpdFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQgJiYgZnVsbFdlYktpdFZlcnNp
b24ubGVuZ3RoID4gMykKLSAgICAgICAgcmV0dXJuIFtmdWxsV2ViS2l0VmVyc2lvbiBzdWJzdHJp
bmdGcm9tSW5kZXg6ZnVsbFdlYktpdFZlcnNpb24ubGVuZ3RoIC0gM107Ci0gICAgaWYgKG5vbkRp
Z2l0UmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCAmJiBub25EaWdpdFJhbmdlLmxvY2F0aW9u
ID4gMykKLSAgICAgICAgcmV0dXJuIFtmdWxsV2ViS2l0VmVyc2lvbiBzdWJzdHJpbmdGcm9tSW5k
ZXg6bm9uRGlnaXRSYW5nZS5sb2NhdGlvbiAtIDNdOwotICAgIHJldHVybiBmdWxsV2ViS2l0VmVy
c2lvbjsKKyNpZiBQTEFURk9STShNQUMpCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA8IDEwMTMwNAorICAgIE5TU3RyaW5nICptYXJrZXRpbmdWZXJzaW9uID0gc3lzdGVtTWFy
a2V0aW5nVmVyc2lvbigpOworICAgIGlmICh2ZXJzaW9uUHJlZGF0ZXNGcmVlemUobWFya2V0aW5n
VmVyc2lvbikpCisgICAgICAgIHJldHVybiBbbWFya2V0aW5nVmVyc2lvbiBzdHJpbmdCeVJlcGxh
Y2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCIuIiB3aXRoU3RyaW5nOkAiXyJdOworI2VuZGlmCisg
ICAgcmV0dXJuICIxMF8xM180IjsKKyNlbHNlCisgICAgcmV0dXJuICIxMV8zIjsKKyNlbmRpZgog
fQogCi1TdHJpbmcgdXNlckFnZW50QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyhj
b25zdCBTdHJpbmcmIGZ1bGxXZWJLaXRWZXJzaW9uKQorU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZl
cnNpb24oKQogewotICAgIC8vIFdlIGluY2x1ZGUgYXQgbW9zdCB0aHJlZSBjb21wb25lbnRzIG9m
IHRoZSBidW5kbGUgdmVyc2lvbiBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcuCi0gICAgTlNTdHJp
bmcgKmJ1bmRsZVZlcnNpb24gPSB1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNpb25Gcm9tRnVs
bFZlcnNpb24oZnVsbFdlYktpdFZlcnNpb24pOwotICAgIE5TU2Nhbm5lciAqc2Nhbm5lciA9IFtO
U1NjYW5uZXIgc2Nhbm5lcldpdGhTdHJpbmc6YnVuZGxlVmVyc2lvbl07Ci0gICAgTlNJbnRlZ2Vy
IHBlcmlvZENvdW50ID0gMDsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAoIVtzY2Fu
bmVyIHNjYW5VcFRvU3RyaW5nOkAiLiIgaW50b1N0cmluZzpudWxscHRyXSB8fCBzY2FubmVyLmlz
QXRFbmQpCi0gICAgICAgICAgICByZXR1cm4gYnVuZGxlVmVyc2lvbjsKLQotICAgICAgICBpZiAo
KytwZXJpb2RDb3VudCA9PSAzKQotICAgICAgICAgICAgcmV0dXJuIFtidW5kbGVWZXJzaW9uIHN1
YnN0cmluZ1RvSW5kZXg6c2Nhbm5lci5zY2FuTG9jYXRpb25dOwotCi0gICAgICAgICsrc2Nhbm5l
ci5zY2FuTG9jYXRpb247Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuICI2MDUuMS4xNSI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9Vc2VyQWdlbnRJT1MubW0JKHJldmlzaW9uIDIyNTMyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03
Nyw3ICs3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgTlNTdHJpbmcgKmRldmljZU5hbWVGb3JVc2UKICAg
ICByZXR1cm4gbmFtZS5hdXRvcmVsZWFzZSgpOwogfQogCi1TdHJpbmcgc3RhbmRhcmRVc2VyQWdl
bnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lLCBjb25z
dCBTdHJpbmcmIGZ1bGxXZWJLaXRWZXJzaW9uU3RyaW5nKQorU3RyaW5nIHN0YW5kYXJkVXNlckFn
ZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSkKIHsK
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSB1c2VyIGFnZW50IG92ZXJyaWRlIGZv
ciBhbGwgV2ViS2l0IGNsaWVudHMuCiAgICAgQ0ZQcm9wZXJ0eUxpc3RSZWYgb3ZlcnJpZGUgPSBD
RlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKENGU1RSKCJVc2VyQWdlbnQiKSwgQ0ZTVFIoImNvbS5h
cHBsZS5XZWJGb3VuZGF0aW9uIikpOwpAQCAtODgsNyArODgsNyBAQCBTdHJpbmcgc3RhbmRhcmRV
c2VyQWdlbnRXaXRoQXBwbGljYXRpb25OCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBpbXBsZW1lbnQgdGhpcyB3aXRoIFN0cmluZyBhbmQvb3IgU3RyaW5nQnVpbGRlciBpbnN0ZWFk
LgotICAgIE5TU3RyaW5nICp3ZWJLaXRWZXJzaW9uID0gdXNlckFnZW50QnVuZGxlVmVyc2lvbkZy
b21GdWxsVmVyc2lvblN0cmluZyhmdWxsV2ViS2l0VmVyc2lvblN0cmluZyk7CisgICAgTlNTdHJp
bmcgKndlYktpdFZlcnNpb24gPSB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uKCk7CiAgICAgTlNTdHJp
bmcgKm9zTWFya2V0aW5nVmVyc2lvblN0cmluZyA9IHN5c3RlbU1hcmtldGluZ1ZlcnNpb25Gb3JV
c2VyQWdlbnRTdHJpbmcoKTsKICAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTW96aWxsYS81LjAgKCVA
OyBDUFUgJUAgJUAgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvJUAgKEtIVE1MLCBsaWtlIEdl
Y2tvKSIsIGRldmljZU5hbWVGb3JVc2VyQWdlbnQoKSwgb3NOYW1lRm9yVXNlckFnZW50KCksIG9z
TWFya2V0aW5nVmVyc2lvblN0cmluZywgd2ViS2l0VmVyc2lvbl07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9Vc2VyQWdlbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvVXNlckFnZW50TWFjLm1tCShyZXZpc2lvbiAyMjUzMjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9Vc2VyQWdlbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsMTAgKzM4
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlcnJvciBVbmtub3duIGFyY2hpdGVjdHVyZQog
I2VuZGlmCiAKLVN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29u
c3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZnVsbFdlYktpdFZlcnNp
b25TdHJpbmcpCitTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNv
bnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lKQogewogICAgIFN0cmluZyBvc1ZlcnNpb24gPSBz
eXN0ZW1NYXJrZXRpbmdWZXJzaW9uRm9yVXNlckFnZW50U3RyaW5nKCk7Ci0gICAgU3RyaW5nIHdl
YktpdFZlcnNpb25TdHJpbmcgPSB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxWZXJzaW9u
U3RyaW5nKGZ1bGxXZWJLaXRWZXJzaW9uU3RyaW5nKTsKKyAgICBTdHJpbmcgd2ViS2l0VmVyc2lv
blN0cmluZyA9IHVzZXJBZ2VudEJ1bmRsZVZlcnNpb24oKTsKIAogICAgIGlmIChhcHBsaWNhdGlv
bk5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxsYS81LjAg
KE1hY2ludG9zaDsgIiBQUk9DRVNTT1IgIiBNYWMgT1MgWCAiLCBvc1ZlcnNpb24sICIpIEFwcGxl
V2ViS2l0LyIsIHdlYktpdFZlcnNpb25TdHJpbmcsICIgKEtIVE1MLCBsaWtlIEdlY2tvKSIpOwpJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQ4MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMTItMDQgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTGltaXQgdXNlciBhZ2VudCB2ZXJz
aW9uaW5nIHRvIGFuIHVwcGVyIGJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODAzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NTUwNjE3
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOiBEb24ndCBwYXNzIHRoZSBXZWJLaXQgYnVuZGxlIHZl
cnNpb24gd2hlbgorICAgICAgICBjcmVhdGluIHRoZSBVc2VyIEFnZW50IHN0cmluZy4KKyAgICAg
ICAgKFdlYktpdDo6d2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
d2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisKIDIwMTctMTItMDQgIEZyZWRl
cmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2UgU2Nyb2xsaW5nVHJl
ZU5vZGU6OmVuY2xvc2luZ0ZyYW1lTm9kZSByZXR1cm4gdGhlIG5vZGUgaXRzZWxmIGZvciBmcmFt
ZSBub2RlcwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCShyZXZpc2lvbiAyMjUzMjkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTQgKzY4LDkgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CiAKLXN0YXRpYyBT
dHJpbmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpCi17Ci0gICAgcmV0dXJuIFtbTlNCdW5k
bGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1dlYlZpZXciKV0gb2JqZWN0
Rm9ySW5mb0RpY3Rpb25hcnlLZXk6KE5TU3RyaW5nICopa0NGQnVuZGxlVmVyc2lvbktleV07Ci19
Ci0KIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYg
YXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQogewotICAgIHJldHVybiBzdGFuZGFyZFVzZXJB
Z2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50LCB3ZWJL
aXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkpOworICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdp
dGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmdldElzU3BlYWtpbmcoYm9vbCYpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDIyNTMyOSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05MSwxNCArOTEsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1J
bml0aWFsaXplKCkKICAgICBzZXRTaG91bGRVc2VJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKGNs
aWVudEV4cGVjdHNMZWdhY3lJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKTsKIH0KIAotc3RhdGlj
IFN0cmluZyB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gW1tOU0J1
bmRsZSBidW5kbGVGb3JDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIldLVmlldyIpXSBvYmplY3RG
b3JJbmZvRGljdGlvbmFyeUtleTooTlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJzaW9uS2V5XTsKLX0K
LQogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBh
cHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7Ci0gICAgcmV0dXJuIHN0YW5kYXJkVXNlckFn
ZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQsIHdlYktp
dEJ1bmRsZVZlcnNpb25TdHJpbmcoKSk7CisgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0
aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Z2V0SXNTcGVha2luZyhib29sJiBpc1NwZWFraW5nKQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1MzI5KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTctMTItMDQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TGltaXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5nIHRvIGFuIHVwcGVyIGJvdW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzNjUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3
IF9zdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWU6XSk6IERvbid0IHBhc3MgdGhl
IFdlYktpdCBidW5kbGUgdmVyc2lvbiB3aGVuCisgICAgICAgIGNyZWF0aW4gdGhlIFVzZXIgQWdl
bnQgc3RyaW5nLgorICAgICAgICAod2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQu
CisKIDIwMTctMTEtMjkgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgdGhlIEltYWdlU291cmNlIGZyb20gdGhlIGNsYXNzIGhpZXJh
cmNoeSB0aGF0IGNvbm5lY3RzIEJpdG1hcEltYWdlIHRvIEltYWdlRnJhbWUKSW5kZXg6IFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIyNTMyOSkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTEzMiwxNCArMTEzMiw5IEBAIC0gKHZvaWQpX2FkZFRvQWxsV2ViVmlld3NTZXQK
IAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlByaXZhdGUpCiAKLXN0YXRpYyBTdHJpbmcg
d2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpCi17Ci0gICAgcmV0dXJuIFtbTlNCdW5kbGUgYnVu
ZGxlRm9yQ2xhc3M6W1dlYlZpZXcgY2xhc3NdXSBvYmplY3RGb3JJbmZvRGljdGlvbmFyeUtleToo
TlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJzaW9uS2V5XTsKLX0KLQogKyAoTlNTdHJpbmcgKilfc3Rh
bmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOihOU1N0cmluZyAqKWFwcGxpY2F0aW9u
TmFtZQogewotICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUo
YXBwbGljYXRpb25OYW1lLCB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkpOworICAgIHJldHVy
biBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lKTsK
IH0KIAogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQ4MykKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3
LTEyLTA0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExp
bWl0IHVzZXIgYWdlbnQgdmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zNDU1MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGZhc3QvZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1m
cm96ZW4uaHRtbDogQWRkZWQuCisKIDIwMTctMTItMDQgIE1zMmdlciAgPE1zMmdlckBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIFJlYmFzZWxpbmUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9pbnRlcmFjdGl2ZS1lbGVtZW50cy90aGUtZGlhbG9nLWVs
ZW1lbnQvZGlhbG9nLXNob3dNb2RhbC5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9u
YXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4tZXhwZWN0ZWQudHh0
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL25hdmlnYXRvci11c2VyQWdl
bnQtZnJvemVuLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitD
b25maXJtIFdlYktpdCBkb2VzIG5vdCByZXBvcnQgdmVyc2lvbnMgYWJvdmUgdGhlIGZyb3plbiBt
YXhpbXVtcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgTWFqb3IgdmVy
c2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4KK1BBU1MgTWlub3IgdmVyc2lvbiBudW1iZXIg
aXMgd2l0aGluIGJvdW5kcy4KK1BBU1MgVGlueSB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gYm91
bmRzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2Vu
dC1mcm96ZW4uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZp
Z2F0b3ItdXNlckFnZW50LWZyb3plbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcg
QEAKKzwhRE9DVFlQRSBodG1sPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+DQorPHNjcmlwdD4NCitkZXNjcmlwdGlv
bigiQ29uZmlybSBXZWJLaXQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb25zIGFib3ZlIHRoZSBmcm96
ZW4gbWF4aW11bXMuIik7DQorPC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxzY3JpcHQ+
DQorZnVuY3Rpb24gdGVzdFZlcnNpb24odXNlckFnZW50KQ0KK3sNCisgICAgdmFyIHN0YXJ0ID0g
dXNlckFnZW50LmluZGV4T2YoIkFwcGxlV2ViS2l0LyIpOw0KKyAgICBpZiAoc3RhcnQgPCAwKSB7
DQorICAgICAgICB0ZXN0RmFpbGVkKCJVc2VyIGFnZW50IGRpZCBub3QgY29udGFpbiBXZWJLaXQg
dmVyc2lvbi4iKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBzdGFydCArPSAx
MjsNCisNCisgICAgdmFyIGVuZCA9IHVzZXJBZ2VudC5pbmRleE9mKCIgIiwgc3RhcnQpOw0KKyAg
ICBpZiAoZW5kIDwgMCkgew0KKyAgICAgICAgdGVzdEZhaWxlZCgiQ291bGRuJ3QgZmluZCBlbmQg
b2YgdGhlIHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQor
ICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50LnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpOw0K
KyAgICBpZiAodmVyc2lvbiA9PSAiIikgew0KKyAgICAgICAgdGVzdEZhaWxlZCgiTWFsZm9ybWVk
IHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIA0KKyAg
ICB2YXIgdmVyc2lvbkNvbXBvbmVudHMgPSB2ZXJzaW9uLnNwbGl0KCcuJyk7DQorICAgIGlmICh2
ZXJzaW9uQ29tcG9uZW50cy5sZW5ndGggPT0gMCkgew0KKyAgICAgICAgdGVzdEZhaWxlZCgiTWFs
Zm9ybWVkIHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQor
ICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50c1swXSA8PSA2MDUpDQorICAgICAgICB0ZXN0UGFzc2Vk
KCJNYWpvciB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gYm91bmRzLiIpOw0KKyAgICBlbHNlDQor
ICAgICAgICB0ZXN0RmFpbGVkKCJNYWpvciB2ZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbkNv
bXBvbmVudHNbMF0pOw0KKw0KKyAgICBpZiAodmVyc2lvbkNvbXBvbmVudHMubGVuZ3RoIDwgMikN
CisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKHZlcnNpb25Db21wb25lbnRzWzBdIDwgNjA1
IHx8IHZlcnNpb25Db21wb25lbnRzWzFdIDw9IDEpDQorICAgICAgICB0ZXN0UGFzc2VkKCJNaW5v
ciB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gYm91bmRzLiIpOw0KKyAgICBlbHNlDQorICAgICAg
ICB0ZXN0RmFpbGVkKCJNaW5vciB2ZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbkNvbXBvbmVu
dHNbMV0pOw0KKw0KKyAgICBpZiAodmVyc2lvbkNvbXBvbmVudHMubGVuZ3RoIDwgMykNCisgICAg
ICAgIHJldHVybjsNCisNCisgICAgaWYgKHZlcnNpb25Db21wb25lbnRzWzBdIDwgNjA1IHx8IHZl
cnNpb25Db21wb25lbnRzWzFdIDwgMSB8fCB2ZXJzaW9uQ29tcG9uZW50c1syXSA8PSAxNSkNCisg
ICAgICAgIHRlc3RQYXNzZWQoIlRpbnkgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4i
KTsNCisgICAgZWxzZQ0KKyAgICAgICAgdGVzdEZhaWxlZCgiVGlueSB2ZXJzaW9uIG51bWJlciBp
cyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMl0pOw0KK30NCisNCisgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQ0KKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7DQorDQorICAgIHRlc3RW
ZXJzaW9uKG5hdmlnYXRvci51c2VyQWdlbnQpOw0KKzwvc2NyaXB0Pg0KKzwvYm9keT4NCis8L2h0
bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328485</attachid>
            <date>2017-12-05 12:45:06 -0800</date>
            <delta_ts>2017-12-05 14:24:38 -0800</delta_ts>
            <desc>Patch w/ Dan&apos;s improvements</desc>
            <filename>bug-180365-20171205124505.patch</filename>
            <type>text/plain</type>
            <size>16770</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTEyLTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQg
dmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1
MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
cmVlemUgdGhlIHZlcnNpb24gcmVwb3J0ZWQgYXMgVXNlciBBZ2VudCB0byBPUyAxMC4xMy40IChP
UyAxMS4zIG9uIGlPUykgYW5kIFdlYktpdCA2MDUuMS4xNQorICAgICAgICBmb3IgVXNlciBBZ2Vu
dCBwdXJwb3Nlcy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50
LWZyb3plbi5odG1sCisKKyAgICAgICAgKiBwYWdlL2NvY29hL1VzZXJBZ2VudC5oOgorICAgICAg
ICAqIHBhZ2UvY29jb2EvVXNlckFnZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6dmVyc2lvblBy
ZWRhdGVzRnJlZXplKTogSGVscGVyIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgZm9yIFZlcnNpb24g
MTAuMTMuMyBvciBvbGRlci4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbU1hcmtldGluZ1ZlcnNp
b25Gb3JVc2VyQWdlbnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50QnVuZGxl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjp1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNp
b25Gcm9tRnVsbFZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50
QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
cGFnZS9pb3MvVXNlckFnZW50SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2Vy
QWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKTogRG9uJ3QgdGFrZSB0aGUgV2ViS2l0IGJ1bmRsZSB2
ZXJzaW9uCisgICAgICAgIGFzIGFuIGFyZ3VtZW50LCBvciBwYXNzIGl0IHRvIHRoZSB1c2VyIGFn
ZW50IHN0cmluZyBnZW5lcmF0b3IuCisgICAgICAgICogcGFnZS9tYWMvVXNlckFnZW50TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1l
KTogRGl0dG8uIAorCiAyMDE3LTEyLTA1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbXBsZW1lbnQgc2V0dGluZyBvZiBzZXJ2aWNlIHdvcmtlciB0byBjbGll
bnQgaW4gU1dTZXJ2ZXIgd2l0aG91dCBnb2luZyB0byBXZWJQcm9jZXNzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMwLDEw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0YW5k
YXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJiB3ZWJraXRWZXJzaW9uU3RyaW5nKTsKK1dFQkNPUkVfRVhQT1JU
IFN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWUpOwogCiBTdHJpbmcgc3lzdGVtTWFya2V0aW5nVmVyc2lvbkZvclVz
ZXJBZ2VudFN0cmluZygpOwotU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNpb25Gcm9tRnVsbFZl
cnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJik7CitTdHJpbmcgdXNlckFnZW50QnVuZGxlVmVyc2lv
bigpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1tCShy
ZXZpc2lvbiAyMjU1MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIlVzZXJBZ2VudC5oIgogCi0jaW1wb3J0ICJTeXN0ZW1WZXJzaW9uLmgiCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU3RyaW5nIHN5c3RlbU1hcmtldGluZ1ZlcnNpb25Gb3JVc2VyQWdlbnRT
dHJpbmcoKQpAQCAtMzUsMzggKzMzLDIyIEBAIFN0cmluZyBzeXN0ZW1NYXJrZXRpbmdWZXJzaW9u
Rm9yVXNlckFnZW4KICAgICAvLyBVc2UgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBkb3RzIGJlY2F1
c2Ugd2hlbiB3ZSBmaXJzdCBhZGRlZCB0aGUgTWFjIE9TIFggdmVyc2lvbiB0byB0aGUgdXNlciBh
Z2VudCBzdHJpbmcKICAgICAvLyB3ZSB3ZXJlIGNvbmNlcm5lZCBhYm91dCBvbGQgREhUTUwgbGli
cmFyaWVzIGludGVycHJldGluZyAiNC4iIGFzIE5ldHNjYXBlIDQuIFRoYXQncyBubyBsb25nZXIg
YSBjb25jZXJuIGZvciB1cwogICAgIC8vIGJ1dCB3ZSdyZSBzdGlja2luZyB3aXRoIHRoZSB1bmRl
cnNjb3JlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBmb3JtYXQgdXNlZCBieSBvbGRlciB2
ZXJzaW9ucyBvZiBTYWZhcmkuCi0gICAgcmV0dXJuIFtzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkg
c3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiLiIgd2l0aFN0cmluZzpAIl8i
XTsKLX0KLQotc3RhdGljIE5TU3RyaW5nICp1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNpb25G
cm9tRnVsbFZlcnNpb24oTlNTdHJpbmcgKmZ1bGxXZWJLaXRWZXJzaW9uKQotewotICAgIC8vIElm
IHRoZSB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuIDMgZGlnaXRzIHRoZW4gdGhlIGxlYWRpbmcgZGln
aXRzIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBvZiB0aGUgT1MuIE91ciB1c2VyIGFnZW50Ci0gICAg
Ly8gc3RyaW5nIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgbGVhZGluZyBkaWdpdHMsIHNvIHN0cmlw
IHRoZW0gb2ZmIGFuZCByZXBvcnQgdGhlIHJlc3QgYXMgdGhlIHZlcnNpb24uIDxyZGFyOi8vcHJv
YmxlbS80OTk3NTQ3PgotICAgIE5TUmFuZ2Ugbm9uRGlnaXRSYW5nZSA9IFtmdWxsV2ViS2l0VmVy
c2lvbiByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpbW05TQ2hhcmFjdGVyU2V0IGRlY2ltYWxEaWdp
dENoYXJhY3RlclNldF0gaW52ZXJ0ZWRTZXRdXTsKLSAgICBpZiAobm9uRGlnaXRSYW5nZS5sb2Nh
dGlvbiA9PSBOU05vdEZvdW5kICYmIGZ1bGxXZWJLaXRWZXJzaW9uLmxlbmd0aCA+IDMpCi0gICAg
ICAgIHJldHVybiBbZnVsbFdlYktpdFZlcnNpb24gc3Vic3RyaW5nRnJvbUluZGV4OmZ1bGxXZWJL
aXRWZXJzaW9uLmxlbmd0aCAtIDNdOwotICAgIGlmIChub25EaWdpdFJhbmdlLmxvY2F0aW9uICE9
IE5TTm90Rm91bmQgJiYgbm9uRGlnaXRSYW5nZS5sb2NhdGlvbiA+IDMpCi0gICAgICAgIHJldHVy
biBbZnVsbFdlYktpdFZlcnNpb24gc3Vic3RyaW5nRnJvbUluZGV4Om5vbkRpZ2l0UmFuZ2UubG9j
YXRpb24gLSAzXTsKLSAgICByZXR1cm4gZnVsbFdlYktpdFZlcnNpb247CisjaWYgUExBVEZPUk0o
TUFDKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAg
cmV0dXJuICIxMF8xM180IjsKKyNlbGlmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTAxMjAwCisgICAgcmV0dXJuICIxMF8xMl82IjsKKyNlbHNlCisgICAgcmV0dXJuICIxMF8x
MV82IjsKKyNlbmRpZgorI2Vsc2UKKyAgICByZXR1cm4gIjExXzMiOworI2VuZGlmCiB9CiAKLVN0
cmluZyB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxWZXJzaW9uU3RyaW5nKGNvbnN0IFN0
cmluZyYgZnVsbFdlYktpdFZlcnNpb24pCitTdHJpbmcgdXNlckFnZW50QnVuZGxlVmVyc2lvbigp
CiB7Ci0gICAgLy8gV2UgaW5jbHVkZSBhdCBtb3N0IHRocmVlIGNvbXBvbmVudHMgb2YgdGhlIGJ1
bmRsZSB2ZXJzaW9uIGluIHRoZSB1c2VyIGFnZW50IHN0cmluZy4KLSAgICBOU1N0cmluZyAqYnVu
ZGxlVmVyc2lvbiA9IHVzZXJWaXNpYmxlV2ViS2l0QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lv
bihmdWxsV2ViS2l0VmVyc2lvbik7Ci0gICAgTlNTY2FubmVyICpzY2FubmVyID0gW05TU2Nhbm5l
ciBzY2FubmVyV2l0aFN0cmluZzpidW5kbGVWZXJzaW9uXTsKLSAgICBOU0ludGVnZXIgcGVyaW9k
Q291bnQgPSAwOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmICghW3NjYW5uZXIgc2Nh
blVwVG9TdHJpbmc6QCIuIiBpbnRvU3RyaW5nOm51bGxwdHJdIHx8IHNjYW5uZXIuaXNBdEVuZCkK
LSAgICAgICAgICAgIHJldHVybiBidW5kbGVWZXJzaW9uOwotCi0gICAgICAgIGlmICgrK3Blcmlv
ZENvdW50ID09IDMpCi0gICAgICAgICAgICByZXR1cm4gW2J1bmRsZVZlcnNpb24gc3Vic3RyaW5n
VG9JbmRleDpzY2FubmVyLnNjYW5Mb2NhdGlvbl07Ci0KLSAgICAgICAgKytzY2FubmVyLnNjYW5M
b2NhdGlvbjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
IjYwNS4xLjE1IjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvVXNlckFnZW50SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQkocmV2aXNpb24gMjI1NTI2KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9pb3MvVXNlckFnZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDcgKzc3
LDcgQEAgc3RhdGljIGlubGluZSBOU1N0cmluZyAqZGV2aWNlTmFtZUZvclVzZQogICAgIHJldHVy
biBuYW1lLmF1dG9yZWxlYXNlKCk7CiB9CiAKLVN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhB
cHBsaWNhdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUsIGNvbnN0IFN0cmlu
ZyYgZnVsbFdlYktpdFZlcnNpb25TdHJpbmcpCitTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRo
QXBwbGljYXRpb25OYW1lKGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lKQogewogICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIHVzZXIgYWdlbnQgb3ZlcnJpZGUgZm9yIGFsbCBX
ZWJLaXQgY2xpZW50cy4KICAgICBDRlByb3BlcnR5TGlzdFJlZiBvdmVycmlkZSA9IENGUHJlZmVy
ZW5jZXNDb3B5QXBwVmFsdWUoQ0ZTVFIoIlVzZXJBZ2VudCIpLCBDRlNUUigiY29tLmFwcGxlLldl
YkZvdW5kYXRpb24iKSk7CkBAIC04OCw3ICs4OCw3IEBAIFN0cmluZyBzdGFuZGFyZFVzZXJBZ2Vu
dFdpdGhBcHBsaWNhdGlvbk4KICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGltcGxl
bWVudCB0aGlzIHdpdGggU3RyaW5nIGFuZC9vciBTdHJpbmdCdWlsZGVyIGluc3RlYWQuCi0gICAg
TlNTdHJpbmcgKndlYktpdFZlcnNpb24gPSB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxW
ZXJzaW9uU3RyaW5nKGZ1bGxXZWJLaXRWZXJzaW9uU3RyaW5nKTsKKyAgICBOU1N0cmluZyAqd2Vi
S2l0VmVyc2lvbiA9IHVzZXJBZ2VudEJ1bmRsZVZlcnNpb24oKTsKICAgICBOU1N0cmluZyAqb3NN
YXJrZXRpbmdWZXJzaW9uU3RyaW5nID0gc3lzdGVtTWFya2V0aW5nVmVyc2lvbkZvclVzZXJBZ2Vu
dFN0cmluZygpOwogICAgIGlmIChhcHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJNb3ppbGxhLzUuMCAoJUA7IENQVSAl
QCAlQCBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC8lQCAoS0hUTUwsIGxpa2UgR2Vja28pIiwg
ZGV2aWNlTmFtZUZvclVzZXJBZ2VudCgpLCBvc05hbWVGb3JVc2VyQWdlbnQoKSwgb3NNYXJrZXRp
bmdWZXJzaW9uU3RyaW5nLCB3ZWJLaXRWZXJzaW9uXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1VzZXJBZ2VudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9Vc2VyQWdlbnRNYWMubW0JKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1VzZXJBZ2VudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCwxMCArMzgsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2Vycm9yIFVua25vd24gYXJjaGl0ZWN0dXJlCiAjZW5kaWYK
IAotU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJp
bmcmIGFwcGxpY2F0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBmdWxsV2ViS2l0VmVyc2lvblN0cmlu
ZykKK1N0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3Ry
aW5nJiBhcHBsaWNhdGlvbk5hbWUpCiB7CiAgICAgU3RyaW5nIG9zVmVyc2lvbiA9IHN5c3RlbU1h
cmtldGluZ1ZlcnNpb25Gb3JVc2VyQWdlbnRTdHJpbmcoKTsKLSAgICBTdHJpbmcgd2ViS2l0VmVy
c2lvblN0cmluZyA9IHVzZXJBZ2VudEJ1bmRsZVZlcnNpb25Gcm9tRnVsbFZlcnNpb25TdHJpbmco
ZnVsbFdlYktpdFZlcnNpb25TdHJpbmcpOworICAgIFN0cmluZyB3ZWJLaXRWZXJzaW9uU3RyaW5n
ID0gdXNlckFnZW50QnVuZGxlVmVyc2lvbigpOwogCiAgICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoTWFjaW50
b3NoOyAiIFBST0NFU1NPUiAiIE1hYyBPUyBYICIsIG9zVmVyc2lvbiwgIikgQXBwbGVXZWJLaXQv
Iiwgd2ViS2l0VmVyc2lvblN0cmluZywgIiAoS0hUTUwsIGxpa2UgR2Vja28pIik7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjI1NTI2KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0xMi0wNSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBMaW1pdCB1c2VyIGFnZW50IHZlcnNpb25pbmcg
dG8gYW4gdXBwZXIgYm91bmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MDM2NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzQ1NTA2MTc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
dGFuZGFyZFVzZXJBZ2VudCk6IERvbid0IHBhc3MgdGhlIFdlYktpdCBidW5kbGUgdmVyc2lvbiB3
aGVuCisgICAgICAgIGNyZWF0aW4gdGhlIFVzZXIgQWdlbnQgc3RyaW5nLgorICAgICAgICAoV2Vi
S2l0Ojp3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzdGFuZGFyZFVzZXJBZ2VudCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0Ojp3ZWJLaXRC
dW5kbGVWZXJzaW9uU3RyaW5nKTogRGVsZXRlZC4KKwogMjAxNy0xMi0wNSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHNldHRpbmcgb2Ygc2Vy
dmljZSB3b3JrZXIgdG8gY2xpZW50IGluIFNXU2VydmVyIHdpdGhvdXQgZ29pbmcgdG8gV2ViUHJv
Y2VzcwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tCShyZXZpc2lvbiAyMjU1MjYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsMTQgKzY4LDkgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9CiAKLXN0YXRpYyBTdHJp
bmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpCi17Ci0gICAgcmV0dXJuIFtbTlNCdW5kbGUg
YnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1dlYlZpZXciKV0gb2JqZWN0Rm9y
SW5mb0RpY3Rpb25hcnlLZXk6KE5TU3RyaW5nICopa0NGQnVuZGxlVmVyc2lvbktleV07Ci19Ci0K
IFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBw
bGljYXRpb25OYW1lRm9yVXNlckFnZW50KQogewotICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2Vu
dFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50LCB3ZWJLaXRC
dW5kbGVWZXJzaW9uU3RyaW5nKCkpOworICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhB
cHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmdldElzU3BlYWtpbmcoYm9vbCYpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJldmlzaW9uIDIyNTUyNikKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC05MSwxNCArOTEsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKICAgICBzZXRTaG91bGRVc2VJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKGNsaWVu
dEV4cGVjdHNMZWdhY3lJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKTsKIH0KIAotc3RhdGljIFN0
cmluZyB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gW1tOU0J1bmRs
ZSBidW5kbGVGb3JDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIldLVmlldyIpXSBvYmplY3RGb3JJ
bmZvRGljdGlvbmFyeUtleTooTlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJzaW9uS2V5XTsKLX0KLQog
U3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiBhcHBs
aWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7Ci0gICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50
V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQsIHdlYktpdEJ1
bmRsZVZlcnNpb25TdHJpbmcoKSk7CisgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFw
cGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6Z2V0SXNTcGVha2luZyhib29sJiBpc1NwZWFraW5nKQpJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NTI2KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTct
MTItMDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTGlt
aXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5nIHRvIGFuIHVwcGVyIGJvdW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzNjUKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9z
dGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWU6XSk6IERvbid0IHBhc3MgdGhlIFdl
YktpdCBidW5kbGUgdmVyc2lvbiB3aGVuCisgICAgICAgIGNyZWF0aW4gdGhlIFVzZXIgQWdlbnQg
c3RyaW5nLgorICAgICAgICAod2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisK
IDIwMTctMTItMDQgIERhdmlkIFF1ZXNhZGEgIDxkYXZpZF9xdWVzYWRhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgYSBjbGFzcyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbiBtYW5pZmVzdHMKSW5k
ZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9u
IDIyNTUyNikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTEzMiwxNCArMTEzMiw5IEBAIC0gKHZvaWQpX2FkZFRvQWxsV2Vi
Vmlld3NTZXQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlByaXZhdGUpCiAKLXN0YXRp
YyBTdHJpbmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpCi17Ci0gICAgcmV0dXJuIFtbTlNC
dW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dlYlZpZXcgY2xhc3NdXSBvYmplY3RGb3JJbmZvRGljdGlv
bmFyeUtleTooTlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJzaW9uS2V5XTsKLX0KLQogKyAoTlNTdHJp
bmcgKilfc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOihOU1N0cmluZyAqKWFw
cGxpY2F0aW9uTmFtZQogewotICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNh
dGlvbk5hbWUoYXBwbGljYXRpb25OYW1lLCB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkpOwor
ICAgIHJldHVybiBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRp
b25OYW1lKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUy
NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDE3LTEyLTA1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIExpbWl0IHVzZXIgYWdlbnQgdmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJv
emVuLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vbmF2aWdhdG9yLXVz
ZXJBZ2VudC1mcm96ZW4uaHRtbDogQWRkZWQuCisKIDIwMTctMTItMDUgIEFsaSBKdW1hICA8YWp1
bWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXaW5dIFNraXAgdGVzdHMgdGhhdCBkZXBlbmQg
b24gVUlTY3JpcHRDb250cm9sbGVyOjp6b29tVG9TY2FsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLWV4cGVj
dGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZpZ2F0b3It
dXNlckFnZW50LWZyb3plbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorQ29uZmlybSBXZWJLaXQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb25zIGFib3ZlIHRoZSBm
cm96ZW4gbWF4aW11bXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIE1h
am9yIHZlcnNpb24gbnVtYmVyIGlzIHdpdGhpbiBib3VuZHMuCitQQVNTIE1pbm9yIHZlcnNpb24g
bnVtYmVyIGlzIHdpdGhpbiBib3VuZHMuCitQQVNTIFRpbnkgdmVyc2lvbiBudW1iZXIgaXMgd2l0
aGluIGJvdW5kcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50LWZy
b3plbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL25hdmlnYXRvci11
c2VyQWdlbnQtZnJvemVuLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY3IEBACis8IURPQ1RZUEUgaHRtbD4NCis8aHRtbD4NCis8aGVhZD4NCis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0Pg0KKzxzY3JpcHQ+DQorZGVz
Y3JpcHRpb24oIkNvbmZpcm0gV2ViS2l0IGRvZXMgbm90IHJlcG9ydCB2ZXJzaW9ucyBhYm92ZSB0
aGUgZnJvemVuIG1heGltdW1zLiIpOw0KKzwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keT4NCis8
c2NyaXB0Pg0KK2Z1bmN0aW9uIHRlc3RWZXJzaW9uKHVzZXJBZ2VudCkNCit7DQorICAgIHZhciBz
dGFydCA9IHVzZXJBZ2VudC5pbmRleE9mKCJBcHBsZVdlYktpdC8iKTsNCisgICAgaWYgKHN0YXJ0
IDwgMCkgew0KKyAgICAgICAgdGVzdEZhaWxlZCgiVXNlciBhZ2VudCBkaWQgbm90IGNvbnRhaW4g
V2ViS2l0IHZlcnNpb24uIik7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisgICAgc3Rh
cnQgKz0gMTI7DQorDQorICAgIHZhciBlbmQgPSB1c2VyQWdlbnQuaW5kZXhPZigiICIsIHN0YXJ0
KTsNCisgICAgaWYgKGVuZCA8IDApIHsNCisgICAgICAgIHRlc3RGYWlsZWQoIkNvdWxkbid0IGZp
bmQgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZy4iKTsNCisgICAgICAgIHJldHVybjsNCisgICAg
fQ0KKw0KKyAgICB2YXIgdmVyc2lvbiA9IHVzZXJBZ2VudC5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0
YXJ0KTsNCisgICAgaWYgKHZlcnNpb24gPT0gIiIpIHsNCisgICAgICAgIHRlc3RGYWlsZWQoIk1h
bGZvcm1lZCB2ZXJzaW9uIHN0cmluZy4iKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAg
ICANCisgICAgdmFyIHZlcnNpb25Db21wb25lbnRzID0gdmVyc2lvbi5zcGxpdCgnLicpOw0KKyAg
ICBpZiAodmVyc2lvbkNvbXBvbmVudHMubGVuZ3RoID09IDApIHsNCisgICAgICAgIHRlc3RGYWls
ZWQoIk1hbGZvcm1lZCB2ZXJzaW9uIHN0cmluZy4iKTsNCisgICAgICAgIHJldHVybjsNCisgICAg
fQ0KKw0KKyAgICBpZiAodmVyc2lvbkNvbXBvbmVudHNbMF0gPD0gNjA1KQ0KKyAgICAgICAgdGVz
dFBhc3NlZCgiTWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4iKTsNCisgICAg
ZWxzZQ0KKyAgICAgICAgdGVzdEZhaWxlZCgiTWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgIiArIHZl
cnNpb25Db21wb25lbnRzWzBdKTsNCisNCisgICAgaWYgKHZlcnNpb25Db21wb25lbnRzLmxlbmd0
aCA8IDIpDQorICAgICAgICByZXR1cm47DQorDQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50c1sw
XSA8IDYwNSB8fCB2ZXJzaW9uQ29tcG9uZW50c1sxXSA8PSAxKQ0KKyAgICAgICAgdGVzdFBhc3Nl
ZCgiTWlub3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4iKTsNCisgICAgZWxzZQ0K
KyAgICAgICAgdGVzdEZhaWxlZCgiTWlub3IgdmVyc2lvbiBudW1iZXIgaXMgIiArIHZlcnNpb25D
b21wb25lbnRzWzFdKTsNCisNCisgICAgaWYgKHZlcnNpb25Db21wb25lbnRzLmxlbmd0aCA8IDMp
DQorICAgICAgICByZXR1cm47DQorDQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50c1swXSA8IDYw
NSB8fCB2ZXJzaW9uQ29tcG9uZW50c1sxXSA8IDEgfHwgdmVyc2lvbkNvbXBvbmVudHNbMl0gPD0g
MTUpDQorICAgICAgICB0ZXN0UGFzc2VkKCJUaW55IHZlcnNpb24gbnVtYmVyIGlzIHdpdGhpbiBi
b3VuZHMuIik7DQorICAgIGVsc2UNCisgICAgICAgIHRlc3RGYWlsZWQoIlRpbnkgdmVyc2lvbiBu
dW1iZXIgaXMgIiArIHZlcnNpb25Db21wb25lbnRzWzJdKTsNCit9DQorDQorICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikNCisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOw0KKw0KKyAg
ICB0ZXN0VmVyc2lvbihuYXZpZ2F0b3IudXNlckFnZW50KTsNCis8L3NjcmlwdD4NCis8L2JvZHk+
DQorPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328500</attachid>
            <date>2017-12-05 14:24:40 -0800</date>
            <delta_ts>2017-12-05 17:16:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180365-20171205142439.patch</filename>
            <type>text/plain</type>
            <size>16829</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTEyLTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQg
dmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1
MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
cmVlemUgdGhlIHZlcnNpb24gcmVwb3J0ZWQgYXMgVXNlciBBZ2VudCB0byBPUyAxMC4xMy40IChP
UyAxMS4zIG9uIGlPUykgYW5kIFdlYktpdCA2MDUuMS4xNQorICAgICAgICBmb3IgVXNlciBBZ2Vu
dCBwdXJwb3Nlcy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50
LWZyb3plbi5odG1sCisKKyAgICAgICAgKiBwYWdlL2NvY29hL1VzZXJBZ2VudC5oOgorICAgICAg
ICAqIHBhZ2UvY29jb2EvVXNlckFnZW50Lm1tOgorICAgICAgICAoV2ViQ29yZTo6dmVyc2lvblBy
ZWRhdGVzRnJlZXplKTogSGVscGVyIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgZm9yIFZlcnNpb24g
MTAuMTMuMyBvciBvbGRlci4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbU1hcmtldGluZ1ZlcnNp
b25Gb3JVc2VyQWdlbnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50QnVuZGxl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjp1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNp
b25Gcm9tRnVsbFZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dXNlckFnZW50
QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgICog
cGFnZS9pb3MvVXNlckFnZW50SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2Vy
QWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKTogRG9uJ3QgdGFrZSB0aGUgV2ViS2l0IGJ1bmRsZSB2
ZXJzaW9uCisgICAgICAgIGFzIGFuIGFyZ3VtZW50LCBvciBwYXNzIGl0IHRvIHRoZSB1c2VyIGFn
ZW50IHN0cmluZyBnZW5lcmF0b3IuCisgICAgICAgICogcGFnZS9tYWMvVXNlckFnZW50TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6c3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1l
KTogRGl0dG8uIAorCiAyMDE3LTEyLTA1ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbXBsZW1lbnQgc2V0dGluZyBvZiBzZXJ2aWNlIHdvcmtlciB0byBjbGll
bnQgaW4gU1dTZXJ2ZXIgd2l0aG91dCBnb2luZyB0byBXZWJQcm9jZXNzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTAgKzMwLDEw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0YW5k
YXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJiB3ZWJraXRWZXJzaW9uU3RyaW5nKTsKK1dFQkNPUkVfRVhQT1JU
IFN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3RyaW5n
JiBhcHBsaWNhdGlvbk5hbWUpOwogCiBTdHJpbmcgc3lzdGVtTWFya2V0aW5nVmVyc2lvbkZvclVz
ZXJBZ2VudFN0cmluZygpOwotU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNpb25Gcm9tRnVsbFZl
cnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJik7CitTdHJpbmcgdXNlckFnZW50QnVuZGxlVmVyc2lv
bigpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvVXNlckFnZW50Lm1tCShy
ZXZpc2lvbiAyMjU1MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIlVzZXJBZ2VudC5oIgogCi0jaW1wb3J0ICJTeXN0ZW1WZXJzaW9uLmgiCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU3RyaW5nIHN5c3RlbU1hcmtldGluZ1ZlcnNpb25Gb3JVc2VyQWdlbnRT
dHJpbmcoKQpAQCAtMzUsMzggKzMzLDIyIEBAIFN0cmluZyBzeXN0ZW1NYXJrZXRpbmdWZXJzaW9u
Rm9yVXNlckFnZW4KICAgICAvLyBVc2UgdW5kZXJzY29yZXMgaW5zdGVhZCBvZiBkb3RzIGJlY2F1
c2Ugd2hlbiB3ZSBmaXJzdCBhZGRlZCB0aGUgTWFjIE9TIFggdmVyc2lvbiB0byB0aGUgdXNlciBh
Z2VudCBzdHJpbmcKICAgICAvLyB3ZSB3ZXJlIGNvbmNlcm5lZCBhYm91dCBvbGQgREhUTUwgbGli
cmFyaWVzIGludGVycHJldGluZyAiNC4iIGFzIE5ldHNjYXBlIDQuIFRoYXQncyBubyBsb25nZXIg
YSBjb25jZXJuIGZvciB1cwogICAgIC8vIGJ1dCB3ZSdyZSBzdGlja2luZyB3aXRoIHRoZSB1bmRl
cnNjb3JlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBmb3JtYXQgdXNlZCBieSBvbGRlciB2
ZXJzaW9ucyBvZiBTYWZhcmkuCi0gICAgcmV0dXJuIFtzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uKCkg
c3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiLiIgd2l0aFN0cmluZzpAIl8i
XTsKLX0KLQotc3RhdGljIE5TU3RyaW5nICp1c2VyVmlzaWJsZVdlYktpdEJ1bmRsZVZlcnNpb25G
cm9tRnVsbFZlcnNpb24oTlNTdHJpbmcgKmZ1bGxXZWJLaXRWZXJzaW9uKQotewotICAgIC8vIElm
IHRoZSB2ZXJzaW9uIGlzIGxvbmdlciB0aGFuIDMgZGlnaXRzIHRoZW4gdGhlIGxlYWRpbmcgZGln
aXRzIHJlcHJlc2VudCB0aGUgdmVyc2lvbiBvZiB0aGUgT1MuIE91ciB1c2VyIGFnZW50Ci0gICAg
Ly8gc3RyaW5nIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgbGVhZGluZyBkaWdpdHMsIHNvIHN0cmlw
IHRoZW0gb2ZmIGFuZCByZXBvcnQgdGhlIHJlc3QgYXMgdGhlIHZlcnNpb24uIDxyZGFyOi8vcHJv
YmxlbS80OTk3NTQ3PgotICAgIE5TUmFuZ2Ugbm9uRGlnaXRSYW5nZSA9IFtmdWxsV2ViS2l0VmVy
c2lvbiByYW5nZU9mQ2hhcmFjdGVyRnJvbVNldDpbW05TQ2hhcmFjdGVyU2V0IGRlY2ltYWxEaWdp
dENoYXJhY3RlclNldF0gaW52ZXJ0ZWRTZXRdXTsKLSAgICBpZiAobm9uRGlnaXRSYW5nZS5sb2Nh
dGlvbiA9PSBOU05vdEZvdW5kICYmIGZ1bGxXZWJLaXRWZXJzaW9uLmxlbmd0aCA+IDMpCi0gICAg
ICAgIHJldHVybiBbZnVsbFdlYktpdFZlcnNpb24gc3Vic3RyaW5nRnJvbUluZGV4OmZ1bGxXZWJL
aXRWZXJzaW9uLmxlbmd0aCAtIDNdOwotICAgIGlmIChub25EaWdpdFJhbmdlLmxvY2F0aW9uICE9
IE5TTm90Rm91bmQgJiYgbm9uRGlnaXRSYW5nZS5sb2NhdGlvbiA+IDMpCi0gICAgICAgIHJldHVy
biBbZnVsbFdlYktpdFZlcnNpb24gc3Vic3RyaW5nRnJvbUluZGV4Om5vbkRpZ2l0UmFuZ2UubG9j
YXRpb24gLSAzXTsKLSAgICByZXR1cm4gZnVsbFdlYktpdFZlcnNpb247CisjaWYgUExBVEZPUk0o
TUFDKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwCisgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiMTBfMTNfNCIpOworI2VsaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIxMF8xMl82
Iik7CisjZWxzZQorICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIjEwXzExXzYiKTsKKyNlbmRpZgor
I2Vsc2UKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIxMV8zIik7CisjZW5kaWYKIH0KIAotU3Ry
aW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNpb25Gcm9tRnVsbFZlcnNpb25TdHJpbmcoY29uc3QgU3Ry
aW5nJiBmdWxsV2ViS2l0VmVyc2lvbikKK1N0cmluZyB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uKCkK
IHsKLSAgICAvLyBXZSBpbmNsdWRlIGF0IG1vc3QgdGhyZWUgY29tcG9uZW50cyBvZiB0aGUgYnVu
ZGxlIHZlcnNpb24gaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nLgotICAgIE5TU3RyaW5nICpidW5k
bGVWZXJzaW9uID0gdXNlclZpc2libGVXZWJLaXRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxWZXJzaW9u
KGZ1bGxXZWJLaXRWZXJzaW9uKTsKLSAgICBOU1NjYW5uZXIgKnNjYW5uZXIgPSBbTlNTY2FubmVy
IHNjYW5uZXJXaXRoU3RyaW5nOmJ1bmRsZVZlcnNpb25dOwotICAgIE5TSW50ZWdlciBwZXJpb2RD
b3VudCA9IDA7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKCFbc2Nhbm5lciBzY2Fu
VXBUb1N0cmluZzpAIi4iIGludG9TdHJpbmc6bnVsbHB0cl0gfHwgc2Nhbm5lci5pc0F0RW5kKQot
ICAgICAgICAgICAgcmV0dXJuIGJ1bmRsZVZlcnNpb247Ci0KLSAgICAgICAgaWYgKCsrcGVyaW9k
Q291bnQgPT0gMykKLSAgICAgICAgICAgIHJldHVybiBbYnVuZGxlVmVyc2lvbiBzdWJzdHJpbmdU
b0luZGV4OnNjYW5uZXIuc2NhbkxvY2F0aW9uXTsKLQotICAgICAgICArK3NjYW5uZXIuc2Nhbkxv
Y2F0aW9uOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIjYwNS4xLjE1Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9Vc2VyQWdlbnRJT1MubW0JKHJldmlzaW9uIDIyNTUy
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgTlNTdHJpbmcgKmRldmljZU5hbWVGb3JV
c2UKICAgICByZXR1cm4gbmFtZS5hdXRvcmVsZWFzZSgpOwogfQogCi1TdHJpbmcgc3RhbmRhcmRV
c2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1l
LCBjb25zdCBTdHJpbmcmIGZ1bGxXZWJLaXRWZXJzaW9uU3RyaW5nKQorU3RyaW5nIHN0YW5kYXJk
VXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFt
ZSkKIHsKICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSB1c2VyIGFnZW50IG92ZXJy
aWRlIGZvciBhbGwgV2ViS2l0IGNsaWVudHMuCiAgICAgQ0ZQcm9wZXJ0eUxpc3RSZWYgb3ZlcnJp
ZGUgPSBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKENGU1RSKCJVc2VyQWdlbnQiKSwgQ0ZTVFIo
ImNvbS5hcHBsZS5XZWJGb3VuZGF0aW9uIikpOwpAQCAtODgsNyArODgsNyBAQCBTdHJpbmcgc3Rh
bmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRoIFN0cmluZyBhbmQvb3IgU3RyaW5nQnVpbGRlciBp
bnN0ZWFkLgotICAgIE5TU3RyaW5nICp3ZWJLaXRWZXJzaW9uID0gdXNlckFnZW50QnVuZGxlVmVy
c2lvbkZyb21GdWxsVmVyc2lvblN0cmluZyhmdWxsV2ViS2l0VmVyc2lvblN0cmluZyk7CisgICAg
TlNTdHJpbmcgKndlYktpdFZlcnNpb24gPSB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uKCk7CiAgICAg
TlNTdHJpbmcgKm9zTWFya2V0aW5nVmVyc2lvblN0cmluZyA9IHN5c3RlbU1hcmtldGluZ1ZlcnNp
b25Gb3JVc2VyQWdlbnRTdHJpbmcoKTsKICAgICBpZiAoYXBwbGljYXRpb25OYW1lLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiTW96aWxsYS81
LjAgKCVAOyBDUFUgJUAgJUAgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvJUAgKEtIVE1MLCBs
aWtlIEdlY2tvKSIsIGRldmljZU5hbWVGb3JVc2VyQWdlbnQoKSwgb3NOYW1lRm9yVXNlckFnZW50
KCksIG9zTWFya2V0aW5nVmVyc2lvblN0cmluZywgd2ViS2l0VmVyc2lvbl07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9Vc2VyQWdlbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvVXNlckFnZW50TWFjLm1tCShyZXZpc2lvbiAyMjU1MjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9Vc2VyQWdlbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgs
MTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlcnJvciBVbmtub3duIGFyY2hpdGVj
dHVyZQogI2VuZGlmCiAKLVN0cmluZyBzdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5h
bWUoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZnVsbFdlYktp
dFZlcnNpb25TdHJpbmcpCitTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25O
YW1lKGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lKQogewogICAgIFN0cmluZyBvc1ZlcnNp
b24gPSBzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uRm9yVXNlckFnZW50U3RyaW5nKCk7Ci0gICAgU3Ry
aW5nIHdlYktpdFZlcnNpb25TdHJpbmcgPSB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxW
ZXJzaW9uU3RyaW5nKGZ1bGxXZWJLaXRWZXJzaW9uU3RyaW5nKTsKKyAgICBTdHJpbmcgd2ViS2l0
VmVyc2lvblN0cmluZyA9IHVzZXJBZ2VudEJ1bmRsZVZlcnNpb24oKTsKIAogICAgIGlmIChhcHBs
aWNhdGlvbk5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiTW96aWxs
YS81LjAgKE1hY2ludG9zaDsgIiBQUk9DRVNTT1IgIiBNYWMgT1MgWCAiLCBvc1ZlcnNpb24sICIp
IEFwcGxlV2ViS2l0LyIsIHdlYktpdFZlcnNpb25TdHJpbmcsICIgKEtIVE1MLCBsaWtlIEdlY2tv
KSIpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMTItMDUgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgTGltaXQgdXNlciBhZ2Vu
dCB2ZXJzaW9uaW5nIHRvIGFuIHVwcGVyIGJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0
NTUwNjE3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOiBEb24ndCBwYXNzIHRoZSBXZWJLaXQgYnVu
ZGxlIHZlcnNpb24gd2hlbgorICAgICAgICBjcmVhdGluIHRoZSBVc2VyIEFnZW50IHN0cmluZy4K
KyAgICAgICAgKFdlYktpdDo6d2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6d2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZyk6IERlbGV0ZWQuCisKIDIwMTctMTItMDUg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBz
ZXR0aW5nIG9mIHNlcnZpY2Ugd29ya2VyIHRvIGNsaWVudCBpbiBTV1NlcnZlciB3aXRob3V0IGdv
aW5nIHRvIFdlYlByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQ
YWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjI1NTI2KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDE0
ICs2OCw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewogfQog
Ci1zdGF0aWMgU3RyaW5nIHdlYktpdEJ1bmRsZVZlcnNpb25TdHJpbmcoKQotewotICAgIHJldHVy
biBbW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tXZWJWaWV3
IildIG9iamVjdEZvckluZm9EaWN0aW9uYXJ5S2V5OihOU1N0cmluZyAqKWtDRkJ1bmRsZVZlcnNp
b25LZXldOwotfQotCiBTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25z
dCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCkKIHsKLSAgICByZXR1cm4gc3Rh
bmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGFwcGxpY2F0aW9uTmFtZUZvclVzZXJB
Z2VudCwgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpKTsKKyAgICByZXR1cm4gc3RhbmRhcmRV
c2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRJc1NwZWFraW5nKGJvb2wmKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCShyZXZpc2lv
biAyMjU1MjYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTEsMTQgKzkxLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgc2V0U2hvdWxkVXNlSW1wbGljaXRSdWJiZXJCYW5k
Q29udHJvbChjbGllbnRFeHBlY3RzTGVnYWN5SW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbCk7CiB9
CiAKLXN0YXRpYyBTdHJpbmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpCi17Ci0gICAgcmV0
dXJuIFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1ZpZXci
KV0gb2JqZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6KE5TU3RyaW5nICopa0NGQnVuZGxlVmVyc2lv
bktleV07Ci19Ci0KIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNvbnN0
IFN0cmluZyYgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQogewotICAgIHJldHVybiBzdGFu
ZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFn
ZW50LCB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkpOworICAgIHJldHVybiBzdGFuZGFyZFVz
ZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldElzU3BlYWtpbmcoYm9vbCYgaXNTcGVha2luZykK
SW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUyNikKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE3LTEyLTA1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgor
CisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQgdmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAg
KCtbV2ViVmlldyBfc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOl0pOiBEb24n
dCBwYXNzIHRoZSBXZWJLaXQgYnVuZGxlIHZlcnNpb24gd2hlbgorICAgICAgICBjcmVhdGluZyB0
aGUgVXNlciBBZ2VudCBzdHJpbmcuCisgICAgICAgICh3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5n
KTogRGVsZXRlZC4KKwogMjAxNy0xMi0wNCAgRGF2aWQgUXVlc2FkYSAgPGRhdmlkX3F1ZXNhZGFA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIGNsYXNzIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9u
IG1hbmlmZXN0cwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkocmV2aXNpb24gMjI1NTI2KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMyLDE0ICsxMTMyLDkgQEAgLSAodm9p
ZClfYWRkVG9BbGxXZWJWaWV3c1NldAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2ViUHJp
dmF0ZSkKIAotc3RhdGljIFN0cmluZyB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkKLXsKLSAg
ICByZXR1cm4gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViVmlldyBjbGFzc11dIG9iamVj
dEZvckluZm9EaWN0aW9uYXJ5S2V5OihOU1N0cmluZyAqKWtDRkJ1bmRsZVZlcnNpb25LZXldOwot
fQotCiArIChOU1N0cmluZyAqKV9zdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWU6
KE5TU3RyaW5nICopYXBwbGljYXRpb25OYW1lCiB7Ci0gICAgcmV0dXJuIHN0YW5kYXJkVXNlckFn
ZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWUsIHdlYktpdEJ1bmRsZVZlcnNp
b25TdHJpbmcoKSk7CisgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9u
TmFtZShhcHBsaWNhdGlvbk5hbWUpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI1NTI2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTItMDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgTGltaXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5nIHRvIGFuIHVw
cGVyIGJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODAzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vbmF2aWdhdG9y
LXVzZXJBZ2VudC1mcm96ZW4tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9uYXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi5odG1sOiBBZGRlZC4KKwogMjAxNy0xMi0wNSAg
QWxpIEp1bWEgIDxhanVtYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dpbl0gU2tpcCB0ZXN0
cyB0aGF0IGRlcGVuZCBvbiBVSVNjcmlwdENvbnRyb2xsZXI6Onpvb21Ub1NjYWxlCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2Vu
dC1mcm96ZW4tZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACitDb25maXJtIFdlYktpdCBkb2VzIG5vdCByZXBvcnQgdmVyc2lv
bnMgYWJvdmUgdGhlIGZyb3plbiBtYXhpbXVtcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgTWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4KK1BBU1Mg
TWlub3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4KK1BBU1MgVGlueSB2ZXJzaW9u
IG51bWJlciBpcyB3aXRoaW4gYm91bmRzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL25hdmlnYXRv
ci11c2VyQWdlbnQtZnJvemVuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKzwhRE9DVFlQRSBodG1sPg0KKzxodG1sPg0KKzxoZWFk
Pg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+DQor
PHNjcmlwdD4NCitkZXNjcmlwdGlvbigiQ29uZmlybSBXZWJLaXQgZG9lcyBub3QgcmVwb3J0IHZl
cnNpb25zIGFib3ZlIHRoZSBmcm96ZW4gbWF4aW11bXMuIik7DQorPC9zY3JpcHQ+DQorPC9oZWFk
Pg0KKzxib2R5Pg0KKzxzY3JpcHQ+DQorZnVuY3Rpb24gdGVzdFZlcnNpb24odXNlckFnZW50KQ0K
K3sNCisgICAgdmFyIHN0YXJ0ID0gdXNlckFnZW50LmluZGV4T2YoIkFwcGxlV2ViS2l0LyIpOw0K
KyAgICBpZiAoc3RhcnQgPCAwKSB7DQorICAgICAgICB0ZXN0RmFpbGVkKCJVc2VyIGFnZW50IGRp
ZCBub3QgY29udGFpbiBXZWJLaXQgdmVyc2lvbi4iKTsNCisgICAgICAgIHJldHVybjsNCisgICAg
fQ0KKw0KKyAgICBzdGFydCArPSAxMjsNCisNCisgICAgdmFyIGVuZCA9IHVzZXJBZ2VudC5pbmRl
eE9mKCIgIiwgc3RhcnQpOw0KKyAgICBpZiAoZW5kIDwgMCkgew0KKyAgICAgICAgdGVzdEZhaWxl
ZCgiQ291bGRuJ3QgZmluZCBlbmQgb2YgdGhlIHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAgICAg
cmV0dXJuOw0KKyAgICB9DQorDQorICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50LnN1YnN0cihz
dGFydCwgZW5kIC0gc3RhcnQpOw0KKyAgICBpZiAodmVyc2lvbiA9PSAiIikgew0KKyAgICAgICAg
dGVzdEZhaWxlZCgiTWFsZm9ybWVkIHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAgICAgcmV0dXJu
Ow0KKyAgICB9DQorICAgIA0KKyAgICB2YXIgdmVyc2lvbkNvbXBvbmVudHMgPSB2ZXJzaW9uLnNw
bGl0KCcuJyk7DQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50cy5sZW5ndGggPT0gMCkgew0KKyAg
ICAgICAgdGVzdEZhaWxlZCgiTWFsZm9ybWVkIHZlcnNpb24gc3RyaW5nLiIpOw0KKyAgICAgICAg
cmV0dXJuOw0KKyAgICB9DQorDQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50c1swXSA8PSA2MDUp
DQorICAgICAgICB0ZXN0UGFzc2VkKCJNYWpvciB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gYm91
bmRzLiIpOw0KKyAgICBlbHNlDQorICAgICAgICB0ZXN0RmFpbGVkKCJNYWpvciB2ZXJzaW9uIG51
bWJlciBpcyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMF0pOw0KKw0KKyAgICBpZiAodmVyc2lvbkNv
bXBvbmVudHMubGVuZ3RoIDwgMikNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKHZlcnNp
b25Db21wb25lbnRzWzBdIDwgNjA1IHx8IHZlcnNpb25Db21wb25lbnRzWzFdIDw9IDEpDQorICAg
ICAgICB0ZXN0UGFzc2VkKCJNaW5vciB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gYm91bmRzLiIp
Ow0KKyAgICBlbHNlDQorICAgICAgICB0ZXN0RmFpbGVkKCJNaW5vciB2ZXJzaW9uIG51bWJlciBp
cyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMV0pOw0KKw0KKyAgICBpZiAodmVyc2lvbkNvbXBvbmVu
dHMubGVuZ3RoIDwgMykNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYgKHZlcnNpb25Db21w
b25lbnRzWzBdIDwgNjA1IHx8IHZlcnNpb25Db21wb25lbnRzWzFdIDwgMSB8fCB2ZXJzaW9uQ29t
cG9uZW50c1syXSA8PSAxNSkNCisgICAgICAgIHRlc3RQYXNzZWQoIlRpbnkgdmVyc2lvbiBudW1i
ZXIgaXMgd2l0aGluIGJvdW5kcy4iKTsNCisgICAgZWxzZQ0KKyAgICAgICAgdGVzdEZhaWxlZCgi
VGlueSB2ZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbkNvbXBvbmVudHNbMl0pOw0KK30NCisN
CitpZiAod2luZG93LnRlc3RSdW5uZXIpDQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOw0K
Kw0KK3Rlc3RWZXJzaW9uKG5hdmlnYXRvci51c2VyQWdlbnQpOw0KKzwvc2NyaXB0Pg0KKzwvYm9k
eT4NCis8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328533</attachid>
            <date>2017-12-05 17:16:24 -0800</date>
            <delta_ts>2017-12-05 17:59:57 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-180365-20171205171624.patch</filename>
            <type>text/plain</type>
            <size>16710</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTUyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTEyLTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdlbnQg
dmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDU1
MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAgICAg
RnJlZXplIHRoZSB2ZXJzaW9uIHJlcG9ydGVkIGFzIFVzZXIgQWdlbnQgdG8gT1MgMTAuMTMuNCAo
T1MgMTEuMyBvbiBpT1MpIGFuZCBXZWJLaXQgNjA1LjEuMTUKKyAgICAgICAgZm9yIFVzZXIgQWdl
bnQgcHVycG9zZXMuCisKKyAgICAgICAgVGVzdDogZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2Vu
dC1mcm96ZW4uaHRtbAorCisgICAgICAgICogcGFnZS9jb2NvYS9Vc2VyQWdlbnQuaDoKKyAgICAg
ICAgKiBwYWdlL2NvY29hL1VzZXJBZ2VudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnNpb25Q
cmVkYXRlc0ZyZWV6ZSk6IEhlbHBlciBmdW5jdGlvbi4gUmV0dXJucyB0cnVlIGZvciBWZXJzaW9u
IDEwLjEzLjMgb3Igb2xkZXIuCisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1NYXJrZXRpbmdWZXJz
aW9uRm9yVXNlckFnZW50U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnVzZXJBZ2VudEJ1bmRs
ZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6dXNlclZpc2libGVXZWJLaXRCdW5kbGVWZXJz
aW9uRnJvbUZ1bGxWZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVzZXJBZ2Vu
dEJ1bmRsZVZlcnNpb25Gcm9tRnVsbFZlcnNpb25TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAq
IHBhZ2UvaW9zL1VzZXJBZ2VudElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN0YW5kYXJkVXNl
ckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZSk6IERvbid0IHRha2UgdGhlIFdlYktpdCBidW5kbGUg
dmVyc2lvbgorICAgICAgICBhcyBhbiBhcmd1bWVudCwgb3IgcGFzcyBpdCB0byB0aGUgdXNlciBh
Z2VudCBzdHJpbmcgZ2VuZXJhdG9yLgorICAgICAgICAqIHBhZ2UvbWFjL1VzZXJBZ2VudE1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFt
ZSk6IERpdHRvLiAKKwogMjAxNy0xMi0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5j
b20+CiAKICAgICAgICAgSW1wbGVtZW50IHNldHRpbmcgb2Ygc2VydmljZSB3b3JrZXIgdG8gY2xp
ZW50IGluIFNXU2VydmVyIHdpdGhvdXQgZ29pbmcgdG8gV2ViUHJvY2VzcwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9jb2NvYS9Vc2VyQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5oCShyZXZpc2lvbiAyMjU1MjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMCwx
MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGFu
ZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYgd2Via2l0VmVyc2lvblN0cmluZyk7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKGNvbnN0IFN0cmlu
ZyYgYXBwbGljYXRpb25OYW1lKTsKIAogU3RyaW5nIHN5c3RlbU1hcmtldGluZ1ZlcnNpb25Gb3JV
c2VyQWdlbnRTdHJpbmcoKTsKLVN0cmluZyB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxW
ZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYpOworU3RyaW5nIHVzZXJBZ2VudEJ1bmRsZVZlcnNp
b24oKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1VzZXJBZ2VudC5tbQko
cmV2aXNpb24gMjI1NTI2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9Vc2VyQWdlbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJVc2VyQWdlbnQuaCIKIAotI2ltcG9ydCAiU3lzdGVtVmVyc2lvbi5oIgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFN0cmluZyBzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uRm9yVXNlckFnZW50
U3RyaW5nKCkKQEAgLTM1LDM4ICszMywyMiBAQCBTdHJpbmcgc3lzdGVtTWFya2V0aW5nVmVyc2lv
bkZvclVzZXJBZ2VuCiAgICAgLy8gVXNlIHVuZGVyc2NvcmVzIGluc3RlYWQgb2YgZG90cyBiZWNh
dXNlIHdoZW4gd2UgZmlyc3QgYWRkZWQgdGhlIE1hYyBPUyBYIHZlcnNpb24gdG8gdGhlIHVzZXIg
YWdlbnQgc3RyaW5nCiAgICAgLy8gd2Ugd2VyZSBjb25jZXJuZWQgYWJvdXQgb2xkIERIVE1MIGxp
YnJhcmllcyBpbnRlcnByZXRpbmcgIjQuIiBhcyBOZXRzY2FwZSA0LiBUaGF0J3Mgbm8gbG9uZ2Vy
IGEgY29uY2VybiBmb3IgdXMKICAgICAvLyBidXQgd2UncmUgc3RpY2tpbmcgd2l0aCB0aGUgdW5k
ZXJzY29yZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZm9ybWF0IHVzZWQgYnkgb2xkZXIg
dmVyc2lvbnMgb2YgU2FmYXJpLgotICAgIHJldHVybiBbc3lzdGVtTWFya2V0aW5nVmVyc2lvbigp
IHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIi4iIHdpdGhTdHJpbmc6QCJf
Il07Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqdXNlclZpc2libGVXZWJLaXRCdW5kbGVWZXJzaW9u
RnJvbUZ1bGxWZXJzaW9uKE5TU3RyaW5nICpmdWxsV2ViS2l0VmVyc2lvbikKLXsKLSAgICAvLyBJ
ZiB0aGUgdmVyc2lvbiBpcyBsb25nZXIgdGhhbiAzIGRpZ2l0cyB0aGVuIHRoZSBsZWFkaW5nIGRp
Z2l0cyByZXByZXNlbnQgdGhlIHZlcnNpb24gb2YgdGhlIE9TLiBPdXIgdXNlciBhZ2VudAotICAg
IC8vIHN0cmluZyBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGxlYWRpbmcgZGlnaXRzLCBzbyBzdHJp
cCB0aGVtIG9mZiBhbmQgcmVwb3J0IHRoZSByZXN0IGFzIHRoZSB2ZXJzaW9uLiA8cmRhcjovL3By
b2JsZW0vNDk5NzU0Nz4KLSAgICBOU1JhbmdlIG5vbkRpZ2l0UmFuZ2UgPSBbZnVsbFdlYktpdFZl
cnNpb24gcmFuZ2VPZkNoYXJhY3RlckZyb21TZXQ6W1tOU0NoYXJhY3RlclNldCBkZWNpbWFsRGln
aXRDaGFyYWN0ZXJTZXRdIGludmVydGVkU2V0XV07Ci0gICAgaWYgKG5vbkRpZ2l0UmFuZ2UubG9j
YXRpb24gPT0gTlNOb3RGb3VuZCAmJiBmdWxsV2ViS2l0VmVyc2lvbi5sZW5ndGggPiAzKQotICAg
ICAgICByZXR1cm4gW2Z1bGxXZWJLaXRWZXJzaW9uIHN1YnN0cmluZ0Zyb21JbmRleDpmdWxsV2Vi
S2l0VmVyc2lvbi5sZW5ndGggLSAzXTsKLSAgICBpZiAobm9uRGlnaXRSYW5nZS5sb2NhdGlvbiAh
PSBOU05vdEZvdW5kICYmIG5vbkRpZ2l0UmFuZ2UubG9jYXRpb24gPiAzKQotICAgICAgICByZXR1
cm4gW2Z1bGxXZWJLaXRWZXJzaW9uIHN1YnN0cmluZ0Zyb21JbmRleDpub25EaWdpdFJhbmdlLmxv
Y2F0aW9uIC0gM107Ci0gICAgcmV0dXJuIGZ1bGxXZWJLaXRWZXJzaW9uOworI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMAorICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIjEwXzEzXzQiKTsKKyNlbGlmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiMTBfMTJf
NiIpOworI2Vsc2UKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCIxMF8xMV82Iik7CisjZW5kaWYK
KyNlbHNlCisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiMTFfMyIpOworI2VuZGlmCiB9CiAKLVN0
cmluZyB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uRnJvbUZ1bGxWZXJzaW9uU3RyaW5nKGNvbnN0IFN0
cmluZyYgZnVsbFdlYktpdFZlcnNpb24pCitTdHJpbmcgdXNlckFnZW50QnVuZGxlVmVyc2lvbigp
CiB7Ci0gICAgLy8gV2UgaW5jbHVkZSBhdCBtb3N0IHRocmVlIGNvbXBvbmVudHMgb2YgdGhlIGJ1
bmRsZSB2ZXJzaW9uIGluIHRoZSB1c2VyIGFnZW50IHN0cmluZy4KLSAgICBOU1N0cmluZyAqYnVu
ZGxlVmVyc2lvbiA9IHVzZXJWaXNpYmxlV2ViS2l0QnVuZGxlVmVyc2lvbkZyb21GdWxsVmVyc2lv
bihmdWxsV2ViS2l0VmVyc2lvbik7Ci0gICAgTlNTY2FubmVyICpzY2FubmVyID0gW05TU2Nhbm5l
ciBzY2FubmVyV2l0aFN0cmluZzpidW5kbGVWZXJzaW9uXTsKLSAgICBOU0ludGVnZXIgcGVyaW9k
Q291bnQgPSAwOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGlmICghW3NjYW5uZXIgc2Nh
blVwVG9TdHJpbmc6QCIuIiBpbnRvU3RyaW5nOm51bGxwdHJdIHx8IHNjYW5uZXIuaXNBdEVuZCkK
LSAgICAgICAgICAgIHJldHVybiBidW5kbGVWZXJzaW9uOwotCi0gICAgICAgIGlmICgrK3Blcmlv
ZENvdW50ID09IDMpCi0gICAgICAgICAgICByZXR1cm4gW2J1bmRsZVZlcnNpb24gc3Vic3RyaW5n
VG9JbmRleDpzY2FubmVyLnNjYW5Mb2NhdGlvbl07Ci0KLSAgICAgICAgKytzY2FubmVyLnNjYW5M
b2NhdGlvbjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCI2MDUuMS4xNSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9Vc2VyQWdlbnRJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvVXNlckFnZW50SU9TLm1tCShyZXZpc2lvbiAyMjU1
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9Vc2VyQWdlbnRJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNzcsNyArNzcsNyBAQCBzdGF0aWMgaW5saW5lIE5TU3RyaW5nICpkZXZpY2VOYW1lRm9y
VXNlCiAgICAgcmV0dXJuIG5hbWUuYXV0b3JlbGVhc2UoKTsKIH0KIAotU3RyaW5nIHN0YW5kYXJk
VXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJiBmdWxsV2ViS2l0VmVyc2lvblN0cmluZykKK1N0cmluZyBzdGFuZGFy
ZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5h
bWUpCiB7CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgdXNlciBhZ2VudCBvdmVy
cmlkZSBmb3IgYWxsIFdlYktpdCBjbGllbnRzLgogICAgIENGUHJvcGVydHlMaXN0UmVmIG92ZXJy
aWRlID0gQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShDRlNUUigiVXNlckFnZW50IiksIENGU1RS
KCJjb20uYXBwbGUuV2ViRm91bmRhdGlvbiIpKTsKQEAgLTg4LDcgKzg4LDcgQEAgU3RyaW5nIHN0
YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTgogICAgIH0KIAogICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaW1wbGVtZW50IHRoaXMgd2l0aCBTdHJpbmcgYW5kL29yIFN0cmluZ0J1aWxkZXIg
aW5zdGVhZC4KLSAgICBOU1N0cmluZyAqd2ViS2l0VmVyc2lvbiA9IHVzZXJBZ2VudEJ1bmRsZVZl
cnNpb25Gcm9tRnVsbFZlcnNpb25TdHJpbmcoZnVsbFdlYktpdFZlcnNpb25TdHJpbmcpOworICAg
IE5TU3RyaW5nICp3ZWJLaXRWZXJzaW9uID0gdXNlckFnZW50QnVuZGxlVmVyc2lvbigpOwogICAg
IE5TU3RyaW5nICpvc01hcmtldGluZ1ZlcnNpb25TdHJpbmcgPSBzeXN0ZW1NYXJrZXRpbmdWZXJz
aW9uRm9yVXNlckFnZW50U3RyaW5nKCk7CiAgICAgaWYgKGFwcGxpY2F0aW9uTmFtZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIk1vemlsbGEv
NS4wICglQDsgQ1BVICVAICVAIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LyVAIChLSFRNTCwg
bGlrZSBHZWNrbykiLCBkZXZpY2VOYW1lRm9yVXNlckFnZW50KCksIG9zTmFtZUZvclVzZXJBZ2Vu
dCgpLCBvc01hcmtldGluZ1ZlcnNpb25TdHJpbmcsIHdlYktpdFZlcnNpb25dOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvVXNlckFnZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL1VzZXJBZ2VudE1hYy5tbQkocmV2aXNpb24gMjI1NTI2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVXNlckFnZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4
LDEwICszOCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZXJyb3IgVW5rbm93biBhcmNoaXRl
Y3R1cmUKICNlbmRpZgogCi1TdHJpbmcgc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25O
YW1lKGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lLCBjb25zdCBTdHJpbmcmIGZ1bGxXZWJL
aXRWZXJzaW9uU3RyaW5nKQorU3RyaW5nIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9u
TmFtZShjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSkKIHsKICAgICBTdHJpbmcgb3NWZXJz
aW9uID0gc3lzdGVtTWFya2V0aW5nVmVyc2lvbkZvclVzZXJBZ2VudFN0cmluZygpOwotICAgIFN0
cmluZyB3ZWJLaXRWZXJzaW9uU3RyaW5nID0gdXNlckFnZW50QnVuZGxlVmVyc2lvbkZyb21GdWxs
VmVyc2lvblN0cmluZyhmdWxsV2ViS2l0VmVyc2lvblN0cmluZyk7CisgICAgU3RyaW5nIHdlYktp
dFZlcnNpb25TdHJpbmcgPSB1c2VyQWdlbnRCdW5kbGVWZXJzaW9uKCk7CiAKICAgICBpZiAoYXBw
bGljYXRpb25OYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIk1vemls
bGEvNS4wIChNYWNpbnRvc2g7ICIgUFJPQ0VTU09SICIgTWFjIE9TIFggIiwgb3NWZXJzaW9uLCAi
KSBBcHBsZVdlYktpdC8iLCB3ZWJLaXRWZXJzaW9uU3RyaW5nLCAiIChLSFRNTCwgbGlrZSBHZWNr
bykiKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU1MjYpCisrKyBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTEyLTA1ICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIExpbWl0IHVzZXIgYWdl
bnQgdmVyc2lvbmluZyB0byBhbiB1cHBlciBib3VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwMzY1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
NDU1MDYxNz4KKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCk6IERvbid0IHBhc3MgdGhlIFdlYktpdCBi
dW5kbGUgdmVyc2lvbiB3aGVuCisgICAgICAgIGNyZWF0aW4gdGhlIFVzZXIgQWdlbnQgc3RyaW5n
LgorICAgICAgICAoV2ViS2l0Ojp3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCk6IERpdHRvLgorICAgICAgICAo
V2ViS2l0Ojp3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKTogRGVsZXRlZC4KKwogMjAxNy0xMi0w
NSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50
IHNldHRpbmcgb2Ygc2VydmljZSB3b3JrZXIgdG8gY2xpZW50IGluIFNXU2VydmVyIHdpdGhvdXQg
Z29pbmcgdG8gV2ViUHJvY2VzcwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMjU1MjYpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgs
MTQgKzY4LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CiB9
CiAKLXN0YXRpYyBTdHJpbmcgd2ViS2l0QnVuZGxlVmVyc2lvblN0cmluZygpCi17Ci0gICAgcmV0
dXJuIFtbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1dlYlZp
ZXciKV0gb2JqZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6KE5TU3RyaW5nICopa0NGQnVuZGxlVmVy
c2lvbktleV07Ci19Ci0KIFN0cmluZyBXZWJQYWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KGNv
bnN0IFN0cmluZyYgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQogewotICAgIHJldHVybiBz
dGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNl
ckFnZW50LCB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkpOworICAgIHJldHVybiBzdGFuZGFy
ZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldElzU3BlYWtpbmcoYm9vbCYpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJldmlz
aW9uIDIyNTUyNikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MSwxNCArOTEsOSBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKICAgICBzZXRTaG91bGRVc2VJbXBsaWNpdFJ1YmJlckJh
bmRDb250cm9sKGNsaWVudEV4cGVjdHNMZWdhY3lJbXBsaWNpdFJ1YmJlckJhbmRDb250cm9sKTsK
IH0KIAotc3RhdGljIFN0cmluZyB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkKLXsKLSAgICBy
ZXR1cm4gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpOU0NsYXNzRnJvbVN0cmluZyhAIldLVmll
dyIpXSBvYmplY3RGb3JJbmZvRGljdGlvbmFyeUtleTooTlNTdHJpbmcgKilrQ0ZCdW5kbGVWZXJz
aW9uS2V5XTsKLX0KLQogU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29u
c3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpCiB7Ci0gICAgcmV0dXJuIHN0
YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2Vy
QWdlbnQsIHdlYktpdEJ1bmRsZVZlcnNpb25TdHJpbmcoKSk7CisgICAgcmV0dXJuIHN0YW5kYXJk
VXNlckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0SXNTcGVha2luZyhib29sJiBpc1NwZWFraW5n
KQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1NTI2KQorKysg
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTctMTItMDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgTGltaXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5nIHRvIGFuIHVwcGVyIGJvdW5k
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzNjUK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAg
ICAgKCtbV2ViVmlldyBfc3RhbmRhcmRVc2VyQWdlbnRXaXRoQXBwbGljYXRpb25OYW1lOl0pOiBE
b24ndCBwYXNzIHRoZSBXZWJLaXQgYnVuZGxlIHZlcnNpb24gd2hlbgorICAgICAgICBjcmVhdGlu
ZyB0aGUgVXNlciBBZ2VudCBzdHJpbmcuCisgICAgICAgICh3ZWJLaXRCdW5kbGVWZXJzaW9uU3Ry
aW5nKTogRGVsZXRlZC4KKwogMjAxNy0xMi0wNCAgRGF2aWQgUXVlc2FkYSAgPGRhdmlkX3F1ZXNh
ZGFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIGNsYXNzIGZvciBwYXJzaW5nIGFwcGxpY2F0
aW9uIG1hbmlmZXN0cwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQkocmV2aXNpb24gMjI1NTI2KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMyLDE0ICsxMTMyLDkgQEAgLSAo
dm9pZClfYWRkVG9BbGxXZWJWaWV3c1NldAogCiBAaW1wbGVtZW50YXRpb24gV2ViVmlldyAoV2Vi
UHJpdmF0ZSkKIAotc3RhdGljIFN0cmluZyB3ZWJLaXRCdW5kbGVWZXJzaW9uU3RyaW5nKCkKLXsK
LSAgICByZXR1cm4gW1tOU0J1bmRsZSBidW5kbGVGb3JDbGFzczpbV2ViVmlldyBjbGFzc11dIG9i
amVjdEZvckluZm9EaWN0aW9uYXJ5S2V5OihOU1N0cmluZyAqKWtDRkJ1bmRsZVZlcnNpb25LZXld
OwotfQotCiArIChOU1N0cmluZyAqKV9zdGFuZGFyZFVzZXJBZ2VudFdpdGhBcHBsaWNhdGlvbk5h
bWU6KE5TU3RyaW5nICopYXBwbGljYXRpb25OYW1lCiB7Ci0gICAgcmV0dXJuIHN0YW5kYXJkVXNl
ckFnZW50V2l0aEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWUsIHdlYktpdEJ1bmRsZVZl
cnNpb25TdHJpbmcoKSk7CisgICAgcmV0dXJuIHN0YW5kYXJkVXNlckFnZW50V2l0aEFwcGxpY2F0
aW9uTmFtZShhcHBsaWNhdGlvbk5hbWUpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjI1NTI2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMTItMDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgTGltaXQgdXNlciBhZ2VudCB2ZXJzaW9uaW5nIHRvIGFu
IHVwcGVyIGJvdW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODAzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM0NTUwNjE3PgorCisgICAgICAg
IFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAgICAqIGZhc3QvZG9tL25hdmln
YXRvci11c2VyQWdlbnQtZnJvemVuLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4uaHRtbDogQWRkZWQuCisKIDIwMTctMTIt
MDUgIEFsaSBKdW1hICA8YWp1bWFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXaW5dIFNraXAg
dGVzdHMgdGhhdCBkZXBlbmQgb24gVUlTY3JpcHRDb250cm9sbGVyOjp6b29tVG9TY2FsZQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4tZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL25hdmlnYXRvci11c2Vy
QWdlbnQtZnJvemVuLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9uYXZpZ2F0b3ItdXNlckFnZW50LWZyb3plbi1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorQ29uZmlybSBXZWJLaXQgZG9lcyBub3QgcmVwb3J0IHZl
cnNpb25zIGFib3ZlIHRoZSBmcm96ZW4gbWF4aW11bXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIE1ham9yIHZlcnNpb24gbnVtYmVyIGlzIHdpdGhpbiBib3VuZHMuCitQ
QVNTIE1pbm9yIHZlcnNpb24gbnVtYmVyIGlzIHdpdGhpbiBib3VuZHMuCitQQVNTIFRpbnkgdmVy
c2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9uYXZp
Z2F0b3ItdXNlckFnZW50LWZyb3plbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL25hdmlnYXRvci11c2VyQWdlbnQtZnJvemVuLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vbmF2aWdhdG9yLXVzZXJBZ2VudC1mcm96ZW4uaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgaHRtbD4NCis8aHRtbD4NCis8
aGVhZD4NCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0
Pg0KKzxzY3JpcHQ+DQorZGVzY3JpcHRpb24oIkNvbmZpcm0gV2ViS2l0IGRvZXMgbm90IHJlcG9y
dCB2ZXJzaW9ucyBhYm92ZSB0aGUgZnJvemVuIG1heGltdW1zLiIpOw0KKzwvc2NyaXB0Pg0KKzwv
aGVhZD4NCis8Ym9keT4NCis8c2NyaXB0Pg0KK2Z1bmN0aW9uIHRlc3RWZXJzaW9uKHVzZXJBZ2Vu
dCkNCit7DQorICAgIHZhciBzdGFydCA9IHVzZXJBZ2VudC5pbmRleE9mKCJBcHBsZVdlYktpdC8i
KTsNCisgICAgaWYgKHN0YXJ0IDwgMCkgew0KKyAgICAgICAgdGVzdEZhaWxlZCgiVXNlciBhZ2Vu
dCBkaWQgbm90IGNvbnRhaW4gV2ViS2l0IHZlcnNpb24uIik7DQorICAgICAgICByZXR1cm47DQor
ICAgIH0NCisNCisgICAgc3RhcnQgKz0gMTI7DQorDQorICAgIHZhciBlbmQgPSB1c2VyQWdlbnQu
aW5kZXhPZigiICIsIHN0YXJ0KTsNCisgICAgaWYgKGVuZCA8IDApIHsNCisgICAgICAgIHRlc3RG
YWlsZWQoIkNvdWxkbid0IGZpbmQgZW5kIG9mIHRoZSB2ZXJzaW9uIHN0cmluZy4iKTsNCisgICAg
ICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICB2YXIgdmVyc2lvbiA9IHVzZXJBZ2VudC5zdWJz
dHIoc3RhcnQsIGVuZCAtIHN0YXJ0KTsNCisgICAgaWYgKHZlcnNpb24gPT0gIiIpIHsNCisgICAg
ICAgIHRlc3RGYWlsZWQoIk1hbGZvcm1lZCB2ZXJzaW9uIHN0cmluZy4iKTsNCisgICAgICAgIHJl
dHVybjsNCisgICAgfQ0KKyAgICANCisgICAgdmFyIHZlcnNpb25Db21wb25lbnRzID0gdmVyc2lv
bi5zcGxpdCgnLicpOw0KKyAgICBpZiAodmVyc2lvbkNvbXBvbmVudHNbMF0gPD0gNjA1KQ0KKyAg
ICAgICAgdGVzdFBhc3NlZCgiTWFqb3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4i
KTsNCisgICAgZWxzZQ0KKyAgICAgICAgdGVzdEZhaWxlZCgiTWFqb3IgdmVyc2lvbiBudW1iZXIg
aXMgIiArIHZlcnNpb25Db21wb25lbnRzWzBdKTsNCisNCisgICAgaWYgKHZlcnNpb25Db21wb25l
bnRzLmxlbmd0aCA8IDIpDQorICAgICAgICByZXR1cm47DQorDQorICAgIGlmICh2ZXJzaW9uQ29t
cG9uZW50c1swXSA8IDYwNSB8fCB2ZXJzaW9uQ29tcG9uZW50c1sxXSA8PSAxKQ0KKyAgICAgICAg
dGVzdFBhc3NlZCgiTWlub3IgdmVyc2lvbiBudW1iZXIgaXMgd2l0aGluIGJvdW5kcy4iKTsNCisg
ICAgZWxzZQ0KKyAgICAgICAgdGVzdEZhaWxlZCgiTWlub3IgdmVyc2lvbiBudW1iZXIgaXMgIiAr
IHZlcnNpb25Db21wb25lbnRzWzFdKTsNCisNCisgICAgaWYgKHZlcnNpb25Db21wb25lbnRzLmxl
bmd0aCA8IDMpDQorICAgICAgICByZXR1cm47DQorDQorICAgIGlmICh2ZXJzaW9uQ29tcG9uZW50
c1swXSA8IDYwNSB8fCB2ZXJzaW9uQ29tcG9uZW50c1sxXSA8IDEgfHwgdmVyc2lvbkNvbXBvbmVu
dHNbMl0gPD0gMTUpDQorICAgICAgICB0ZXN0UGFzc2VkKCJUaW55IHZlcnNpb24gbnVtYmVyIGlz
IHdpdGhpbiBib3VuZHMuIik7DQorICAgIGVsc2UNCisgICAgICAgIHRlc3RGYWlsZWQoIlRpbnkg
dmVyc2lvbiBudW1iZXIgaXMgIiArIHZlcnNpb25Db21wb25lbnRzWzJdKTsNCit9DQorDQoraWYg
KHdpbmRvdy50ZXN0UnVubmVyKQ0KKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsNCisNCit0
ZXN0VmVyc2lvbihuYXZpZ2F0b3IudXNlckFnZW50KTsNCis8L3NjcmlwdD4NCis8L2JvZHk+DQor
PC9odG1sPg0K
</data>

          </attachment>
      

    </bug>

</bugzilla>