<?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>192844</bug_id>
          
          <creation_ts>2018-12-18 21:42:49 -0800</creation_ts>
          <short_desc>Update code style guidelines for using &apos;final&apos; specifier for all classes which has no derived classes</short_desc>
          <delta_ts>2021-01-15 14:08:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Website</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>jond</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1489211</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-18 21:42:49 -0800</bug_when>
    <thetext>Update code style guidelines for using &apos;final&apos; specifier for all classes which has no derived classes

It seems a good practice to mark all non-base classes with &apos;final&apos; specifier.

(In reply to Darin Adler from bug #165903 comment #3)
&gt; Another thing that would be nice to do would be marking more classes final.
&gt; Lots of these classes seem to be final. Any class that has no classes
&gt; deriving from it should probably get marked that way. We can always remove
&gt; it later if we want to derive a class from it.

Bug 136540 – Make hash table classes final

Bug 159802 – Add final keyword to WebCore/svg classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489254</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-12-19 02:00:15 -0800</bug_when>
    <thetext>I would like to note the one interesting optimization done in JSC to encourage `final` use in WebKit.
If the class is annotated as &quot;final&quot;, we can ensure that there are no derived class.
This information can be leveraged by type_traits&apos; reflection mechanism (std::is_final) and it can optimize some code in JSC.

If we have `jsDynamicCast&lt;T&gt;`, and T is final class, the check should not traverse the type hierarchy at runtime. We just check the given JSObject&apos;s type is the T&apos;s classInfo, and if this check fails, we can say that the given JSObject is not a subclass of T.
So, if you put `final` to JS object classes, it can optimize type checks.

https://trac.webkit.org/changeset/229413/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490766</commentid>
    <comment_count>2</comment_count>
      <attachid>358061</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-25 02:01:25 -0800</bug_when>
    <thetext>Created attachment 358061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490767</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-25 02:04:08 -0800</bug_when>
    <thetext>For ease of review, uploaded the markdown.
https://gist.github.com/fujii/789d8f564508d3a59f3799a0457c4b8c</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490904</commentid>
    <comment_count>4</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-12-27 08:56:11 -0800</bug_when>
    <thetext>I&apos;m not sure if it is a good idea to spread this rule on all classes which are not part of any hierarchy, except when we really mean it. This seems to be especially redundant with inner and local classes.

OTOH, I&apos;ve found a way how to enforce such rule. My approach is following:
* Doxygen is used to generate XML &quot;documentation&quot; for everything in Source directory (GENERATE_XML = YES). Resulting XML files contain information about base and derived classes for every class (CLASS_GRAPH = YES).
* Script is run over all generated *.xml files, printing all classes which are not final (yet), have no derived classes, and have base class. Script can be implemented in any language, but XQuery implementation shows concisely what is done:

for $c in doc($file)/doxygen/compounddef[@kind = &quot;struct&quot; or @kind = &quot;class&quot;]
let $is_final := string($c/@final)
let $classname := $c/compoundname
let $is_leaf_class := count($c/derivedcompoundref) = 0
let $is_derived_class := count($c/basecompoundref) &gt; 0
where $is_final != &quot;yes&quot; and $is_leaf_class and $is_derived_class
return string($classname)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492193</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-01-06 20:04:33 -0800</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #4)
&gt; I&apos;m not sure if it is a good idea to spread this rule on all classes which
&gt; are not part of any hierarchy, except when we really mean it. This seems to
&gt; be especially redundant with inner and local classes.

Bug 136540 marked HashCountedSet, HashMap and HashSet &apos;final&apos; even though they are not derived classes.
Marking &apos;final&apos; makes clear those classes can&apos;t be derived.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720010</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-15 14:08:17 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #5)
&gt; Bug 136540 marked HashCountedSet, HashMap and HashSet &apos;final&apos; even though
&gt; they are not derived classes.
&gt; Marking &apos;final&apos; makes clear those classes can&apos;t be derived.

I’m not sure I see any benefit to doing that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358061</attachid>
            <date>2018-12-25 02:01:25 -0800</date>
            <delta_ts>2021-01-15 14:05:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192844-20181225190124.patch</filename>
            <type>text/plain</type>
            <size>7152</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTUxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IDYzMDJm
MWY1NDdjZDAxZGI4ZTQzZGU5YzZhMjkzMWVmMDk2MWMxMGEuLjQ0M2IwMjNmZDI2ZTY5MWI2ZmM5
M2E2NTA0YjI0Y2Y0NjU4YmFjYjkgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hh
bmdlTG9nCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTgtMTItMjUgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+
CisKKyAgICAgICAgVXBkYXRlIGNvZGUgc3R5bGUgZ3VpZGVsaW5lcyBmb3IgdXNpbmcgJ2ZpbmFs
JyBzcGVjaWZpZXIgZm9yIGFsbCBjbGFzc2VzIHdoaWNoIGhhcyBubyBkZXJpdmVkIGNsYXNzZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Mjg0NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29kZS1z
dHlsZS5tZDogQWRkZWQgI2NsYXNzZXMtZmluYWwgdG8gdXNlICdmaW5hbCcgc3BlY2lmaWVyIGZv
cgorICAgICAgICBhbGwgY2xhc3NlcyB3aGljaCBoYXZlIG5vIGRlcml2ZWQgY2xhc3Nlcy4gUmV2
aXNlZAorICAgICAgICAjb3ZlcnJpZGUtbWV0aG9kcyB0byB1c2UgJ292ZXJyaWRlJyBzcGVjaWZl
ciBvbmx5IGZvciBjbGFzc2VzCisgICAgICAgIHdpdGhvdXQgJ2ZpbmFsJyBzcGVjaWZlci4gQWRk
ZWQgJ2ZpbmFsJyBzcGVjaWZlciB0byBjbGFzc2VzIGluCisgICAgICAgIG90aGVyIGV4YW1wbGVz
LgorCiAyMDE4LTEyLTIwICBKb24gRGF2aXMgIDxqb25kQGFwcGxlLmNvbT4KIAogICAgICAgICBF
bnN1cmUgbmV3IHN0eWxlcyBhcmUgc2VydmVkIG9uIHdlYmtpdC5vcmcuCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy93ZWJraXQub3JnL2NvZGUtc3R5bGUubWQgYi9XZWJzaXRlcy93ZWJraXQub3JnL2Nv
ZGUtc3R5bGUubWQKaW5kZXggMGI3MWU4ZDY2NjZkNGNlYTA4YWM5NTE5ODNiNmMwMWE4NTQzZTVi
MC4uYjg5NTFhYTRkMzliMTgwNzI0Mjk4ZjliMjIxYzJlNTNmNzc5MWMyYiAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvd2Via2l0Lm9yZy9jb2RlLXN0eWxlLm1kCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5v
cmcvY29kZS1zdHlsZS5tZApAQCAtMzg4LDcgKzM4OCw3IEBAIGludCBtYWluKCkgewogIyMjIyMj
IFJpZ2h0OgogCiBgYGBjcHAKLWNsYXNzIE15Q2xhc3MgeworY2xhc3MgTXlDbGFzcyBmaW5hbCB7
CiAgICAgLi4uCiB9OwogCkBAIC00MDQsNyArNDA0LDcgQEAgZm9yIChpbnQgaSA9IDA7IGkgPCAx
MDsgKytpKSB7CiAjIyMjIyMgV3Jvbmc6CiAKIGBgYGNwcAotY2xhc3MgTXlDbGFzcyAKK2NsYXNz
IE15Q2xhc3MgZmluYWwKIHsKICAgICAuLi4KIH07CkBAIC01NzYsNyArNTc2LDcgQEAgc2hvcnQg
dGFidWxhdGlvbkluZGV4OyAvLyBiaXphcnJlCiAjIyMjIyMgUmlnaHQ6CiAKIGBgYGNwcAotY2xh
c3MgU3RyaW5nIHsKK2NsYXNzIFN0cmluZyBmaW5hbCB7CiBwdWJsaWM6CiAgICAgLi4uCiAKQEAg
LTU4OCw3ICs1ODgsNyBAQCBwcml2YXRlOgogIyMjIyMjIFdyb25nOgogCiBgYGBjcHAKLWNsYXNz
IFN0cmluZyB7CitjbGFzcyBTdHJpbmcgZmluYWwgewogcHVibGljOgogICAgIC4uLgogCkBAIC0x
MTczLDE3ICsxMTczLDE5IEBAIHNpZ25lZCBpbnQgYzsgLy8gRG9lc24ndCBvbWl0ICJzaWduZWQi
LgogCiAjIyMgQ2xhc3NlcwogCitbXSgjY2xhc3Nlcy1maW5hbCkgVXNlIGZpbmFsIHNwZWNpZmll
ciBmb3IgYWxsIGNsYXNzZXMgd2hpY2ggaGF2ZSBubyBkZXJpdmVkIGNsYXNzZXMuCisKIFtdKCNj
bGFzc2VzLWV4cGxpY2l0KSBVc2UgYSBjb25zdHJ1Y3RvciB0byBkbyBhbiBpbXBsaWNpdCBjb252
ZXJzaW9uIHdoZW4gdGhlIGFyZ3VtZW50IGlzIHJlYXNvbmFibHkgdGhvdWdodCBvZiBhcyBhIHR5
cGUgY29udmVyc2lvbiBhbmQgdGhlIHR5cGUgY29udmVyc2lvbiBpcyBmYXN0LiBPdGhlcndpc2Us
IHVzZSB0aGUgZXhwbGljaXQga2V5d29yZCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgdHlw
ZS4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gc2luZ2xlIGFyZ3VtZW50IGNvbnN0cnVjdG9ycy4KIAog
IyMjIyMjIFJpZ2h0OgogCiBgYGBjcHAKLWNsYXNzIExhcmdlSW50IHsKK2NsYXNzIExhcmdlSW50
IGZpbmFsIHsKIHB1YmxpYzoKICAgICBMYXJnZUludChpbnQpOwogLi4uCiAKLWNsYXNzIFZlY3Rv
ciB7CitjbGFzcyBWZWN0b3IgZmluYWwgewogcHVibGljOgogICAgIGV4cGxpY2l0IFZlY3Rvcihp
bnQgc2l6ZSk7IC8vIE5vdCBhIHR5cGUgY29udmVyc2lvbi4KICAgICBWZWN0b3IgY3JlYXRlKEFy
cmF5KTsgLy8gQ29zdGx5IGNvbnZlcnNpb24uCkBAIC0xMTk0LDcgKzExOTYsNyBAQCBwdWJsaWM6
CiAjIyMjIyMgV3Jvbmc6CiAKIGBgYGNwcAotY2xhc3MgVGFzayB7CitjbGFzcyBUYXNrIGZpbmFs
IHsKIHB1YmxpYzoKICAgICBUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsgLy8gTm90IGEg
dHlwZSBjb252ZXJzaW9uLgogICAgIGV4cGxpY2l0IFRhc2soKTsgLy8gTm8gYXJndW1lbnRzLgpA
QCAtMTIwOSw3ICsxMjExLDcgQEAgcHVibGljOgogIyMjIyMjIFJpZ2h0OgogCiBgYGBjcHAKLWNs
YXNzIE15U2luZ2xldG9uIHsKK2NsYXNzIE15U2luZ2xldG9uIGZpbmFsIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgTXlTaW5nbGV0b24mIHNpbmdsZXRvbigpOwogLi4uCkBAIC0xMjE4LDcgKzEyMjAs
NyBAQCBwdWJsaWM6CiAjIyMjIyMgV3Jvbmc6CiAKIGBgYGNwcAotY2xhc3MgTXlTaW5nbGV0b24g
eworY2xhc3MgTXlTaW5nbGV0b24gZmluYWwgewogcHVibGljOgogICAgIHN0YXRpYyBNeVNpbmds
ZXRvbiYgc2hhcmVkKCk7CiAuLi4KQEAgLTEyMjcsNyArMTIyOSw3IEBAIHB1YmxpYzoKICMjIyMj
IyBXcm9uZzoKIAogYGBgY3BwCi1jbGFzcyBNeVNpbmdsZXRvbiB7CitjbGFzcyBNeVNpbmdsZXRv
biBmaW5hbCB7CiAuLi4KIH07CiAKQEAgLTEyNzMsMjMgKzEyNzUsMzMgQEAgZHJhd0pwZygpOyAv
LyBUT0RPOiBNYWtlIHRoaXMgY29kZSBoYW5kbGUganBnIGluIGFkZGl0aW9uIHRvIHRoZSBwbmcg
c3VwcG9ydC4KIAogIyMjIE92ZXJyaWRpbmcgVmlydHVhbCBNZXRob2RzCiAKLVtdKCNvdmVycmlk
ZS1tZXRob2RzKSBUaGUgYmFzZSBsZXZlbCBkZWNsYXJhdGlvbiBvZiBhIHZpcnR1YWwgbWV0aG9k
IGluc2lkZSBhIGNsYXNzIG11c3QgYmUgZGVjbGFyZWQgd2l0aCB0aGUgYHZpcnR1YWxgIGtleXdv
cmQuIEFsbCBzdWJjbGFzc2VzIG9mIHRoYXQgY2xhc3MgbXVzdCBlaXRoZXIgc3BlY2lmeSB0aGUg
YG92ZXJyaWRlYCBrZXl3b3JkIHdoZW4gb3ZlcnJpZGluZyB0aGUgdmlydHVhbCBtZXRob2Qgb3Ig
dGhlIGBmaW5hbGAga2V5d29yZCB3aGVuIG92ZXJyaWRpbmcgdGhlIHZpcnR1YWwgbWV0aG9kIGFu
ZCByZXF1aXJpbmcgdGhhdCBubyBmdXJ0aGVyIHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGl0LiBZ
b3UgbmV2ZXIgd2FudCB0byBhbm5vdGF0ZSBhIG1ldGhvZCB3aXRoIG1vcmUgdGhhbiBvbmUgb2Yg
dGhlIGB2aXJ0dWFsYCwgYG92ZXJyaWRlYCwgb3IgYGZpbmFsYCBrZXl3b3Jkcy4KK1tdKCNvdmVy
cmlkZS1tZXRob2RzKSBUaGUgYmFzZSBsZXZlbCBkZWNsYXJhdGlvbiBvZiBhIHZpcnR1YWwgbWV0
aG9kIGluc2lkZSBhIGNsYXNzIG11c3QgYmUgZGVjbGFyZWQgd2l0aCB0aGUgYHZpcnR1YWxgIGtl
eXdvcmQuIEFsbCBzdWJjbGFzc2VzIG9mIHRoYXQgY2xhc3MgbXVzdCBlaXRoZXIgc3BlY2lmeSB0
aGUgYG92ZXJyaWRlYCBrZXl3b3JkIHdoZW4gb3ZlcnJpZGluZyB0aGUgdmlydHVhbCBtZXRob2Qg
YW5kIGZ1cnRoZXIgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgaXQgb3IgdGhlIGBmaW5hbGAga2V5
d29yZCB3aGVuIG92ZXJyaWRpbmcgdGhlIHZpcnR1YWwgbWV0aG9kIGFuZCByZXF1aXJpbmcgdGhh
dCBubyBmdXJ0aGVyIHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIGl0LiBZb3UgbmV2ZXIgd2FudCB0
byBhbm5vdGF0ZSBhIG1ldGhvZCB3aXRoIG1vcmUgdGhhbiBvbmUgb2YgdGhlIGB2aXJ0dWFsYCwg
YG92ZXJyaWRlYCwgb3IgYGZpbmFsYCBrZXl3b3Jkcy4KIAogIyMjIyMjIFJpZ2h0OgogCiBgYGBj
cHAKIGNsYXNzIFBlcnNvbiB7CiBwdWJsaWM6CisgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIHsg
Li4uIH07CisgICAgdmlydHVhbCB1bnNpZ25lZCBhZ2UoKSB7IC4uLiB9OwogICAgIHZpcnR1YWwg
U3RyaW5nIGRlc2NyaXB0aW9uKCkgeyAuLi4gfTsKIH0KIAogY2xhc3MgU3R1ZGVudCA6IHB1Ymxp
YyBQZXJzb24gewogcHVibGljOgotICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIG92ZXJyaWRlIHsg
Li4uIH07IC8vIFRoaXMgaXMgY29ycmVjdCBiZWNhdXNlIGl0IG9ubHkgY29udGFpbnMgdGhlICJv
dmVycmlkZSIga2V5d29yZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtZXRob2QgaXMgb3ZlcnJpZGRl
bi4KKyAgICBTdHJpbmcgbmFtZSgpIG92ZXJyaWRlIHsgLi4uIH07IC8vIFRoaXMgaXMgY29ycmVj
dCBiZWNhdXNlIGl0IG9ubHkgY29udGFpbnMgdGhlICJvdmVycmlkZSIga2V5d29yZCB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBtZXRob2QgaXMgb3ZlcnJpZGRlbiBhbmQgZnVydGhlciBzdWJjbGFzc2Vz
IGNhbiBvdmVycmlkZS4KKyAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBmaW5hbCB7IC4uLiB9OyAv
LyBUaGlzIGlzIGNvcnJlY3QgYmVjYXVzZSBpdCBvbmx5IGNvbnRhaW5zIHRoZSAiZmluYWwiIGtl
eXdvcmQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYW5kIG5vIGZ1
cnRoZXIgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUuCit9CisKK2NsYXNzIEhpZ2hTY2hvb2xTdHVk
ZW50IGZpbmFsIDogcHVibGljIFN0dWRlbnQgeworcHVibGljOgorICAgIHVuc2lnbmVkIGFnZSgp
IGZpbmFsIHsgLi4uIH07IC8vIFRoaXMgaXMgY29ycmVjdCBiZWNhdXNlIGl0IG9ubHkgY29udGFp
bnMgdGhlICJmaW5hbCIga2V5d29yZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtZXRob2QgaXMgb3Zl
cnJpZGRlbi4KIH0KIAogYGBgCiAKKyMjIyMjIyBXcm9uZzoKKwogYGBgY3BwCiBjbGFzcyBQZXJz
b24gewogcHVibGljOgpAQCAtMTI5OCwxMyArMTMxMCwxMCBAQCBwdWJsaWM6CiAKIGNsYXNzIFN0
dWRlbnQgOiBwdWJsaWMgUGVyc29uIHsKIHB1YmxpYzoKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBmaW5hbCB7IC4uLiB9OyAvLyBUaGlzIGlzIGNvcnJlY3QgYmVjYXVzZSBpdCBvbmx5IGNvbnRh
aW5zIHRoZSAiZmluYWwiIGtleXdvcmQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWV0aG9kIGlzIG92
ZXJyaWRkZW4gYW5kIHRoYXQgbm8gc3ViY2xhc3NlcyBvZiAiU3R1ZGVudCIgY2FuIG92ZXJyaWRl
ICJkZXNjcmlwdGlvbiIuCisgICAgdmlydHVhbCBTdHJpbmcgZGVzY3JpcHRpb24oKSBvdmVycmlk
ZSB7IC4uLiB9OyAvLyBUaGlzIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IHVzZXMgYm90aCB0aGUg
InZpcnR1YWwiIGFuZCAib3ZlcnJpZGUiIGtleXdvcmRzIHRvIGluZGljYXRlIHRoYXQgdGhlIG1l
dGhvZCBpcyBvdmVycmlkZGVuLiBJbnN0ZWFkLCBpdCBzaG91bGQgb25seSB1c2UgdGhlICJvdmVy
cmlkZSIga2V5d29yZC4KIH0KLQogYGBgCiAKLSMjIyMjIyBXcm9uZzoKLQogYGBgY3BwCiBjbGFz
cyBQZXJzb24gewogcHVibGljOgpAQCAtMTMxMyw3ICsxMzIyLDcgQEAgcHVibGljOgogCiBjbGFz
cyBTdHVkZW50IDogcHVibGljIFBlcnNvbiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcg
ZGVzY3JpcHRpb24oKSBvdmVycmlkZSB7IC4uLiB9OyAvLyBUaGlzIGlzIGluY29ycmVjdCBiZWNh
dXNlIGl0IHVzZXMgYm90aCB0aGUgInZpcnR1YWwiIGFuZCAib3ZlcnJpZGUiIGtleXdvcmRzIHRv
IGluZGljYXRlIHRoYXQgdGhlIG1ldGhvZCBpcyBvdmVycmlkZGVuLiBJbnN0ZWFkLCBpdCBzaG91
bGQgb25seSB1c2UgdGhlICJvdmVycmlkZSIga2V5d29yZC4KKyAgICB2aXJ0dWFsIFN0cmluZyBk
ZXNjcmlwdGlvbigpIGZpbmFsIHsgLi4uIH07IC8vIFRoaXMgaXMgaW5jb3JyZWN0IGJlY2F1c2Ug
aXQgdXNlcyBib3RoIHRoZSAidmlydHVhbCIgYW5kICJmaW5hbCIga2V5d29yZHMgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYW5kIGZpbmFsLiBJbnN0ZWFkLCBpdCBz
aG91bGQgb25seSB1c2UgdGhlICJmaW5hbCIga2V5d29yZC4KIH0KIGBgYAogCkBAIC0xMzI1LDcg
KzEzMzQsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFN0dWRlbnQgOiBwdWJsaWMgUGVyc29uIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBkZXNjcmlwdGlvbigpIGZpbmFsIHsgLi4uIH07IC8v
IFRoaXMgaXMgaW5jb3JyZWN0IGJlY2F1c2UgaXQgdXNlcyBib3RoIHRoZSAidmlydHVhbCIgYW5k
ICJmaW5hbCIga2V5d29yZHMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWV0aG9kIGlzIG92ZXJyaWRk
ZW4gYW5kIGZpbmFsLiBJbnN0ZWFkLCBpdCBzaG91bGQgb25seSB1c2UgdGhlICJmaW5hbCIga2V5
d29yZC4KKyAgICB2aXJ0dWFsIFN0cmluZyBkZXNjcmlwdGlvbigpIHsgLi4uIH07IC8vIFRoaXMg
aXMgaW5jb3JyZWN0IGJlY2F1c2UgaXQgdXNlcyB0aGUgInZpcnR1YWwiIGtleXdvcmQgdG8gaW5k
aWNhdGUgdGhhdCB0aGUgbWV0aG9kIGlzIG92ZXJyaWRkZW4uCiB9CiBgYGAKIApAQCAtMTMzNSw5
ICsxMzQ0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGRlc2NyaXB0aW9uKCkgeyAu
Li4gfTsKIH0KIAotY2xhc3MgU3R1ZGVudCA6IHB1YmxpYyBQZXJzb24geworY2xhc3MgU3R1ZGVu
dCBmaW5hbCA6IHB1YmxpYyBQZXJzb24gewogcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGRl
c2NyaXB0aW9uKCkgeyAuLi4gfTsgLy8gVGhpcyBpcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCB1c2Vz
IHRoZSAidmlydHVhbCIga2V5d29yZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtZXRob2QgaXMgb3Zl
cnJpZGRlbi4KKyAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBvdmVycmlkZSB7IC4uLiB9OyAvLyBU
aGlzIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0IHVzZXMgdGhlICJvdmVycmlkZSIga2V5d29yZCBp
biBhIGZpbmFsIGNsYXNzLgogfQogYGBgCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>