<?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>54973</bug_id>
          
          <creation_ts>2011-02-22 10:47:42 -0800</creation_ts>
          <short_desc>We need a data structure with efficient access by key, and with order for the elements</short_desc>
          <delta_ts>2011-02-25 08:20:23 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>54972</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>hyatt</cc>
    
    <cc>kling</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355393</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 10:47:42 -0800</bug_when>
    <thetext>HashSet has ListHashSet for having a set with order.
To implement 17425 effectively, we need the same kind of data structure for HashTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355401</commentid>
    <comment_count>1</comment_count>
      <attachid>83342</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 10:57:35 -0800</bug_when>
    <thetext>Created attachment 83342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355407</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 11:00:52 -0800</bug_when>
    <thetext>Maciej suggested I split the patch of 17425 to simplify the review. So I am splitting the diff, here is the data structure.

Same comment as on 17425: ListHashTable interface is a lot like ListHashSet. I did not do the custom allocator because that would make the patch quite more complex and that does not have as much value for this use case as it had for the ListHashSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355410</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-22 11:01:32 -0800</bug_when>
    <thetext>To match HashMap, I think you should call this class ListHashMap, not ListHashTable. HashTable is the name we use for the underlying data type these classes are implemented in terms of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355415</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 11:12:56 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; To match HashMap, I think you should call this class ListHashMap, not ListHashTable. HashTable is the name we use for the underlying data type these classes are implemented in terms of.

I really meant HashTable. If you look at the data structure, it uses an extractor to get the data out of the content.

HashMap is using HashTable, storing a pair&lt;&gt;, and extracting the first element as the key. I think it was cleaner to use HashTable for RenderBlock because of the kind of usage we have with the FloatingObjects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356818</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-24 02:56:40 -0800</bug_when>
    <thetext>Mjs is your man for this review.  Pick on him in #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357326</commentid>
    <comment_count>6</comment_count>
      <attachid>83342</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-24 13:15:56 -0800</bug_when>
    <thetext>Comment on attachment 83342
Patch

Maciej suggested to extend ListHashSet with template taking HashTranslator like for HashSet.

That seems a good idea. I clear the review flag for now and I will extend ListHashSet tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357927</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-25 08:20:23 -0800</bug_when>
    <thetext>I extended ListHashSet, and updated 54972.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83342</attachid>
            <date>2011-02-22 10:57:35 -0800</date>
            <delta_ts>2011-02-24 13:15:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54973-20110222200703.patch</filename>
            <type>text/plain</type>
            <size>28468</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkzMDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk0
