<?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>213133</bug_id>
          
          <creation_ts>2020-06-12 09:07:38 -0700</creation_ts>
          <short_desc>Expand JSObject::defineOwnIndexedProperty() fast path for existing properties</short_desc>
          <delta_ts>2020-06-16 03:44:22 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=142933</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1661970</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-12 09:07:38 -0700</bug_when>
    <thetext>Expand JSObject::defineOwnIndexedProperty() fast path for existing properties</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661977</commentid>
    <comment_count>1</comment_count>
      <attachid>401736</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-12 09:11:12 -0700</bug_when>
    <thetext>Created attachment 401736
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661978</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-12 09:12:17 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #1)
&gt; Created attachment 401736 [details]
&gt; Patch

Warmed-up runs, --outer 128:

                                       r262942                    patch                                       

array-redefine-index-reverse       57.2178+-0.6638     ^      3.3607+-0.1611        ^ definitely 17.0256x faster
array-redefine-index               86.8468+-1.0661     ^     64.3230+-0.7674        ^ definitely 1.3502x faster

&lt;geometric&gt;                        70.4131+-0.5940     ^     14.6275+-0.2617        ^ definitely 4.8137x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661980</commentid>
    <comment_count>3</comment_count>
      <attachid>401736</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-12 09:14:54 -0700</bug_when>
    <thetext>Comment on attachment 401736
Patch

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

&gt; JSTests/stress/define-own-indexed-property-fast-path.js:11
&gt; +  for (const key of Object.keys(descriptor).sort())

Sorting can be removed when https://bugs.webkit.org/show_bug.cgi?id=142933 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662287</commentid>
    <comment_count>4</comment_count>
      <attachid>401736</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-12 18:44:04 -0700</bug_when>
    <thetext>Comment on attachment 401736
Patch

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

r=me with comments about TypedArrays.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:2626
&gt; +        static const PropertyDescriptor emptyAttributesDescriptor(jsUndefined(), static_cast&lt;unsigned&gt;(PropertyAttribute::None));

We should not use static here. Creating PropertyDescriptor is not costly.
And let&apos;s put `ASSERT(emptyAttributesDescriptor.attributes() == PropertyAttribute::None)`.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:2635
&gt; +#if ASSERT_ENABLED
&gt; +        if (canGetIndexQuickly(index)) {
&gt; +            PropertyDescriptor currentDescriptor;
&gt; +            ASSERT(getOwnPropertyDescriptor(globalObject, Identifier::from(vm, index), currentDescriptor));
&gt; +            scope.assertNoException();
&gt; +            ASSERT(currentDescriptor.attributes() == emptyAttributesDescriptor.attributes());
&gt; +        }
&gt; +#endif

I think this is not correct for typed-arrays. Can you add tests and fix this?
While canDoFastPutDirectIndex can prevent using putDirectIndex for typed-arrays, but this is executed for typed-arrays too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662747</commentid>
    <comment_count>5</comment_count>
      <attachid>401918</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-15 12:00:40 -0700</bug_when>
    <thetext>Created attachment 401918
Patch

Drop `static`, add PropertyAttribute::None ASSERT, fix canGetIndexQuickly() ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662748</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-15 12:01:38 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)

Thank you for review!

&gt; I think this is not correct for typed-arrays. Can you add tests and fix this?
&gt; While canDoFastPutDirectIndex can prevent using putDirectIndex for
&gt; typed-arrays, but this is executed for typed-arrays too.

JSGenericTypedArrayView&lt;Adaptor&gt;::defineOwnProperty() appears to be called instead of JSObject::defineOwnIndexedProperty(), that is why no tests are failing.
I&apos;ve added canDoFastPutDirectIndex() check to the assert nonetheless.

[[DefineOwnProperty]] on typed arrays is covered by JSTests/stress/typedarray-configure-index.js, as well as by test262 suite:
https://test262.report/browse/built-ins/TypedArrayConstructors/internals/DefineOwnProperty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662931</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-15 18:23:47 -0700</bug_when>
    <thetext>Committed r263070: &lt;https://trac.webkit.org/changeset/263070&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401918.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662932</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-15 18:24:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/64387661&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401736</attachid>
            <date>2020-06-12 09:11:12 -0700</date>
            <delta_ts>2020-06-15 12:00:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213133-20200612191111.patch</filename>
            <type>text/plain</type>
            <size>9005</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyOTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YWU2MjY3ODhhOTFlNGFiZjA2ZjY5MWE3ZGVjZDE2NWJlM2ExNzMzLi4yNjhlNmEzZTU0MmU5MmNj
