<?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>144822</bug_id>
          
          <creation_ts>2015-05-08 18:03:46 -0700</creation_ts>
          <short_desc>Element Traversal is not just Elements anymore</short_desc>
          <delta_ts>2015-05-09 15:02:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>144825</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1093369</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-05-08 18:03:46 -0700</bug_when>
    <thetext>Element Traversal is not just Elements anymore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093372</commentid>
    <comment_count>1</comment_count>
      <attachid>252760</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-05-08 18:09:22 -0700</bug_when>
    <thetext>Created attachment 252760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093374</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-05-08 18:15:37 -0700</bug_when>
    <thetext>Committed r184034: &lt;http://trac.webkit.org/changeset/184034&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093386</commentid>
    <comment_count>3</comment_count>
      <attachid>252760</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-08 19:51:00 -0700</bug_when>
    <thetext>Comment on attachment 252760
Patch

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

&gt; Source/WebCore/dom/CharacterData.idl:44
&gt; +    // From the NonDocumentTypeChildNode interface - https://dom.spec.whatwg.org/#nondocumenttypechildnode
&gt; +    // FIXME: Move this to a seperate NonDocumentTypeChildNode IDL file when one exists.
&gt; +    readonly attribute Element previousElementSibling;
&gt; +    readonly attribute Element nextElementSibling;

Is there a reason not to put these in Node.idl instead?

There’s a misspelling in all these comments, by the way, separate with an e instead of an a.

&gt; Source/WebCore/dom/ContainerNode.cpp:916
&gt; +    ASSERT(is&lt;Document&gt;(*this) || is&lt;DocumentFragment&gt;(*this) || is&lt;Element&gt;(*this));

Why do we need to assert this?

&gt; Source/WebCore/dom/ContainerNode.cpp:923
&gt; +    ASSERT(is&lt;Document&gt;(*this) || is&lt;DocumentFragment&gt;(*this) || is&lt;Element&gt;(*this));

Why do we need to assert this?

&gt; Source/WebCore/dom/ContainerNode.cpp:930
&gt; +    ASSERT(is&lt;Document&gt;(*this) || is&lt;DocumentFragment&gt;(*this) || is&lt;Element&gt;(*this));

Why do we need to assert this?

&gt; Source/WebCore/dom/ContainerNode.cpp:937
&gt; +    Node* n = firstChild();
&gt; +    while (n) {
&gt; +        count += n-&gt;isElementNode();
&gt; +        n = n-&gt;nextSibling();
&gt; +    }

Since you moved this, how about a for loop instead of a while loop?

&gt; Source/WebCore/dom/Node.cpp:435
&gt; +    ASSERT(is&lt;CharacterData&gt;(*this) || is&lt;Element&gt;(*this));

Why do we need to assert this?

&gt; Source/WebCore/dom/Node.cpp:442
&gt; +    ASSERT(is&lt;CharacterData&gt;(*this) || is&lt;Element&gt;(*this));

Why do we need to assert this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093387</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-08 19:57:08 -0700</bug_when>
    <thetext>This broke js/dom/dom-static-property-for-in-iteration.html in a mostly harmless looking way:

https://build.webkit.org/results/Apple%20Mavericks%20Release%20WK1%20(Tests)/r184034%20(14583)/js/dom/dom-static-property-for-in-iteration-pretty-diff.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093395</commentid>
    <comment_count>5</comment_count>
      <attachid>252760</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-05-08 21:36:02 -0700</bug_when>
    <thetext>Comment on attachment 252760
Patch

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

&gt;&gt; Source/WebCore/dom/CharacterData.idl:44
&gt;&gt; +    readonly attribute Element nextElementSibling;
&gt; 
&gt; Is there a reason not to put these in Node.idl instead?
&gt; 
&gt; There’s a misspelling in all these comments, by the way, separate with an e instead of an a.

Based on the name, these should not be exposed on Document so having them in Node.idl would cause this. However, I don&apos;t understand why we don&apos;t create this new NonDocumentTypeChildNode interface. I believe I added support for implements idl statements to our Bindings generator iirc so it should be trivial and it would avoid the IDL code duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093396</commentid>
    <comment_count>6</comment_count>
      <attachid>252760</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-05-08 21:43:37 -0700</bug_when>
    <thetext>Comment on attachment 252760
Patch

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

&gt;&gt; Source/WebCore/dom/ContainerNode.cpp:937
&gt;&gt; +    }
&gt; 
&gt; Since you moved this, how about a for loop instead of a while loop?

for (auto&amp; element : childrenOfType&lt;Element&gt;(*this))
  ++count;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093397</commentid>
    <comment_count>7</comment_count>
      <attachid>252760</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-05-08 21:52:00 -0700</bug_when>
    <thetext>Comment on attachment 252760
Patch

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

&gt; Source/WebCore/dom/Element.idl:130
&gt; +    // From the ParentNode interface - https://dom.spec.whatwg.org/#interface-parentnode

We already have ChildNode.idl, we should definitely add ParentNode.idl and avoid the IDL duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093399</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-08 22:38:04 -0700</bug_when>
    <thetext>&gt; This broke js/dom/dom-static-property-for-in-iteration.html in a mostly harmless looking way:

And EWS would have told you that.

