<?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>209782</bug_id>
          
          <creation_ts>2020-03-30 15:12:09 -0700</creation_ts>
          <short_desc>[ECMA-402] Properly implement BigInt.prototype.toLocaleString</short_desc>
          <delta_ts>2020-04-10 20:59:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=180671</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shane Carr">sffc</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>andy</cc>
    
    <cc>chi187</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>sffc</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1635771</commentid>
    <comment_count>0</comment_count>
    <who name="Shane Carr">sffc</who>
    <bug_when>2020-03-30 15:12:09 -0700</bug_when>
    <thetext>V8 and SpiderMonkey support BigInt.prototype.toLocaleString as well as passing a BigInt into Intl.NumberFormat.prototype.format.  You cannot do this in WebKit; this will lead to broken web sites and/or reduced performance for WebKit users.

ICU4C provides bindings that accept arbitrary decimal strings.  Fixing this bug is a matter of updating JSC to call those functions.

BigInt umbrella bug: https://bugs.webkit.org/show_bug.cgi?id=179001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635836</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-30 16:39:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/61079783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640305</commentid>
    <comment_count>2</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 12:25:26 -0700</bug_when>
    <thetext>(Adjusting title slightly since we do have a 262-only version of this method.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640421</commentid>
    <comment_count>3</comment_count>
      <attachid>396134</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 16:40:57 -0700</bug_when>
    <thetext>Created attachment 396134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640425</commentid>
    <comment_count>4</comment_count>
      <attachid>396134</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 16:58:29 -0700</bug_when>
    <thetext>Comment on attachment 396134
Patch

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

&gt; Source/JavaScriptCore/runtime/IntlNumberFormat.cpp:368
&gt; +    Vector&lt;UChar, 32&gt; buffer(32);

This line is copied as-is from the Number path; we could change it, though I don&apos;t have a better suggestion.

Unlike the Number case, we do have a string length to work with, but:
1. The string length is generally not long enough, because we might be inserting commas
2. The string length could actually be way *too* long in certain cases
   (e.g., 1000000000n.toLocaleString(&apos;en&apos;, { notation: &apos;compact&apos; }) is &quot;1B&quot;, though we don&apos;t support that option yet)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640428</commentid>
    <comment_count>5</comment_count>
      <attachid>396134</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-10 17:12:50 -0700</bug_when>
    <thetext>Comment on attachment 396134
Patch

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

&gt; Source/JavaScriptCore/runtime/BigIntPrototype.cpp:102
&gt; +        return throwVMTypeError(globalObject, scope, &quot;&apos;this&apos; value must be a BigInt or BigIntObject&quot;_s);

Do we have test cases for this?

&gt; Source/JavaScriptCore/runtime/BigIntPrototype.cpp:126
&gt; +        return throwVMTypeError(globalObject, scope, &quot;&apos;this&apos; value must be a BigInt or BigIntObject&quot;_s);

I don’t see any test cases for this.

&gt; Source/JavaScriptCore/runtime/BigIntPrototype.cpp:128
&gt; +    IntlNumberFormat* numberFormat = IntlNumberFormat::create(vm, globalObject-&gt;numberFormatStructure());

JavaScriptCore is a whole other world, but if I was writing this in elsewhere in WebKIt I would suggest auto rather  than writing the typename here.

&gt; Source/JavaScriptCore/runtime/IntlNumberFormat.cpp:374
&gt; +    auto string = value-&gt;toString(globalObject, 10);
&gt; +    RETURN_IF_EXCEPTION(scope, { });
&gt; +
&gt; +    UErrorCode status = U_ZERO_ERROR;
&gt; +    Vector&lt;UChar, 32&gt; buffer(32);
&gt; +    auto length = unum_formatDecimal(m_numberFormat.get(), string.utf8().data(), string.length(), buffer.data(), buffer.size(), nullptr, &amp;status);
&gt; +    if (status == U_BUFFER_OVERFLOW_ERROR) {
&gt; +        buffer.grow(length);
&gt; +        status = U_ZERO_ERROR;
&gt; +        unum_formatDecimal(m_numberFormat.get(), string.utf8().data(), string.length(), buffer.data(), length, nullptr, &amp;status);
&gt; +    }

Seems wasteful here to first make a WTF::String that is guaranteed to be all ASCII, then call UTF-8, allocating a WTF::CString, and even doing it a second time if the result is more than 32 characters.

It’s not typical to write WTF::String code that depends on LChar vs. UChar, but I think here we could use characters8() here because we are guaranteed that JSBigInt::toString returns a Latin-1 string.

Also, it’s a bad pattern to use string.utf8().data() with string.length(); if the string had any non-ASCII characters, then the length would be the length of the Latin-1, not the length of the UTF-8 (which is longer). Irrelevant, since we should not be using utf8().

If we cared about performance we could make a function on JSBigInt that puts the data into a vector with inline capacity instead of a string. Related to bug 18067.

&gt; Source/JavaScriptCore/runtime/IntlNumberFormat.cpp:376
&gt; +        return throwException(globalObject, scope, createError(globalObject, &quot;Failed to format a BigInt.&quot;_s));

I don’t see any test cases for this. Maybe because there is actually no real case where this could fail, and this is effectively dead code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640431</commentid>
    <comment_count>6</comment_count>
      <attachid>396134</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-10 17:16:54 -0700</bug_when>
    <thetext>Comment on attachment 396134
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/BigIntPrototype.cpp:128
&gt;&gt; +    IntlNumberFormat* numberFormat = IntlNumberFormat::create(vm, globalObject-&gt;numberFormatStructure());
&gt; 
&gt; JavaScriptCore is a whole other world, but if I was writing this in elsewhere in WebKIt I would suggest auto rather  than writing the typename here.

While that&apos;s somewhat true we try to follow WebKit&apos;s conventions! While I was originally against it, these days I think as long as the statement (or next one or two statements) contains the name of the class somewhere it&apos;s better to use auto. So I would also use auto here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640437</commentid>
    <comment_count>7</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 17:41:41 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; &gt; Source/JavaScriptCore/runtime/IntlNumberFormat.cpp:376
&gt; &gt; +        return throwException(globalObject, scope, createError(globalObject, &quot;Failed to format a BigInt.&quot;_s));
&gt; 
&gt; I don’t see any test cases for this. Maybe because there is actually no real
&gt; case where this could fail, and this is effectively dead code?

This can only occur if ICU has an internal error. It appears that V8 and SM each have a special error message used across all such cases (of which there are a great many):
https://github.com/v8/v8/blob/master/src/common/message-template.h#L25
https://searchfox.org/mozilla-central/source/js/src/js.msg#536

Perhaps we should consolidate accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640441</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-10 17:43:31 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #7)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; &gt; Source/JavaScriptCore/runtime/IntlNumberFormat.cpp:376
&gt; &gt; &gt; +        return throwException(globalObject, scope, createError(globalObject, &quot;Failed to format a BigInt.&quot;_s));
&gt; &gt; 
&gt; &gt; I don’t see any test cases for this. Maybe because there is actually no real
&gt; &gt; case where this could fail, and this is effectively dead code?
&gt; 
&gt; This can only occur if ICU has an internal error. It appears that V8 and SM
&gt; each have a special error message used across all such cases (of which there
&gt; are a great many):
&gt; https://github.com/v8/v8/blob/master/src/common/message-template.h#L25
&gt; https://searchfox.org/mozilla-central/source/js/src/js.msg#536
&gt; 
&gt; Perhaps we should consolidate accordingly.

Seems like a good idea to me. Can you file a bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640444</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-10 17:47:25 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #7)
&gt; This can only occur if ICU has an internal error.

Sure I understood that.

It’s an interesting hypothetical. In general we don’t want to have code paths that we have never tested. Maybe we should just crash if ICU has an internal error? Not sure it&apos;s valuable to report it to the webpage. Do we have any reason to believe an internal ICU error is a real possibility?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640447</commentid>
    <comment_count>10</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 17:58:25 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; (In reply to Ross Kirsling from comment #7)
&gt; &gt; This can only occur if ICU has an internal error.
&gt; 
&gt; Sure I understood that.
&gt; 
&gt; It’s an interesting hypothetical. In general we don’t want to have code
&gt; paths that we have never tested. Maybe we should just crash if ICU has an
&gt; internal error? Not sure it&apos;s valuable to report it to the webpage. Do we
&gt; have any reason to believe an internal ICU error is a real possibility?

This particular case appears to have been hit in V8 such that changes were needed in ICU itself:
https://github.com/v8/v8/blob/master/src/objects/js-number-format.cc#L1264

It&apos;s a good question though. It&apos;s easy to say what others are doing but much harder to say definitively what the right thing to do is. We have at least 20 existing U_FAILURE checks in each of WTF, JSC, and WebCore, but it appears that just JSC is choosing to throw a JS error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640452</commentid>
    <comment_count>11</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 18:12:12 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #8)
&gt; Seems like a good idea to me. Can you file a bug?

https://bugs.webkit.org/show_bug.cgi?id=210367</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640458</commentid>
    <comment_count>12</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 18:47:46 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 396134 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=396134&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/BigIntPrototype.cpp:102
&gt; &gt; +        return throwVMTypeError(globalObject, scope, &quot;&apos;this&apos; value must be a BigInt or BigIntObject&quot;_s);
&gt; 
&gt; Do we have test cases for this?
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/BigIntPrototype.cpp:126
&gt; &gt; +        return throwVMTypeError(globalObject, scope, &quot;&apos;this&apos; value must be a BigInt or BigIntObject&quot;_s);
&gt; 
&gt; I don’t see any test cases for this.


As for these two:
The former isn&apos;t new (I&apos;m just inlining a function and throwVMTypeError encodes the result), but the latter is what that bank of shouldThrow cases is verifying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640472</commentid>
    <comment_count>13</comment_count>
      <attachid>396144</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-04-10 20:19:39 -0700</bug_when>
    <thetext>Created attachment 396144
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640475</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-10 20:59:55 -0700</bug_when>
    <thetext>Committed r259919: &lt;https://trac.webkit.org/changeset/259919&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396144.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396134</attachid>
            <date>2020-04-10 16:40:57 -0700</date>
            <delta_ts>2020-04-10 20:19:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209782-20200410164056.patch</filename>
            <type>text/plain</type>
            <size>19048</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZWE1MDFmOGI0OTJmNGZiYmU3MDBhNjFkNjliZjc1M2UyN2Y0MmFjLi4yMzhkMTg5OTI4ZmNhYjYy
OWFkMGI4YTFkNTllMjFhZmQ3MjY4NjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAyMC0wNC0xMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VDTUEtNDAyXSBQcm9wZXJseSBpbXBsZW1lbnQgQmlnSW50LnBy
b3RvdHlwZS50b0xvY2FsZVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA5NzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgT3VyIEJpZ0ludCdzIHRvTG9jYWxlU3RyaW5nIGhhcyBiZWVuIHNpbXBs
eSBmYWxsaW5nIGJhY2sgdG8gdG9TdHJpbmcgaW5zdGVhZCBvZiBmb2xsb3dpbmcgRUNNQS00MDIu
CisgICAgICAgIChodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc3VwLWJpZ2ludC5wcm90b3R5cGUu
dG9sb2NhbGVzdHJpbmcpCisKKyAgICAgICAgU2luY2Uge051bWJlciwgQmlnSW50fS5wcm90b3R5
cGUudG9Mb2NhbGVTdHJpbmcgYXJlIGludGVybmFsbHkgdGhlIHNhbWUgYXMgSW50bC5OdW1iZXJG
b3JtYXQucHJvdG90eXBlLmZvcm1hdCwKKyAgICAgICAgdGhpcyBwYXRjaCBzaW11bHRhbmVvdXNs
eSBsZXRzIHRoZSBsYXR0ZXIgbWV0aG9kIHRha2UgYSBCaWdJbnQgYXJndW1lbnQuCisgICAgICAg
IChodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLW51bWJlci1mb3JtYXQtZnVuY3Rpb25zKQor
CisgICAgICAgIFRoaXMgcGF0Y2ggY29udGludWVzIHRvIHVzZSB0aGUgb2xkIHVudW1fKiBBUEkg
aW5zdGVhZCBvZiBJQ1UgNjIncyBuZXcgdW51bWZfKiBBUEksCisgICAgICAgIGFzIHRoZSBsYXR0
ZXIgd291bGQgcmVxdWlyZSBhIGxhcmdlIHJlZmFjdG9yIGFzIHdlbGwgYXMgZmFsbGJhY2sgcGF0
aHMuCisgICAgICAgIChXZSBjYW4gcmUtZXZhbHVhdGUgdGhpcyB3aGVuIGltcGxlbWVudGluZyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzc0LikKKworICAgICAg
ICAqIHJ1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YmlnSW50UHJv
dG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0
cmluZyk6CisgICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1RvU3RyaW5nSW1wbCk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50bE51bWJlckZvcm1hdDo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZv
cm1hdDo6Zm9ybWF0TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXQuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdCk6CisgICAgICAg
IChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQpOgorICAgICAgICAo
SlNDOjpJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcik6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90
b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisKIDIwMjAtMDQtMTAgIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSByaHMgaW4gYFJlYWRNb2RpZnlSZXNvbHZlTm9k
ZWAgc2hvdWxkIGJlIGV2YWx1YXRlZCBiZWZvcmUgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGlmIHRo
ZSBsaHMgaXMgcmVhZC1vbmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QmlnSW50UHJvdG90eXBlLmNwcAppbmRleCBkMDU4OWNmNDJiMjk2ZWUwNmRmZmM4NThlY2YyM2M4
ZTk5NmJlZGMyLi4zNGRhYTYwOWY3YmUwMzBkMjc1OTZiNjU5NTEyNTE1MmRiZjc3OGFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJCaWdJbnRPYmplY3QuaCIKICNpbmNsdWRlICJF
cnJvci5oIgogI2luY2x1ZGUgIkludGVncml0eUlubGluZXMuaCIKKyNpbmNsdWRlICJJbnRsTnVt
YmVyRm9ybWF0LmgiCiAjaW5jbHVkZSAiSlNCaWdJbnQuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlu
cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTkxLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9UaGlzQmlnSW50VmFsdWUoVk0mIHZtLCBKU1ZhbHVl
IHRoaXNWYWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIEpTVmFsdWUgYmln
SW50UHJvdG9GdW5jVG9TdHJpbmdJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQ
cm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNCaWdJbnQqIHZhbHVl
ID0gdG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlm
ICghdmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0
aGlzJyB2YWx1ZSBtdXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CiAKICAgICBB
U1NFUlQodmFsdWUpOwogCkBAIC0xMTAsMTkgKzExMSwyNCBAQCBzdGF0aWMgSlNWYWx1ZSBiaWdJ
bnRQcm90b0Z1bmNUb1N0cmluZ0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgIGlmIChyZXN1bHRTdHJpbmcubGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgcmV0
dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcocmVzdWx0U3RyaW5nWzBd
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKHJlc3VsdFN0cmluZ1swXSkpOwogCi0gICAgcmV0dXJuIGpzTm9udHJp
dmlhbFN0cmluZyh2bSwgcmVzdWx0U3RyaW5nKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGJpZ0ludFByb3RvRnVuY1RvU3RyaW5nSW1wbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCByZXN1bHRT
dHJpbmcpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludFByb3RvRnVu
Y1RvU3RyaW5nSW1wbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZSh2bSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0aGlzJyB2YWx1ZSBtdXN0IGJlIGEg
QmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CisKKyAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1i
ZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bnVt
YmVyRm9ybWF0U3RydWN0dXJlKCkpOworICAgIG51bWJlckZvcm1hdC0+aW5pdGlhbGl6ZU51bWJl
ckZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+
YXJndW1lbnQoMSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51
bWJlckZvcm1hdC0+Zm9ybWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpKSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKaW5kZXggNmQyMDViOTdl
ZmViMjkxODU5MjZiZmEyODcyMWU0NTc2YmM0NGE1MC4uMDZmYmQ0NDEyZWU5ODNjZmVmMDZhNDc1
MWRjMDE2NDk2OTllYjk2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE51bWJlckZvcm1hdC5jcHAKQEAgLTMzMCwyMiArMzMwLDIyIEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhCiAgICAgbV9pbml0aWFsaXplZE51bWJlckZvcm1hdCA9IHRydWU7CiB9CiAK
LUpTVmFsdWUgSW50bE51bWJlckZvcm1hdDo6Zm9ybWF0TnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGRvdWJsZSBudW1iZXIpCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8j
c2VjLWZvcm1hdG51bWJlcgorSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZG91YmxlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICAvLyAxMS4zLjQgRm9ybWF0TnVtYmVyIGFic3RyYWN0IG9wZXJhdGlvbiAoRUNN
QS00MDIgMi4wKQogICAgIGlmICghbV9pbml0aWFsaXplZE51bWJlckZvcm1hdCkKICAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJbnRsLk51bWJlckZv
cm1hdC5wcm90b3R5cGUuZm9ybWF0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVj
dCBpbml0aWFsaXplZCBhcyBhIE51bWJlckZvcm1hdCJfcyk7CiAKICAgICBVRXJyb3JDb2RlIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKICAgICBWZWN0b3I8VUNoYXIsIDMyPiBidWZmZXIoMzIpOwot
ICAgIGF1dG8gbGVuZ3RoID0gdW51bV9mb3JtYXREb3VibGUobV9udW1iZXJGb3JtYXQuZ2V0KCks
IG51bWJlciwgYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgbnVsbHB0ciwgJnN0YXR1cyk7
CisgICAgYXV0byBsZW5ndGggPSB1bnVtX2Zvcm1hdERvdWJsZShtX251bWJlckZvcm1hdC5nZXQo
KSwgdmFsdWUsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCksIG51bGxwdHIsICZzdGF0dXMp
OwogICAgIGlmIChzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpIHsKICAgICAgICAg
YnVmZmVyLmdyb3cobGVuZ3RoKTsKICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAg
ICAgICB1bnVtX2Zvcm1hdERvdWJsZShtX251bWJlckZvcm1hdC5nZXQoKSwgbnVtYmVyLCBidWZm
ZXIuZGF0YSgpLCBsZW5ndGgsIG51bGxwdHIsICZzdGF0dXMpOworICAgICAgICB1bnVtX2Zvcm1h
dERvdWJsZShtX251bWJlckZvcm1hdC5nZXQoKSwgdmFsdWUsIGJ1ZmZlci5kYXRhKCksIGxlbmd0
aCwgbnVsbHB0ciwgJnN0YXR1cyk7CiAgICAgfQogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZUVycm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBmb3JtYXQgYSBudW1iZXIuIl9zKSk7CkBA
IC0zNTMsNiArMzUzLDMxIEBAIEpTVmFsdWUgSW50bE51bWJlckZvcm1hdDo6Zm9ybWF0TnVtYmVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSBudW1iCiAgICAgcmV0dXJuIGpz
U3RyaW5nKHZtLCBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7CiB9CiAKK0pTVmFsdWUg
SW50bE51bWJlckZvcm1hdDo6Zm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCFtX2luaXRp
YWxpemVkTnVtYmVyRm9ybWF0KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVk
IG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9y
bWF0Il9zKTsKKworICAgIGF1dG8gc3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGdsb2JhbE9iamVj
dCwgMTApOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBVRXJy
b3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBWZWN0b3I8VUNoYXIsIDMyPiBidWZm
ZXIoMzIpOworICAgIGF1dG8gbGVuZ3RoID0gdW51bV9mb3JtYXREZWNpbWFsKG1fbnVtYmVyRm9y
bWF0LmdldCgpLCBzdHJpbmcudXRmOCgpLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpLCBidWZmZXIu
ZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCBudWxscHRyLCAmc3RhdHVzKTsKKyAgICBpZiAoc3RhdHVz
ID09IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKSB7CisgICAgICAgIGJ1ZmZlci5ncm93KGxlbmd0
aCk7CisgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICAgICAgdW51bV9mb3JtYXRE
ZWNpbWFsKG1fbnVtYmVyRm9ybWF0LmdldCgpLCBzdHJpbmcudXRmOCgpLmRhdGEoKSwgc3RyaW5n
Lmxlbmd0aCgpLCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsIG51bGxwdHIsICZzdGF0dXMpOworICAg
IH0KKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCisgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJGYWls
ZWQgdG8gZm9ybWF0IGEgQmlnSW50LiJfcykpOworCisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBT
dHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7Cit9CisKIEFTQ0lJTGl0ZXJhbCBJbnRsTnVt
YmVyRm9ybWF0OjpzdHlsZVN0cmluZyhTdHlsZSBzdHlsZSkKIHsKICAgICBzd2l0Y2ggKHN0eWxl
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmgKaW5kZXggOTJiNDYxMTdkYzEzMjI4OWI2YzY2NzllMGRkMDg0YjdjYTM1YjAyNC4uYzMwNDk0
NzAzMjY5ZDAwMjZjZDExZTgxODI4M2RmMjRkMmRjM2NlOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuaApAQCAtNTcsNyArNTcsOCBAQCBw
dWJsaWM6CiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgdm9pZCBpbml0aWFsaXplTnVtYmVyRm9y
bWF0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1
ZSk7Ci0gICAgSlNWYWx1ZSBmb3JtYXROdW1iZXIoSlNHbG9iYWxPYmplY3QqLCBkb3VibGUgbnVt
YmVyKTsKKyAgICBKU1ZhbHVlIGZvcm1hdChKU0dsb2JhbE9iamVjdCosIGRvdWJsZSk7CisgICAg
SlNWYWx1ZSBmb3JtYXQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCopOwogICAgIEpTVmFsdWUg
Zm9ybWF0VG9QYXJ0cyhKU0dsb2JhbE9iamVjdCosIGRvdWJsZSB2YWx1ZSk7CiAgICAgSlNPYmpl
Y3QqIHJlc29sdmVkT3B0aW9ucyhKU0dsb2JhbE9iamVjdCopOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwCmluZGV4IDMwYTI5MWQ2NzE0MGQ4ZDYyZDJkNmE4MTA2MDFkODBjMWY5ODE5MmEuLmU0ZjAz
NzI4MWE0YTQxZTkzNTdiNDFlMjUwZjU5NWI2YjQ2NDYzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwCkBAIC04MCwyMyArODAsMTkgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdT
eW1ib2wsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIk9iamVjdCJfcyksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CiB9CiAKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0
TnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1udW1iZXItZm9ybWF0LWZ1bmN0aW9u
cworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdEZ1
bmNGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAvLyAxMS4zLjQgRm9ybWF0IE51bWJlciBG
dW5jdGlvbnMgKEVDTUEtNDAyIDIuMCkKLSAgICAvLyAxLiBMZXQgbmYgYmUgdGhlIHRoaXMgdmFs
dWUuCi0gICAgLy8gMi4gQXNzZXJ0OiBUeXBlKG5mKSBpcyBPYmplY3QgYW5kIG5mIGhhcyBhbiBb
W2luaXRpYWxpemVkTnVtYmVyRm9ybWF0XV0gaW50ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSAgdHJ1
ZS4KICAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBqc0Nhc3Q8SW50bE51bWJl
ckZvcm1hdCo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogCi0gICAgLy8gMy4gSWYgdmFsdWUg
aXMgbm90IHByb3ZpZGVkLCBsZXQgdmFsdWUgYmUgdW5kZWZpbmVkLgotICAgIC8vIDQuIExldCB4
IGJlIFRvTnVtYmVyKHZhbHVlKS4KLSAgICBkb3VibGUgbnVtYmVyID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKS50b051bWJlcihnbG9iYWxPYmplY3QpOwotICAgIC8vIDUuIFJldHVybklmQWJydXB0
KHgpLgorICAgIGF1dG8gdmFyaWFudCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1lcmlj
KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKLSAgICAvLyA2LiBSZXR1cm4gRm9ybWF0TnVtYmVyKG5mLCB4KS4KLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShudW1iZXJGb3JtYXQtPmZv
cm1hdE51bWJlcihnbG9iYWxPYmplY3QsIG51bWJlcikpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShzd2l0Y2hPbih2YXJpYW50LCBbJl0oYXV0byYmIHZh
bHVlKSB7CisgICAgICAgIHJldHVybiBudW1iZXJGb3JtYXQtPmZvcm1hdChnbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICB9KSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xMjUsNyArMTIxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9y
bWF0KEpTR2xvYmFsT2JqZWMKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG5mLT5nbG9iYWxPYmplY3Qodm0pOwogICAgICAgICAvLyBhLiBMZXQgRiBiZSBhIG5ldyBidWls
dC1pbiBmdW5jdGlvbiBvYmplY3QgYXMgZGVmaW5lZCBpbiAxMS4zLjQuCiAgICAgICAgIC8vIGIu
IFRoZSB2YWx1ZSBvZiBG4oCZcyBsZW5ndGggcHJvcGVydHkgaXMgMS4KLSAgICAgICAgSlNGdW5j
dGlvbiogdGFyZ2V0T2JqZWN0ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IDEsICJmb3JtYXQiX3MsIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyLCBOb0ludHJp
bnNpYyk7CisgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldE9iamVjdCA9IEpTRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAiZm9ybWF0Il9zLCBJbnRsTnVtYmVyRm9ybWF0RnVu
Y0Zvcm1hdCwgTm9JbnRyaW5zaWMpOwogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5j
dGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNC
b3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBuZiwg
bnVsbHB0ciwgMSwgbnVsbHB0cik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKaW5kZXggMWRjNjY2MTQ1NTNiZGVlNTBhZWU2MGZjMDVjYTMz
ZTI3N2MwYmE4MS4uMDRkZDcxMWZiZGZkZThlODExYTQzZjgxMTAyMWQ0ZWM1NzgxM2FhNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CkBAIC01ODEsNyArNTgxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQ
cm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAgICBJbnRsTnVt
YmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdC0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwogICAgIG51bWJlckZvcm1hdC0+
aW5pdGlhbGl6ZU51bWJlckZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+Zm9ybWF0TnVtYmVyKGdsb2JhbE9iamVjdCwgeCkp
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShudW1iZXJG
b3JtYXQtPmZvcm1hdChnbG9iYWxPYmplY3QsIHgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGEyMTg4ODAxMzY1ZmEzYTJmMzQ0OGVkZjIy
YWJiNThjZWM1NWUwMS4uMTU1ZDFlM2FjZDFlN2MzNDAyZTJiNTM1Y2I2YTIyYjhkMjk3ZmFjNyAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAyMC0wNC0xMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdA
c29ueS5jb20+CisKKyAgICAgICAgW0VDTUEtNDAyXSBQcm9wZXJseSBpbXBsZW1lbnQgQmlnSW50
LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA5NzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50LXRvTG9jYWxlU3RyaW5nLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBzdHJlc3MvaW50bC1udW1iZXJmb3JtYXQuanM6IEFkZCB0ZXN0IGNhc2Vz
LgorICAgICAgICAqIHRlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWw6IE1hcmsgMTAgdGVzdCBjYXNl
cyBhcyBwYXNzaW5nLgorCiAyMDIwLTA0LTEwICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBUaGUgcmhzIGluIGBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGVgIHNob3Vs
ZCBiZSBldmFsdWF0ZWQgYmVmb3JlIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbGhzIGlz
IHJlYWQtb25seQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXRvTG9jYWxlU3Ry
aW5nLmpzIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXRvTG9jYWxlU3RyaW5nLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQzYTQzYTFkYmEzZDI3N2U0MTk3YTFkY2E0ZjE4YWM5ZjVmZGUwNGIKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtdG9Mb2NhbGVTdHJpbmcuanMKQEAgLTAsMCAr
MSw1MSBAQAorLy9AIHJ1bkJpZ0ludEVuYWJsZWQKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFs
LCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9
CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1bmMpIHsKKyAgZnVuYygpOworfQorCitmdW5j
dGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJvclR5cGUpIHsKKyAgICBsZXQgZXJyb3I7CisgICAg
dHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3Ig
PSBlOworICAgIH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2Vycm9yVHlwZS5uYW1lfSFgKTsKK30K
Kworc2hvdWxkQmUoQmlnSW50LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5sZW5ndGgsIDApOwor
c2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCaWdJbnQucHJvdG90eXBl
LCAndG9Mb2NhbGVTdHJpbmcnKS5lbnVtZXJhYmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEJpZ0ludC5wcm90b3R5cGUsICd0b0xvY2FsZVN0cmlu
ZycpLmNvbmZpZ3VyYWJsZSwgdHJ1ZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEJpZ0ludC5wcm90b3R5cGUsICd0b0xvY2FsZVN0cmluZycpLndyaXRhYmxlLCB0
cnVlKTsKKworLy8gVGVzdCB0aGlzQmlnSW50VmFsdWUgYWJydXB0IGNvbXBsZXRpb24uCitzaG91
bGROb3RUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoMG4p
KTsKK3Nob3VsZE5vdFRocm93KCgpID0+IEJpZ0ludC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcu
Y2FsbChCaWdJbnQoMCkpKTsKK3Nob3VsZFRocm93KCgpID0+IEJpZ0ludC5wcm90b3R5cGUudG9M
b2NhbGVTdHJpbmcuY2FsbCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gQmlnSW50
LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKHVuZGVmaW5lZCksIFR5cGVFcnJvcik7Citz
aG91bGRUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwobnVs
bCksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9j
YWxlU3RyaW5nLmNhbGwoMSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBCaWdJbnQu
cHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoJzEnKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRo
cm93KCgpID0+IEJpZ0ludC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbXSksIFR5cGVF
cnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5n
LmNhbGwoU3ltYm9sKCkpLCBUeXBlRXJyb3IpOworCitzaG91bGRCZSgwbi50b0xvY2FsZVN0cmlu
ZygpLCAnMCcpOworc2hvdWxkQmUoQmlnSW50KDEpLnRvTG9jYWxlU3RyaW5nKCksICcxJyk7CisK
Ky8vIFRlc3QgZm9yIE51bWJlckZvcm1hdCBiZWhhdmlvci4KK3Nob3VsZFRocm93KCgpID0+IDBu
LnRvTG9jYWxlU3RyaW5nKCdpJyksIFJhbmdlRXJyb3IpOworCisvLyBUZXN0IHRoYXQgbG9jYWxl
IHBhcmFtZXRlciBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KK3Nob3VsZEJlKDEyMzQ1Njc4
OW4udG9Mb2NhbGVTdHJpbmcoJ2FyJyksICfZodmi2aPZrNmk2aXZptms2afZqNmpJyk7CitzaG91
bGRCZSgxMjM0NTY3ODluLnRvTG9jYWxlU3RyaW5nKCd6aC1IYW5zLUNOLXUtbnUtaGFuaWRlYycp
LCAn5LiA5LqM5LiJLOWbm+S6lOWFrSzkuIPlhavkuZ0nKTsKKworLy8gVGVzdCB0aGF0IG9wdGlv
bnMgcGFyYW1ldGVyIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5Lgorc2hvdWxkQmUoMTIzNDU2
bi50b0xvY2FsZVN0cmluZygnZW4nLCB7IG1heGltdW1TaWduaWZpY2FudERpZ2l0czogMyB9KSwg
JzEyMywwMDAnKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2ludGwtbnVtYmVyZm9ybWF0
LmpzIGIvSlNUZXN0cy9zdHJlc3MvaW50bC1udW1iZXJmb3JtYXQuanMKaW5kZXggODAxMWU4Yjk4
NDM1MjJhYzU0M2VhMzNkNDAyNGI4NGRmZTY1MDRjOC4uNDNmZGNhYWEwZTcxOTMwYWEwMzEzM2Q1
NzRiZjBjNTdiYmY3ZDlhMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaW50bC1udW1iZXJm
b3JtYXQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaW50bC1udW1iZXJmb3JtYXQuanMKQEAgLTEs
MyArMSw1IEBACisvLyBAcnVuQmlnSW50RW5hYmxlZAorCiBmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CiAgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCiAgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsK
QEAgLTQzOSwzICs0NDEsMTAgQEAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5OdW1iZXJGb3JtYXQu
cHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucy5jYWxsKDUpLCBUeXBlRXJyb3IKICAgICBzaG91bGRC
ZShJbnRsLk51bWJlckZvcm1hdC5jYWxsKGxlZ2FjeSwgJ2VuLXUtbnUtYXJhYicpLmZvcm1hdCgx
LjIzNDUpLCAn2aHZq9mi2aPZpScpOwogICAgIHNob3VsZEJlKEludGwuTnVtYmVyRm9ybWF0LmFw
cGx5KGluY29tcGF0KSAhPT0gaW5jb21wYXQsIHRydWUpOwogfQorCisvLyBCaWdJbnQgdGVzdHMK
K3Nob3VsZEJlKEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KDBuKSwgJzAnKTsKK3Nob3VsZEJl
KEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KEJpZ0ludCgxKSksICcxJyk7CitzaG91bGRCZShJ
bnRsLk51bWJlckZvcm1hdCgnYXInKS5mb3JtYXQoMTIzNDU2Nzg5biksICfZodmi2aPZrNmk2aXZ
ptms2afZqNmpJyk7CitzaG91bGRCZShJbnRsLk51bWJlckZvcm1hdCgnemgtSGFucy1DTi11LW51
LWhhbmlkZWMnKS5mb3JtYXQoMTIzNDU2Nzg5biksICfkuIDkuozkuIks5Zub5LqU5YWtLOS4g+WF
q+S5nScpOworc2hvdWxkQmUoSW50bC5OdW1iZXJGb3JtYXQoJ2VuJywgeyBtYXhpbXVtU2lnbmlm
aWNhbnREaWdpdHM6IDMgfSkuZm9ybWF0KDEyMzQ1Nm4pLCAnMTIzLDAwMCcpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy90ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sIGIvSlNUZXN0cy90ZXN0MjYyL2V4
cGVjdGF0aW9ucy55YW1sCmluZGV4IDk0YmNmZDcyYzNjYzIxOGVjM2Q2N2ViZGEyYjg0MGM4ZGQw
ZDUzY2MuLmMzOWVhZjY2ZWIxOTkwYmRlMmRkY2RmMGU2ZmY3YzZjZDZhMGM1NDEgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFtbAorKysgYi9KU1Rlc3RzL3Rlc3Qy
NjIvZXhwZWN0YXRpb25zLnlhbWwKQEAgLTE5MTEsMjEgKzE5MTEsNiBAQCB0ZXN0L2J1aWx0LWlu
cy9XZWFrUmVmL3Byb3RvLWZyb20tY3Rvci1yZWFsbS5qczoKIHRlc3QvYnVpbHQtaW5zL1dlYWtT
ZXQvcHJvdG8tZnJvbS1jdG9yLXJlYWxtLmpzOgogICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBF
eHBlY3RlZCBTYW1lVmFsdWUowqtbb2JqZWN0IFdlYWtTZXRdwrssIMKrW29iamVjdCBXZWFrU2V0
XcK7KSB0byBiZSB0cnVlJwogICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQg
U2FtZVZhbHVlKMKrW29iamVjdCBXZWFrU2V0XcK7LCDCq1tvYmplY3QgV2Vha1NldF3CuykgdG8g
YmUgdHJ1ZScKLXRlc3QvaW50bDQwMi9CaWdJbnQvcHJvdG90eXBlL3RvTG9jYWxlU3RyaW5nL2Rl
LURFLmpzOgotICBkZWZhdWx0OiAnUmFuZ2VFcnJvcjogdG9TdHJpbmcoKSByYWRpeCBhcmd1bWVu
dCBtdXN0IGJlIGJldHdlZW4gMiBhbmQgMzYnCi0gIHN0cmljdCBtb2RlOiAnUmFuZ2VFcnJvcjog
dG9TdHJpbmcoKSByYWRpeCBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMiBhbmQgMzYnCi10ZXN0
L2ludGw0MDIvQmlnSW50L3Byb3RvdHlwZS90b0xvY2FsZVN0cmluZy9kZWZhdWx0LW9wdGlvbnMt
b2JqZWN0LXByb3RvdHlwZS5qczoKLSAgZGVmYXVsdDogJ1JhbmdlRXJyb3I6IHRvU3RyaW5nKCkg
cmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDM2JwotICBzdHJpY3QgbW9kZTog
J1JhbmdlRXJyb3I6IHRvU3RyaW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIg
YW5kIDM2JwotdGVzdC9pbnRsNDAyL0JpZ0ludC9wcm90b3R5cGUvdG9Mb2NhbGVTdHJpbmcvZW4t
VVMuanM6Ci0gIGRlZmF1bHQ6ICdSYW5nZUVycm9yOiB0b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50
IG11c3QgYmUgYmV0d2VlbiAyIGFuZCAzNicKLSAgc3RyaWN0IG1vZGU6ICdSYW5nZUVycm9yOiB0
b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAyIGFuZCAzNicKLXRlc3Qv
aW50bDQwMi9CaWdJbnQvcHJvdG90eXBlL3RvTG9jYWxlU3RyaW5nL3JldHVybnMtc2FtZS1yZXN1
bHRzLWFzLU51bWJlckZvcm1hdC5qczoKLSAgZGVmYXVsdDogIlR5cGVFcnJvcjogQ29udmVyc2lv
biBmcm9tICdCaWdJbnQnIHRvICdudW1iZXInIGlzIG5vdCBhbGxvd2VkLiIKLSAgc3RyaWN0IG1v
ZGU6ICJUeXBlRXJyb3I6IENvbnZlcnNpb24gZnJvbSAnQmlnSW50JyB0byAnbnVtYmVyJyBpcyBu
b3QgYWxsb3dlZC4iCi10ZXN0L2ludGw0MDIvQmlnSW50L3Byb3RvdHlwZS90b0xvY2FsZVN0cmlu
Zy90aHJvd3Mtc2FtZS1leGNlcHRpb25zLWFzLU51bWJlckZvcm1hdC5qczoKLSAgZGVmYXVsdDog
IlRlc3QyNjJFcnJvcjogQmlnSW50LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyBkaWRuJ3QgdGhy
b3cgZXhjZXB0aW9uIGZvciBsb2NhbGVzIG51bGwuIEV4cGVjdGVkIGEgVHlwZUVycm9yIGJ1dCBn
b3QgYSBSYW5nZUVycm9yIgotICBzdHJpY3QgbW9kZTogIlRlc3QyNjJFcnJvcjogQmlnSW50LnBy
b3RvdHlwZS50b0xvY2FsZVN0cmluZyBkaWRuJ3QgdGhyb3cgZXhjZXB0aW9uIGZvciBsb2NhbGVz
IG51bGwuIEV4cGVjdGVkIGEgVHlwZUVycm9yIGJ1dCBnb3QgYSBSYW5nZUVycm9yIgogdGVzdC9p
bnRsNDAyL0NvbGxhdG9yL21pc3NpbmctdW5pY29kZS1leHQtdmFsdWUtZGVmYXVsdHMtdG8tdHJ1
ZS5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogImtuIiBzaG91bGQgYmUgcmV0dXJuZWQg
aW4gbG9jYWxlLiBFeHBlY3RlZCBTYW1lVmFsdWUowqtmYWxzZcK7LCDCq3RydWXCuykgdG8gYmUg
dHJ1ZScKICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6ICJrbiIgc2hvdWxkIGJlIHJldHVy
bmVkIGluIGxvY2FsZS4gRXhwZWN0ZWQgU2FtZVZhbHVlKMKrZmFsc2XCuywgwqt0cnVlwrspIHRv
IGJlIHRydWUnCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396144</attachid>
            <date>2020-04-10 20:19:39 -0700</date>
            <delta_ts>2020-04-10 20:59:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-209782-20200410201938.patch</filename>
            <type>text/plain</type>
            <size>19327</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZWE1MDFmOGI0OTJmNGZiYmU3MDBhNjFkNjliZjc1M2UyN2Y0MmFjLi44YzczOWVlMDc2NTljMjY5
ZGNiMTNlYmFhMDc0N2JiZGU1NzIzZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAyMC0wNC0xMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VDTUEtNDAyXSBQcm9wZXJseSBpbXBsZW1lbnQgQmlnSW50LnBy
b3RvdHlwZS50b0xvY2FsZVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA5NzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgT3VyIEJpZ0ludCdzIHRvTG9jYWxlU3RyaW5nIGhhcyBiZWVuIHNpbXBseSBm
YWxsaW5nIGJhY2sgdG8gdG9TdHJpbmcgaW5zdGVhZCBvZiBmb2xsb3dpbmcgRUNNQS00MDIuCisg
ICAgICAgIChodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc3VwLWJpZ2ludC5wcm90b3R5cGUudG9s
b2NhbGVzdHJpbmcpCisKKyAgICAgICAgU2luY2Uge051bWJlciwgQmlnSW50fS5wcm90b3R5cGUu
dG9Mb2NhbGVTdHJpbmcgYXJlIGludGVybmFsbHkgdGhlIHNhbWUgYXMgSW50bC5OdW1iZXJGb3Jt
YXQucHJvdG90eXBlLmZvcm1hdCwKKyAgICAgICAgdGhpcyBwYXRjaCBzaW11bHRhbmVvdXNseSBs
ZXRzIHRoZSBsYXR0ZXIgbWV0aG9kIHRha2UgYSBCaWdJbnQgYXJndW1lbnQuCisgICAgICAgICho
dHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLW51bWJlci1mb3JtYXQtZnVuY3Rpb25zKQorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGludWVzIHRvIHVzZSB0aGUgb2xkIHVudW1fKiBBUEkgaW5z
dGVhZCBvZiBJQ1UgNjIncyBuZXcgdW51bWZfKiBBUEksCisgICAgICAgIGFzIHRoZSBsYXR0ZXIg
d291bGQgcmVxdWlyZSBhIGxhcmdlIHJlZmFjdG9yIGFzIHdlbGwgYXMgZmFsbGJhY2sgcGF0aHMu
CisgICAgICAgIChUaGlzIHdpbGwsIGhvd2V2ZXIsIGJlIGEgcHJlcmVxdWlzaXRlIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5Nzc0LikKKworICAgICAgICAq
IHJ1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9G
dW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
Zyk6CisgICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1RvU3RyaW5nSW1wbCk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6
SW50bE51bWJlckZvcm1hdDo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1h
dDo6Zm9ybWF0TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuaDoKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdCk6CisgICAgICAgIChK
U0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQpOgorICAgICAgICAoSlND
OjpJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcik6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1
bmNUb0xvY2FsZVN0cmluZyk6CisKIDIwMjAtMDQtMTAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29A
YXBwbGUuY29tPgogCiAgICAgICAgIFRoZSByaHMgaW4gYFJlYWRNb2RpZnlSZXNvbHZlTm9kZWAg
c2hvdWxkIGJlIGV2YWx1YXRlZCBiZWZvcmUgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGlmIHRoZSBs
aHMgaXMgcmVhZC1vbmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmln
SW50UHJvdG90eXBlLmNwcAppbmRleCBkMDU4OWNmNDJiMjk2ZWUwNmRmZmM4NThlY2YyM2M4ZTk5
NmJlZGMyLi4zZWZkNDFkN2RjMzk2NjRkZjU4NDBmOGJhMjEwYTQ4ODE2NTBlM2Q0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJCaWdJbnRPYmplY3QuaCIKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIkludGVncml0eUlubGluZXMuaCIKKyNpbmNsdWRlICJJbnRsTnVtYmVy
Rm9ybWF0LmgiCiAjaW5jbHVkZSAiSlNCaWdJbnQuaCIKICNpbmNsdWRlICJKU0NCdWlsdGlucy5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTkxLDE0ICs5MiwxNCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU0JpZ0ludCogdG9UaGlzQmlnSW50VmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHRo
aXNWYWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIEpTVmFsdWUgYmlnSW50
UHJvdG9GdW5jVG9TdHJpbmdJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90
b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNCaWdJbnQqIHZhbHVlID0g
dG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0aGlz
JyB2YWx1ZSBtdXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CiAKICAgICBBU1NF
UlQodmFsdWUpOwogCkBAIC0xMTAsMTkgKzExMSwyNCBAQCBzdGF0aWMgSlNWYWx1ZSBiaWdJbnRQ
cm90b0Z1bmNUb1N0cmluZ0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2NvcGUucmVsZWFz
ZSgpOwogICAgIGlmIChyZXN1bHRTdHJpbmcubGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgcmV0dXJu
IHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcocmVzdWx0U3RyaW5nWzBdKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKHJlc3VsdFN0cmluZ1swXSkpOwogCi0gICAgcmV0dXJuIGpzTm9udHJpdmlh
bFN0cmluZyh2bSwgcmVzdWx0U3RyaW5nKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBiaWdJbnRQcm90b0Z1bmNUb1N0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJp
Z0ludFByb3RvRnVuY1RvU3RyaW5nSW1wbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCByZXN1bHRTdHJp
bmcpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNU
b0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludFByb3RvRnVuY1Rv
U3RyaW5nSW1wbChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZSh2bSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0aGlzJyB2YWx1ZSBtdXN0IGJlIGEgQmln
SW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CisKKyAgICBhdXRvKiBudW1iZXJGb3JtYXQgPSBJbnRs
TnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bnVtYmVyRm9ybWF0U3RydWN0
dXJlKCkpOworICAgIG51bWJlckZvcm1hdC0+aW5pdGlhbGl6ZU51bWJlckZvcm1hdChnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+Zm9y
bWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYmlnSW50UHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAKaW5kZXggNmQyMDViOTdlZmViMjkxODU5MjZiZmEy
ODcyMWU0NTc2YmM0NGE1MC4uYWRiNDU0Yjc5NTAyZjI3NDU0NzYyYWMyZWI0ODNmZGRmY2E4OTVh
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5jcHAKQEAgLTMzMCwyNSArMzMwLDUzIEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5p
dGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAg
ICAgbV9pbml0aWFsaXplZE51bWJlckZvcm1hdCA9IHRydWU7CiB9CiAKLUpTVmFsdWUgSW50bE51
bWJlckZvcm1hdDo6Zm9ybWF0TnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRv
dWJsZSBudW1iZXIpCisvLyBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLWZvcm1hdG51bWJl
cgorSlNWYWx1ZSBJbnRsTnVtYmVyRm9ybWF0Ojpmb3JtYXQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgZG91YmxlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAvLyAx
MS4zLjQgRm9ybWF0TnVtYmVyIGFic3RyYWN0IG9wZXJhdGlvbiAoRUNNQS00MDIgMi4wKQogICAg
IGlmICghbV9pbml0aWFsaXplZE51bWJlckZvcm1hdCkKICAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUu
Zm9ybWF0IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBh
cyBhIE51bWJlckZvcm1hdCJfcyk7CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19F
UlJPUjsKICAgICBWZWN0b3I8VUNoYXIsIDMyPiBidWZmZXIoMzIpOwotICAgIGF1dG8gbGVuZ3Ro
ID0gdW51bV9mb3JtYXREb3VibGUobV9udW1iZXJGb3JtYXQuZ2V0KCksIG51bWJlciwgYnVmZmVy
LmRhdGEoKSwgYnVmZmVyLnNpemUoKSwgbnVsbHB0ciwgJnN0YXR1cyk7CisgICAgYXV0byBsZW5n
dGggPSB1bnVtX2Zvcm1hdERvdWJsZShtX251bWJlckZvcm1hdC5nZXQoKSwgdmFsdWUsIGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5zaXplKCksIG51bGxwdHIsICZzdGF0dXMpOwogICAgIGlmIChzdGF0
dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpIHsKICAgICAgICAgYnVmZmVyLmdyb3cobGVu
Z3RoKTsKICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1bnVtX2Zvcm1h
dERvdWJsZShtX251bWJlckZvcm1hdC5nZXQoKSwgbnVtYmVyLCBidWZmZXIuZGF0YSgpLCBsZW5n
dGgsIG51bGxwdHIsICZzdGF0dXMpOworICAgICAgICB1bnVtX2Zvcm1hdERvdWJsZShtX251bWJl
ckZvcm1hdC5nZXQoKSwgdmFsdWUsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgbnVsbHB0ciwgJnN0
YXR1cyk7CiAgICAgfQogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9i
amVjdCwgIkZhaWxlZCB0byBmb3JtYXQgYSBudW1iZXIuIl9zKSk7CisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRmFpbGVkIHRvIGZvcm1hdCBhIG51
bWJlci4iX3MpOworCisgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBTdHJpbmcoYnVmZmVyLmRhdGEo
KSwgbGVuZ3RoKSk7Cit9CisKK0pTVmFsdWUgSW50bE51bWJlckZvcm1hdDo6Zm9ybWF0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB2YWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgaWYgKCFtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0KQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkludGwuTnVtYmVyRm9y
bWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0Il9zKTsKKworICAgIGF1dG8gc3RyaW5nID0g
dmFsdWUtPnRvU3RyaW5nKGdsb2JhbE9iamVjdCwgMTApOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICBBU1NFUlQoc3RyaW5nLmlzOEJpdCgpICYmIHN0cmluZy5p
c0FsbEFTQ0lJKCkpOworICAgIGF1dG8qIHJhd1N0cmluZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKTsKKworICAgIFVFcnJvckNvZGUgc3RhdHVz
ID0gVV9aRVJPX0VSUk9SOworICAgIFZlY3RvcjxVQ2hhciwgMzI+IGJ1ZmZlcigzMik7CisgICAg
YXV0byBsZW5ndGggPSB1bnVtX2Zvcm1hdERlY2ltYWwobV9udW1iZXJGb3JtYXQuZ2V0KCksIHJh
d1N0cmluZywgc3RyaW5nLmxlbmd0aCgpLCBidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpLCBu
dWxscHRyLCAmc3RhdHVzKTsKKyAgICBpZiAoc3RhdHVzID09IFVfQlVGRkVSX09WRVJGTE9XX0VS
Uk9SKSB7CisgICAgICAgIGJ1ZmZlci5ncm93KGxlbmd0aCk7CisgICAgICAgIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKKyAgICAgICAgdW51bV9mb3JtYXREZWNpbWFsKG1fbnVtYmVyRm9ybWF0Lmdl
dCgpLCByYXdTdHJpbmcsIHN0cmluZy5sZW5ndGgoKSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCBu
dWxscHRyLCAmc3RhdHVzKTsKKyAgICB9CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkZhaWxlZCB0
byBmb3JtYXQgYSBCaWdJbnQuIl9zKTsKIAogICAgIHJldHVybiBqc1N0cmluZyh2bSwgU3RyaW5n
KGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5oCmluZGV4IDkyYjQ2MTE3ZGMxMzIyODliNmM2Njc5
ZTBkZDA4NGI3Y2EzNWIwMjQuLmMzMDQ5NDcwMzI2OWQwMDI2Y2QxMWU4MTgyODNkZjI0ZDJkYzNj
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJG
b3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmgKQEAgLTU3LDcgKzU3LDggQEAgcHVibGljOgogICAgIERFQ0xBUkVfSU5GTzsKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbG9j
YWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpOwotICAgIEpTVmFsdWUgZm9ybWF0TnVtYmVyKEpT
R2xvYmFsT2JqZWN0KiwgZG91YmxlIG51bWJlcik7CisgICAgSlNWYWx1ZSBmb3JtYXQoSlNHbG9i
YWxPYmplY3QqLCBkb3VibGUpOworICAgIEpTVmFsdWUgZm9ybWF0KEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqKTsKICAgICBKU1ZhbHVlIGZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmplY3QqLCBk
b3VibGUgdmFsdWUpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZE9wdGlvbnMoSlNHbG9iYWxPYmpl
Y3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAppbmRleCAzMGEyOTFkNjcxNDBkOGQ2MmQyZDZh
ODEwNjAxZDgwYzFmOTgxOTJhLi4xZjQ2ZTM1YTlkYTZlODQzNDMxOTE1ZDk3OTVmODkwMzI5MTY3
ZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcApAQCAtODAsMjMgKzgwLDE5IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJP
YmplY3QiX3MpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKy8vIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNz
ZWMtbnVtYmVyLWZvcm1hdC1mdW5jdGlvbnMKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
Ly8gMTEuMy40IEZvcm1hdCBOdW1iZXIgRnVuY3Rpb25zIChFQ01BLTQwMiAyLjApCi0gICAgLy8g
MS4gTGV0IG5mIGJlIHRoZSB0aGlzIHZhbHVlLgotICAgIC8vIDIuIEFzc2VydDogVHlwZShuZikg
aXMgT2JqZWN0IGFuZCBuZiBoYXMgYW4gW1tpbml0aWFsaXplZE51bWJlckZvcm1hdF1dIGludGVy
bmFsIHNsb3Qgd2hvc2UgdmFsdWUgIHRydWUuCi0gICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVy
Rm9ybWF0ID0ganNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKLQotICAgIC8vIDMuIElmIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgbGV0IHZhbHVlIGJlIHVu
ZGVmaW5lZC4KLSAgICAvLyA0LiBMZXQgeCBiZSBUb051bWJlcih2YWx1ZSkuCi0gICAgZG91Ymxl
IG51bWJlciA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsK
LSAgICAvLyA1LiBSZXR1cm5JZkFicnVwdCh4KS4KKyAgICBhdXRvKiBudW1iZXJGb3JtYXQgPSBq
c0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworCisgICAg
YXV0byB2YXJpYW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b051bWVyaWMoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAotICAgIC8vIDYuIFJldHVybiBGb3JtYXROdW1iZXIobmYsIHgpLgotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+Zm9ybWF0TnVtYmVy
KGdsb2JhbE9iamVjdCwgbnVtYmVyKSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKHN3aXRjaE9uKHZhcmlhbnQsIFsmXShhdXRvJiYgdmFsdWUpIHsKKyAg
ICAgICAgcmV0dXJuIG51bWJlckZvcm1hdC0+Zm9ybWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpOwor
ICAgIH0pKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZUdldHRlckZvcm1hdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTEyNSw3ICsxMjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoSlNHbG9i
YWxPYmplYwogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmYtPmdsb2Jh
bE9iamVjdCh2bSk7CiAgICAgICAgIC8vIGEuIExldCBGIGJlIGEgbmV3IGJ1aWx0LWluIGZ1bmN0
aW9uIG9iamVjdCBhcyBkZWZpbmVkIGluIDExLjMuNC4KICAgICAgICAgLy8gYi4gVGhlIHZhbHVl
IG9mIEbigJlzIGxlbmd0aCBwcm9wZXJ0eSBpcyAxLgotICAgICAgICBKU0Z1bmN0aW9uKiB0YXJn
ZXRPYmplY3QgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgImZvcm1h
dCJfcywgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIsIE5vSW50cmluc2ljKTsKKyAg
ICAgICAgYXV0byogdGFyZ2V0T2JqZWN0ID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIDEsICJmb3JtYXQiX3MsIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0LCBOb0ludHJp
bnNpYyk7CiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKr
dGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBudWxscHRyLCAxLCBudWxs
cHRyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBl
LmNwcAppbmRleCAxZGM2NjYxNDU1M2JkZWU1MGFlZTYwZmMwNWNhMzNlMjc3YzBiYTgxLi5lMWNi
MTI4NDhlMTQ2YmMyYjVlYWM2YTNkNzkwZGY3MjVkNzAzOGNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKQEAgLTU3OCwxMCArNTc4
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgaWYgKCF0b1RoaXNOdW1iZXIodm0s
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCksIHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVRvVGhp
c051bWJlckVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OwogCi0gICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZvcm1h
dDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm51bWJlckZvcm1hdFN0cnVjdHVyZSgpKTsKKyAg
ICBhdXRvKiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwogICAgIG51bWJlckZvcm1hdC0+aW5p
dGlhbGl6ZU51bWJlckZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCks
IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+Zm9ybWF0TnVtYmVyKGdsb2JhbE9iamVjdCwgeCkpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShudW1iZXJGb3Jt
YXQtPmZvcm1hdChnbG9iYWxPYmplY3QsIHgpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9n
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGEyMTg4ODAxMzY1ZmEzYTJmMzQ0OGVkZjIyYWJi
NThjZWM1NWUwMS4uOGI2NTAxNmQ0NzgyZTY1ZmVlMjNjY2Q0OTk2MWUwYmQzNDI0NjhjZCAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMC0wNC0xMCAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0VDTUEtNDAyXSBQcm9wZXJseSBpbXBsZW1lbnQgQmlnSW50LnBy
b3RvdHlwZS50b0xvY2FsZVN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA5NzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50LXRvTG9jYWxlU3RyaW5nLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBzdHJlc3MvaW50bC1udW1iZXJmb3JtYXQuanM6IEFkZCB0ZXN0IGNhc2VzLgorICAg
ICAgICAqIHRlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWw6IE1hcmsgMTAgdGVzdCBjYXNlcyBhcyBw
YXNzaW5nLgorCiAyMDIwLTA0LTEwICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
IAogICAgICAgICBUaGUgcmhzIGluIGBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGVgIHNob3VsZCBiZSBl
dmFsdWF0ZWQgYmVmb3JlIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbGhzIGlzIHJlYWQt
b25seQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXRvTG9jYWxlU3RyaW5nLmpz
IGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXRvTG9jYWxlU3RyaW5nLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQz
YTQzYTFkYmEzZDI3N2U0MTk3YTFkY2E0ZjE4YWM5ZjVmZGUwNGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtdG9Mb2NhbGVTdHJpbmcuanMKQEAgLTAsMCArMSw1MSBA
QAorLy9AIHJ1bkJpZ0ludEVuYWJsZWQKKworZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBl
Y3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9YCk7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZE5vdFRocm93KGZ1bmMpIHsKKyAgZnVuYygpOworfQorCitmdW5jdGlvbiBz
aG91bGRUaHJvdyhmdW5jLCBlcnJvclR5cGUpIHsKKyAgICBsZXQgZXJyb3I7CisgICAgdHJ5IHsK
KyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOwor
ICAgIH0KKworICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2Vycm9yVHlwZS5uYW1lfSFgKTsKK30KKworc2hv
dWxkQmUoQmlnSW50LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5sZW5ndGgsIDApOworc2hvdWxk
QmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCaWdJbnQucHJvdG90eXBlLCAndG9M
b2NhbGVTdHJpbmcnKS5lbnVtZXJhYmxlLCBmYWxzZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEJpZ0ludC5wcm90b3R5cGUsICd0b0xvY2FsZVN0cmluZycpLmNv
bmZpZ3VyYWJsZSwgdHJ1ZSk7CitzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEJpZ0ludC5wcm90b3R5cGUsICd0b0xvY2FsZVN0cmluZycpLndyaXRhYmxlLCB0cnVlKTsK
KworLy8gVGVzdCB0aGlzQmlnSW50VmFsdWUgYWJydXB0IGNvbXBsZXRpb24uCitzaG91bGROb3RU
aHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoMG4pKTsKK3No
b3VsZE5vdFRocm93KCgpID0+IEJpZ0ludC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChC
aWdJbnQoMCkpKTsKK3Nob3VsZFRocm93KCgpID0+IEJpZ0ludC5wcm90b3R5cGUudG9Mb2NhbGVT
dHJpbmcuY2FsbCgpLCBUeXBlRXJyb3IpOworc2hvdWxkVGhyb3coKCkgPT4gQmlnSW50LnByb3Rv
dHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKHVuZGVmaW5lZCksIFR5cGVFcnJvcik7CitzaG91bGRU
aHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwobnVsbCksIFR5
cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3Ry
aW5nLmNhbGwoMSksIFR5cGVFcnJvcik7CitzaG91bGRUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90
eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoJzEnKSwgVHlwZUVycm9yKTsKK3Nob3VsZFRocm93KCgp
ID0+IEJpZ0ludC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbXSksIFR5cGVFcnJvcik7
CitzaG91bGRUaHJvdygoKSA9PiBCaWdJbnQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwo
U3ltYm9sKCkpLCBUeXBlRXJyb3IpOworCitzaG91bGRCZSgwbi50b0xvY2FsZVN0cmluZygpLCAn
MCcpOworc2hvdWxkQmUoQmlnSW50KDEpLnRvTG9jYWxlU3RyaW5nKCksICcxJyk7CisKKy8vIFRl
c3QgZm9yIE51bWJlckZvcm1hdCBiZWhhdmlvci4KK3Nob3VsZFRocm93KCgpID0+IDBuLnRvTG9j
YWxlU3RyaW5nKCdpJyksIFJhbmdlRXJyb3IpOworCisvLyBUZXN0IHRoYXQgbG9jYWxlIHBhcmFt
ZXRlciBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KK3Nob3VsZEJlKDEyMzQ1Njc4OW4udG9M
b2NhbGVTdHJpbmcoJ2FyJyksICfZodmi2aPZrNmk2aXZptms2afZqNmpJyk7CitzaG91bGRCZSgx
MjM0NTY3ODluLnRvTG9jYWxlU3RyaW5nKCd6aC1IYW5zLUNOLXUtbnUtaGFuaWRlYycpLCAn5LiA
5LqM5LiJLOWbm+S6lOWFrSzkuIPlhavkuZ0nKTsKKworLy8gVGVzdCB0aGF0IG9wdGlvbnMgcGFy
YW1ldGVyIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5Lgorc2hvdWxkQmUoMTIzNDU2bi50b0xv
Y2FsZVN0cmluZygnZW4nLCB7IG1heGltdW1TaWduaWZpY2FudERpZ2l0czogMyB9KSwgJzEyMyww
MDAnKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2ludGwtbnVtYmVyZm9ybWF0LmpzIGIv
SlNUZXN0cy9zdHJlc3MvaW50bC1udW1iZXJmb3JtYXQuanMKaW5kZXggODAxMWU4Yjk4NDM1MjJh
YzU0M2VhMzNkNDAyNGI4NGRmZTY1MDRjOC4uMzU3YTY1MjcwNTUxNzA2MDU3YzkxNzVkOWJhMDJl
MjE2M2MxMmJlMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaW50bC1udW1iZXJmb3JtYXQu
anMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaW50bC1udW1iZXJmb3JtYXQuanMKQEAgLTEsMyArMSw1
IEBACisvL0AgcnVuQmlnSW50RW5hYmxlZAorCiBmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4
cGVjdGVkKSB7CiAgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCiAgICAgICAgIHRocm93IG5l
dyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKQEAgLTQz
OSwzICs0NDEsMTAgQEAgc2hvdWxkVGhyb3coKCkgPT4gSW50bC5OdW1iZXJGb3JtYXQucHJvdG90
eXBlLnJlc29sdmVkT3B0aW9ucy5jYWxsKDUpLCBUeXBlRXJyb3IKICAgICBzaG91bGRCZShJbnRs
Lk51bWJlckZvcm1hdC5jYWxsKGxlZ2FjeSwgJ2VuLXUtbnUtYXJhYicpLmZvcm1hdCgxLjIzNDUp
LCAn2aHZq9mi2aPZpScpOwogICAgIHNob3VsZEJlKEludGwuTnVtYmVyRm9ybWF0LmFwcGx5KGlu
Y29tcGF0KSAhPT0gaW5jb21wYXQsIHRydWUpOwogfQorCisvLyBCaWdJbnQgdGVzdHMKK3Nob3Vs
ZEJlKEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KDBuKSwgJzAnKTsKK3Nob3VsZEJlKEludGwu
TnVtYmVyRm9ybWF0KCkuZm9ybWF0KEJpZ0ludCgxKSksICcxJyk7CitzaG91bGRCZShJbnRsLk51
bWJlckZvcm1hdCgnYXInKS5mb3JtYXQoMTIzNDU2Nzg5biksICfZodmi2aPZrNmk2aXZptms2afZ
qNmpJyk7CitzaG91bGRCZShJbnRsLk51bWJlckZvcm1hdCgnemgtSGFucy1DTi11LW51LWhhbmlk
ZWMnKS5mb3JtYXQoMTIzNDU2Nzg5biksICfkuIDkuozkuIks5Zub5LqU5YWtLOS4g+WFq+S5nScp
Oworc2hvdWxkQmUoSW50bC5OdW1iZXJGb3JtYXQoJ2VuJywgeyBtYXhpbXVtU2lnbmlmaWNhbnRE
aWdpdHM6IDMgfSkuZm9ybWF0KDEyMzQ1Nm4pLCAnMTIzLDAwMCcpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy90ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sIGIvSlNUZXN0cy90ZXN0MjYyL2V4cGVjdGF0
aW9ucy55YW1sCmluZGV4IDk0YmNmZDcyYzNjYzIxOGVjM2Q2N2ViZGEyYjg0MGM4ZGQwZDUzY2Mu
LmMzOWVhZjY2ZWIxOTkwYmRlMmRkY2RmMGU2ZmY3YzZjZDZhMGM1NDEgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFtbAorKysgYi9KU1Rlc3RzL3Rlc3QyNjIvZXhw
ZWN0YXRpb25zLnlhbWwKQEAgLTE5MTEsMjEgKzE5MTEsNiBAQCB0ZXN0L2J1aWx0LWlucy9XZWFr
UmVmL3Byb3RvLWZyb20tY3Rvci1yZWFsbS5qczoKIHRlc3QvYnVpbHQtaW5zL1dlYWtTZXQvcHJv
dG8tZnJvbS1jdG9yLXJlYWxtLmpzOgogICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3Rl
ZCBTYW1lVmFsdWUowqtbb2JqZWN0IFdlYWtTZXRdwrssIMKrW29iamVjdCBXZWFrU2V0XcK7KSB0
byBiZSB0cnVlJwogICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZh
bHVlKMKrW29iamVjdCBXZWFrU2V0XcK7LCDCq1tvYmplY3QgV2Vha1NldF3CuykgdG8gYmUgdHJ1
ZScKLXRlc3QvaW50bDQwMi9CaWdJbnQvcHJvdG90eXBlL3RvTG9jYWxlU3RyaW5nL2RlLURFLmpz
OgotICBkZWZhdWx0OiAnUmFuZ2VFcnJvcjogdG9TdHJpbmcoKSByYWRpeCBhcmd1bWVudCBtdXN0
IGJlIGJldHdlZW4gMiBhbmQgMzYnCi0gIHN0cmljdCBtb2RlOiAnUmFuZ2VFcnJvcjogdG9TdHJp
bmcoKSByYWRpeCBhcmd1bWVudCBtdXN0IGJlIGJldHdlZW4gMiBhbmQgMzYnCi10ZXN0L2ludGw0
MDIvQmlnSW50L3Byb3RvdHlwZS90b0xvY2FsZVN0cmluZy9kZWZhdWx0LW9wdGlvbnMtb2JqZWN0
LXByb3RvdHlwZS5qczoKLSAgZGVmYXVsdDogJ1JhbmdlRXJyb3I6IHRvU3RyaW5nKCkgcmFkaXgg
YXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDM2JwotICBzdHJpY3QgbW9kZTogJ1Jhbmdl
RXJyb3I6IHRvU3RyaW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDM2
JwotdGVzdC9pbnRsNDAyL0JpZ0ludC9wcm90b3R5cGUvdG9Mb2NhbGVTdHJpbmcvZW4tVVMuanM6
Ci0gIGRlZmF1bHQ6ICdSYW5nZUVycm9yOiB0b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50IG11c3Qg
YmUgYmV0d2VlbiAyIGFuZCAzNicKLSAgc3RyaWN0IG1vZGU6ICdSYW5nZUVycm9yOiB0b1N0cmlu
ZygpIHJhZGl4IGFyZ3VtZW50IG11c3QgYmUgYmV0d2VlbiAyIGFuZCAzNicKLXRlc3QvaW50bDQw
Mi9CaWdJbnQvcHJvdG90eXBlL3RvTG9jYWxlU3RyaW5nL3JldHVybnMtc2FtZS1yZXN1bHRzLWFz
LU51bWJlckZvcm1hdC5qczoKLSAgZGVmYXVsdDogIlR5cGVFcnJvcjogQ29udmVyc2lvbiBmcm9t
ICdCaWdJbnQnIHRvICdudW1iZXInIGlzIG5vdCBhbGxvd2VkLiIKLSAgc3RyaWN0IG1vZGU6ICJU
eXBlRXJyb3I6IENvbnZlcnNpb24gZnJvbSAnQmlnSW50JyB0byAnbnVtYmVyJyBpcyBub3QgYWxs
b3dlZC4iCi10ZXN0L2ludGw0MDIvQmlnSW50L3Byb3RvdHlwZS90b0xvY2FsZVN0cmluZy90aHJv
d3Mtc2FtZS1leGNlcHRpb25zLWFzLU51bWJlckZvcm1hdC5qczoKLSAgZGVmYXVsdDogIlRlc3Qy
NjJFcnJvcjogQmlnSW50LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyBkaWRuJ3QgdGhyb3cgZXhj
ZXB0aW9uIGZvciBsb2NhbGVzIG51bGwuIEV4cGVjdGVkIGEgVHlwZUVycm9yIGJ1dCBnb3QgYSBS
YW5nZUVycm9yIgotICBzdHJpY3QgbW9kZTogIlRlc3QyNjJFcnJvcjogQmlnSW50LnByb3RvdHlw
ZS50b0xvY2FsZVN0cmluZyBkaWRuJ3QgdGhyb3cgZXhjZXB0aW9uIGZvciBsb2NhbGVzIG51bGwu
IEV4cGVjdGVkIGEgVHlwZUVycm9yIGJ1dCBnb3QgYSBSYW5nZUVycm9yIgogdGVzdC9pbnRsNDAy
L0NvbGxhdG9yL21pc3NpbmctdW5pY29kZS1leHQtdmFsdWUtZGVmYXVsdHMtdG8tdHJ1ZS5qczoK
ICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogImtuIiBzaG91bGQgYmUgcmV0dXJuZWQgaW4gbG9j
YWxlLiBFeHBlY3RlZCBTYW1lVmFsdWUowqtmYWxzZcK7LCDCq3RydWXCuykgdG8gYmUgdHJ1ZScK
ICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6ICJrbiIgc2hvdWxkIGJlIHJldHVybmVkIGlu
IGxvY2FsZS4gRXhwZWN0ZWQgU2FtZVZhbHVlKMKrZmFsc2XCuywgwqt0cnVlwrspIHRvIGJlIHRy
dWUnCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>