YzhmZWNlOTQ0ODc5MGVmZTRjOWUxM2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMC0wNi0xMiAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFp
bC5jb20+CisKKyAgICAgICAgRXhwYW5kIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoKSBmYXN0IHBhdGggZm9yIGV4aXN0aW5nIHByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzEzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXhwYW5kcyBmYXN0IHBh
dGggb2YgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgpIHRvIGNvdmVyIGV4aXN0
aW5nIHByb3BlcnRpZXMKKyAgICAgICAgaWYgZ2l2ZW4gZGF0YSBkZXNjcmlwdG9yIGhhcyBubyBm
YWxzeSBhdHRyaWJ1dGVzLCBwcmV2ZW50aW5nIHRoZSBvYmplY3QgZnJvbSBlbnRlcmluZyBTcGFy
c2VNb2RlLgorICAgICAgICBBbiBpbnZhcmlhbnQgdGhhdCBpbmRleGVkIHByb3BlcnRpZXMgb2Yg
bm9uLVNwYXJzZU1vZGUgb2JqZWN0cyBoYXZlIFByb3BlcnR5QXR0cmlidXRlOjpOb25lCisgICAg
ICAgIGF0dHJpYnV0ZXMgZW5hYmxlcyB0aGlzIG9wdGltaXphdGlvbiAoYW4gYXNzZXJ0IGlzIGFk
ZGVkIGZvciBpdCkuCisKKyAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yOjphdHRyaWJ1dGVzT3Zl
cnJpZGluZ0N1cnJlbnQoKSB3aXRoIFByb3BlcnR5QXR0cmlidXRlOjpOb25lIGRlc2NyaXB0b3Ig
aXMgdXNlZAorICAgICAgICB0byBzdXBwb3J0IHBhcnRpYWwgZGVzY3JpcHRvcnMgbGlrZSB7dmFs
dWU6IDEsIHdyaXRhYmxlOiB0cnVlfS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZHZhbmNlcyBP
YmplY3QuZGVmaW5lUHJvcGVydHkgbWljcm9iZW5jaG1hcmsgYnkgMzUlOyBhcnJheSByZWFkL3dy
aXRlIGJlbmNobWFyaworICAgICAgICBmb2xsb3dpbmcgcHJvcGVydHkgcmVkZWZpbml0aW9uIGlz
IHByb2dyZXNzZWQgYnkgYSBmYWN0b3Igb2YgMTYgZHVlIHRvIGF2b2lkaW5nIFNwYXJzZU1vZGUu
CisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSk6CisKIDIwMjAtMDYtMTEgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTGluZWFyIFNjYW4gdXNlcyB0aGUgd3Jv
bmcgSW50ZXJ2YWwgZm9yIHNwaWxscyBmb3IgdG1wcyB3aXRoIHJvbGVzIG9mIGVhcmx5IGRlZiBv
ciBsYXRlIHVzZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmlu
ZGV4IDJmNjdlMzZmODMyN2U5OTQ2YWFmZmUwZWU3MWQ2YmU5YTM2M2VlMmIuLjIzMjc0MTE5YTlh
YmFkODk1NzQzNmE1MWZkYWY4YjUyNjc1Yzc3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKQEAgLTI2MjMsMTEgKzI2MjMsMjAgQEAgYm9vbCBKU09iamVj
dDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkIGkKICAgICBlbnN1cmVXcml0YWJsZSh2bSk7CiAKICAgICBpZiAoIWluU3BhcnNl
SW5kZXhpbmdNb2RlKCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciBlbXB0eUF0dHJpYnV0ZXNEZXNjcmlwdG9yKGpzVW5kZWZpbmVkKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOworCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICAgICAgaWYgKGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgICAgIFBy
b3BlcnR5RGVzY3JpcHRvciBjdXJyZW50RGVzY3JpcHRvcjsKKyAgICAgICAgICAgIEFTU0VSVChn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCksIGN1cnJlbnREZXNjcmlwdG9yKSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnREZXNjcmlwdG9yLmF0dHJp
YnV0ZXMoKSA9PSBlbXB0eUF0dHJpYnV0ZXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSk7CisgICAg
ICAgIH0KKyNlbmRpZgogICAgICAgICAvLyBGYXN0IGNhc2U6IHdlJ3JlIHB1dHRpbmcgYSByZWd1
bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5n
IHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0gICAgICAgIC8vIGhvd2V2ZXIgaWYgdGhl
IHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRyaWJ1dGVzIHdpbGwgb3ZlcnJp
ZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAvLyBzdGF0ZSAoaS5lLiBkZWZp
bmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZhbHVlIHdpdGhvdXQgbmVlZGlu
ZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBpZiAoIWRlc2NyaXB0b3IuYXR0
cmlidXRlcygpICYmIGRlc2NyaXB0b3IudmFsdWUoKSAmJiBjYW5Eb0Zhc3RQdXREaXJlY3RJbmRl
eCh2bSwgdGhpcykpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKQorICAgICAgICAg
ICAgJiYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSB8fCAoY2FuR2V0SW5kZXhRdWlja2x5KGlu
ZGV4KSAmJiAhZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoZW1wdHlBdHRy
aWJ1dGVzRGVzY3JpcHRvcikpKQorICAgICAgICAgICAgJiYgY2FuRG9GYXN0UHV0RGlyZWN0SW5k
ZXgodm0sIHRoaXMpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHB1
dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSwgMCwg
dGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5k
ZXhTaG91bGROb3RUaHJvdykpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgwOWY4Mjk4M2UwNzVlNTIzMDJiMDkyNTMz
ZTc1MWRhY2MyMzU3ZDQuLjE1NGYyZDhiMmI5YjgxZWNmMTAzOTUwOTMxZGM2MzE2OTJmOTNiNjIg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYtMTIgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hA
Z21haWwuY29tPgorCisgICAgICAgIEV4cGFuZCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFBy
b3BlcnR5KCkgZmFzdCBwYXRoIGZvciBleGlzdGluZyBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9hcnJh
eS1yZWRlZmluZS1pbmRleC1hbmQtcmV2ZXJzZS5qczogQWRkZWQuCisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL2FycmF5LXJlZGVmaW5lLWluZGV4LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJl
c3MvZGVmaW5lLW93bi1pbmRleGVkLXByb3BlcnR5LWZhc3QtcGF0aC5qczogQWRkZWQuCisKIDIw
MjAtMDYtMTEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBb
SlNDXSBSZXR1cm4gRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggd2hlbiBkZXN0cm95aW5nIEdDQXdh
cmVKSVRTdHViUm91dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyCmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9hcnJheS1yZWRlZmluZS1pbmRleC1hbmQtcmV2ZXJzZS5qcyBiL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5LXJlZGVmaW5lLWluZGV4LWFuZC1yZXZlcnNlLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ1YjIwMTViOGM3OWU3NDg4ZDQyN2NlOTFmZDdmMjdhNmJlOGQ5OWIKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9hcnJheS1yZWRlZmluZS1p
bmRleC1hbmQtcmV2ZXJzZS5qcwpAQCAtMCwwICsxLDIxIEBACit2YXIgYXJyID0gWzAsIDAsIDAs
IDBdOworT2JqZWN0LmRlZmluZVByb3BlcnR5KGFyciwgMCwge3ZhbHVlOiAwfSk7CitPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoYXJyLCAxLCB7dmFsdWU6IDEsIHdyaXRhYmxlOiB0cnVlfSk7CitPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoYXJyLCAyLCB7dmFsdWU6IDIsIGVudW1lcmFibGU6IHRydWV9KTsK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnIsIDMsIHt2YWx1ZTogMywgY29uZmlndXJhYmxlOiB0
cnVlfSk7CisKK3ZhciBsYXN0SW5kZXggPSBhcnIubGVuZ3RoIC0gMTsKK2Z1bmN0aW9uIHJldmVy
c2VUd2ljZSgpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGFzdEluZGV4OyBpKyspIHsKKyAg
ICB2YXIgZWwgPSBhcnJbbGFzdEluZGV4IC0gaV07CisgICAgYXJyW2xhc3RJbmRleCAtIGldID0g
YXJyW2ldOworICAgIGFycltpXSA9IGVsOworICB9Cit9Citub0lubGluZShyZXZlcnNlVHdpY2Up
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgaSsrKQorICByZXZlcnNlVHdpY2UoKTsKKwor
aWYgKGFyci5zb21lKChlbCwgaSkgPT4gZWwgIT09IGkpKQorICB0aHJvdyBgQmFkIGFycmF5OiAk
e2Fycn1gOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvYXJyYXktcmVkZWZp
bmUtaW5kZXguanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9hcnJheS1yZWRlZmluZS1pbmRl
eC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZjhlMjhkN2FiM2E3ZTc0M2NlZjFmMDI0MWYzNTczNDU1ZWI3YTE4
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvYXJyYXktcmVkZWZp
bmUtaW5kZXguanMKQEAgLTAsMCArMSwxNiBAQAordmFyIGFyciA9IFswLCAxLCAyLCAzXTsKKwor
ZnVuY3Rpb24gcmVkZWZpbmVJbmRpY2VzKGkpIHsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFy
ciwgMCwge3ZhbHVlOiBpfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnIsIDEsIHt2YWx1
ZTogaSwgd3JpdGFibGU6IHRydWV9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFyciwgMiwg
e3ZhbHVlOiBpLCBlbnVtZXJhYmxlOiB0cnVlfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShh
cnIsIDMsIHt2YWx1ZTogaSwgY29uZmlndXJhYmxlOiB0cnVlfSk7Cit9Citub0lubGluZShyZWRl
ZmluZUluZGljZXMpOworCit2YXIgbWF4ID0gMWU1OworZm9yICh2YXIgaSA9IDA7IGkgPD0gbWF4
OyBpKyspCisgIHJlZGVmaW5lSW5kaWNlcyhpKTsKKworaWYgKGFyci5zb21lKGVsID0+IGVsICE9
PSBtYXgpKQorICB0aHJvdyBgQmFkIGFycmF5OiAke2Fycn1gOwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3MvZGVmaW5lLW93bi1pbmRleGVkLXByb3BlcnR5LWZhc3QtcGF0aC5qcyBiL0pTVGVz
dHMvc3RyZXNzL2RlZmluZS1vd24taW5kZXhlZC1wcm9wZXJ0eS1mYXN0LXBhdGguanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWM5NWUxZDFlNGYwZjYzYWIxMDI3YWEwNTE3YzM5ZjAzNzNiNDgxZgotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2RlZmluZS1vd24taW5kZXhlZC1wcm9wZXJ0eS1mYXN0
LXBhdGguanMKQEAgLTAsMCArMSw5MCBAQAorZnVuY3Rpb24gYXNzZXJ0U2FtZURlc2NyaXB0b3Io
YSwgYikgeworICBjb25zdCBhU3RyaW5nID0gc3RyaW5naWZ5RGVzY3JpcHRvcihhKTsKKyAgY29u
c3QgYlN0cmluZyA9IHN0cmluZ2lmeURlc2NyaXB0b3IoYik7CisKKyAgaWYgKGFTdHJpbmcgIT09
IGJTdHJpbmcpCisgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZGVzY3JpcHRvciFcbkFjdHVhbDog
JHthU3RyaW5nfVxuRXhwZWN0ZWQ6ICR7YlN0cmluZ31gKTsKK30KKworZnVuY3Rpb24gc3RyaW5n
aWZ5RGVzY3JpcHRvcihkZXNjcmlwdG9yKSB7CisgIGNvbnN0IHNvcnRlZERlc2NyaXB0b3IgPSB7
fTsKKyAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGVzY3JpcHRvcikuc29ydCgpKQor
ICAgIHNvcnRlZERlc2NyaXB0b3Jba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTsKKworICByZXR1cm4g
SlNPTi5zdHJpbmdpZnkoc29ydGVkRGVzY3JpcHRvciwgbnVsbCwgMik7Cit9CisKK2Z1bmN0aW9u
IGdldENvbWJpbmF0aW9ucyhvcHRpb25zKSB7CisgIGNvbnN0IG9wdGlvbktleXMgPSBPYmplY3Qu
a2V5cyhvcHRpb25zKTsKKyAgY29uc3QgcmVzdWx0cyA9IFtdOworCisgIGZ1bmN0aW9uIGdldE5l
eHRDb21iaW5hdGlvbihvcHRpb25JbmRleCwgY3VycmVudCkgeworICAgIGNvbnN0IG9wdGlvbktl
eSA9IG9wdGlvbktleXNbb3B0aW9uSW5kZXhdOworCisgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBv
cHRpb25zW29wdGlvbktleV0pIHsKKyAgICAgIGN1cnJlbnRbb3B0aW9uS2V5XSA9IHZhbHVlOwor
CisgICAgICBjb25zdCBuZXh0SW5kZXggPSBvcHRpb25JbmRleCArIDE7CisgICAgICBpZiAobmV4
dEluZGV4IDwgb3B0aW9uS2V5cy5sZW5ndGgpIHsKKyAgICAgICAgZ2V0TmV4dENvbWJpbmF0aW9u
KG5leHRJbmRleCwgY3VycmVudCk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAv
LyBkZWVwIGNsb25lIGBjdXJyZW50YCBhbmQgcmVtb3ZlIGB1bmRlZmluZWRgIHZhbHVlcworICAg
ICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50KSk7Cisg
ICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsKKyAgICB9CisgIH0KKworICBnZXROZXh0Q29tYmlu
YXRpb24oMCwge30pOworICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gdGVzdENyZWF0
ZVByb3BlcnR5KG9iamVjdCwga2V5LCBkZXNjcmlwdG9yKSB7CisgIGlmIChvYmplY3QuaGFzT3du
UHJvcGVydHkoa2V5KSkKKyAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICR7a2V5fSBzaG91
bGQgbm90IGV4aXN0LmApOworCisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwg
ZGVzY3JpcHRvcik7CisKKyAgYXNzZXJ0U2FtZURlc2NyaXB0b3IoCisgICAgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSksCisgICAge3ZhbHVlOiB1bmRlZmluZWQs
IHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2Us
IC4uLmRlc2NyaXB0b3J9LAorICApOworfQorCitmdW5jdGlvbiB0ZXN0UmVkZWZpbmVQcm9wZXJ0
eShvYmplY3QsIGtleSwgZGVzY3JpcHRvcikgeworICBpZiAoIW9iamVjdC5oYXNPd25Qcm9wZXJ0
eShrZXkpKQorICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJHtrZXl9IHNob3VsZCBleGlz
dC5gKTsKKworICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldOworICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqZWN0LCBrZXksIGRlc2NyaXB0b3IpOworCisgIGFzc2VydFNhbWVEZXNjcmlwdG9y
KAorICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpLAorICAg
IHt2YWx1ZSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwgLi4uZGVzY3JpcHRvcn0sCisgICk7Cit9CisKK2NvbnN0IGRhdGFEZXNjcmlwdG9yID0g
eworICB2YWx1ZTogWzEsIDIsIHVuZGVmaW5lZF0sCisgIHdyaXRhYmxlOiBbdHJ1ZSwgZmFsc2Us
IHVuZGVmaW5lZF0sCisgIGVudW1lcmFibGU6IFt0cnVlLCBmYWxzZSwgdW5kZWZpbmVkXSwKKyAg
Y29uZmlndXJhYmxlOiBbdHJ1ZSwgZmFsc2UsIHVuZGVmaW5lZF0sCit9OworCitjb25zdCBhY2Nl
c3NvckRlc2NyaXB0b3IgPSB7CisgIGdldDogW2Z1bmN0aW9uKCkge30sIHVuZGVmaW5lZF0sCisg
IHNldDogW2Z1bmN0aW9uKHZhbHVlKSB7fSwgdW5kZWZpbmVkXSwKKyAgZW51bWVyYWJsZTogW3Ry
dWUsIGZhbHNlLCB1bmRlZmluZWRdLAorICBjb25maWd1cmFibGU6IFt0cnVlLCBmYWxzZSwgdW5k
ZWZpbmVkXSwKK307CisKK2ZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBnZXRDb21iaW5hdGlvbnMo
ZGF0YURlc2NyaXB0b3IpKSB7CisgIHRlc3RDcmVhdGVQcm9wZXJ0eShbXSwgIjAiLCBkZXNjcmlw
dG9yKTsKKyAgdGVzdFJlZGVmaW5lUHJvcGVydHkoWzFdLCAiMCIsIGRlc2NyaXB0b3IpOworfQor
Citmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgZ2V0Q29tYmluYXRpb25zKGFjY2Vzc29yRGVzY3Jp
cHRvcikpIHsKKyAgdGVzdENyZWF0ZVByb3BlcnR5KFsxLCAyXSwgIjIiLCBkZXNjcmlwdG9yKTsK
KyAgdGVzdFJlZGVmaW5lUHJvcGVydHkoWzEsIDIsIDNdLCAiMiIsIGRlc2NyaXB0b3IpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401918</attachid>
            <date>2020-06-15 12:00:40 -0700</date>
            <delta_ts>2020-06-15 18:23:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213133-20200615220038.patch</filename>
            <type>text/plain</type>
            <size>9530</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