Landed new results in r184036. Please consider addressing comments from Darin and Chris though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093402</commentid>
    <comment_count>9</comment_count>
      <attachid>252760</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-05-08 22:57:48 -0700</bug_when>
    <thetext>Comment on attachment 252760
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/CharacterData.idl:44
&gt;&gt;&gt; +    readonly attribute Element nextElementSibling;
&gt;&gt; 
&gt;&gt; Is there a reason not to put these in Node.idl instead?
&gt;&gt; 
&gt;&gt; There’s a misspelling in all these comments, by the way, separate with an e instead of an a.
&gt; 
&gt; Based on the name, these should not be exposed on Document so having them in Node.idl would cause this. However, I don&apos;t understand why we don&apos;t create this new NonDocumentTypeChildNode interface. I believe I added support for implements idl statements to our Bindings generator iirc so it should be trivial and it would avoid the IDL code duplication.

I&apos;ll do the split in https://bugs.webkit.org/show_bug.cgi?id=144825.

&gt;&gt; Source/WebCore/dom/Element.idl:130
&gt;&gt; +    // From the ParentNode interface - https://dom.spec.whatwg.org/#interface-parentnode
&gt; 
&gt; We already have ChildNode.idl, we should definitely add ParentNode.idl and avoid the IDL duplication.

I&apos;ll do the split in https://bugs.webkit.org/show_bug.cgi?id=144825.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093447</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-05-09 15:02:33 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 252760 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252760&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/CharacterData.idl:44
&gt; &gt; +    // From the NonDocumentTypeChildNode interface - https://dom.spec.whatwg.org/#nondocumenttypechildnode
&gt; &gt; +    // FIXME: Move this to a seperate NonDocumentTypeChildNode IDL file when one exists.
&gt; &gt; +    readonly attribute Element previousElementSibling;
&gt; &gt; +    readonly attribute Element nextElementSibling;
&gt; 
&gt; Is there a reason not to put these in Node.idl instead?

They should not be exposed on all Nodes as per the DOM spec.

&gt; 
&gt; There’s a misspelling in all these comments, by the way, separate with an e
&gt; instead of an a.
&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.cpp:916
&gt; &gt; +    ASSERT(is&lt;Document&gt;(*this) || is&lt;DocumentFragment&gt;(*this) || is&lt;Element&gt;(*this));
&gt; 
&gt; Why do we need to assert this?
&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.cpp:923
&gt; &gt; +    ASSERT(is&lt;Document&gt;(*this) || is&lt;DocumentFragment&gt;(*this) || is&lt;Element&gt;(*this));
&gt; 
&gt; Why do we need to assert this?

