<?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>186883</bug_id>
          
          <creation_ts>2018-06-21 02:07:30 -0700</creation_ts>
          <short_desc>Implement support for Element.toggleAttribute</short_desc>
          <delta_ts>2018-07-05 09:49:34 -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>DOM</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=187347</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="Jonathan Kingston">jkingston</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1435059</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Kingston">jkingston</who>
    <bug_when>2018-06-21 02:07:30 -0700</bug_when>
    <thetext>Element.toggleAttribute provides a simple boolean interface the same as classList.toggle for Element.

See https://github.com/whatwg/dom/issues/461

Firefox implementation bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1469592

Other browsers are willing to implement: https://github.com/whatwg/dom/issues/461#issuecomment-398206390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438915</commentid>
    <comment_count>1</comment_count>
      <attachid>344202</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-03 12:04:51 -0700</bug_when>
    <thetext>Created attachment 344202
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438959</commentid>
    <comment_count>2</comment_count>
      <attachid>344202</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-03 13:46:45 -0700</bug_when>
    <thetext>Comment on attachment 344202
Patch

Clearing flags on attachment: 344202

Committed r233475: &lt;https://trac.webkit.org/changeset/233475&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438960</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-03 13:46:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438962</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-03 13:47:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/41790122&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439257</commentid>
    <comment_count>5</comment_count>
      <attachid>344202</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-07-04 12:08:48 -0700</bug_when>
    <thetext>Comment on attachment 344202
Patch

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

&gt; Source/WebCore/dom/Element.h:117
&gt; +    ExceptionOr&lt;bool&gt; toggleAttribute(const AtomicString&amp; name, std::optional&lt;bool&gt; force);

Should this be localName instead of name?

&gt; Source/WebCore/dom/Element.idl:47
&gt; +    [CEReactions, MayThrowException] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);

Should this be localName instead of qualifiedName?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439401</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-05 08:55:57 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 344202 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=344202&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Element.h:117
&gt; &gt; +    ExceptionOr&lt;bool&gt; toggleAttribute(const AtomicString&amp; name, std::optional&lt;bool&gt; force);
&gt; 
&gt; Should this be localName instead of name?
&gt; 
&gt; &gt; Source/WebCore/dom/Element.idl:47
&gt; &gt; +    [CEReactions, MayThrowException] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
&gt; 
&gt; Should this be localName instead of qualifiedName?

We try to keep the IDL in sync with the spec and the spec says &quot;qualifiedName&quot;.
I will check what makes sense for the implementation though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439402</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-05 08:56:46 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; Comment on attachment 344202 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=344202&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Element.h:117
&gt; &gt; &gt; +    ExceptionOr&lt;bool&gt; toggleAttribute(const AtomicString&amp; name, std::optional&lt;bool&gt; force);
&gt; &gt; 
&gt; &gt; Should this be localName instead of name?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Element.idl:47
&gt; &gt; &gt; +    [CEReactions, MayThrowException] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
&gt; &gt; 
&gt; &gt; Should this be localName instead of qualifiedName?
&gt; 
&gt; We try to keep the IDL in sync with the spec and the spec says
&gt; &quot;qualifiedName&quot;.
&gt; I will check what makes sense for the implementation though.

At the very least, the new method is consistent with the others:
    WEBCORE_EXPORT const AtomicString&amp; getAttribute(const AtomicString&amp; name) const;
    WEBCORE_EXPORT ExceptionOr&lt;void&gt; setAttribute(const AtomicString&amp; name, const AtomicString&amp; value);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439407</commentid>
    <comment_count>8</comment_count>
      <attachid>344202</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-05 09:08:13 -0700</bug_when>
    <thetext>Comment on attachment 344202
Patch

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

&gt; Source/WebCore/dom/Element.cpp:1284
&gt; +    unsigned index = elementData() ? elementData()-&gt;findAttributeIndexByName(caseAdjustedLocalName, false) : ElementData::attributeNotFound;

Specification says the input is a qualifiedName so I should probably be using the findAttributeIndexByName(QualifiedName) overload here. I&apos;ll look into this further.