ZWI5ZjEwMjg5Yjg3NGFmZDkwNDY0NDEyOGExNzQ4MmJlMjExODM4Li5kZjYyZjM1NzE3ODI1MWQx
M2JjMjY0NzBhYjhiMjUyOTQ5YzFiZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMC0wNi0xNSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFp
bC5jb20+CisKKyAgICAgICAgRXhwYW5kIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVy
dHkoKSBmYXN0IHBhdGggZm9yIGV4aXN0aW5nIHByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzEzMworCisgICAgICAgIFJldmlld2Vk
IGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhpcyBwYXRjaCBleHBhbmRzIGZhc3QgcGF0
aCBvZiBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KCkgdG8gY292ZXIgZXhpc3Rp
bmcgcHJvcGVydGllcworICAgICAgICBpZiBnaXZlbiBkYXRhIGRlc2NyaXB0b3IgaGFzIG5vIGZh
bHN5IGF0dHJpYnV0ZXMsIHByZXZlbnRpbmcgdGhlIG9iamVjdCBmcm9tIGVudGVyaW5nIFNwYXJz
ZU1vZGUuCisgICAgICAgIFRoZSBvcHRpbWl6YXRpb24gaXMgcG9zc2libGUgZHVlIHRvIHRoaXMg
aW52YXJpYW50OiBpbmRleGVkIHByb3BlcnRpZXMgb2Ygbm9uLVNwYXJzZU1vZGUgb2JqZWN0cwor
ICAgICAgICBoYXZlIGF0dHJpYnV0ZXMgb2YgUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUgKGV4Y2Vw
dCBmb3IgdHlwZWQgYXJyYXlzOyBhZGRlZCBhc3NlcnQgY292ZXJzIGl0KS4KKworICAgICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3I6OmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudCgpIHdpdGggUHJv
cGVydHlBdHRyaWJ1dGU6Ok5vbmUgZGVzY3JpcHRvcgorICAgICAgICBpcyB1c2VkIHRvIHN1cHBv
cnQgcGFydGlhbCBkZXNjcmlwdG9ycyBsaWtlIHt2YWx1ZTogMSwgd3JpdGFibGU6IHRydWV9Lgor
CisgICAgICAgIFRoaXMgY2hhbmdlIGFkdmFuY2VzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBtaWNy
b2JlbmNobWFyayBieSAzNSU7IGFycmF5IHJlYWQvd3JpdGUgYmVuY2htYXJrCisgICAgICAgIGZv
bGxvd2luZyBwcm9wZXJ0eSByZWRlZmluaXRpb24gaXMgcHJvZ3Jlc3NlZCBieSBhIGZhY3RvciBv
ZiAxNiBkdWUgdG8gYXZvaWRpbmcgU3BhcnNlTW9kZS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KToKKwogMjAyMC0wNi0xMyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSBgZXJyb3JzYCBhbiBvd24gcHJvcGVydHkgb2YgYEFnZ3JlZ2F0ZUVycm9y
YCBpbnN0ZWFkIG9mIGEgcHJvdG90eXBlIGFjY2Vzc29yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKaW5kZXggMmY2N2UzNmY4MzI3ZTk5NDZhYWZmZTBlZTcxZDZi
ZTlhMzYzZWUyYi4uMDY3OWZmNTRlMTU1MTRjZGQyZmQ3N2ZiMTBiOTY4ZmZkZmU4M2U1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjYxMiw3ICsy
NjEyLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBjYW5Eb0Zhc3RQdXREaXJlY3RJbmRl
eChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIHx8IGpzRHluYW1pY0Nhc3Q8SlNG
aW5hbE9iamVjdCo+KHZtLCBvYmplY3QpOwogfQogCi0vLyBEZWZpbmVkIGluIEVTNS4xIDguMTIu
OQorLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeWRlZmluZW93bnByb3Bl
cnR5CiBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CkBAIC0yNjIzLDExICsyNjIzLDIxIEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmluZU93bkluZGV4ZWRQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpCiAgICAgZW5zdXJlV3JpdGFibGUodm0pOwogCiAgICAgaWYgKCFpblNwYXJzZUluZGV4
aW5nTW9kZSgpKSB7CisgICAgICAgIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciBlbXB0eUF0dHJp
YnV0ZXNEZXNjcmlwdG9yKGpzVW5kZWZpbmVkKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOworICAgICAgICBBU1NFUlQoZW1wdHlBdHRyaWJ1dGVzRGVz
Y3JpcHRvci5hdHRyaWJ1dGVzKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0
cmlidXRlOjpOb25lKSk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBpZiAoY2FuR2V0
SW5kZXhRdWlja2x5KGluZGV4KSAmJiBjYW5Eb0Zhc3RQdXREaXJlY3RJbmRleCh2bSwgdGhpcykp
IHsKKyAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50RGVzY3JpcHRvcjsKKyAg
ICAgICAgICAgIEFTU0VSVChnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCksIGN1cnJlbnREZXNjcmlwdG9yKSk7CisgICAgICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnREZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSA9PSBlbXB0eUF0dHJpYnV0ZXNEZXNjcmlwdG9yLmF0
dHJpYnV0ZXMoKSk7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAvLyBGYXN0IGNhc2U6IHdl
J3JlIHB1dHRpbmcgYSByZWd1bGFyIHByb3BlcnR5IHRvIGEgcmVndWxhciBhcnJheQotICAgICAg
ICAvLyBGSVhNRTogdGhpcyB3aWxsIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgdGhhdCBpZiBhdHRy
aWJ1dGVzIGFyZSBtaXNzaW5nIHRoZW4gdGhleSdsbCBkZWZhdWx0IHRvIGZhbHNlCi0gICAgICAg
IC8vIGhvd2V2ZXIgaWYgdGhlIHByb3BlcnR5IGN1cnJlbnRseSBleGlzdHMgbWlzc2luZyBhdHRy
aWJ1dGVzIHdpbGwgb3ZlcnJpZGUgZnJvbSB0aGVpciBjdXJyZW50ICd0cnVlJwotICAgICAgICAv
LyBzdGF0ZSAoaS5lLiBkZWZpbmVPd25Qcm9wZXJ0eSBjb3VsZCBiZSB1c2VkIHRvIHNldCBhIHZh
bHVlIHdpdGhvdXQgbmVlZGluZyB0byBlbnRlcmluZyAnU3BhcnNlTW9kZScpLgotICAgICAgICBp
ZiAoIWRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYmIGRlc2NyaXB0b3IudmFsdWUoKSAmJiBjYW5E
b0Zhc3RQdXREaXJlY3RJbmRleCh2bSwgdGhpcykpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iu
dmFsdWUoKQorICAgICAgICAgICAgJiYgKCFkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSB8fCAoY2Fu
R2V0SW5kZXhRdWlja2x5KGluZGV4KSAmJiAhZGVzY3JpcHRvci5hdHRyaWJ1dGVzT3ZlcnJpZGlu
Z0N1cnJlbnQoZW1wdHlBdHRyaWJ1dGVzRGVzY3JpcHRvcikpKQorICAgICAgICAgICAgJiYgY2Fu
RG9GYXN0UHV0RGlyZWN0SW5kZXgodm0sIHRoaXMpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWRl
c2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIGRlc2Ny
aXB0b3IudmFsdWUoKSwgMCwgdGhyb3dFeGNlcHRpb24gPyBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdykpOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYwNDBhZDU0
ZmQ3M2QxODM5NjI0ZDM5ZGMyOTFlNmIyNDFjNDlhY2EuLmQ3MmE3ZjRkNmVmMzk5MDc4MDdkNzcw
ODgwNmQ0OTdkMWM2MmEyNjAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYtMTUgIEFsZXhleSBTaHZh
eWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEV4cGFuZCBKU09iamVjdDo6
ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KCkgZmFzdCBwYXRoIGZvciBleGlzdGluZyBwcm9wZXJ0
aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMx
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL2FycmF5LXJlZGVmaW5lLWluZGV4LWFuZC1yZXZlcnNlLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvYXJyYXktcmVkZWZpbmUtaW5kZXguanM6IEFkZGVk
LgorICAgICAgICAqIHN0cmVzcy9kZWZpbmUtb3duLWluZGV4ZWQtcHJvcGVydHktZmFzdC1wYXRo
LmpzOiBBZGRlZC4KKwogMjAyMC0wNi0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCB3YXNtIHJlZ3Jlc2lvbiB0ZXN0IGZvciBsb29wCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9hcnJheS1yZWRlZmluZS1pbmRleC1hbmQtcmV2
ZXJzZS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FycmF5LXJlZGVmaW5lLWluZGV4LWFu
ZC1yZXZlcnNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1YjIwMTViOGM3OWU3NDg4ZDQyN2NlOTFmZDdmMjdh
NmJlOGQ5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9hcnJh
eS1yZWRlZmluZS1pbmRleC1hbmQtcmV2ZXJzZS5qcwpAQCAtMCwwICsxLDIxIEBACit2YXIgYXJy
ID0gWzAsIDAsIDAsIDBdOworT2JqZWN0LmRlZmluZVByb3BlcnR5KGFyciwgMCwge3ZhbHVlOiAw
fSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyLCAxLCB7dmFsdWU6IDEsIHdyaXRhYmxlOiB0
cnVlfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJyLCAyLCB7dmFsdWU6IDIsIGVudW1lcmFi
bGU6IHRydWV9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnIsIDMsIHt2YWx1ZTogMywgY29u
ZmlndXJhYmxlOiB0cnVlfSk7CisKK3ZhciBsYXN0SW5kZXggPSBhcnIubGVuZ3RoIC0gMTsKK2Z1
bmN0aW9uIHJldmVyc2VUd2ljZSgpIHsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGFzdEluZGV4
OyBpKyspIHsKKyAgICB2YXIgZWwgPSBhcnJbbGFzdEluZGV4IC0gaV07CisgICAgYXJyW2xhc3RJ
bmRleCAtIGldID0gYXJyW2ldOworICAgIGFycltpXSA9IGVsOworICB9Cit9Citub0lubGluZShy
ZXZlcnNlVHdpY2UpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgaSsrKQorICByZXZlcnNl
VHdpY2UoKTsKKworaWYgKGFyci5zb21lKChlbCwgaSkgPT4gZWwgIT09IGkpKQorICB0aHJvdyBg
QmFkIGFycmF5OiAke2Fycn1gOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
YXJyYXktcmVkZWZpbmUtaW5kZXguanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9hcnJheS1y
ZWRlZmluZS1pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjhlMjhkN2FiM2E3ZTc0M2NlZjFmMDI0MWYz
NTczNDU1ZWI3YTE4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
YXJyYXktcmVkZWZpbmUtaW5kZXguanMKQEAgLTAsMCArMSwxNiBAQAordmFyIGFyciA9IFswLCAx
LCAyLCAzXTsKKworZnVuY3Rpb24gcmVkZWZpbmVJbmRpY2VzKGkpIHsKKyAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGFyciwgMCwge3ZhbHVlOiBpfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShh
cnIsIDEsIHt2YWx1ZTogaSwgd3JpdGFibGU6IHRydWV9KTsKKyAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGFyciwgMiwge3ZhbHVlOiBpLCBlbnVtZXJhYmxlOiB0cnVlfSk7CisgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShhcnIsIDMsIHt2YWx1ZTogaSwgY29uZmlndXJhYmxlOiB0cnVlfSk7Cit9Citu
b0lubGluZShyZWRlZmluZUluZGljZXMpOworCit2YXIgbWF4ID0gMWU1OworZm9yICh2YXIgaSA9
IDA7IGkgPD0gbWF4OyBpKyspCisgIHJlZGVmaW5lSW5kaWNlcyhpKTsKKworaWYgKGFyci5zb21l
KGVsID0+IGVsICE9PSBtYXgpKQorICB0aHJvdyBgQmFkIGFycmF5OiAke2Fycn1gOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZGVmaW5lLW93bi1pbmRleGVkLXByb3BlcnR5LWZhc3QtcGF0
aC5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlZmluZS1vd24taW5kZXhlZC1wcm9wZXJ0eS1mYXN0LXBh
dGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWM5NWUxZDFlNGYwZjYzYWIxMDI3YWEwNTE3YzM5ZjAzNzNiNDgx
ZgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2RlZmluZS1vd24taW5kZXhlZC1w
cm9wZXJ0eS1mYXN0LXBhdGguanMKQEAgLTAsMCArMSw5MCBAQAorZnVuY3Rpb24gYXNzZXJ0U2Ft
ZURlc2NyaXB0b3IoYSwgYikgeworICBjb25zdCBhU3RyaW5nID0gc3RyaW5naWZ5RGVzY3JpcHRv
cihhKTsKKyAgY29uc3QgYlN0cmluZyA9IHN0cmluZ2lmeURlc2NyaXB0b3IoYik7CisKKyAgaWYg
KGFTdHJpbmcgIT09IGJTdHJpbmcpCisgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZGVzY3JpcHRv
ciFcbkFjdHVhbDogJHthU3RyaW5nfVxuRXhwZWN0ZWQ6ICR7YlN0cmluZ31gKTsKK30KKworZnVu
Y3Rpb24gc3RyaW5naWZ5RGVzY3JpcHRvcihkZXNjcmlwdG9yKSB7CisgIGNvbnN0IHNvcnRlZERl
c2NyaXB0b3IgPSB7fTsKKyAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGVzY3JpcHRv
cikuc29ydCgpKQorICAgIHNvcnRlZERlc2NyaXB0b3Jba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTsK
KworICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc29ydGVkRGVzY3JpcHRvciwgbnVsbCwgMik7Cit9
CisKK2Z1bmN0aW9uIGdldENvbWJpbmF0aW9ucyhvcHRpb25zKSB7CisgIGNvbnN0IG9wdGlvbktl
eXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTsKKyAgY29uc3QgcmVzdWx0cyA9IFtdOworCisgIGZ1
bmN0aW9uIGdldE5leHRDb21iaW5hdGlvbihvcHRpb25JbmRleCwgY3VycmVudCkgeworICAgIGNv
bnN0IG9wdGlvbktleSA9IG9wdGlvbktleXNbb3B0aW9uSW5kZXhdOworCisgICAgZm9yIChjb25z
dCB2YWx1ZSBvZiBvcHRpb25zW29wdGlvbktleV0pIHsKKyAgICAgIGN1cnJlbnRbb3B0aW9uS2V5
XSA9IHZhbHVlOworCisgICAgICBjb25zdCBuZXh0SW5kZXggPSBvcHRpb25JbmRleCArIDE7Cisg
ICAgICBpZiAobmV4dEluZGV4IDwgb3B0aW9uS2V5cy5sZW5ndGgpIHsKKyAgICAgICAgZ2V0TmV4
dENvbWJpbmF0aW9uKG5leHRJbmRleCwgY3VycmVudCk7CisgICAgICAgIGJyZWFrOworICAgICAg
fQorCisgICAgICAvLyBkZWVwIGNsb25lIGBjdXJyZW50YCBhbmQgcmVtb3ZlIGB1bmRlZmluZWRg
IHZhbHVlcworICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShj
dXJyZW50KSk7CisgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsKKyAgICB9CisgIH0KKworICBn
ZXROZXh0Q29tYmluYXRpb24oMCwge30pOworICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rp
b24gdGVzdENyZWF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCBkZXNjcmlwdG9yKSB7CisgIGlmIChv
YmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkKKyAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5
ICR7a2V5fSBzaG91bGQgbm90IGV4aXN0LmApOworCisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShv
YmplY3QsIGtleSwgZGVzY3JpcHRvcik7CisKKyAgYXNzZXJ0U2FtZURlc2NyaXB0b3IoCisgICAg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSksCisgICAge3ZhbHVl
OiB1bmRlZmluZWQsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3Vy
YWJsZTogZmFsc2UsIC4uLmRlc2NyaXB0b3J9LAorICApOworfQorCitmdW5jdGlvbiB0ZXN0UmVk
ZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgZGVzY3JpcHRvcikgeworICBpZiAoIW9iamVjdC5o
YXNPd25Qcm9wZXJ0eShrZXkpKQorICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJHtrZXl9
IHNob3VsZCBleGlzdC5gKTsKKworICBjb25zdCB2YWx1ZSA9IG9iamVjdFtrZXldOworICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIGRlc2NyaXB0b3IpOworCisgIGFzc2VydFNh
bWVEZXNjcmlwdG9yKAorICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0
LCBrZXkpLAorICAgIHt2YWx1ZSwgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwgLi4uZGVzY3JpcHRvcn0sCisgICk7Cit9CisKK2NvbnN0IGRhdGFE
ZXNjcmlwdG9yID0geworICB2YWx1ZTogWzEsIDIsIHVuZGVmaW5lZF0sCisgIHdyaXRhYmxlOiBb
dHJ1ZSwgZmFsc2UsIHVuZGVmaW5lZF0sCisgIGVudW1lcmFibGU6IFt0cnVlLCBmYWxzZSwgdW5k
ZWZpbmVkXSwKKyAgY29uZmlndXJhYmxlOiBbdHJ1ZSwgZmFsc2UsIHVuZGVmaW5lZF0sCit9Owor
Citjb25zdCBhY2Nlc3NvckRlc2NyaXB0b3IgPSB7CisgIGdldDogW2Z1bmN0aW9uKCkge30sIHVu
ZGVmaW5lZF0sCisgIHNldDogW2Z1bmN0aW9uKHZhbHVlKSB7fSwgdW5kZWZpbmVkXSwKKyAgZW51
bWVyYWJsZTogW3RydWUsIGZhbHNlLCB1bmRlZmluZWRdLAorICBjb25maWd1cmFibGU6IFt0cnVl
LCBmYWxzZSwgdW5kZWZpbmVkXSwKK307CisKK2ZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBnZXRD
b21iaW5hdGlvbnMoZGF0YURlc2NyaXB0b3IpKSB7CisgIHRlc3RDcmVhdGVQcm9wZXJ0eShbXSwg
IjAiLCBkZXNjcmlwdG9yKTsKKyAgdGVzdFJlZGVmaW5lUHJvcGVydHkoWzFdLCAiMCIsIGRlc2Ny
aXB0b3IpOworfQorCitmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgZ2V0Q29tYmluYXRpb25zKGFj
Y2Vzc29yRGVzY3JpcHRvcikpIHsKKyAgdGVzdENyZWF0ZVByb3BlcnR5KFsxLCAyXSwgIjIiLCBk
ZXNjcmlwdG9yKTsKKyAgdGVzdFJlZGVmaW5lUHJvcGVydHkoWzEsIDIsIDNdLCAiMiIsIGRlc2Ny
aXB0b3IpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>