Since these functions are really only for exposing to the web (internally, we use our own traversal and iteration functions, these assert the intent of what type of Nodes these should be exposed on.  Another way to do this, which I might do at some point, is to add new classes that represent the ParentNode and NonDocumentTypeChildNode interfaces and use inheritance to enforce this. 

&gt; 
&gt; &gt; Source/WebCore/dom/ContainerNode.cpp:937
&gt; &gt; +    Node* n = firstChild();
&gt; &gt; +    while (n) {
&gt; &gt; +        count += n-&gt;isElementNode();
&gt; &gt; +        n = n-&gt;nextSibling();
&gt; &gt; +    }
&gt; 
&gt; Since you moved this, how about a for loop instead of a while loop?

Seems like a good idea. Or use our modern iterators.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252760</attachid>
            <date>2015-05-08 18:09:22 -0700</date>
            <delta_ts>2015-05-08 18:12:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144822-20150508180804.patch</filename>
            <type>text/plain</type>
            <size>21493</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDAzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE1LTA1LTA4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRWxlbWVudCBUcmF2ZXJzYWwgaXMgbm90
IGp1c3QgRWxlbWVudHMgYW55bW9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0ODIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWF0Y2ggb3RoZXIgYnJvd3NlcnMgYW5kIHRoZSBuZXcgRE9NIHNwZWMg
YXQgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnIGJ5CisgICAgICAgIGV4cG9zaW5nIHRoZSBl
bGVtZW50IHRyYXZlcnNhbCBtZXRob2RzIG9uIG5vbi1FbGVtZW50cy4KKworICAgICAgICAtIE1h
a2VzIGZpcnN0RWxlbWVudENoaWxkLCBsYXN0RWxlbWVudENoaWxkIGFuZCBjaGlsZEVsZW1lbnRD
b3VudCBhdmFpbGFibGUgb24KKyAgICAgICAgICBEb2N1bWVudCBhbmQgRG9jdW1lbnRGcmFnbWVu
dCBpbiBhZGRpdGlvbiB0byBFbGVtZW50LgorICAgICAgICAtIE1ha2VzIG5leHRFbGVtZW50U2li
bGluZyBhbmQgcHJldmlvdXNFbGVtZW50U2libGluZyBhdmFpbGFibGUgb24gQ2hhcmFjdGVyRGF0
YQorICAgICAgICAgIGluIGFkZGl0aW9uIHRvIEVsZW1lbnQuCisKKyAgICAgICAgVGVzdHM6IGZh
c3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWNoYXJhY3Rlci1kYXRhLmh0bWwKKyAgICAgICAg
ICAgICAgIGZhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50LWZyYWdtZW50Lmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50
Lmh0bWwKKworICAgICAgICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmlkbDoKKyAgICAgICAgRXhwb3Nl
IG5leHRFbGVtZW50U2libGluZyBhbmQgcHJldmlvdXNFbGVtZW50U2libGluZy4KKworICAgICAg
ICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGU6OmZpcnN0RWxlbWVudENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6
Omxhc3RFbGVtZW50Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6Y2hp
bGRFbGVtZW50Q291bnQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAg
IE1vdmUgaW1wbGVtZW50YXRpb25zIG9mIGZpcnN0RWxlbWVudENoaWxkLCBsYXN0RWxlbWVudENo
aWxkIGFuZCBjaGlsZEVsZW1lbnRDb3VudCBoZXJlCisgICAgICAgIGZyb20gRWxlbWVudCB0byBt
YWtlIHRoZW0gc2hhcmVhYmxlLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnRGcmFnbWVudC5pZGw6CisgICAgICAgIEV4cG9zZSBmaXJzdEVsZW1l
bnRDaGlsZCwgbGFzdEVsZW1lbnRDaGlsZCBhbmQgY2hpbGRFbGVtZW50Q291bnQuCisKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpmaXJzdEVs
ZW1lbnRDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpsYXN0RWxl
bWVudENoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6bmV4
dEVsZW1lbnRTaWJsaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNo
aWxkRWxlbWVudENvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAg
ICAgICBNb3ZlIGVsZW1lbnQgdHJhdmVyc2FsIGZ1bmN0aW9ucyBkb3duIHRvIE5vZGUgYW5kIENv
bnRhaW5lck5vZGUuCisKKyAgICAgICAgKiBkb20vRWxlbWVudC5pZGw6CisgICAgICAgIFVwZGF0
ZSBjb21tZW50cyB0byBpbmRpY2F0ZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQg
bm93LgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cHJldmlvdXNFbGVtZW50U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpuZXh0RWxl
bWVudFNpYmxpbmcpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIE1vdmUgaW1wbGVt
ZW50YXRpb25zIG9mIG5leHRFbGVtZW50U2libGluZyBhbmQgcHJldmlvdXNFbGVtZW50U2libGlu
ZyBoZXJlCisgICAgICAgIGZyb20gRWxlbWVudCB0byBtYWtlIHRoZW0gc2hhcmVhYmxlLgorCiAy
MDE1LTA1LTA4ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4sIE1h
cnRpbiBSb2JpbnNvbiA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQ2hl
Y2tzIGZvciBERVZFTE9QTUVOVF9CVUlMRCBhcmUgYWxsIHdyb25nCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuaWRsCShyZXZpc2lvbiAxODQwMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vQ2hhcmFjdGVyRGF0YS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDExIEBA
IGludGVyZmFjZSBDaGFyYWN0ZXJEYXRhIDogTm9kZSB7CiAgICAgW09iakNMZWdhY3lVbm5hbWVk
UGFyYW1ldGVycywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHJlcGxhY2VEYXRhKFtJc0luZGV4LCBE
ZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0lzSW5kZXgsIERlZmF1bHQ9VW5kZWZpbmVk
XSBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgRE9NU3RyaW5nIGRhdGEp
OworCisgICAgLy8gRnJvbSB0aGUgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlIGludGVyZmFjZSAt
IGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbm9uZG9jdW1lbnR0eXBlY2hpbGRub2RlCisg
ICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBhIHNlcGVyYXRlIE5vbkRvY3VtZW50VHlwZUNoaWxk
Tm9kZSBJREwgZmlsZSB3aGVuIG9uZSBleGlzdHMuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVs
ZW1lbnQgcHJldmlvdXNFbGVtZW50U2libGluZzsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgRWxl
bWVudCBuZXh0RWxlbWVudFNpYmxpbmc7CiB9OwogCiBDaGFyYWN0ZXJEYXRhIGltcGxlbWVudHMg
Q2hpbGROb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNp
b24gMTg0MDMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MTEsNCArOTExLDMxIEBAIFJlZlB0cjxSYWRpb05vZGVMaXN0PiBDb250
YWluZXJOb2RlOjpyYWQKICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlz
dHMoKS5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPFJhZGlvTm9kZUxpc3Q+KCp0aGlzLCBuYW1lKTsK
IH0KIAorRWxlbWVudCogQ29udGFpbmVyTm9kZTo6Zmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdAor
eworICAgIEFTU0VSVChpczxEb2N1bWVudD4oKnRoaXMpIHx8IGlzPERvY3VtZW50RnJhZ21lbnQ+
KCp0aGlzKSB8fCBpczxFbGVtZW50PigqdGhpcykpOworCisgICAgcmV0dXJuIEVsZW1lbnRUcmF2
ZXJzYWw6OmZpcnN0Q2hpbGQoKnRoaXMpOworfQorCitFbGVtZW50KiBDb250YWluZXJOb2RlOjps
YXN0RWxlbWVudENoaWxkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8RG9jdW1lbnQ+KCp0aGlz
KSB8fCBpczxEb2N1bWVudEZyYWdtZW50PigqdGhpcykgfHwgaXM8RWxlbWVudD4oKnRoaXMpKTsK
KworICAgIHJldHVybiBFbGVtZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQoKnRoaXMpOworfQorCit1
bnNpZ25lZCBDb250YWluZXJOb2RlOjpjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzPERvY3VtZW50PigqdGhpcykgfHwgaXM8RG9jdW1lbnRGcmFnbWVudD4oKnRoaXMp
IHx8IGlzPEVsZW1lbnQ+KCp0aGlzKSk7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAg
Tm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAobikgeworICAgICAgICBjb3VudCAr
PSBuLT5pc0VsZW1lbnROb2RlKCk7CisgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOworICAg
IH0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkocmV2aXNpb24gMTg0MDMzKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0
NSwxMSBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lcyk7CiAgICAgUmVmUHRyPFJhZGlvTm9k
ZUxpc3Q+IHJhZGlvTm9kZUxpc3QoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKKyAgICAvLyBGcm9t
IHRoZSBQYXJlbnROb2RlIGludGVyZmFjZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8j
aW50ZXJmYWNlLXBhcmVudG5vZGUKKyAgICBFbGVtZW50KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNv
bnN0OworICAgIEVsZW1lbnQqIGxhc3RFbGVtZW50Q2hpbGQoKSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBjaGlsZEVsZW1lbnRDb3VudCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
Q29udGFpbmVyTm9kZShEb2N1bWVudCYsIENvbnN0cnVjdGlvblR5cGUgPSBDcmVhdGVDb250YWlu
ZXIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDE4NDAzMykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMSwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MzQyLDYgKzM0MiwxMyBAQAogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTQvV0QtZG9t
LTIwMTQwMjA0LyNkb20tZG9jdW1lbnQtb3JpZ2luCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBvcmlnaW47CiAKKyAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS12
aWV3LyNkb20tZG9jdW1lbnQtc2Nyb2xsaW5nZWxlbWVudAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBFbGVtZW50IHNjcm9sbGluZ0VsZW1lbnQ7CisKKyAgICAvLyBGcm9tIHRoZSBQYXJlbnROb2Rl
IGludGVyZmFjZSAtIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXBhcmVu
dG5vZGUKKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIGEgc2VwZXJhdGUgUGFyZW50Tm9kZSBJ
REwgZmlsZSB3aGVuIG9uZSBleGlzdHMuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQg
Zmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgbGFzdEVs
ZW1lbnRDaGlsZDsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjaGlsZEVs
ZW1lbnRDb3VudDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdt
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVu
dC5pZGwJKHJldmlzaW9uIDE4NDAzMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZy
YWdtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNSArMjQsMTEgQEAKICAg
ICAvLyBOb2RlU2VsZWN0b3IgLSBTZWxlY3RvciBBUEkKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBF
bGVtZW50IHF1ZXJ5U2VsZWN0b3IoRE9NU3RyaW5nIHNlbGVjdG9ycyk7CiAgICAgW1JhaXNlc0V4
Y2VwdGlvbl0gTm9kZUxpc3QgcXVlcnlTZWxlY3RvckFsbChET01TdHJpbmcgc2VsZWN0b3JzKTsK
KyAgICAKKyAgICAvLyBGcm9tIHRoZSBQYXJlbnROb2RlIGludGVyZmFjZSAtIGh0dHBzOi8vZG9t
LnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXBhcmVudG5vZGUKKyAgICAvLyBGSVhNRTogTW92
ZSB0aGlzIHRvIGEgc2VwZXJhdGUgUGFyZW50Tm9kZSBJREwgZmlsZSB3aGVuIG9uZSBleGlzdHMu
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAg
cmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgbGFzdEVsZW1lbnRDaGlsZDsKKyAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjaGlsZEVsZW1lbnRDb3VudDsKIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NDAzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxOSwzOCArMjYxOSw2IEBAIHZv
aWQgRWxlbWVudDo6Y2xlYXJBZnRlclBzZXVkb0VsZW1lbnQoKQogICAgIGVsZW1lbnRSYXJlRGF0
YSgpLT5zZXRBZnRlclBzZXVkb0VsZW1lbnQobnVsbHB0cik7CiB9CiAKLS8vIEVsZW1lbnRUcmF2
ZXJzYWwgQVBJCi1FbGVtZW50KiBFbGVtZW50OjpmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0Q2hpbGQoKnRoaXMpOwotfQotCi1F
bGVtZW50KiBFbGVtZW50OjpsYXN0RWxlbWVudENoaWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
RWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKCp0aGlzKTsKLX0KLQotRWxlbWVudCogRWxlbWVu
dDo6cHJldmlvdXNFbGVtZW50U2libGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEVsZW1lbnRU
cmF2ZXJzYWw6OnByZXZpb3VzU2libGluZygqdGhpcyk7Ci19Ci0KLUVsZW1lbnQqIEVsZW1lbnQ6
Om5leHRFbGVtZW50U2libGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKCp0aGlzKTsKLX0KLQotdW5zaWduZWQgRWxlbWVudDo6Y2hpbGRFbGVt
ZW50Q291bnQoKSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBOb2RlKiBu
ID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGNvdW50ICs9IG4tPmlz
RWxlbWVudE5vZGUoKTsKLSAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAg
IHJldHVybiBjb3VudDsKLX0KLQogYm9vbCBFbGVtZW50OjptYXRjaGVzUmVhZFdyaXRlUHNldWRv
Q2xhc3MoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAkocmV2aXNpb24gMTg0MDMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcxLDEzICszNzEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGlsZE5l
ZWRzU2hhZG93V2Fsa2VyKCkgY29uc3Q7CiAgICAgdm9pZCBkaWRTaGFkb3dUcmVlQXdhcmVDaGls
ZHJlbkNoYW5nZSgpOwogCi0gICAgLy8gRWxlbWVudFRyYXZlcnNhbCBBUEkKLSAgICBFbGVtZW50
KiBmaXJzdEVsZW1lbnRDaGlsZCgpIGNvbnN0OwotICAgIEVsZW1lbnQqIGxhc3RFbGVtZW50Q2hp
bGQoKSBjb25zdDsKLSAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkgY29uc3Q7
Ci0gICAgRWxlbWVudCogbmV4dEVsZW1lbnRTaWJsaW5nKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQg
Y2hpbGRFbGVtZW50Q291bnQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgYm9vbCBtYXRjaGVzUmVh
ZFdyaXRlUHNldWRvQ2xhc3MoKSBjb25zdDsKICAgICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBFbGVtZW50KiBjbG9zZXN0KGNvbnN0
IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsCShyZXZpc2lvbiAxODQwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxMiArMTI3LDE2IEBACiAgICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gRWxlbWVudCBjbG9zZXN0KERPTVN0cmluZyBzZWxlY3RvcnMpOyAgICAKICAgICBbSW1w
bGVtZW50ZWRBcz1tYXRjaGVzLCBSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gd2Via2l0TWF0Y2hl
c1NlbGVjdG9yKERPTVN0cmluZyBzZWxlY3RvcnMpOwogCi0gICAgLy8gRWxlbWVudFRyYXZlcnNh
bCBBUEkKKyAgICAvLyBGcm9tIHRoZSBQYXJlbnROb2RlIGludGVyZmFjZSAtIGh0dHBzOi8vZG9t
LnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXBhcmVudG5vZGUKKyAgICAvLyBGSVhNRTogTW92
ZSB0aGlzIHRvIGEgc2VwZXJhdGUgUGFyZW50Tm9kZSBJREwgZmlsZSB3aGVuIG9uZSBleGlzdHMu
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgZmlyc3RFbGVtZW50Q2hpbGQ7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgbGFzdEVsZW1lbnRDaGlsZDsKKyAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjaGlsZEVsZW1lbnRDb3VudDsKKworICAgIC8vIEZy
b20gdGhlIE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZSBpbnRlcmZhY2UgLSBodHRwczovL2RvbS5z
cGVjLndoYXR3Zy5vcmcvI25vbmRvY3VtZW50dHlwZWNoaWxkbm9kZQorICAgIC8vIEZJWE1FOiBN
b3ZlIHRoaXMgdG8gYSBzZXBlcmF0ZSBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUgSURMIGZpbGUg
d2hlbiBvbmUgZXhpc3RzLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50IHByZXZpb3Vz
RWxlbWVudFNpYmxpbmc7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQgbmV4dEVsZW1l
bnRTaWJsaW5nOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGNoaWxkRWxl
bWVudENvdW50OwogCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFH
RV9KQVZBU0NSSVBUCiAgICAgLy8gQ1NTT00gVmlldyBNb2R1bGUgQVBJCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCShyZXZpc2lvbiAxODQwMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudFR5cGUu
aCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50UmFyZURh
dGEuaCIKKyNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiRXZlbnREaXNw
YXRjaGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKQEAgLTQyOSw2ICs0MzAsMjAgQEAgTm9kZSogTm9kZTo6Zmlyc3REZXNjZW5kYW50
KCkgY29uc3QKICAgICByZXR1cm4gbjsKIH0KIAorRWxlbWVudCogTm9kZTo6cHJldmlvdXNFbGVt
ZW50U2libGluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzPENoYXJhY3RlckRhdGE+KCp0aGlz
KSB8fCBpczxFbGVtZW50PigqdGhpcykpOworCisgICAgcmV0dXJuIEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzU2libGluZygqdGhpcyk7Cit9CisKK0VsZW1lbnQqIE5vZGU6Om5leHRFbGVtZW50
U2libGluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzPENoYXJhY3RlckRhdGE+KCp0aGlzKSB8
fCBpczxFbGVtZW50PigqdGhpcykpOworCisgICAgcmV0dXJuIEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKCp0aGlzKTsKK30KKwogYm9vbCBOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0
cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewog
ICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKnRoaXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJl
dmlzaW9uIDE4NDAzMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMyw2ICsyMjMsMTAgQEAgcHVibGljOgogICAgIE5vZGUqIGxhc3REZXNjZW5kYW50
KCkgY29uc3Q7CiAgICAgTm9kZSogZmlyc3REZXNjZW5kYW50KCkgY29uc3Q7CiAKKyAgICAvLyBG
cm9tIHRoZSBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUgLSBodHRwczovL2RvbS5zcGVjLndoYXR3
Zy5vcmcvI25vbmRvY3VtZW50dHlwZWNoaWxkbm9kZQorICAgIEVsZW1lbnQqIHByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKSBjb25zdDsKKyAgICBFbGVtZW50KiBuZXh0RWxlbWVudFNpYmxpbmcoKSBj
b25zdDsKKwogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKIAogICAgIGJv
b2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNFbGVtZW50RmxhZyk7
IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDAzMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE1LTA1LTA4ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRWxlbWVudCBUcmF2ZXJzYWwgaXMgbm90IGp1c3Qg
RWxlbWVudHMgYW55bW9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ0ODIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIG5ldyB0ZXN0cyBmb3IgZWxlbWVudCB0cmF2ZXJzYWwgZnVuY3Rpb25zIG9u
IERvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50IGFuZCBDaGFyYWN0ZXJEYXRhLgorCisgICAgICAg
ICogZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwtb24tY2hhcmFjdGVyLWRhdGEtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9lbGVtZW50LXRyYXZlcnNhbC1vbi1jaGFy
YWN0ZXItZGF0YS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9lbGVtZW50LXRyYXZl
cnNhbC1vbi1kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9t
L2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50LWZyYWdtZW50LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwtb24tZG9jdW1lbnQtZnJh
Z21lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwt
b24tZG9jdW1lbnQuaHRtbDogQWRkZWQuCisKIDIwMTUtMDUtMDggIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLKyBnYXJkZW5p
bmcKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWNoYXJh
Y3Rlci1kYXRhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9lbGVtZW50LXRyYXZlcnNhbC1vbi1jaGFyYWN0ZXItZGF0YS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9lbGVtZW50LXRyYXZlcnNhbC1vbi1jaGFy
YWN0ZXItZGF0YS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAor
VGhpcyB0ZXN0IGNoZWNrcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGVsZW1lbnQgdHJhdmVy
c2FsIEFQSXMgb24gQ2hhcmFjdGVyRGF0YSBhcyBwYXJ0IG9mIHRoZSBOb25Eb2N1bWVudFR5cGVD
aGlsZE5vZGUgaW50ZXJmYWNlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBmaXJzdFRleHROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgaXMgbnVsbAorUEFTUyBmaXJz
dFRleHROb2RlLm5leHRFbGVtZW50U2libGluZyBpcyBlbGVtZW50CitQQVNTIGZpcnN0VGV4dE5v
ZGUubmV4dEVsZW1lbnRTaWJsaW5nLm5leHRFbGVtZW50U2libGluZyBpcyBudWxsCitQQVNTIGxh
c3RUZXh0Tm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGlzIGVsZW1lbnQKK1BBU1MgbGFzdFRl
eHROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcucHJldmlvdXNFbGVtZW50U2libGluZyBpcyBu
dWxsCitQQVNTIGxhc3RUZXh0Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgaXMgbnVsbAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWNoYXJhY3Rlci1kYXRhLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwtb24t
Y2hhcmFjdGVyLWRhdGEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L2VsZW1lbnQtdHJhdmVyc2FsLW9uLWNoYXJhY3Rlci1kYXRhLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9u
KCJUaGlzIHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZWxlbWVudCB0cmF2
ZXJzYWwgQVBJcyBvbiBDaGFyYWN0ZXJEYXRhIGFzIHBhcnQgb2YgdGhlIE5vbkRvY3VtZW50VHlw
ZUNoaWxkTm9kZSBpbnRlcmZhY2UuIik7CisKK3ZhciBjaGlsZHJlbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOwordmFyIGZpcnN0VGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgnZmlyc3QgdGV4dCBub2RlJyk7CitjaGlsZHJlbi5hcHBlbmRDaGlsZChmaXJzdFRleHRO
b2RlKTsKK3ZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOworY2hpbGRy
ZW4uYXBwZW5kQ2hpbGQoZWxlbWVudCk7CitjaGlsZHJlbi5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVDb21tZW50KCJhIGNvbW1lbnQiKSk7Cit2YXIgbGFzdFRleHROb2RlID0gZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoJ2xhc3QgdGV4dCBub2RlJyk7CitjaGlsZHJlbi5hcHBlbmRDaGlsZChs
YXN0VGV4dE5vZGUpOworY2hpbGRyZW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVu
dCgibGFzdCBjb21tZW50IikpOworCitzaG91bGRCZSgiZmlyc3RUZXh0Tm9kZS5wcmV2aW91c0Vs
ZW1lbnRTaWJsaW5nIiwgIm51bGwiKTsKK3Nob3VsZEJlKCJmaXJzdFRleHROb2RlLm5leHRFbGVt
ZW50U2libGluZyIsICJlbGVtZW50Iik7CitzaG91bGRCZSgiZmlyc3RUZXh0Tm9kZS5uZXh0RWxl
bWVudFNpYmxpbmcubmV4dEVsZW1lbnRTaWJsaW5nIiwgIm51bGwiKTsKK3Nob3VsZEJlKCJsYXN0
VGV4dE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyIsICJlbGVtZW50Iik7CitzaG91bGRCZSgi
bGFzdFRleHROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcucHJldmlvdXNFbGVtZW50U2libGlu
ZyIsICJudWxsIik7CitzaG91bGRCZSgibGFzdFRleHROb2RlLm5leHRFbGVtZW50U2libGluZyIs
ICJudWxsIik7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwtb24tZG9jdW1lbnQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRv
Y3VtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIxIEBACitUaGlzIHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgZWxlbWVudCB0cmF2ZXJzYWwgQVBJcyBvbiBEb2N1bWVudCBhcyBwYXJ0IG9mIHRoZSBQ
YXJlbnROb2RlIGludGVyZmFjZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rl
c3Qgd2l0aCBubyBjaGlsZHJlbgorUEFTUyBub0NoaWxkcmVuLmZpcnN0RWxlbWVudENoaWxkIGlz
IG51bGwKK1BBU1Mgbm9DaGlsZHJlbi5sYXN0RWxlbWVudENoaWxkIGlzIG51bGwKK1BBU1Mgbm9D
aGlsZHJlbi5jaGlsZEVsZW1lbnRDb3VudCBpcyAwCitUZXN0IHdpdGggbm8gZWxlbWVudCBjaGls
ZHJlbgorUEFTUyBub0VsZW1lbnRDaGlsZHJlbi5maXJzdEVsZW1lbnRDaGlsZCBpcyBudWxsCitQ
QVNTIG5vRWxlbWVudENoaWxkcmVuLmxhc3RFbGVtZW50Q2hpbGQgaXMgbnVsbAorUEFTUyBub0Vs
ZW1lbnRDaGlsZHJlbi5jaGlsZEVsZW1lbnRDb3VudCBpcyAwCitUZXN0IHdpdGggZWxlbWVudHMK
K1BBU1MgY2hpbGRyZW4uZmlyc3RFbGVtZW50Q2hpbGQgaXMgY2hpbGQKK1BBU1MgY2hpbGRyZW4u
bGFzdEVsZW1lbnRDaGlsZCBpcyBjaGlsZAorUEFTUyBjaGlsZHJlbi5jaGlsZEVsZW1lbnRDb3Vu
dCBpcyAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwtb24tZG9jdW1l
bnQtZnJhZ21lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50LWZyYWdtZW50LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9u
LWRvY3VtZW50LWZyYWdtZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIxIEBACitUaGlzIHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZWxlbWVu
dCB0cmF2ZXJzYWwgQVBJcyBvbiBEb2N1bWVudEZyYWdtZW50IGFzIHBhcnQgb2YgdGhlIFBhcmVu
dE5vZGUgaW50ZXJmYWNlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVGVzdCB3
aXRoIG5vIGNoaWxkcmVuCitQQVNTIG5vQ2hpbGRyZW4uZmlyc3RFbGVtZW50Q2hpbGQgaXMgbnVs
bAorUEFTUyBub0NoaWxkcmVuLmxhc3RFbGVtZW50Q2hpbGQgaXMgbnVsbAorUEFTUyBub0NoaWxk
cmVuLmNoaWxkRWxlbWVudENvdW50IGlzIDAKK1Rlc3Qgd2l0aCBubyBlbGVtZW50IGNoaWxkcmVu
CitQQVNTIG5vRWxlbWVudENoaWxkcmVuLmZpcnN0RWxlbWVudENoaWxkIGlzIG51bGwKK1BBU1Mg
bm9FbGVtZW50Q2hpbGRyZW4ubGFzdEVsZW1lbnRDaGlsZCBpcyBudWxsCitQQVNTIG5vRWxlbWVu
dENoaWxkcmVuLmNoaWxkRWxlbWVudENvdW50IGlzIDAKK1Rlc3Qgd2l0aCBlbGVtZW50cworUEFT
UyBjaGlsZHJlbi5maXJzdEVsZW1lbnRDaGlsZCBpcyBmaXJzdAorUEFTUyBjaGlsZHJlbi5sYXN0
RWxlbWVudENoaWxkIGlzIGxhc3QKK1BBU1MgY2hpbGRyZW4uY2hpbGRFbGVtZW50Q291bnQgaXMg
MgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50LWZy
YWdtZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZWxlbWVudC10
cmF2ZXJzYWwtb24tZG9jdW1lbnQtZnJhZ21lbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50LWZyYWdtZW50Lmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgZWxlbWVudCB0cmF2ZXJzYWwgQVBJcyBvbiBEb2N1bWVudEZyYWdtZW50IGFzIHBhcnQg
b2YgdGhlIFBhcmVudE5vZGUgaW50ZXJmYWNlLiIpOworCitkZWJ1ZygnVGVzdCB3aXRoIG5vIGNo
aWxkcmVuJyk7Cit2YXIgbm9DaGlsZHJlbiA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTsKK3Nob3VsZEJlKCJub0NoaWxkcmVuLmZpcnN0RWxlbWVudENoaWxkIiwgIm51bGwiKTsK
K3Nob3VsZEJlKCJub0NoaWxkcmVuLmxhc3RFbGVtZW50Q2hpbGQiLCAibnVsbCIpOworc2hvdWxk
QmUoIm5vQ2hpbGRyZW4uY2hpbGRFbGVtZW50Q291bnQiLCAiMCIpOworCitkZWJ1ZygnVGVzdCB3
aXRoIG5vIGVsZW1lbnQgY2hpbGRyZW4nKTsKK3ZhciBub0VsZW1lbnRDaGlsZHJlbiA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKK25vRWxlbWVudENoaWxkcmVuLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImNvbW1lbnQgYnV0IG5vdCBhbiBlbGVtZW50Iikp
Oworbm9FbGVtZW50Q2hpbGRyZW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
Im5vIGVsZW1lbnRzIGhlcmUiKSk7CisKK3Nob3VsZEJlKCJub0VsZW1lbnRDaGlsZHJlbi5maXJz
dEVsZW1lbnRDaGlsZCIsICJudWxsIik7CitzaG91bGRCZSgibm9FbGVtZW50Q2hpbGRyZW4ubGFz
dEVsZW1lbnRDaGlsZCIsICJudWxsIik7CitzaG91bGRCZSgibm9FbGVtZW50Q2hpbGRyZW4uY2hp
bGRFbGVtZW50Q291bnQiLCAiMCIpOworCitkZWJ1ZygnVGVzdCB3aXRoIGVsZW1lbnRzJyk7Cit2
YXIgY2hpbGRyZW4gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CitjaGlsZHJl
bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCJmaXJzdCBjb21tZW50IikpOwor
dmFyIGZpcnN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOworY2hpbGRyZW4uYXBwZW5k
Q2hpbGQoZmlyc3QpOworY2hpbGRyZW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVu
dCgiYSBjb21tZW50IikpOwordmFyIGxhc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7
CitjaGlsZHJlbi5hcHBlbmRDaGlsZChsYXN0KTsKK2NoaWxkcmVuLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUNvbW1lbnQoImxhc3QgY29tbWVudCIpKTsKKworc2hvdWxkQmUoImNoaWxkcmVu
LmZpcnN0RWxlbWVudENoaWxkIiwgImZpcnN0Iik7CitzaG91bGRCZSgiY2hpbGRyZW4ubGFzdEVs
ZW1lbnRDaGlsZCIsICJsYXN0Iik7CitzaG91bGRCZSgiY2hpbGRyZW4uY2hpbGRFbGVtZW50Q291
bnQiLCAiMiIpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVyc2FsLW9uLWRvY3VtZW50Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZWxlbWVudC10cmF2ZXJzYWwtb24tZG9jdW1lbnQu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2VsZW1lbnQtdHJhdmVy
c2FsLW9uLWRvY3VtZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZWxlbWVudCB0cmF2ZXJzYWwgQVBJcyBvbiBEb2N1bWVu
dCBhcyBwYXJ0IG9mIHRoZSBQYXJlbnROb2RlIGludGVyZmFjZS4iKTsKKworZnVuY3Rpb24gY3Jl
YXRlRW1wdHlEb2N1bWVudCgpCit7CisgICAgdmFyIGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0
aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpOworICAgIHdoaWxlIChkb2MuZmlyc3RDaGlsZCkgewor
ICAgICAgICBkb2MucmVtb3ZlQ2hpbGQoZG9jLmZpcnN0Q2hpbGQpOworICAgIH0KKyAgICByZXR1
cm4gZG9jOworfQorCitkZWJ1ZygnVGVzdCB3aXRoIG5vIGNoaWxkcmVuJyk7Cit2YXIgbm9DaGls
ZHJlbiA9IGNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKK3Nob3VsZEJlKCJub0NoaWxkcmVuLmZpcnN0
RWxlbWVudENoaWxkIiwgIm51bGwiKTsKK3Nob3VsZEJlKCJub0NoaWxkcmVuLmxhc3RFbGVtZW50
Q2hpbGQiLCAibnVsbCIpOworc2hvdWxkQmUoIm5vQ2hpbGRyZW4uY2hpbGRFbGVtZW50Q291bnQi
LCAiMCIpOworCitkZWJ1ZygnVGVzdCB3aXRoIG5vIGVsZW1lbnQgY2hpbGRyZW4nKTsKK3ZhciBu
b0VsZW1lbnRDaGlsZHJlbiA9IGNyZWF0ZUVtcHR5RG9jdW1lbnQoKTsKK25vRWxlbWVudENoaWxk
cmVuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImNvbW1lbnQgYnV0IG5vdCBh
biBlbGVtZW50IikpOworCitzaG91bGRCZSgibm9FbGVtZW50Q2hpbGRyZW4uZmlyc3RFbGVtZW50
Q2hpbGQiLCAibnVsbCIpOworc2hvdWxkQmUoIm5vRWxlbWVudENoaWxkcmVuLmxhc3RFbGVtZW50
Q2hpbGQiLCAibnVsbCIpOworc2hvdWxkQmUoIm5vRWxlbWVudENoaWxkcmVuLmNoaWxkRWxlbWVu
dENvdW50IiwgIjAiKTsKKworZGVidWcoJ1Rlc3Qgd2l0aCBlbGVtZW50cycpOwordmFyIGNoaWxk
cmVuID0gY3JlYXRlRW1wdHlEb2N1bWVudCgpOworY2hpbGRyZW4uYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlQ29tbWVudCgiZmlyc3QgY29tbWVudCIpKTsKK3ZhciBjaGlsZCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKK2NoaWxkcmVuLmFwcGVuZENoaWxkKGNoaWxkKTsKK2NoaWxk
cmVuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImEgY29tbWVudCIpKTsKKwor
c2hvdWxkQmUoImNoaWxkcmVuLmZpcnN0RWxlbWVudENoaWxkIiwgImNoaWxkIik7CitzaG91bGRC
ZSgiY2hpbGRyZW4ubGFzdEVsZW1lbnRDaGlsZCIsICJjaGlsZCIpOworc2hvdWxkQmUoImNoaWxk
cmVuLmNoaWxkRWxlbWVudENvdW50IiwgIjEiKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>
<flag name="review"
          id="277602"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>