<?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>193590</bug_id>
          
          <creation_ts>2019-01-18 13:36:21 -0800</creation_ts>
          <short_desc>add support for encrypted localstorage</short_desc>
          <delta_ts>2022-06-15 12:23:08 -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>WebCore Misc.</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="Gurdal">gurdaloruklu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>calvaris</cc>
    
    <cc>empire_utopian.0v</cc>
    
    <cc>ggaren</cc>
    
    <cc>gurdal_oruklu</cc>
    
    <cc>sihui_liu</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1496012</commentid>
    <comment_count>0</comment_count>
    <who name="Gurdal">gurdaloruklu</who>
    <bug_when>2019-01-18 13:36:21 -0800</bug_when>
    <thetext>add support for encrypted localstorage using SQLite Encryption Extension (https://www.sqlite.org/see/doc/trunk/www/index.wiki)

encryption will be enabled only when ENABLE_SQLITE_ENCRYPTION_EXTENSION feature is turned on and SqLite3See library is found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496023</commentid>
    <comment_count>1</comment_count>
      <attachid>359537</attachid>
    <who name="Gurdal Oruklu">gurdal_oruklu</who>
    <bug_when>2019-01-18 14:03:32 -0800</bug_when>
    <thetext>Created attachment 359537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496839</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-01-22 11:09:45 -0800</bug_when>
    <thetext>What&apos;s the target use case / platform for this?

Why just LocalStorage and not other storage technologies?

Why doesn&apos;t this patch include regression tests?

On Darwin platforms, our preferred solution for data protection is the application container and/or filesystem-level encryption. I could imagine adding API for other styles of data protection on non-Darwin platforms, but I think we would want that API to be per WebsiteDataStore, and not per individual storage technology.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1875433</commentid>
    <comment_count>3</comment_count>
    <who name="Darren Mo">empire_utopian.0v</who>
    <bug_when>2022-06-12 13:02:05 -0700</bug_when>
    <thetext>+1 to encrypting the entire `WebsiteDataStore`.

One use case would be to add an extra layer of protection for sensitive data in addition to filesystem-level encryption. As far as I know, there is no per-user encryption on macOS and no per-app encryption on Darwin platforms.

Geoffrey, do you have some thoughts on how to implement such a feature? I’m new to WebKit. I assume we need to
- Accept an encryption key. Should we support a single encryption algorithm/key type or support multiple?
- Encrypt/decrypt data. Does this happen inside `WebsiteDataStore`? Are there existing cross-platform WebKit APIs for encryption/decryption that we can reuse?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1875562</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2022-06-13 10:48:27 -0700</bug_when>
    <thetext>&gt; - Accept an encryption key. Should we support a single encryption
&gt; algorithm/key type or support multiple?

I don&apos;t know. I suppose it depends on the purpose of the feature.

If the purpose of the feature is to enable one user to encrypt their data separately from another user on the same device, then there&apos;s no obvious reason to allow a client to specify the encryption algorithm, and an API that picked an algorithm automatically would be easier to use.

&gt; - Encrypt/decrypt data. Does this happen inside `WebsiteDataStore`? Are
&gt; there existing cross-platform WebKit APIs for encryption/decryption that we
&gt; can reuse?

This is a challenging question. WebKit uses many different storage technologies implicitly. Sometimes SQLite, sometimes flat files, sometimes encoded plists, sometimes something chosen by another framework in a way that is opaque to WebKit (e.g. cookies). It&apos;s not obvious to me at which layer we would perform encryption / decryption, or how to architect that. Getting to the point where you can override every storage operation with some kind of custom storage system is a pre-requisite to adding encryption, and probably the most challenging part of this feature proposal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1875959</commentid>
    <comment_count>5</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2022-06-14 21:57:43 -0700</bug_when>
    <thetext>(In reply to Darren Mo from comment #3)
&gt; +1 to encrypting the entire `WebsiteDataStore`.
&gt; 
&gt; One use case would be to add an extra layer of protection for sensitive data
&gt; in addition to filesystem-level encryption. As far as I know, there is no
&gt; per-user encryption on macOS and no per-app encryption on Darwin platforms.
&gt; 

Can you be more specific about the usecase? What do you want to achieve with this API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1876053</commentid>
    <comment_count>6</comment_count>
    <who name="Darren Mo">empire_utopian.0v</who>
    <bug_when>2022-06-15 12:23:08 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #5)
&gt; (In reply to Darren Mo from comment #3)
&gt; &gt; +1 to encrypting the entire `WebsiteDataStore`.
&gt; &gt; 
&gt; &gt; One use case would be to add an extra layer of protection for sensitive data
&gt; &gt; in addition to filesystem-level encryption. As far as I know, there is no
&gt; &gt; per-user encryption on macOS and no per-app encryption on Darwin platforms.
&gt; &gt; 
&gt; 
&gt; Can you be more specific about the usecase? What do you want to achieve with
&gt; this API?

Expanding on what I mentioned above:

- Per-user encryption. Imagine multiple users share a computer. One user can read another user’s data without needing their password. (Dunno if filesystem permissions mitigate that somewhat but imagine the user has root privileges.)

- Per-app encryption. Imagine multiple users share a single account or one user happens to know the account password of another user. In general, data should be readable by both users but perhaps one user has really sensitive information that they would like to keep private to themselves.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359537</attachid>
            <date>2019-01-18 14:03:32 -0800</date>
            <delta_ts>2019-01-18 14:03:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193590-20190118140331.patch</filename>
            <type>text/plain</type>
            <size>27480</size>
            <attacher name="Gurdal Oruklu">gurdal_oruklu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU5NTVlYWJhNzk3ODY0
MTdlOWJiMjFkOGFlODEwNDMzMDg0ZjMwZS4uNjk5MzJmZjU2NGZiMzRkMWM0YmU5Yjk5NDhmMDk5
ZDdkOWIwNjllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAxLTE4ICBFdWdl
bmUgTXV0YXZjaGkgPElldmdlbl9NdXRhdmNoaUBjb21jYXN0LmNvbT4KKworICAgICAgICBhZGQg
c3VwcG9ydCBmb3IgZW5jcnlwdGVkIGxvY2Fsc3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNTkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBzdXBwb3J0IGZvciBTUUxpdGUgRW5j
cnlwdGlvbiBFeHRlbnNpb24KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0
ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzRW5jcnlwZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6Om9wZW4pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5oOgorCiAyMDE5LTAxLTE4ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFw
cGxlLmNvbT4KIAogICAgICAgICBBIHRyYWNrIHNvdXJjZSBzaG91bGQgYmUgdW5tdXRlZCB3aGVu
ZXZlciByZWVuYWJsZWQgYWZ0ZXIgc2V0RGlyZWN0aW9uIGNoYW5nZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOTI3
MDMyZjNiMTcwYzIwN2ViMzg1YTk4YWFiOWRlNzRlYWJmMjg0YS4uNmIyMmJiZmFkYzg4YWNkMjcx
OWFjYThmMjJlMzk3ODNiYzEzYWE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxOS0w
MS0xOCAgRXVnZW5lIE11dGF2Y2hpIDxJZXZnZW5fTXV0YXZjaGlAY29tY2FzdC5jb20+CisKKyAg
ICAgICAgYWRkIHN1cHBvcnQgZm9yIGVuY3J5cHRlZCBsb2NhbHN0b3JhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MzU5MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgc3VwcG9ydCBmb3Ig
U1FMaXRlIEVuY3J5cHRpb24gRXh0ZW5zaW9uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUxvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25D
bGllbnQuaDogQWRkZWQuCisgICAgICAgIChBUEk6OkxvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRl
bnNpb25DbGllbnQ6On5Mb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uQ2xpZW50KToKKyAg
ICAgICAgKEFQSTo6TG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudDo6bG9hZEtl
eVdpdGhPcmlnaW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0xvY2FsU3RvcmFnZUVu
Y3J5cHRpb25FeHRlbnNpb25DbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLTG9jYWxTdG9y
YWdlRW5jcnlwdGlvbkV4dGVuc2lvblNldENsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkxvY2FsU3RvcmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZSk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4
dGVuc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VFbmNyeXB0
aW9uRXh0ZW5zaW9uOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VF
bmNyeXB0aW9uRXh0ZW5zaW9uOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0
b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uOjpsb2FkS2V5V2l0aE9yaWdpbik6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbi5oOiBB
ZGRlZC4KKwogMjAxOS0wMS0xOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW1dQRV0gQWRkIFF0IGV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCAwZGU1OTQzNjY2ZDIyMzlhZWFjYmI4NzNmZDUxN2Q5MTk5NmU1MzE0Li41NWNkZTY3ZWMw
NDAzOWYxNjhhN2JkYjA5OTVjNmFlODMxNzEyNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTU4LDYgKzE1OCw4IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IgogKQogCithZGRfZGVmaW5pdGlvbnMoJHtTUUxJ
VEVfREVGSU5JVElPTlN9KQorCiBzZXQoV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICR7SUNVX0lOQ0xVREVfRElSU30KICAgICAke0xJQlhNTDJfSU5DTFVERV9ESVJ9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAppbmRleCA2
NjNlMGJjMGI4NTY3MDgzYWE5N2VmODExNWE1NDY4YzUxN2U5NmM1Li43NzU2M2QxMTNlNjI5OTM3
ZTM4M2YyZDViZGUzNGFhZmQyYmQ2MThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJTUUxp
dGVEYXRhYmFzZS5oIgogCiAjaW5jbHVkZSAiRGF0YWJhc2VBdXRob3JpemVyLmgiCisjaW5jbHVk
ZSAiRmlsZUhhbmRsZS5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5UmVsZWFzZS5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVT
eXN0ZW0uaCIKQEAgLTM5LDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWZuZGVmIFNRTElURV9GSUxF
X0hFQURFUgorIyAgZGVmaW5lIFNRTElURV9GSUxFX0hFQURFUiAiU1FMaXRlIGZvcm1hdCAzIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgbm90T3Bl
bkVycm9yTWVzc2FnZVtdID0gImRhdGFiYXNlIGlzIG5vdCBvcGVuIjsKQEAgLTcwLDYgKzc2LDIy
IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTUUxpdGVJZk5lY2Vzc2FyeSgpCiAgICAgfSk7CiB9
CiAKKyNpZiBkZWZpbmVkKFNRTElURV9IQVNfQ09ERUMpICYmIEVOQUJMRShTUUxJVEVfRU5DUllQ
VElPTl9FWFRFTlNJT04pCitzdGF0aWMgYm9vbCBpc0VuY3J5cGVkKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUpCit7CisgICAgYXV0byBmaWxlSGFuZGxlID0gV2ViQ29yZTo6RmlsZUhhbmRsZShmaWxl
bmFtZSwgV2ViQ29yZTo6T3BlbkZvclJlYWQpOworICAgIGlmICghZmlsZUhhbmRsZS5vcGVuKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBtYWdpY1NpemUgPSBXVEZfQVJSQVlf
TEVOR1RIKFNRTElURV9GSUxFX0hFQURFUik7CisgICAgYXV0byBmaWxlSGVhZGVyID0gTWFsbG9j
UHRyPGNoYXI+OjptYWxsb2MobWFnaWNTaXplKTsKKyAgICBpZiAobWFnaWNTaXplICE9IGZpbGVI
YW5kbGUucmVhZChmaWxlSGVhZGVyLmdldCgpLCBtYWdpY1NpemUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gOjptZW1jbXAoZmlsZUhlYWRlci5nZXQoKSwgU1FMSVRFX0ZJ
TEVfSEVBREVSLCBtYWdpY1NpemUpOworfQorI2VuZGlmCisKIFNRTGl0ZURhdGFiYXNlOjpTUUxp
dGVEYXRhYmFzZSgpID0gZGVmYXVsdDsKIAogU1FMaXRlRGF0YWJhc2U6On5TUUxpdGVEYXRhYmFz
ZSgpCkBAIC03NywxMiArOTksMTggQEAgU1FMaXRlRGF0YWJhc2U6On5TUUxpdGVEYXRhYmFzZSgp
CiAgICAgY2xvc2UoKTsKIH0KIAotYm9vbCBTUUxpdGVEYXRhYmFzZTo6b3Blbihjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBib29sIGZvcldlYlNRTERhdGFiYXNlKQorYm9vbCBTUUxpdGVEYXRhYmFz
ZTo6b3Blbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIGZvcldlYlNRTERhdGFiYXNlLCBX
VEY6Ok9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4ga2V5KQogewogICAgIGluaXRpYWxpemVTUUxp
dGVJZk5lY2Vzc2FyeSgpOwogCiAgICAgY2xvc2UoKTsKIAorI2lmIGRlZmluZWQoU1FMSVRFX0hB
U19DT0RFQykgJiYgRU5BQkxFKFNRTElURV9FTkNSWVBUSU9OX0VYVEVOU0lPTikKKyAgICBib29s
IHNob3VsZFJlS2V5ID0gZmFsc2U7CisgICAgaWYgKGtleSAmJiBrZXktPnNpemUoKSkKKyAgICAg
ICAgc2hvdWxkUmVLZXkgPSBmaWxlRXhpc3RzKGZpbGVuYW1lKSAmJiAhaXNFbmNyeXBlZChmaWxl
bmFtZSk7CisjZW5kaWYKKwogICAgIG1fb3BlbkVycm9yID0gU1FMaXRlRmlsZVN5c3RlbTo6b3Bl
bkRhdGFiYXNlKGZpbGVuYW1lLCAmbV9kYiwgZm9yV2ViU1FMRGF0YWJhc2UpOwogICAgIGlmICht
X29wZW5FcnJvciAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgbV9vcGVuRXJyb3JNZXNzYWdlID0g
bV9kYiA/IHNxbGl0ZTNfZXJybXNnKG1fZGIpIDogInNxbGl0ZV9vcGVuIHJldHVybmVkIG51bGwi
OwpAQCAtOTMsNiArMTIxLDM2IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6Om9wZW4oY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgYm9vbCBmb3JXZWJTUUxEYXRhYmFzZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAorICAgIGlmIChrZXkgJiYga2V5LT5zaXplKCkpIHsKKyNpZiBkZWZpbmVk
KFNRTElURV9IQVNfQ09ERUMpICYmIEVOQUJMRShTUUxJVEVfRU5DUllQVElPTl9FWFRFTlNJT04p
CisgICAgICAgIGlmICghc2hvdWxkUmVLZXkpCisgICAgICAgICAgICBtX29wZW5FcnJvciA9IHNx
bGl0ZTNfa2V5X3YyKG1fZGIsIG51bGxwdHIsIGtleS0+ZGF0YSgpLCBrZXktPnNpemUoKSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9vcGVuRXJyb3IgPSBzcWxpdGUzX3Jla2V5X3Yy
KG1fZGIsIG51bGxwdHIsIGtleS0+ZGF0YSgpLCBrZXktPnNpemUoKSk7CisgICAgICAgICAgICBp
ZiAobV9vcGVuRXJyb3IgPT0gU1FMSVRFX09LKQorICAgICAgICAgICAgICAgIG1fb3BlbkVycm9y
ID0gcnVuVmFjdXVtQ29tbWFuZCgpOworICAgICAgICB9CisKKyAgICAgICAga2V5LT5maWxsKDAp
OworCisgICAgICAgIGlmIChtX29wZW5FcnJvciAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAg
IG1fb3BlbkVycm9yTWVzc2FnZSA9IHNxbGl0ZTNfZXJybXNnKG1fZGIpOworICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gYXR0YWNoIGVuY3J5cHRpb24ga2V5IHRvIFNRTGl0ZSBkYXRh
YmFzZSAlc1xuQ2F1c2UgLSAlcyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0YSgpLCBtX29wZW5FcnJv
ck1lc3NhZ2UuZGF0YSgpKTsKKyAgICAgICAgICAgIHNxbGl0ZTNfY2xvc2UobV9kYik7CisgICAg
ICAgICAgICBtX2RiID0gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChzaG91bGRSZUtleSkgeworICAgICAgICAgICAgaWYgKCFpc0VuY3J5cGVk
KGZpbGVuYW1lKSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlNRTGl0ZSBkYXRhYmFzZSBm
aWxlIGlzIGNsZWFyIGFmdGVyIHJlLWtleSwgcGF0aD0lcyIsIGZpbGVuYW1lLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAga2V5LT5maWxsKDApOworICAgICAgICBM
T0dfRVJST1IoIlNRTGl0ZSBjb2RlYyBzdXBwb3J0IGlzIGRpc2FibGVkLCBpZ25vcmluZyBlbmNy
eXB0aW9uIGtleSBmb3IgZGF0YWJhc2UgJXMiLCBmaWxlbmFtZS5hc2NpaSgpLmRhdGEoKSk7Cisj
ZW5kaWYKKyAgICB9CisKICAgICBvdmVycmlkZVVuYXV0aG9yaXplZEZ1bmN0aW9ucygpOwogCiAg
ICAgbV9vcGVuRXJyb3IgPSBzcWxpdGUzX2V4dGVuZGVkX3Jlc3VsdF9jb2RlcyhtX2RiLCAxKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggYWNl
YzU0OTAwNzgzNTZkNGMwZGM5NGVjZTBlMDhjNWM1NmMxZGMyNi4uMjk3ZjYxNGRhMGNiYmI2NDA2
NDg5OGQ3OTcwZTRlZmM0NTI0YjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIFNRTGl0ZURhdGFiYXNlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgflNRTGl0ZURhdGFi
YXNlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIG9wZW4oY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgYm9vbCBmb3JXZWJTUUxEYXRhYmFzZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIG9wZW4oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBmb3JXZWJTUUxEYXRhYmFz
ZSA9IGZhbHNlLCBXVEY6Ok9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gPSBXVEY6Om51bGxvcHQp
OwogICAgIGJvb2wgaXNPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9kYjsgfQogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xvc2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNGRlMGM2ZmVmZThlYWYzY2E0
YTBmZGYwN2QwNWExMTE3ZGFiY2IzMi4uYzIzMjU0YjNjMmVlNzQ4ODE3NWNlM2NkMzc4YTJkZTMx
MTk3MzQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0zNTIsNiArMzUyLDcgQEAgVUlQcm9jZXNzL0FQSS9D
L1dLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QuY3BwCiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmNwcAogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNw
cAogVUlQcm9jZXNzL0FQSS9DL1dLV2luZG93RmVhdHVyZXNSZWYuY3BwCitVSVByb2Nlc3MvQVBJ
L0MvV0tMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uQ2xpZW50LmNwcAogCiBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAKIFVJUHJv
Y2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwCkBA
IC00MDAsNiArNDAxLDcgQEAgVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRp
Y2F0b3JDb29yZGluYXRvclByb3h5LmNwcAogCiBVSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5jcHAKIFVJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlVHJhY2tlci5jcHAKK1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZUVuY3J5cHRp
b25FeHRlbnNpb24uY3BwCiAKIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29y
ZC5jcHAKIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUxvY2FsU3RvcmFnZUVuY3J5cHRp
b25FeHRlbnNpb25DbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElMb2Nh
bFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkxOWM0YWRm
OGJlMmNkOThmMWNjMjkxMzMyNjIyODg4MDlmOWM2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9u
Q2xpZW50LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyogQ29weXJpZ2h0IChjKSAyMDE4LCBDb21j
YXN0CisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24s
CisqIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKyoKKyogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
CisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQK
KyogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgT1I7IFBST0ZJVFMgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyogQU5ZIE9GIFRIRU9SWSBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKK30KKworbmFtZXNwYWNlIEFQSSB7CisKK2Ns
YXNzIExvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQgeworcHVibGljOgorICAg
IHZpcnR1YWwgfkxvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgV1RGOjpPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGxvYWRLZXlXaXRoT3Jp
Z2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpIHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0xvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tMb2NhbFN0b3JhZ2VFbmNy
eXB0aW9uRXh0ZW5zaW9uQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMGNkZDcwMGI5NjY1MWU1YjRh
MGQ5OGU0NzdmNDIwY2RhZmQ0Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uQ2xpZW50LmNw
cApAQCAtMCwwICsxLDgyIEBACisvKgorKiBDb3B5cmlnaHQgKGMpIDIwMTgsIENvbWNhc3QKKyog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyogYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgorKgorKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbgorKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBPUjsgUFJPRklUUyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorKiBBTlkgT0YgVEhFT1JZIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS0xvY2Fs
U3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQuaCIKKworI2luY2x1ZGUgIkFQSUNsaWVu
dC5oIgorI2luY2x1ZGUgIkFQSURhdGEuaCIKKyNpbmNsdWRlICJBUElMb2NhbFN0b3JhZ2VFbmNy
eXB0aW9uRXh0ZW5zaW9uQ2xpZW50LmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRW5jcnlwdGlv
bkV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U2VjdXJpdHlPcmlnaW5EYXRhLmg+CisKKyNpbmNsdWRlIDxjc3RyaW5nPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgQVBJIHsKK3RlbXBsYXRlPD4gc3RydWN0IENsaWVu
dFRyYWl0czxXS0xvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnRCYXNlPiB7Cisg
ICAgdHlwZWRlZiBzdGQ6OnR1cGxlPFdLTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNs
aWVudFYwPiBWZXJzaW9uczsKK307Cit9CisKK3ZvaWQgV0tMb2NhbFN0b3JhZ2VFbmNyeXB0aW9u
RXh0ZW5zaW9uU2V0Q2xpZW50KGNvbnN0IFdLTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lv
bkNsaWVudEJhc2UqIHdrQ2xpZW50KSAKK3sKKyAgICBpZiAoIXdrQ2xpZW50KSB7CisgICAgICAg
IExvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb246OnNpbmdsZXRvbigpLnNldENsaWVudChu
dWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsYXNzIFdlYkxvY2FsU3Rv
cmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQgOiBwdWJsaWMgQVBJOjpDbGllbnQ8V0tMb2Nh
bFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uQ2xpZW50QmFzZT4sIHB1YmxpYyBBUEk6OkxvY2Fs
U3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
ZXhwbGljaXQgV2ViTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudChjb25zdCBX
S0xvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnRCYXNlKiBjbGllbnQpIAorICAg
ICAgICB7CisgICAgICAgICAgICBpbml0aWFsaXplKGNsaWVudCk7CisgICAgICAgIH0KKyAgICBw
cml2YXRlOgorICAgICAgICBXVEY6Ok9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbG9hZEtleVdp
dGhPcmlnaW4oY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdp
bkRhdGEpIGZpbmFsIAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmxvYWRL
ZXlXaXRoT3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICAgICAgICAgIFdLRGF0YVJlZiBrZXlEYXRhUmVmID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFJl
ZlB0cjxBUEk6OlNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IEFQSTo6U2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShzZWN1cml0eU9yaWdpbkRhdGEucHJvdG9jb2wsIHNlY3VyaXR5T3JpZ2lu
RGF0YS5ob3N0LCBzZWN1cml0eU9yaWdpbkRhdGEucG9ydCk7CisgICAgICAgICAgICBtX2NsaWVu
dC5sb2FkS2V5V2l0aE9yaWdpbih0b0FQSShzZWN1cml0eU9yaWdpbi5nZXQoKSksICZrZXlEYXRh
UmVmLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworCisgICAgICAgICAgICBpZiAoIWtleURh
dGFSZWYpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICAg
ICAgYXV0byBkYXRhID0gYWRvcHRSZWYoV2ViS2l0Ojp0b0ltcGwoa2V5RGF0YVJlZikpOworICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleVZlY3RvcjsKKyAgICAgICAgICAgIGtleVZlY3Rv
ci5hcHBlbmQoZGF0YS0+Ynl0ZXMoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIDo6bWVt
c2V0KGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEtPmJ5dGVzKCkpLCAwLCBkYXRhLT5z
aXplKCkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bWFrZU9wdGlvbmFsKFdURk1vdmUoa2V5
VmVjdG9yKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byBjbGllbnQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdlYkxvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQ+KHdrQ2xp
ZW50KTsKKyAgICBMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uOjpzaW5nbGV0b24oKS5z
ZXRDbGllbnQoV1RGTW92ZShjbGllbnQpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tMb2NhbFN0b3JhZ2VFbmNyeXB0aW9u
RXh0ZW5zaW9uQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhkN2E1MDQzZmJlYjU2MjQ4ODQ3MGJlYTM1
MDdmNzNkMWQwMjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudC5oCkBAIC0wLDAg
KzEsNTIgQEAKKy8qCisqIENvcHlyaWdodCAoYykgMjAxOCwgQ29tY2FzdAorKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorKiBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqCisqICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorKiAgICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyogQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIE9SOyBQUk9GSVRTIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisqIEFOWSBPRiBUSEVPUlkgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB2b2lkICgq
V0tMb2FkS2V5V2l0aE9yaWdpbikoV0tTZWN1cml0eU9yaWdpblJlZiBvcmlnaW4sIFdLRGF0YVJl
ZiAqcmV0dXJuS2V5RGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3R5cGVkZWYgc3Ry
dWN0IFdLTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudEJhc2UgeworICAgIGlu
dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJzaW9uOworICAgIGNvbnN0IHZvaWQgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOworfSBXS0xvY2FsU3RvcmFnZUVu
Y3J5cHRpb25FeHRlbnNpb25DbGllbnRCYXNlOworCit0eXBlZGVmIHN0cnVjdCBXS0xvY2FsU3Rv
cmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnRWMCB7CisgICAgV0tMb2NhbFN0b3JhZ2VFbmNy
eXB0aW9uRXh0ZW5zaW9uQ2xpZW50QmFzZSAgICAgICAgICAgICAgICAgICAgICBiYXNlOworCisg
ICAgLy8gVmVyc2lvbiAwLgorICAgIFdLTG9hZEtleVdpdGhPcmlnaW4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRLZXlXaXRoT3JpZ2luOworfSBXS0xv
Y2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnRWMDsKKworV0tfRVhQT1JUIHZvaWQg
V0tMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uU2V0Q2xpZW50KGNvbnN0IFdLTG9jYWxT
dG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudEJhc2UqIGNsaWVudCk7CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCmluZGV4IDBjMjVkNjU3
ZTk3NzZhNzQ3NGQyMDU1ZmRmNTQ4NzJhMDBkOGVkZGIuLmNkNmNlYjJkYjhlNDViYzg1YjJhN2Q2
YjBlNTg4NGQ5NDJhNTIxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlRGF0YWJhc2UuaCIKIAogI2luY2x1ZGUgIkxvY2Fs
U3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIgorI2luY2x1ZGUgIkxvY2FsU3RvcmFnZUVuY3J5cHRp
b25FeHRlbnNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJh
bnNhY3Rpb24uaD4KQEAgLTkyLDcgKzkzLDkgQEAgYm9vbCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6
dHJ5VG9PcGVuRGF0YWJhc2UoRGF0YWJhc2VPcGVuaW5nU3RyYXRlZ3kgb3BlbmluZ1N0cmEKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKG1f
ZGF0YWJhc2VQYXRoKSkgeworICAgIFdURjo6T3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBrZXkg
PSBMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uOjpzaW5nbGV0b24oKS5sb2FkS2V5V2l0
aE9yaWdpbihtX3NlY3VyaXR5T3JpZ2luKTsKKworICAgIGlmICghbV9kYXRhYmFzZS5vcGVuKG1f
ZGF0YWJhc2VQYXRoLCBmYWxzZSwgV1RGTW92ZShrZXkpKSkgewogICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlIGZpbGUgJXMgZm9yIGxvY2FsIHN0b3JhZ2UiLCBtX2Rh
dGFiYXNlUGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9y
YWdlRW5jcnlwdGlvbkV4dGVuc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJT
dG9yYWdlL0xvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdi
ZDU3M2UxNGRjZDkzNjhlMjBkZjViYzQ2YzYyOWYxOTFiYWU5MDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZUVuY3J5cHRp
b25FeHRlbnNpb24uY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisqIENvcHlyaWdodCAoYykgMjAx
OCwgQ29tY2FzdAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZp
Y2F0aW9uLAorKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6CisqCisqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLAorKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5ECisqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIE9SOyBQUk9GSVRTIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqIEFOWSBPRiBUSEVPUlkgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkxvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb24uaCIKKworI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTG9jYWxTdG9yYWdl
RW5jcnlwdGlvbkV4dGVuc2lvbiYgTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbjo6c2lu
Z2xldG9uKCkgCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExvY2FsU3RvcmFnZUVuY3J5
cHRpb25FeHRlbnNpb24+IGluc3RhbmNlOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9p
ZCBMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uOjpzZXRDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6TG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudD4mJiBjbGllbnQp
IAoreworICAgIG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOworfQorV1RGOjpPcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IExvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb246OmxvYWRLZXlX
aXRoT3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luRGF0YSkg
Cit7CisgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPmxvYWRLZXlXaXRoT3JpZ2luKG9y
aWdpbkRhdGEpIDogV1RGOjpudWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RW5jcnlwdGlvbkV4dGVuc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFn
ZS9Mb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjdhNGQxZDNl
YzcwNjY3OTI2ODEyN2E4NGFiNmJhNWY2MzU0NTY5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4dGVu
c2lvbi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisqIENvcHlyaWdodCAoYykgMjAxOCwgQ29tY2Fz
dAorKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAor
KiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisqCisqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uCisqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIE9SOyBQUk9GSVRTIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisqIEFOWSBPRiBUSEVPUlkgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJTG9jYWxT
dG9yYWdlRW5jcnlwdGlvbkV4dGVuc2lvbkNsaWVudC5oIgorCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0
ZW5zaW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbFN0b3JhZ2VFbmNyeXB0aW9u
RXh0ZW5zaW9uKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTG9jYWxTdG9yYWdlRW5jcnlwdGlvbkV4
dGVuc2lvbiYgc2luZ2xldG9uKCk7CisKKyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9w
dHI8QVBJOjpMb2NhbFN0b3JhZ2VFbmNyeXB0aW9uRXh0ZW5zaW9uQ2xpZW50PiYmKTsKKyAgICBX
VEY6Ok9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gbG9hZEtleVdpdGhPcmlnaW4oY29uc3QgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJik7CisKK3ByaXZhdGU6CisgICAgTG9jYWxTdG9yYWdl
RW5jcnlwdGlvbkV4dGVuc2lvbigpID0gZGVmYXVsdDsKKyAgICB+TG9jYWxTdG9yYWdlRW5jcnlw
dGlvbkV4dGVuc2lvbigpID0gZGVmYXVsdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okxv
Y2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb25DbGllbnQ+IG1fY2xpZW50OworCisgICAgZnJp
ZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPExvY2FsU3RvcmFnZUVuY3J5cHRpb25FeHRlbnNpb24+
OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRTcWxpdGUzU2VlLmNtYWtl
IGIvU291cmNlL2NtYWtlL0ZpbmRTcWxpdGUzU2VlLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1ZWIzOTUx
ZDRlNWIyMzhlOGExMjM5ZGU5NWU4ZTEzOWNmMmMwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvY21ha2UvRmluZFNxbGl0ZTNTZWUuY21ha2UKQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmln
aHQgKGMpIDIwMTgsIENvbWNhc3QKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0IG1vZGlmaWNhdGlvbiwKKyMgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisjICAgIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKKyMgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorIyAgICBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBPUjsgUFJPRklUUyBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgT0YgVEhF
T1JZIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZmluZF9wYWNrYWdlKFBrZ0Nv
bmZpZykKK3BrZ19jaGVja19tb2R1bGVzKFBDX1NRTElURSBzcWxpdGUzc2VlKQorCitzZXQoU1FM
SVRFX0RFRklOSVRJT05TICR7UENfU1FMSVRFX0NGTEFHU19PVEhFUn0pCisKK2ZpbmRfcGF0aChT
UUxJVEVfSU5DTFVERV9ESVIgTkFNRVMgc3FsaXRlMy5oCisgICAgUEFUSF9TVUZGSVhFUyBzcWxp
dGUzc2VlCisgICAgUEFUSFMgJHtQQ19TUUxJVEVfSU5DTFVERURJUn0KKykKK2ZpbmRfbGlicmFy
eShTUUxJVEVfTElCUkFSSUVTIE5BTUVTIHNxbGl0ZTNzZWUKKyAgICBQQVRIUworICAgICR7UENf
U1FMSVRFX0xJQkRJUn0KKyAgICAke1BDX1NRTElURV9MSUJSQVJZX0RJUlN9CispCisKK2luY2x1
ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitGSU5EX1BBQ0tBR0VfSEFORExFX1NU
QU5EQVJEX0FSR1MoU3FsaXRlM1NlZSBERUZBVUxUX01TRyBTUUxJVEVfSU5DTFVERV9ESVIgU1FM
SVRFX0xJQlJBUklFUykKKworbWFya19hc19hZHZhbmNlZChTUUxJVEVfSU5DTFVERV9ESVIgU1FM
SVRFX0xJQlJBUklFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggNWYzMTFiODNjNWFiOTg3ODZm
ODNiM2JhNTA0MjkzNzRkMGFiNzg0ZC4uZmVkMzAyYzM0OGQwNTJjMjgxYjJlZDRmYThkZGE4OGE2
ZTExMzllMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTgwLDcgKzgwLDEzIEBAIGZpbmRfcGFj
a2FnZShMaWJHY3J5cHQgMS42LjAgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoTGliU291cCAyLjQy
LjAgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoTGliWG1sMiAyLjguMCBSRVFVSVJFRCkKIGZpbmRf
cGFja2FnZShQTkcgUkVRVUlSRUQpCi1maW5kX3BhY2thZ2UoU3FsaXRlIFJFUVVJUkVEKQorCitp
ZiAoRU5BQkxFX1NRTElURV9FTkNSWVBUSU9OX0VYVEVOU0lPTikKKyAgZmluZF9wYWNrYWdlKFNx
bGl0ZTNTZWUgUkVRVUlSRUQpCitlbHNlICgpCisgIGZpbmRfcGFja2FnZShTcWxpdGUgUkVRVUlS
RUQpCitlbmRpZiAoKQorCiBmaW5kX3BhY2thZ2UoVGhyZWFkcyBSRVFVSVJFRCkKIGZpbmRfcGFj
a2FnZShXZWJQIFJFUVVJUkVEKQogZmluZF9wYWNrYWdlKFdQRSBSRVFVSVJFRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJL
aXRGZWF0dXJlcy5jbWFrZQppbmRleCAwNDFhYjMyZDJiOGYxODZlMGZkZDNlMDM3MmE3YzQxMGU2
Y2IyMmM4Li4xNjQzN2E2ZGJlZGZjMmVlNTlhMzFjNjFlNmNlMTAwNjgwYmJjZTQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC0yMTUsNiArMjE1LDcgQEAgbWFjcm8oV0VCS0lUX09Q
VElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfV0lSRUxFU1NfUExB
WUJBQ0tfVEFSR0VUICJFbmFibGUgd2lyZWxlc3MgcGxheWJhY2sgdGFyZ2V0IHN1cHBvcnQiIFBS
SVZBVEUgT0ZGKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKEVOQUJMRV9YU0xUICJUb2dnbGUg
WFNMVCBzdXBwb3J0IiBQUklWQVRFIE9OKQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9T
WVNURU1fTUFMTE9DICJUb2dnbGUgc3lzdGVtIGFsbG9jYXRvciBpbnN0ZWFkIG9mIFdlYktpdCdz
IGN1c3RvbSBhbGxvY2F0b3IiIFBSSVZBVEUgJHtVU0VfU1lTVEVNX01BTExPQ19ERUZBVUxUfSkK
KyAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfU1FMSVRFX0VOQ1JZUFRJT05fRVhURU5T
SU9OICJUb2dnbGUgU1FMaXRlIGVuY3J5cHRpb24gZXh0ZW5zaW9uIHN1cHBvcnQiIFBSSVZBVEUg
T0ZGKQogCiAgICAgV0VCS0lUX09QVElPTl9DT05GTElDVChFTkFCTEVfSklUIEVOQUJMRV9DX0xP
T1ApCiAgICAgV0VCS0lUX09QVElPTl9DT05GTElDVChFTkFCTEVfU0FNUExJTkdfUFJPRklMRVIg
RU5BQkxFX0NfTE9PUCkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5
YWY0NDlkZGIwNDBmNTFjODRmN2NjNWViYjU2YjYzMWVlZDdmYzNjLi5mNTg2MmU2MzNmNDM5ZDg5
NWY2NjllNDc1ODhiYWE2MzU3NDlhMDdiIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDEtMTggIEV1Z2VuZSBNdXRhdmNoaSA8SWV2
Z2VuX011dGF2Y2hpQGNvbWNhc3QuY29tPgorCisgICAgICAgIGFkZCBzdXBwb3J0IGZvciBlbmNy
eXB0ZWQgbG9jYWxzdG9yYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTM1OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbml0aWFsIHN1cHBvcnQgZm9yIFNRTGl0ZSBFbmNyeXB0aW9uIEV4dGVuc2lv
bgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRTcWxpdGUzU2VlLmNtYWtlOiBBZGRlZC4K
KyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZToKKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2U6CisKIDIwMTktMDEtMTggIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIEFkZCBRdCBleHRl
bnNpb24K
</data>
<flag name="review"
          id="376294"
          type_id="1"
          status="?"
          setter="gurdal_oruklu"
    />
          </attachment>
      

    </bug>

</bugzilla>