&gt; Source/WebCore/dom/Element.cpp:1287
&gt; +            setAttributeInternal(index, QualifiedName { nullAtom(), caseAdjustedLocalName, nullAtom() }, emptyString(), NotInSynchronizationOfLazyAttribute);

Here is correct though because the spec says:
&quot;If force is not given or is true, create an attribute whose local name is qualifiedName&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439408</commentid>
    <comment_count>9</comment_count>
      <attachid>344202</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-05 09:11:51 -0700</bug_when>
    <thetext>Comment on attachment 344202
Patch

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

&gt; LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes.html:134
&gt; +  el.toggleAttribute(&quot;foo:bar&quot;);

Actually the behavior for qualified name is tested here and we pass this test. findAttributeIndexByName(const AtomicString&amp;) does the right thing when the attribute has a prefix:
attribute.name().toString() == caseAdjustedName

Based on this, I believe I should rename localName / name in the implementation to qualifiedName, to match the IDL and the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439421</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-07-05 09:49:34 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; Comment on attachment 344202 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=344202&amp;action=review
&gt; 
&gt; &gt; LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes.html:134
&gt; &gt; +  el.toggleAttribute(&quot;foo:bar&quot;);
&gt; 
&gt; Actually the behavior for qualified name is tested here and we pass this
&gt; test. findAttributeIndexByName(const AtomicString&amp;) does the right thing
&gt; when the attribute has a prefix:
&gt; attribute.name().toString() == caseAdjustedName
&gt; 
&gt; Based on this, I believe I should rename localName / name in the
&gt; implementation to qualifiedName, to match the IDL and the spec.

https://bugs.webkit.org/show_bug.cgi?id=187347</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344202</attachid>
            <date>2018-07-03 12:04:51 -0700</date>
            <delta_ts>2018-07-03 13:46:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186883-20180703120451.patch</filename>
            <type>text/plain</type>
            <size>12564</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzNDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NhMmQxYWFmZGExZDNm