NTI4NTg0MWZiYTlmZmJlOTk1MzFhMmUzYWU2YjM3N2M2ZDY4NTEuLmQ1MjE0YTBmZTgyNjYyM2Jk
ZWExOTY5YjkxNTU4YzkxNWNkYmNmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDY1IEBACisyMDExLTAyLTIyICBCZW5qYW1pbiBQb3VsYWluICA8aWtpcG91QGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBu
ZWVkIGEgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBlZmZpY2llbnQgYWNjZXNzIGJ5IGtleSwgYW5kIHdp
dGggb3JkZXIgZm9yIHRoZSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NzMKKworICAgICAgICBBZGQgYSBuZXcgZGF0YSBzdHJ1Y3R1
cmU6IExpc3RIYXNoVGFibGUuCisgICAgICAgIExpc3RIYXNoVGFibGUgaXMgc2ltaWxhciB0byBI
YXNoVGFibGUsIGJ1dCBoYXZlIG9yZGVyIGZvciBlbGVtZW50cy4KKworICAgICAgICBUaGUgaW50
ZXJmYWNlIGlzIHNpbWlsYXIgdG8gTGlzdEhhc2hTZXQsIHBsdXMgdGhlIGV4dHJhY3RvciBhbmQg
YQorICAgICAgICBtZXRob2RzIHRvIGFjY2VzcyB0aGUgbGFzdCBvYmplY3QgZGlyZWN0bHkuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBp
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTGlzdEhhc2hUYWJsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZU5vZGU6Okxpc3RIYXNoVGFibGVOb2RlKToK
KyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I6Okxpc3RIYXNoVGFibGVD
b25zdEl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I6
OmdldCk6CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3It
Pik6CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yOjpvcGVyYXRvcisr
KToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yLS0p
OgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUNvbnN0SXRlcmF0b3I6Om5vZGUpOgorICAgICAg
ICAoV1RGOjpMaXN0SGFzaFRhYmxlSXRlcmF0b3I6Okxpc3RIYXNoVGFibGVJdGVyYXRvcik6Cisg
ICAgICAgIChXVEY6Okxpc3RIYXNoVGFibGVJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKFdURjo6
TGlzdEhhc2hUYWJsZUl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpMaXN0SGFz
aFRhYmxlSXRlcmF0b3I6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxl
SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlSXRlcmF0
b3I6Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlSXRlcmF0b3I6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlSXRlcmF0b3I6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFRhYmxlSXRlcmF0b3I6Om9wZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hUYWJsZUl0ZXJhdG9yOjpub2RlKToK
KyAgICAgICAgKFdURjo6Tm9kZUV4dHJhY3Rvcjo6ZXh0cmFjdCk6CisgICAgICAgIChXVEY6Ojo6
TGlzdEhhc2hUYWJsZSk6CisgICAgICAgIChXVEY6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoV1RG
Ojo6On5MaXN0SGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6Ojpzd2FwKToKKyAgICAgICAgKFdU
Rjo6OjpzaXplKToKKyAgICAgICAgKFdURjo6OjpjYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ojo6
aXNFbXB0eSk6CisgICAgICAgIChXVEY6Ojo6YmVnaW4pOgorICAgICAgICAoV1RGOjo6OmVuZCk6
CisgICAgICAgIChXVEY6Ojo6bGFzdCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlTGFzdCk6Cisg
ICAgICAgIChXVEY6Ojo6ZmluZCk6CisgICAgICAgIChXVEY6Ojo6Y29udGFpbnMpOgorICAgICAg
ICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6
OjpjbGVhcik6CisgICAgICAgIChXVEY6Ojo6bWFrZUl0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6
OjptYWtlQ29uc3RJdGVyYXRvcik6CisgICAgICAgIChXVEY6Ojo6YXBwZW5kTm9kZSk6CisgICAg
ICAgIChXVEY6Ojo6ZGVsZXRlQWxsTm9kZXMpOgorICAgICAgICAoV1RGOjo6OnVubGlua0FuZERl
bGV0ZSk6CisKIDIwMTEtMDItMjEgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBsaW5rZXIgd2FybmluZyBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggMDI5OTE2NjZkMjAzY2Y1YzQ0ODE3OTllYmI0ZmNiZWEyNmNmNjFl
Ni4uMDQ0MDU1NzVkMTVmNzgxMjU0NzE0NmVhZTNlY2ZjYTUwM2VjMjYxZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNDY2LDYgKzQ2Niw3IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRhYmxlLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvSGFzaFRyYWl0cy5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0xpc3RIYXNoU2V0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
TGlzdEhhc2hUYWJsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RSZWZQdHIu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Mb2NrZXIuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5neXBpCmluZGV4IDY1NmUxNmQzZDNjMjU4Njg1ZDVmZDBhNDEyMmVhZGQ3ZDdh
MjFjYWQuLjM2MjQ3MjBmNWYwOWVkY2FlMzlmYTU1MTkwMTI1OGVjODU4ZTU3NzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0zOTEsNiArMzkxLDcgQEAK
ICAgICAgICAgICAgICd3dGYvSGFzaFRhYmxlLmgnLAogICAgICAgICAgICAgJ3d0Zi9IYXNoVHJh
aXRzLmgnLAogICAgICAgICAgICAgJ3d0Zi9MaXN0SGFzaFNldC5oJywKKyAgICAgICAgICAgICd3
dGYvTGlzdEhhc2hUYWJsZS5oJywKICAgICAgICAgICAgICd3dGYvTGlzdFJlZlB0ci5oJywKICAg
ICAgICAgICAgICd3dGYvTG9ja2VyLmgnLAogICAgICAgICAgICAgJ3d0Zi9NRDUuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RG
L1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L1dURi9XVEYudmNwcm9qCmluZGV4IDVmODU0ZjlmMTExNzQ1ZjU2OWY5MDM4YzlhNTdiYjJlNmJl
OTQ4NTkuLjQ1N2RjOWRiODE2MzI1NDEyNjYwZmU2NWE5N2Q3MjFiYjU1M2NmYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52
Y3Byb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvagpAQCAtNzA1LDYgKzcwNSwxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxG
aWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxMaXN0SGFzaFRhYmxlLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXExpc3RSZWZQdHIu
aCIKIAkJCT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMzdk
ZGI5MmYwNWQxYTU1M2U3OTE5OTI4NWY0OTE0ODkyNTZkNWJiLi4zY2IyYmEzYjUxNDE1NmFiZGRl
MWI2OWE2ZWRlNzEzODQ0NGQ3Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTg2LDYgKzE4Niw3IEBACiAJCTE4QkFCNTU0MTBEQUUwNjYwMDBEOTQ1QiAvKiBUaHJlYWRJZGVu
dGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxOEJBQjUyODEwREFERkNEMDAwRDk0NUIgLyogVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5oICovOyB9OwogCQkxQzYxNTE2QzBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmls
ZXJTZXJ2ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzYxNTE2QTBFQkFDN0EwMDAzMTM3NkYgLyogUHJvZmlsZXJTZXJ2ZXIubW0gKi87IHNldHRp
bmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKIAkJ
MUM2MTUxNkQwRUJBQzdBMDAwMzEzNzZGIC8qIFByb2ZpbGVyU2VydmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzYxNTE2QjBFQkFDN0EwMDAzMTM3
NkYgLyogUHJvZmlsZXJTZXJ2ZXIuaCAqLzsgfTsKKwkJMjZFQzQyNEExMzBFQTQ4NjAwNkM4RDYy
IC8qIExpc3RIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2MzRBMDJDMTMwRTlDRTgwMDNDNDdDMyAvKiBMaXN0SGFzaFRhYmxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkNGQzVEMUUx
MkY0NUI0ODAwNDkxNEUyIC8qIENoYXJhY3Rlck5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0ZDNUI3QTEyRjQ0NzE0MDA0OTE0RTIgLyogQ2hh
cmFjdGVyTmFtZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFENDMx
MEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwogCQk0MTM1OUNGNjBGREQ4OUNC
MDAyMDYxODAgLyogRGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDEzNTlDRjQwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmNwcCAq
LzsgfTsKQEAgLTc1NCw2ICs3NTUsNyBAQAogCQkxQzkwNTE0NTBCQTlFOEE3MDA4MUU5RDAgLyog
QmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJD
RkYgLyogSmF2YVNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZh
U2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUE4QjRCMEQzMkMzOUEw
MDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKYXZhU2NyaXB0Q29yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjM0
QTAyQzEzMEU5Q0U4MDAzQzQ3QzMgLyogTGlzdEhhc2hUYWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMaXN0SGFzaFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJDRkM1QjdBMTJGNDQ3MTQwMDQ5MTRFMiAvKiBDaGFyYWN0ZXJOYW1lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJOYW1lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTM1OUNGNDBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZU1hdGguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTM1OUNGNTBGREQ4OUNCMDAyMDYxODAgLyog
RGF0ZU1hdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZU1hdGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzYsNiArMTUzOCw3IEBACiAJCQkJNjVE
RkM5MkUwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hUYWJsZS5oICovLAogCQkJCTY1REZDOTJGMDhF
QTE3M0EwMEY3MzAwQiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJNjU3RUI3NDUwQjcwOEY1NDAw
NjM0NjFCIC8qIExpc3RIYXNoU2V0LmggKi8sCisJCQkJMjYzNEEwMkMxMzBFOUNFODAwM0M0N0Mz
IC8qIExpc3RIYXNoVGFibGUuaCAqLywKIAkJCQkxNDhBMTYyNjA5NUQxNkJCMDA2NjZEMEQgLyog
TGlzdFJlZlB0ci5oICovLAogCQkJCUUxRUU3OTI3MEQ2Qzk2NDUwMEZFQTNCQSAvKiBMb2NrZXIu
aCAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLApAQCAtMjIzNCw2
ICsyMjM3LDcgQEAKIAkJCQlCQzE4QzUyRTBFMTZGQ0UxMDBCMzQ0NjAgLyogTGV4ZXIubHV0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjNDMzEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzQwRTE2RjVDRDAwQjM0NDYwIC8qIExpc3RI
YXNoU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkVDNDI0QTEzMEVBNDg2MDA2QzhENjIgLyog
TGlzdEhhc2hUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzUwRTE2RjVDRDAwQjM0
NDYwIC8qIExpc3RSZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzNjBF
MTZGNUNEMDBCMzQ0NjAgLyogTG9ja2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGY4NWJmMDIwNzRjZWY3ZjUzNzM2OWU0MDhm
ZjQxYjY1MTYzNzVlOTQuLmVlODNlZTA5YzQ4NDY1NzIzODAwMGE1OWZjOTA5MTUzYWE0YWM0NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMzAsNiArMzAs
NyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBIYXNoVGFibGUuaAogICAgIEhhc2hUcmFpdHMuaAog
ICAgIExpc3RIYXNoU2V0LmgKKyAgICBMaXN0SGFzaFRhYmxlLmgKICAgICBMaXN0UmVmUHRyLmgK
ICAgICBMb2NrZXIuaAogICAgIE1ENS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0xpc3RIYXNoVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTGlzdEhh
c2hUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmMmZkYTIzMzNjMjFhODhmZGNkZGI4ODg4NjYwOWFjYThl
ODU4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RI
YXNoVGFibGUuaApAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
QmVuamFtaW4gUG91bGFpbiA8aWtpcG91QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV1RGX0xpc3RI
YXNoVGFibGVfaAorI2RlZmluZSBXVEZfTGlzdEhhc2hUYWJsZV9oCisKKyNpbmNsdWRlICJBc3Nl
cnRpb25zLmgiCisjaW5jbHVkZSAiSGFzaFRhYmxlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBMaXN0SGFzaFRhYmxlOiBKdXN0IGxpa2UgSGFzaFRhYmxlLCB0aGlzIGNsYXNzIHByb3ZpZGVz
IGEgSGFzaFRhYmxlCisvLyBpbnRlcmZhY2UgLSBhIGNvbGxlY3Rpb24gb2YgdW5pcXVlIG9iamVj
dHMgd2l0aCBPKDEpIGluc2VydGlvbiwKKy8vIHJlbW92YWwgYW5kIHRlc3QgZm9yIGNvbnRhaW5l
cnNoaXAuIEhvd2V2ZXIsIGl0IGFsc28gaGFzIGFuCisvLyBvcmRlciAtIGl0ZXJhdGluZyBpdCB3
aWxsIGFsd2F5cyBnaXZlIGJhY2sgdmFsdWVzIGluIHRoZSBvcmRlcgorLy8gaW4gd2hpY2ggdGhl
eSBhcmUgYWRkZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlQXJnPiBzdHJ1Y3QgTGlzdEhh
c2hUYWJsZU5vZGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJn
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+IGNsYXNzIExpc3RIYXNoVGFi
bGVDb25zdEl0ZXJhdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPiBjbGFzcyBMaXN0SGFz
aFRhYmxlSXRlcmF0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEtleVRy
YWl0cywgdHlwZW5hbWUgTm9kZVB0clR5cGUsIHR5cGVuYW1lIE5vZGVUcmFpdHMsIHR5cGVuYW1l
IEV4dHJhY3Rvcj4gc3RydWN0IE5vZGVFeHRyYWN0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFz
aEFyZyA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPEtleUFyZz46Okhhc2g+CitjbGFzcyBMaXN0SGFz
aFRhYmxlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3ByaXZhdGU6CisgICAgdHlw
ZWRlZiBMaXN0SGFzaFRhYmxlTm9kZTxWYWx1ZUFyZz4gTm9kZTsKKyAgICB0eXBlZGVmIEhhc2hU
cmFpdHM8S2V5QXJnPiBLZXlUcmFpdHM7CisgICAgdHlwZWRlZiBIYXNoVHJhaXRzPE5vZGUqPiBO
b2RlVHJhaXRzOworICAgIHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOworCisgICAgdHlw
ZWRlZiBIYXNoVGFibGU8S2V5QXJnLCBOb2RlKiwgTm9kZUV4dHJhY3RvcjxLZXlBcmcsIEtleVRy
YWl0cywgTm9kZSosIE5vZGVUcmFpdHMsIEV4dHJhY3Rvcj4sIEhhc2hGdW5jdGlvbnMsIE5vZGVU
cmFpdHMsIEtleVRyYWl0cz4gSW1wbFR5cGU7CisgICAgdHlwZWRlZiBIYXNoVGFibGVJdGVyYXRv
cjxLZXlBcmcsIE5vZGUqLCBOb2RlRXh0cmFjdG9yPEtleUFyZywgS2V5VHJhaXRzLCBOb2RlKiwg
Tm9kZVRyYWl0cywgRXh0cmFjdG9yPiwgSGFzaEZ1bmN0aW9ucywgTm9kZVRyYWl0cywgS2V5VHJh
aXRzPiBJbXBsVHlwZUl0ZXJhdG9yOworICAgIHR5cGVkZWYgSGFzaFRhYmxlQ29uc3RJdGVyYXRv
cjxLZXlBcmcsIE5vZGUqLCBOb2RlRXh0cmFjdG9yPEtleUFyZywgS2V5VHJhaXRzLCBOb2RlKiwg
Tm9kZVRyYWl0cywgRXh0cmFjdG9yPiwgSGFzaEZ1bmN0aW9ucywgTm9kZVRyYWl0cywgS2V5VHJh
aXRzPiBJbXBsVHlwZUNvbnN0SXRlcmF0b3I7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEtleUFy
ZyBLZXlUeXBlOworICAgIHR5cGVkZWYgVmFsdWVBcmcgVmFsdWVUeXBlOworICAgIHR5cGVkZWYg
TGlzdEhhc2hUYWJsZUl0ZXJhdG9yPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFy
Zz4gaXRlcmF0b3I7CisgICAgdHlwZWRlZiBMaXN0SGFzaFRhYmxlQ29uc3RJdGVyYXRvcjxLZXlB
cmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+IGNvbnN0X2l0ZXJhdG9yOworCisgICAg
ZnJpZW5kIGNsYXNzIExpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleUFyZywgVmFsdWVBcmcs
IEV4dHJhY3RvciwgSGFzaEFyZz47CisKKyAgICBMaXN0SGFzaFRhYmxlKCk7CisgICAgTGlzdEhh
c2hUYWJsZShjb25zdCBMaXN0SGFzaFRhYmxlJik7CisgICAgTGlzdEhhc2hUYWJsZSYgb3BlcmF0
b3I9KGNvbnN0IExpc3RIYXNoVGFibGUmKTsKKyAgICB+TGlzdEhhc2hUYWJsZSgpOworCisgICAg
dm9pZCBzd2FwKExpc3RIYXNoVGFibGUmKTsKKworICAgIGludCBzaXplKCkgY29uc3Q7CisgICAg
aW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAgICBp
dGVyYXRvciBiZWdpbigpOworICAgIGl0ZXJhdG9yIGVuZCgpOworICAgIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3Q7CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Q7CisKKyAgICBW
YWx1ZUFyZyYgbGFzdCgpOworICAgIGNvbnN0IFZhbHVlQXJnJiBsYXN0KCkgY29uc3Q7CisgICAg
dm9pZCByZW1vdmVMYXN0KCk7CisKKyAgICBpdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKTsK
KyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKSBjb25zdDsKKyAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmKSBjb25zdDsKKworICAgIC8vIHRoZSByZXR1cm4gdmFs
dWUgaXMgYSBwYWlyIG9mIGFuIGl0ZXJhdG9yIHRvIHRoZSBuZXcgdmFsdWUncyBsb2NhdGlvbiwK
KyAgICAvLyBhbmQgYSBib29sIHRoYXQgaXMgdHJ1ZSBpZiBhbiBuZXcgZW50cnkgd2FzIGFkZGVk
CisgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFZhbHVlVHlwZSYpOworCisgICAg
dm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYpOworICAgIHZvaWQgcmVtb3ZlKGl0ZXJhdG9yKTsK
KyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6CisgICAgaXRlcmF0b3IgbWFrZUl0ZXJhdG9y
KE5vZGUqKTsKKyAgICBjb25zdF9pdGVyYXRvciBtYWtlQ29uc3RJdGVyYXRvcihOb2RlKikgY29u
c3Q7CisgICAgdm9pZCBhcHBlbmROb2RlKE5vZGUqKTsKKyAgICB2b2lkIGRlbGV0ZUFsbE5vZGVz
KCk7CisgICAgdm9pZCB1bmxpbmtBbmREZWxldGUoTm9kZSopOworCisgICAgSW1wbFR5cGUgbV9p
bXBsOworICAgIE5vZGUqIG1faGVhZDsKKyAgICBOb2RlKiBtX3RhaWw7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZUFyZz4KK3N0cnVjdCBMaXN0SGFzaFRhYmxlTm9kZSB7CisgICAgTGlz
dEhhc2hUYWJsZU5vZGUoVmFsdWVBcmcgdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
KyAgICAgICAgLCBtX3ByZXYoMCkKKyAgICAgICAgLCBtX25leHQoMCkKKyAgICB7CisgICAgfQor
CisgICAgVmFsdWVBcmcgbV92YWx1ZTsKKyAgICBMaXN0SGFzaFRhYmxlTm9kZSogbV9wcmV2Owor
ICAgIExpc3RIYXNoVGFibGVOb2RlKiBtX25leHQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhh
c2hBcmc+CitjbGFzcyBMaXN0SGFzaFRhYmxlQ29uc3RJdGVyYXRvciB7Citwcml2YXRlOgorICAg
IHR5cGVkZWYgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hB
cmc+IExpc3RIYXNoVGFibGVUeXBlOworICAgIHR5cGVkZWYgTGlzdEhhc2hUYWJsZUNvbnN0SXRl
cmF0b3I8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPiBjb25zdF9pdGVyYXRv
cjsKKyAgICB0eXBlZGVmIExpc3RIYXNoVGFibGVOb2RlPFZhbHVlQXJnPiBOb2RlOworICAgIHR5
cGVkZWYgVmFsdWVBcmcgVmFsdWVUeXBlOworICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlJiBS
ZWZlcmVuY2VUeXBlOworICAgIHR5cGVkZWYgY29uc3QgVmFsdWVUeXBlKiBQb2ludGVyVHlwZTsK
KworICAgIGZyaWVuZCBjbGFzcyBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJh
Y3RvciwgSGFzaEFyZz47CisgICAgZnJpZW5kIGNsYXNzIExpc3RIYXNoVGFibGVJdGVyYXRvcjxL
ZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OworCisgICAgTGlzdEhhc2hUYWJs
ZUNvbnN0SXRlcmF0b3IoY29uc3QgTGlzdEhhc2hUYWJsZVR5cGUqIGxpc3RIYXNoVGFibGUsIE5v
ZGUqIHBvc2l0aW9uKQorICAgICAgICA6IG1fbGlzdEhhc2hUYWJsZShsaXN0SGFzaFRhYmxlKQor
ICAgICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgeworICAgIH0KKworcHVibGljOgor
ICAgIExpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yKCkKKyAgICB7CisgICAgfQorCisgICAgUG9p
bnRlclR5cGUgZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9wb3NpdGlvbi0+
bV92YWx1ZTsKKyAgICB9CisKKyAgICBSZWZlcmVuY2VUeXBlIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpnZXQoKTsgfQorICAgIFBvaW50ZXJUeXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJl
dHVybiBnZXQoKTsgfQorCisgICAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24pOworICAgICAgICBtX3Bvc2l0aW9uID0gbV9wb3Np
dGlvbi0+bV9uZXh0OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgLy8gcG9z
dGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKworICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVy
YXRvci0tKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uICE9IG1fbGlzdEhhc2hU
YWJsZS0+bV9oZWFkKTsKKyAgICAgICAgaWYgKCFtX3Bvc2l0aW9uKQorICAgICAgICAgICAgbV9w
b3NpdGlvbiA9IG1fbGlzdEhhc2hUYWJsZS0+bV90YWlsOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX3Bvc2l0aW9uID0gbV9wb3NpdGlvbi0+bV9wcmV2OworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgLy8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5IG9taXR0ZWQKKwor
ICAgIC8vIENvbXBhcmlzb24uCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Bvc2l0aW9uID09IG90
aGVyLm1fcG9zaXRpb247CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjb25zdF9p
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wb3NpdGlvbiAh
PSBvdGhlci5tX3Bvc2l0aW9uOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOb2RlKiBub2RlKCkg
eyByZXR1cm4gbV9wb3NpdGlvbjsgfQorCisgICAgY29uc3QgTGlzdEhhc2hUYWJsZVR5cGUqIG1f
bGlzdEhhc2hUYWJsZTsKKyAgICBOb2RlKiBtX3Bvc2l0aW9uOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoQXJnPgorY2xhc3MgTGlzdEhhc2hUYWJsZUl0ZXJhdG9yIHsKK3ByaXZhdGU6Cisg
ICAgdHlwZWRlZiBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFz
aEFyZz4gTGlzdEhhc2hUYWJsZVR5cGU7CisgICAgdHlwZWRlZiBMaXN0SGFzaFRhYmxlSXRlcmF0
b3I8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPiBpdGVyYXRvcjsKKyAgICB0
eXBlZGVmIExpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleUFyZywgVmFsdWVBcmcsIEV4dHJh
Y3RvciwgSGFzaEFyZz4gY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBMaXN0SGFzaFRhYmxl
Tm9kZTxWYWx1ZUFyZz4gTm9kZTsKKyAgICB0eXBlZGVmIFZhbHVlQXJnIFZhbHVlVHlwZTsKKyAg
ICB0eXBlZGVmIFZhbHVlVHlwZSYgUmVmZXJlbmNlVHlwZTsKKyAgICB0eXBlZGVmIFZhbHVlVHlw
ZSogUG9pbnRlclR5cGU7CisKKyAgICBmcmllbmQgY2xhc3MgTGlzdEhhc2hUYWJsZTxLZXlBcmcs
IFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OworCisgICAgTGlzdEhhc2hUYWJsZUl0ZXJh
dG9yKGNvbnN0IExpc3RIYXNoVGFibGVUeXBlKiBsaXN0SGFzaFRhYmxlLCBOb2RlKiBwb3NpdGlv
bikgOiBtX2l0ZXJhdG9yKGxpc3RIYXNoVGFibGUsIHBvc2l0aW9uKSB7IH0KKworcHVibGljOgor
ICAgIExpc3RIYXNoVGFibGVJdGVyYXRvcigpIHsgfQorCisgICAgLy8gZGVmYXVsdCBjb3B5LCBh
c3NpZ25tZW50IGFuZCBkZXN0cnVjdG9yIGFyZSBPSworCisgICAgUG9pbnRlclR5cGUgZ2V0KCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxQb2ludGVyVHlwZT4obV9pdGVyYXRvci5nZXQoKSk7
IH0KKyAgICBSZWZlcmVuY2VUeXBlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsg
fQorICAgIFBvaW50ZXJUeXBlIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQor
CisgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7ICsrbV9pdGVyYXRvcjsgcmV0dXJuICp0aGlz
OyB9CisKKyAgICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAorCisgICAgaXRl
cmF0b3ImIG9wZXJhdG9yLS0oKSB7IC0tbV9pdGVyYXRvcjsgcmV0dXJuICp0aGlzOyB9CisKKyAg
ICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21pdHRlZAorCisgICAgLy8gQ29tcGFyaXNv
bi4KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX2l0ZXJhdG9yID09IG90aGVyLm1faXRlcmF0b3I7IH0KKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdG9yICE9IG90
aGVyLm1faXRlcmF0b3I7IH0KKworICAgIG9wZXJhdG9yIGNvbnN0X2l0ZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVyYXRvcjsgfQorCitwcml2YXRlOgorICAgIE5vZGUqIG5vZGUoKSB7IHJl
dHVybiBtX2l0ZXJhdG9yLm5vZGUoKTsgfQorCisgICAgY29uc3RfaXRlcmF0b3IgbV9pdGVyYXRv
cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgS2V5VHJhaXRzLCB0
eXBlbmFtZSBOb2RlUHRyVHlwZSwgdHlwZW5hbWUgTm9kZVRyYWl0cywgdHlwZW5hbWUgRXh0cmFj
dG9yPgorc3RydWN0IE5vZGVFeHRyYWN0b3IgeworICAgIHN0YXRpYyBpbmxpbmUgS2V5QXJnIGV4
dHJhY3QoTm9kZVB0clR5cGUgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChOb2RlVHJhaXRzOjpp
c0RlbGV0ZWRWYWx1ZShub2RlKSkgeworICAgICAgICAgICAgS2V5QXJnIGRlbGV0ZWRWYWx1ZSA9
IEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpOworICAgICAgICAgICAgZGVsZXRlZFZhbHVlLn5LZXlB
cmcoKTsKKyAgICAgICAgICAgIEtleVRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZhbHVlKGRlbGV0
ZWRWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gZGVsZXRlZFZhbHVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG5vZGUgPT0gTm9kZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpOworCisgICAgICAgIHJldHVybiBFeHRy
YWN0b3I6OmV4dHJhY3Qobm9kZS0+bV92YWx1ZSk7CisgICAgfQorfTsKKworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5
cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBF
eHRyYWN0b3IsIEhhc2hBcmc+OjpMaXN0SGFzaFRhYmxlKCkKKyAgICA6IG1faGVhZCgwKQorICAg
ICwgbV90YWlsKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSBM
aXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Okxpc3RI
YXNoVGFibGUoY29uc3QgTGlzdEhhc2hUYWJsZSYgb3RoZXIpCisgICAgOiBtX2hlYWQoMCkKKyAg
ICAsIG1fdGFpbCgwKQoreworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOwor
ICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBvdGhlci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIGFkZCgqaXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5
cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+Citp
bmxpbmUgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+
JiBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Om9w
ZXJhdG9yPShjb25zdCBMaXN0SGFzaFRhYmxlJiBvdGhlcikKK3sKKyAgICBMaXN0SGFzaFRhYmxl
IHRtcChvdGhlcik7CisgICAgc3dhcCh0bXApOworICAgIHJldHVybiAqdGhpczsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFj
dG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1
ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6fkxpc3RIYXNoVGFibGUoKQoreworICAgIGRlbGV0
ZUFsbE5vZGVzKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFs
dWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB2b2lk
IExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6c3dh
cChMaXN0SGFzaFRhYmxlJiBvdGhlcikKK3sKKyAgICBtX2ltcGwuc3dhcChvdGhlci5tX2ltcGwp
OworICAgIHN0ZDo6c3dhcChtX2hlYWQsIG90aGVyLm1faGVhZCk7CisgICAgc3RkOjpzd2FwKG1f
dGFpbCwgb3RoZXIubV90YWlsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBl
bmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5s
aW5lIGludCBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFy
Zz46OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgaW50IExpc3RIYXNoVGFibGU8S2V5QXJnLCBW
YWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6Y2FwYWNpdHkoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltcGwuY2FwYWNpdHkoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgor
aW5saW5lIGJvb2wgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhh
c2hBcmc+Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLmlzRW1wdHkoKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIHR5cGVuYW1lIExpc3RIYXNo
VGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6aXRlcmF0b3IgTGlz
dEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpiZWdpbigp
Cit7CisgICAgcmV0dXJuIG1ha2VJdGVyYXRvcihtX2hlYWQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hBcmc+CitpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVl
QXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjppdGVyYXRvciBMaXN0SGFzaFRhYmxlPEtleUFyZywg
VmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OmVuZCgpCit7CisgICAgcmV0dXJuIG1ha2VJ
dGVyYXRvcigwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1
ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIFZhbHVl
QXJnJiBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46
Omxhc3QoKQoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV90YWlsLT5t
X3ZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJn
LCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgY29uc3QgVmFs
dWVBcmcmIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJn
Pjo6bGFzdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAgIHJldHVybiBt
X3RhaWwtPm1fdmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB2
b2lkIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6
cmVtb3ZlTGFzdCgpCit7CisgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAgIG1faW1wbC5yZW1v
dmUoTm9kZUV4dHJhY3RvcjxLZXlBcmcsIEtleVRyYWl0cywgTm9kZSosIE5vZGVUcmFpdHMsIEV4
dHJhY3Rvcj46OmV4dHJhY3QobV90YWlsKSk7CisgICAgdW5saW5rQW5kRGVsZXRlKG1fdGFpbCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVu
YW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB0eXBlbmFtZSBMaXN0SGFz
aFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OmNvbnN0X2l0ZXJh
dG9yIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6
YmVnaW4oKSBjb25zdAoreworICAgIHJldHVybiBtYWtlQ29uc3RJdGVyYXRvcihtX2hlYWQpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFt
ZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hU
YWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+Ojpjb25zdF9pdGVyYXRv
ciBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OmVu
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9yKDApOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0
b3IsIHR5cGVuYW1lIEhhc2hBcmc+CitpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hUYWJsZTxLZXlB
cmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjppdGVyYXRvciBMaXN0SGFzaFRhYmxl
PEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OmZpbmQoY29uc3QgS2V5QXJn
JiBrZXkpCit7CisgICAgSW1wbFR5cGVJdGVyYXRvciBpdCA9IG1faW1wbC5maW5kKGtleSk7Cisg
ICAgaWYgKGl0ID09IG1faW1wbC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGVuZCgpOworICAgIHJl
dHVybiBtYWtlSXRlcmF0b3IoKml0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0
eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgor
aW5saW5lIHR5cGVuYW1lIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9y
LCBIYXNoQXJnPjo6Y29uc3RfaXRlcmF0b3IgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJn
LCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpmaW5kKGNvbnN0IEtleUFyZyYga2V5KSBjb25zdAorewor
ICAgIEltcGxUeXBlSXRlcmF0b3IgaXQgPSBtX2ltcGwuZmluZChrZXkpOworICAgIGlmIChpdCA9
PSBtX2ltcGwuZW5kKCkpCisgICAgICAgIHJldHVybiBlbmQoKTsKKyAgICByZXR1cm4gbWFrZUNv
bnN0SXRlcmF0b3IoKml0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFt
ZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5l
IGJvb2wgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+
Ojpjb250YWlucyhjb25zdCBLZXlBcmcmIGtleSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBs
LmNvbnRhaW5zKGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
VmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSBw
YWlyPHR5cGVuYW1lIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBI
YXNoQXJnPjo6aXRlcmF0b3IsIGJvb2w+IExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywg
RXh0cmFjdG9yLCBIYXNoQXJnPjo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit7CisgICAg
TGlzdEhhc2hUYWJsZU5vZGU8VmFsdWVBcmc+KiBub2RlID0gbmV3IExpc3RIYXNoVGFibGVOb2Rl
PFZhbHVlQXJnPih2YWx1ZSk7CisgICAgcGFpcjx0eXBlbmFtZSBJbXBsVHlwZTo6aXRlcmF0b3Is
IGJvb2w+IHJlc3VsdCA9IG1faW1wbC5hZGQobm9kZSk7CisgICAgaWYgKHJlc3VsdC5zZWNvbmQp
CisgICAgICAgIGFwcGVuZE5vZGUoKnJlc3VsdC5maXJzdCk7CisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKG1ha2VJdGVyYXRvcigqcmVzdWx0LmZpcnN0KSwgcmVzdWx0LnNlY29uZCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4
dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB2b2lkIExpc3RIYXNoVGFibGU8S2V5
QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUm
IGtleSkKK3sKKyAgICByZW1vdmUoZmluZChrZXkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBI
YXNoQXJnPgoraW5saW5lIHZvaWQgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRy
YWN0b3IsIEhhc2hBcmc+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7CisgICAgaWYgKGl0ID09IGVu
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9pbXBsLnJlbW92ZShOb2RlRXh0cmFjdG9yPEtl
eUFyZywgS2V5VHJhaXRzLCBOb2RlKiwgTm9kZVRyYWl0cywgRXh0cmFjdG9yPjo6ZXh0cmFjdChp
dC5ub2RlKCkpKTsKKyAgICB1bmxpbmtBbmREZWxldGUoaXQubm9kZSgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9y
LCB0eXBlbmFtZSBIYXNoQXJnPgoraW5saW5lIHZvaWQgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZh
bHVlQXJnLCBFeHRyYWN0b3IsIEhhc2hBcmc+OjpjbGVhcigpCit7CisgICAgZGVsZXRlQWxsTm9k
ZXMoKTsKKyAgICBtX2ltcGwuY2xlYXIoKTsKKyAgICBtX2hlYWQgPSAwOworICAgIG1fdGFpbCA9
IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB0eXBlbmFtZSBMaXN0
SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46Oml0ZXJhdG9y
IExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPjo6bWFr
ZUl0ZXJhdG9yKE5vZGUqIHBvc2l0aW9uKQoreworICAgIHJldHVybiBMaXN0SGFzaFRhYmxlSXRl
cmF0b3I8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJnPih0aGlzLCBwb3NpdGlv
bik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5
cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFyZz4KK2lubGluZSB0eXBlbmFtZSBMaXN0
SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3RvciwgSGFzaEFyZz46OmNvbnN0X2l0
ZXJhdG9yIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9yLCBIYXNoQXJn
Pjo6bWFrZUNvbnN0SXRlcmF0b3IoTm9kZSogcG9zaXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJu
IExpc3RIYXNoVGFibGVDb25zdEl0ZXJhdG9yPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3Rvciwg
SGFzaEFyZz4odGhpcywgcG9zaXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcs
IHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hBcmc+
CitpbmxpbmUgdm9pZCBMaXN0SGFzaFRhYmxlPEtleUFyZywgVmFsdWVBcmcsIEV4dHJhY3Rvciwg
SGFzaEFyZz46OmFwcGVuZE5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBub2RlLT5tX3ByZXYgPSBt
X3RhaWw7CisgICAgbm9kZS0+bV9uZXh0ID0gMDsKKworICAgIGlmIChtX3RhaWwpIHsKKyAgICAg
ICAgQVNTRVJUKG1faGVhZCk7CisgICAgICAgIG1fdGFpbC0+bV9uZXh0ID0gbm9kZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1faGVhZCk7CisgICAgICAgIG1faGVhZCA9IG5vZGU7
CisgICAgfQorCisgICAgbV90YWlsID0gbm9kZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
QXJnLCB0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNo
QXJnPgoraW5saW5lIHZvaWQgTGlzdEhhc2hUYWJsZTxLZXlBcmcsIFZhbHVlQXJnLCBFeHRyYWN0
b3IsIEhhc2hBcmc+OjpkZWxldGVBbGxOb2RlcygpCit7CisgICAgaWYgKCFtX2hlYWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvciAoTm9kZSogbm9kZSA9IG1faGVhZCwgKm5leHQgPSBtX2hl
YWQtPm1fbmV4dDsgbm9kZTsgbm9kZSA9IG5leHQsIG5leHQgPSBub2RlID8gbm9kZS0+bV9uZXh0
IDogMCkKKyAgICAgICAgZGVsZXRlIG5vZGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFy
ZywgdHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEFy
Zz4KK2lubGluZSB2b2lkIExpc3RIYXNoVGFibGU8S2V5QXJnLCBWYWx1ZUFyZywgRXh0cmFjdG9y
LCBIYXNoQXJnPjo6dW5saW5rQW5kRGVsZXRlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2Rl
LT5tX3ByZXYpIHsKKyAgICAgICAgQVNTRVJUKG5vZGUgPT0gbV9oZWFkKTsKKyAgICAgICAgbV9o
ZWFkID0gbm9kZS0+bV9uZXh0OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChub2RlICE9
IG1faGVhZCk7CisgICAgICAgIG5vZGUtPm1fcHJldi0+bV9uZXh0ID0gbm9kZS0+bV9uZXh0Owor
ICAgIH0KKworICAgIGlmICghbm9kZS0+bV9uZXh0KSB7CisgICAgICAgIEFTU0VSVChub2RlID09
IG1fdGFpbCk7CisgICAgICAgIG1fdGFpbCA9IG5vZGUtPm1fcHJldjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQobm9kZSAhPSBtX3RhaWwpOworICAgICAgICBub2RlLT5tX25leHQtPm1f
cHJldiA9IG5vZGUtPm1fcHJldjsKKyAgICB9CisKKyAgICBkZWxldGUgbm9kZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TGlzdEhhc2hUYWJsZTsKKworI2VuZGlmIC8q
IFdURl9MaXN0SGFzaFRhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0R2x1
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCmluZGV4IDQyMTcy
MGI3ZDZiZDBmNzUzMjhjNWNmMTEwNDVhY2E5NzQ1NTJlMzIuLjhiODIzMjdiNzkyM2YwZjJkMTNi
YjkzYjQwZDBkMzM1ODFiYzNmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0R2x1ZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDExLTAyLTIyICBCZW5qYW1pbiBQb3VsYWluICA8aWtpcG91QGdtYWlsLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBuZWVk
IGEgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBlZmZpY2llbnQgYWNjZXNzIGJ5IGtleSwgYW5kIHdpdGgg
b3JkZXIgZm9yIHRoZSBlbGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTQ5NzMKKworICAgICAgICBBZGQgZm9yd2FyZGluZyBoZWFkZXIgZm9y
IExpc3RIYXNoVGFibGUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTGlzdEhh
c2hUYWJsZS5oOiBBZGRlZC4KKwogMjAxMS0wMi0xOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJy
YWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTGlz
dEhhc2hUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9MaXN0SGFzaFRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEyZWUwOGNiZDE0ZThhZDdlNGJlZmM2MzQw
MzRmZjgyNGM4YjcyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0R2x1ZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvTGlzdEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9MaXN0SGFzaFRhYmxlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDMxODRj
ZTVkODNmZGUwOWE1MWNjMzc5YTBmYzc0ODIxYWM3YjdlZC4uZmM1NzM1ZmZkODkzZWM1NWYyNWNl
YTk2YTMxNjJmY2I1ZWNhZGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTAy
LTIyICBCZW5qYW1pbiBQb3VsYWluICA8aWtpcG91QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBuZWVkIGEgZGF0YSBzdHJ1Y3R1
cmUgd2l0aCBlZmZpY2llbnQgYWNjZXNzIGJ5IGtleSwgYW5kIHdpdGggb3JkZXIgZm9yIHRoZSBl
bGVtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTQ5NzMKKworICAgICAgICBBZGQgZm9yd2FyZGluZyBoZWFkZXIgZm9yIExpc3RIYXNoVGFibGUu
CisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTGlzdEhhc2hUYWJsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKwogMjAxMS0wMi0y
MiAgU3RldmUgTGFjZXkgIDxzamxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9MaXN0SGFzaFRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvTGlzdEhhc2hUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2NDFjYTI2ODczNjg3OWQyNDg2Y2Fj
MDUxYTRjOWVkOGMyODZjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvTGlzdEhhc2hUYWJsZS5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRl
ZiBXZWJDb3JlX0ZXRF9MaXN0SGFzaFRhYmxlX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfTGlzdEhh
c2hUYWJsZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTGlzdEhhc2hUYWJsZS5oPgorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IGYzMTAyODhlOGM5OTYyOGI2MTY1NDJjMmJiMGY1NTNjNTM2MjcwZmMuLjNhYWUzNzA0ZWMyY2U5
YWU4N2ExYjIwYTZjMmZlYTY5NWIxNDBkMzkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02NDU4OSw2ICs2NDU4OSwxMCBAQAogCQkJCQk+CiAJ
CQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cRm9yd2FyZGluZ0hl
YWRlcnNcd3RmXExpc3RIYXNoVGFibGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEZvcndhcmRpbmdIZWFkZXJzXHd0ZlxNYXRoRXh0cmFz
LmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>