NmY0ODA4OTMyZDRiMjIxNTBhY2M4MzJkNC4uMWVmYTU2OGVhMGNjOThhNGMwNDJmNjVlZGNkNzE1
MTllMDk4ODhhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE4LTA3LTAzICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQg
Zm9yIEVsZW1lbnQudG9nZ2xlQXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODY4ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgRWxlbWVudC50b2dnbGVB
dHRyaWJ1dGUgYXMgcGVyOgorICAgICAgICAtIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZG9t
L2lzc3Vlcy80NjEKKyAgICAgICAgLSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1l
bGVtZW50LXRvZ2dsZWF0dHJpYnV0ZQorCisgICAgICAgIFRoaXMgd2FzIGFscmVhZHkgaW1wbGVt
ZW50ZWQgaW4gQmxpbms6CisgICAgICAgIC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2No
cm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODU0OTYwCisKKyAgICAgICAgRWRnZSBleHByZXNzZWQg
cHVibGljIHN1cHBvcnQ6CisgICAgICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9kb20v
aXNzdWVzLzQ2MSNpc3N1ZWNvbW1lbnQtMzk4MjA2MzkwCisKKyAgICAgICAgR2Vja28gaXMgd29y
a2luZyBvbiBpdDoKKyAgICAgICAgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDY5NTkyCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50Ojp0b2dnbGVBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOgorCiAyMDE4LTA3LTAzICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMjMzNDYxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDFkY2YwZThmNDYxYzcx
YjE4ZTkzZTk3NWJmOWQ1OTgzZTM5MzM3YmMuLjA5ZGFmM2Q1ZWNiMjY0NmJlZjE4NmIxNGQ5N2Vk
YzA0OGZhNjIyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEyNzIsNiArMTI3MiwzMSBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5TKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjbwogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoUXVhbGlm
aWVkTmFtZShudWxsQXRvbSgpLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogfQogCisvLyBo
dHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1lbGVtZW50LXRvZ2dsZWF0dHJpYnV0ZQor
RXhjZXB0aW9uT3I8Ym9vbD4gRWxlbWVudDo6dG9nZ2xlQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lLCBzdGQ6Om9wdGlvbmFsPGJvb2w+IGZvcmNlKQoreworICAgIGlmICgh
RG9jdW1lbnQ6OmlzVmFsaWROYW1lKGxvY2FsTmFtZSkpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgfTsKKworICAgIHN5bmNocm9uaXplQXR0cmlidXRl
KGxvY2FsTmFtZSk7CisKKyAgICBhdXRvIGNhc2VBZGp1c3RlZExvY2FsTmFtZSA9IHNob3VsZEln
bm9yZUF0dHJpYnV0ZUNhc2UoKnRoaXMpID8gbG9jYWxOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkgOiBsb2NhbE5hbWU7CisgICAgdW5zaWduZWQgaW5kZXggPSBlbGVtZW50RGF0YSgpID8g
ZWxlbWVudERhdGEoKS0+ZmluZEF0dHJpYnV0ZUluZGV4QnlOYW1lKGNhc2VBZGp1c3RlZExvY2Fs
TmFtZSwgZmFsc2UpIDogRWxlbWVudERhdGE6OmF0dHJpYnV0ZU5vdEZvdW5kOworICAgIGlmIChp
bmRleCA9PSBFbGVtZW50RGF0YTo6YXR0cmlidXRlTm90Rm91bmQpIHsKKyAgICAgICAgaWYgKCFm
b3JjZSB8fCAqZm9yY2UpIHsKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4
LCBRdWFsaWZpZWROYW1lIHsgbnVsbEF0b20oKSwgY2FzZUFkanVzdGVkTG9jYWxOYW1lLCBudWxs
QXRvbSgpIH0sIGVtcHR5U3RyaW5nKCksIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmli
dXRlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWZvcmNlIHx8ICEqZm9yY2UpIHsKKyAgICAgICAg
cmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5
QXR0cmlidXRlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogRXhjZXB0aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IGlmICghRG9jdW1lbnQ6OmlzVmFsaWROYW1lKGxvY2FsTmFtZSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApp
bmRleCBjOTgwNmFiNThiNTFlZGY4OThiNTdhMTQ4NzRiMWIyYzdkN2ZiMzI4Li5iNzgyZGIyODdm
ZGNkNzZiYWEzMTE2YWFmZjcxYjdmOThlM2JiYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTEx
NCw2ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFF1YWxpZmllZE5h
bWU+IHBhcnNlQXR0cmlidXRlTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKTsKIAorICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHRvZ2dsZUF0dHJpYnV0ZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gZm9yY2UpOworCiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBnZXRJZEF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZvaWQg
c2V0SWRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmlk
bAppbmRleCBjMjk4NWFmOTU4YzZkYWMyZmMzOGE0ZGYxMzNjMThiZTMwYWM5YTdjLi42ZWRmNzI2
YzE3ZTE4NDllMzcxZTgwYWMyN2FiNGQwMjJhYjZlNjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRs
CkBAIC00NCw2ICs0NCw3IEBACiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0g
dm9pZCBzZXRBdHRyaWJ1dGVOUyhET01TdHJpbmc/IG5hbWVzcGFjZVVSSSwgRE9NU3RyaW5nIHF1
YWxpZmllZE5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CiAgICAgW0NFUmVhY3Rpb25zXSB2b2lkIHJl
bW92ZUF0dHJpYnV0ZShET01TdHJpbmcgcXVhbGlmaWVkTmFtZSk7CiAgICAgW0NFUmVhY3Rpb25z
XSB2b2lkIHJlbW92ZUF0dHJpYnV0ZU5TKERPTVN0cmluZz8gbmFtZXNwYWNlVVJJLCBET01TdHJp
bmcgbG9jYWxOYW1lKTsKKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBib29s
ZWFuIHRvZ2dsZUF0dHJpYnV0ZShET01TdHJpbmcgcXVhbGlmaWVkTmFtZSwgb3B0aW9uYWwgYm9v
bGVhbiBmb3JjZSk7CiAgICAgYm9vbGVhbiBoYXNBdHRyaWJ1dGUoRE9NU3RyaW5nIHF1YWxpZmll
ZE5hbWUpOwogICAgIGJvb2xlYW4gaGFzQXR0cmlidXRlTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VV
UkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCA1NTFkNmViYWQwMjM2OTU5NzNkOWU5MDgyYmUwMzAwMzZmMGY1OThiLi5iMGE2Zjc4NDE5
ODM0MDdmOGQ1NTIzYmZkMzUzYjQyMmZkYWY1NDQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOC0wNy0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBFbGVtZW50LnRvZ2ds
ZUF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg2ODgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wb3J0IFdQVCB0ZXN0IGNvdmVyYWdlIGZyb206CisgICAgICAgIGh0dHBzOi8vZ2l0aHVi
LmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2NvbW1pdC9jM2RiMDE4Yjk2NjgxYWYzYzczZWMz
MzFlY2MwMWQzOGU0OGI4YjEwCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25v
ZGVzL2F0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9kb20vbm9kZXMvYXR0cmlidXRlcy5odG1sOgorCiAyMDE4LTA3LTAzICBGcmVkZXJpYyBXYW5n
ICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbXBvcnQgV1BUIGluZnJhc3RydWN0dXJl
IHRlc3RzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2RvbS9ub2Rlcy9hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL2F0dHJpYnV0ZXMtZXhwZWN0
ZWQudHh0CmluZGV4IGQwZTJiYjZmMGI2YWE5ZGQ3OWRjOWFjMWJkZTE3MDYxNjA4ZDc5OGYuLmJk
ODU0NTdhNDE0ZjE0YjFmNDYyZWMxMDQxZTJmOWM5ZWU1OWM4NGQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL2F0dHJpYnV0
ZXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvZG9tL25vZGVzL2F0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsMTQg
QEAKIAorUEFTUyBXaGVuIHF1YWxpZmllZE5hbWUgZG9lcyBub3QgbWF0Y2ggdGhlIE5hbWUgcHJv
ZHVjdGlvbiwgYW4gSU5WQUxJRF9DSEFSQUNURVJfRVJSIGV4Y2VwdGlvbiBpcyB0byBiZSB0aHJv
d24uICh0b2dnbGVBdHRyaWJ1dGUpIAorUEFTUyBXaGVuIHF1YWxpZmllZE5hbWUgZG9lcyBub3Qg
bWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbiwgYW4gSU5WQUxJRF9DSEFSQUNURVJfRVJSIGV4Y2Vw
dGlvbiBpcyB0byBiZSB0aHJvd24sIGV2ZW4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHBy
ZXNlbnQuICh0b2dnbGVBdHRyaWJ1dGUpIAorUEFTUyB0b2dnbGVBdHRyaWJ1dGUgc2hvdWxkIGxv
d2VyY2FzZSBpdHMgbmFtZSBhcmd1bWVudCAodXBwZXIgY2FzZSBhdHRyaWJ1dGUpIAorUEFTUyB0
b2dnbGVBdHRyaWJ1dGUgc2hvdWxkIGxvd2VyY2FzZSBpdHMgbmFtZSBhcmd1bWVudCAobWl4ZWQg
Y2FzZSBhdHRyaWJ1dGUpIAorUEFTUyB0b2dnbGVBdHRyaWJ1dGUgc2hvdWxkIG5vdCB0aHJvdyBl
dmVuIHdoZW4gcXVhbGlmaWVkTmFtZSBzdGFydHMgd2l0aCAneG1sbnMnIAorUEFTUyBCYXNpYyBm
dW5jdGlvbmFsaXR5IHNob3VsZCBiZSBpbnRhY3QuICh0b2dnbGVBdHRyaWJ1dGUpIAorUEFTUyB0
b2dnbGVBdHRyaWJ1dGUgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG9yZGVyIG9mIHByZXZpb3VzbHkg
c2V0IGF0dHJpYnV0ZXMuIAorUEFTUyB0b2dnbGVBdHRyaWJ1dGUgc2hvdWxkIHNldCB0aGUgZmly
c3QgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgCitQQVNTIHRvZ2dsZUF0dHJpYnV0ZSBz
aG91bGQgc2V0IHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gcXVhbGlmaWVkIG5hbWUgCitQ
QVNTIFRvZ2dsaW5nIGVsZW1lbnQgd2l0aCBpbmxpbmUgc3R5bGUgc2hvdWxkIG1ha2UgaW5saW5l
IHN0eWxlIGRpc2FwcGVhciAKIFBBU1MgV2hlbiBxdWFsaWZpZWROYW1lIGRvZXMgbm90IG1hdGNo
IHRoZSBOYW1lIHByb2R1Y3Rpb24sIGFuIElOVkFMSURfQ0hBUkFDVEVSX0VSUiBleGNlcHRpb24g
aXMgdG8gYmUgdGhyb3duLiAoc2V0QXR0cmlidXRlKSAKIFBBU1MgV2hlbiBxdWFsaWZpZWROYW1l
IGRvZXMgbm90IG1hdGNoIHRoZSBOYW1lIHByb2R1Y3Rpb24sIGFuIElOVkFMSURfQ0hBUkFDVEVS
X0VSUiBleGNlcHRpb24gaXMgdG8gYmUgdGhyb3duLCBldmVuIGlmIHRoZSBhdHRyaWJ1dGUgaXMg
YWxyZWFkeSBwcmVzZW50LiAoc2V0QXR0cmlidXRlKSAKIFBBU1Mgc2V0QXR0cmlidXRlIHNob3Vs
ZCBsb3dlcmNhc2UgaXRzIG5hbWUgYXJndW1lbnQgKHVwcGVyIGNhc2UgYXR0cmlidXRlKSAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9t
L25vZGVzL2F0dHJpYnV0ZXMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvZG9tL25vZGVzL2F0dHJpYnV0ZXMuaHRtbAppbmRleCA5NzQ2Y2M2ZDVhNTE1
OTlmOGE0OWU5OWYyOTBkNWExNDJkZTg3NTE5Li4yMTE4ODkzM2VhNDNlN2U4NDg4OGMyN2JjNjAz
YTVlMmJiMGJmYWExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2RvbS9ub2Rlcy9hdHRyaWJ1dGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvYXR0cmlidXRlcy5odG1s
CkBAIC0yMCw2ICsyMCwxMjggQEAKIHZhciBYTUwgPSAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5
OTgvbmFtZXNwYWNlIgogdmFyIFhNTE5TID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMv
IgogCisvLyB0b2dnbGVBdHRyaWJ1dGUgZXhoYXVzdGl2ZSB0ZXN0cworLy8gU3RlcCAxCit0ZXN0
KGZ1bmN0aW9uKCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb28iKQor
ICBmb3IgKHZhciBpID0gMDsgaSA8IGludmFsaWRfbmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICBh
c3NlcnRfdGhyb3dzKCJJTlZBTElEX0NIQVJBQ1RFUl9FUlIiLCBmdW5jdGlvbigpIHsgZWwudG9n
Z2xlQXR0cmlidXRlKGludmFsaWRfbmFtZXNbaV0sIHRydWUpIH0pCisgIH0KKyAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpbnZhbGlkX25hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgYXNzZXJ0X3Rocm93
cygiSU5WQUxJRF9DSEFSQUNURVJfRVJSIiwgZnVuY3Rpb24oKSB7IGVsLnRvZ2dsZUF0dHJpYnV0
ZShpbnZhbGlkX25hbWVzW2ldKSB9KQorICB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgaW52YWxp
ZF9uYW1lcy5sZW5ndGg7IGkrKykgeworICAgIGFzc2VydF90aHJvd3MoIklOVkFMSURfQ0hBUkFD
VEVSX0VSUiIsIGZ1bmN0aW9uKCkgeyBlbC50b2dnbGVBdHRyaWJ1dGUoaW52YWxpZF9uYW1lc1tp
XSwgZmFsc2UpIH0pCisgIH0KK30sICJXaGVuIHF1YWxpZmllZE5hbWUgZG9lcyBub3QgbWF0Y2gg
dGhlIE5hbWUgcHJvZHVjdGlvbiwgYW4gIiArCisgICAiSU5WQUxJRF9DSEFSQUNURVJfRVJSIGV4
Y2VwdGlvbiBpcyB0byBiZSB0aHJvd24uICh0b2dnbGVBdHRyaWJ1dGUpIikKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0MiIpCisgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICBhc3NlcnRf
dGhyb3dzKCJJTlZBTElEX0NIQVJBQ1RFUl9FUlIiLCBmdW5jdGlvbigpIHsKKyAgICAgIGVsLmNo
aWxkcmVuW2ldLnRvZ2dsZUF0dHJpYnV0ZSgifiIsIGZhbHNlKQorICAgIH0pCisgIH0KKyAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgIGFzc2VydF90
aHJvd3MoIklOVkFMSURfQ0hBUkFDVEVSX0VSUiIsIGZ1bmN0aW9uKCkgeworICAgICAgZWwuY2hp
bGRyZW5baV0udG9nZ2xlQXR0cmlidXRlKCJ+IikKKyAgICB9KQorICB9CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgZWwuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICBhc3NlcnRfdGhyb3dzKCJJ
TlZBTElEX0NIQVJBQ1RFUl9FUlIiLCBmdW5jdGlvbigpIHsKKyAgICAgIGVsLmNoaWxkcmVuW2ld
LnRvZ2dsZUF0dHJpYnV0ZSgifiIsIHRydWUpCisgICAgfSkKKyAgfQorfSwgIldoZW4gcXVhbGlm
aWVkTmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgTmFtZSBwcm9kdWN0aW9uLCBhbiAiICsKKyAgICJJ
TlZBTElEX0NIQVJBQ1RFUl9FUlIgZXhjZXB0aW9uIGlzIHRvIGJlIHRocm93biwgZXZlbiBpZiB0
aGUgYXR0cmlidXRlICIgKworICAgImlzIGFscmVhZHkgcHJlc2VudC4gKHRvZ2dsZUF0dHJpYnV0
ZSkiKQorCisvLyBTdGVwIDIKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpCisgIGFzc2VydF90cnVlKGVsLnRvZ2dsZUF0dHJpYnV0ZSgi
QUxJR04iKSkKKyAgYXNzZXJ0X3RydWUoIWVsLmhhc0F0dHJpYnV0ZU5TKCIiLCAiQUxJR04iKSkK
KyAgYXNzZXJ0X3RydWUoZWwuaGFzQXR0cmlidXRlTlMoIiIsICJhbGlnbiIpKQorICBhc3NlcnRf
dHJ1ZShlbC5oYXNBdHRyaWJ1dGUoImFsaWduIikpCisgIGFzc2VydF90cnVlKCFlbC50b2dnbGVB
dHRyaWJ1dGUoIkFMSUdOIikpCisgIGFzc2VydF90cnVlKCFlbC5oYXNBdHRyaWJ1dGVOUygiIiwg
IkFMSUdOIikpCisgIGFzc2VydF90cnVlKCFlbC5oYXNBdHRyaWJ1dGVOUygiIiwgImFsaWduIikp
CisgIGFzc2VydF90cnVlKCFlbC5oYXNBdHRyaWJ1dGUoImFsaWduIikpCit9LCAidG9nZ2xlQXR0
cmlidXRlIHNob3VsZCBsb3dlcmNhc2UgaXRzIG5hbWUgYXJndW1lbnQgKHVwcGVyIGNhc2UgYXR0
cmlidXRlKSIpCit0ZXN0KGZ1bmN0aW9uKCkgeworICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKQorICBhc3NlcnRfdHJ1ZShlbC50b2dnbGVBdHRyaWJ1dGUoIkNIRUVzZUNh
S2UiKSkKKyAgYXNzZXJ0X3RydWUoIWVsLmhhc0F0dHJpYnV0ZU5TKCIiLCAiQ0hFRXNlQ2FLZSIp
KQorICBhc3NlcnRfdHJ1ZShlbC5oYXNBdHRyaWJ1dGVOUygiIiwgImNoZWVzZWNha2UiKSkKKyAg
YXNzZXJ0X3RydWUoZWwuaGFzQXR0cmlidXRlKCJjaGVlc2VjYWtlIikpCit9LCAidG9nZ2xlQXR0
cmlidXRlIHNob3VsZCBsb3dlcmNhc2UgaXRzIG5hbWUgYXJndW1lbnQgKG1peGVkIGNhc2UgYXR0
cmlidXRlKSIpCisKKy8vIFN0ZXAgMwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGVsID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZm9vIikKKyAgdmFyIHRlc3RzID0gWyJ4bWxucyIsICJ4bWxu
czphIiwgInhtbG5zeCIsICJ4bWxuczAiXQorICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgaSsrKSB7CisgICAgYXNzZXJ0X3RydWUoZWwudG9nZ2xlQXR0cmlidXRlKHRlc3RzW2ld
KSk7CisgICAgYXNzZXJ0X3RydWUoZWwuaGFzQXR0cmlidXRlKHRlc3RzW2ldKSk7CisgIH0KK30s
ICJ0b2dnbGVBdHRyaWJ1dGUgc2hvdWxkIG5vdCB0aHJvdyBldmVuIHdoZW4gcXVhbGlmaWVkTmFt
ZSBzdGFydHMgd2l0aCAneG1sbnMnIikKKworLy8gU3RlcCA0Cit0ZXN0KGZ1bmN0aW9uKCkgewor
ICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb28iKQorICBmb3IgKHZhciBpID0g
MDsgaSA8IHZhbGlkX25hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgYXNzZXJ0X3RydWUoZWwudG9n
Z2xlQXR0cmlidXRlKHZhbGlkX25hbWVzW2ldKSkKKyAgICBhc3NlcnRfdHJ1ZShlbC5oYXNBdHRy
aWJ1dGUodmFsaWRfbmFtZXNbaV0pKQorICAgIGFzc2VydF90cnVlKCFlbC50b2dnbGVBdHRyaWJ1
dGUodmFsaWRfbmFtZXNbaV0pKQorICAgIGFzc2VydF90cnVlKCFlbC5oYXNBdHRyaWJ1dGUodmFs
aWRfbmFtZXNbaV0pKQorICAgIC8vIENoZWNrIHVzaW5nIGZvcmNlIGF0dHIKKyAgICBhc3NlcnRf
dHJ1ZShlbC50b2dnbGVBdHRyaWJ1dGUodmFsaWRfbmFtZXNbaV0sIHRydWUpKQorICAgIGFzc2Vy
dF90cnVlKGVsLmhhc0F0dHJpYnV0ZSh2YWxpZF9uYW1lc1tpXSkpCisgICAgYXNzZXJ0X3RydWUo
ZWwudG9nZ2xlQXR0cmlidXRlKHZhbGlkX25hbWVzW2ldLCB0cnVlKSkKKyAgICBhc3NlcnRfdHJ1
ZShlbC5oYXNBdHRyaWJ1dGUodmFsaWRfbmFtZXNbaV0pKQorICAgIGFzc2VydF90cnVlKCFlbC50
b2dnbGVBdHRyaWJ1dGUodmFsaWRfbmFtZXNbaV0sIGZhbHNlKSkKKyAgICBhc3NlcnRfdHJ1ZSgh
ZWwuaGFzQXR0cmlidXRlKHZhbGlkX25hbWVzW2ldKSkKKyAgfQorfSwgIkJhc2ljIGZ1bmN0aW9u
YWxpdHkgc2hvdWxkIGJlIGludGFjdC4gKHRvZ2dsZUF0dHJpYnV0ZSkiKQorCisvLyBTdGVwIDUK
K3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZv
byIpCisgIGVsLnRvZ2dsZUF0dHJpYnV0ZSgiYSIpCisgIGVsLnRvZ2dsZUF0dHJpYnV0ZSgiYiIp
CisgIGVsLnNldEF0dHJpYnV0ZSgiYSIsICJ0aGluZyIpCisgIGVsLnRvZ2dsZUF0dHJpYnV0ZSgi
YyIpCisgIGF0dHJpYnV0ZXNfYXJlKGVsLCBbWyJhIiwgInRoaW5nIl0sCisgICAgICAgICAgICAg
ICAgICAgICAgWyJiIiwgIiJdLAorICAgICAgICAgICAgICAgICAgICAgIFsiYyIsICIiXV0pCit9
LCAidG9nZ2xlQXR0cmlidXRlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiBwcmV2aW91
c2x5IHNldCBhdHRyaWJ1dGVzLiIpCit0ZXN0KGZ1bmN0aW9uKCkgeworICB2YXIgZWwgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJiYXoiKQorICBlbC5zZXRBdHRyaWJ1dGVOUygiYWIiLCAiYXR0
ciIsICJmYWlsIikKKyAgZWwuc2V0QXR0cmlidXRlTlMoImtsIiwgImF0dHIiLCAicGFzcyIpCisg
IGVsLnRvZ2dsZUF0dHJpYnV0ZSgiYXR0ciIpCisgIGF0dHJpYnV0ZXNfYXJlKGVsLCBbWyJhdHRy
IiwgInBhc3MiLCAia2wiXV0pCit9LCAidG9nZ2xlQXR0cmlidXRlIHNob3VsZCBzZXQgdGhlIGZp
cnN0IGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIikKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IC8vIEJhc2VkIG9uIGEgdGVzdCBieSBEYXZpZCBGbGFuYWdhbi4KKyAgdmFyIGVsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiYmF6IikKKyAgZWwuc2V0QXR0cmlidXRlTlMoImZvbyIsICJmb286
YmFyIiwgIjEiKTsKKyAgZWwuc2V0QXR0cmlidXRlTlMoImZvbyIsICJmb286YmF0IiwgIjIiKTsK
KyAgYXNzZXJ0X2VxdWFscyhlbC5nZXRBdHRyaWJ1dGUoImZvbzpiYXIiKSwgIjEiKQorICBhc3Nl
cnRfZXF1YWxzKGVsLmdldEF0dHJpYnV0ZSgiZm9vOmJhdCIpLCAiMiIpCisgIGF0dHJfaXMoZWwu
YXR0cmlidXRlc1swXSwgIjEiLCAiYmFyIiwgImZvbyIsICJmb28iLCAiZm9vOmJhciIpCisgIGF0
dHJfaXMoZWwuYXR0cmlidXRlc1sxXSwgIjIiLCAiYmF0IiwgImZvbyIsICJmb28iLCAiZm9vOmJh
dCIpCisgIGVsLnRvZ2dsZUF0dHJpYnV0ZSgiZm9vOmJhciIpOworICBhc3NlcnRfdHJ1ZSghZWwu
aGFzQXR0cmlidXRlKCJmb286YmFyIikpCisgIGF0dHJfaXMoZWwuYXR0cmlidXRlc1swXSwgIjIi
LCAiYmF0IiwgImZvbyIsICJmb28iLCAiZm9vOmJhdCIpCit9LCAidG9nZ2xlQXR0cmlidXRlIHNo
b3VsZCBzZXQgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBxdWFsaWZpZWQgbmFtZSIpCisK
K3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZv
byIpCisgIGVsLnN0eWxlID0gImNvbG9yOiByZWQ7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIgor
ICBhc3NlcnRfZXF1YWxzKGVsLnRvZ2dsZUF0dHJpYnV0ZSgic3R5bGUiKSwgZmFsc2UpCit9LCAi
VG9nZ2xpbmcgZWxlbWVudCB3aXRoIGlubGluZSBzdHlsZSBzaG91bGQgbWFrZSBpbmxpbmUgc3R5
bGUgZGlzYXBwZWFyIikKKwogLy8gc2V0QXR0cmlidXRlIGV4aGF1c3RpdmUgdGVzdHMKIC8vIFN0
ZXAgMQogdGVzdChmdW5jdGlvbigpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>