<?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>224984</bug_id>
          
          <creation_ts>2021-04-23 10:05:40 -0700</creation_ts>
          <short_desc>Remove decoder memory allocations based on untrusted data (sizes) in the stream; related changes</short_desc>
          <delta_ts>2021-04-25 10:51:28 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=224840</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=221773</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>ggaren</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1753619</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 10:05:40 -0700</bug_when>
    <thetext>Remove decoder memory allocations based on untrusted data (sizes) in the stream; related changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753632</commentid>
    <comment_count>1</comment_count>
      <attachid>426923</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 10:38:05 -0700</bug_when>
    <thetext>Created attachment 426923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753638</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 10:46:12 -0700</bug_when>
    <thetext>*** Bug 209270 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753644</commentid>
    <comment_count>3</comment_count>
      <attachid>426923</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-23 10:58:25 -0700</bug_when>
    <thetext>Comment on attachment 426923
Patch

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

&gt; Source/WebKit/Platform/IPC/ArgumentCoders.h:-517
&gt;          HashMapType hashMap;
&gt; -        hashMap.reserveInitialCapacity(hashMapSize);

Should we consider doing the trick we do for Vector here where if the key and value are both fixed size we can check that the buffer is big enough to contain size * (sizeof(key type) + sizeof(value type)) and then reserve? I don&apos;t have a good feeling about what type of HashMaps/HashSets we use so I am not sure if that is a useful optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753649</commentid>
    <comment_count>4</comment_count>
      <attachid>426923</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 11:01:09 -0700</bug_when>
    <thetext>Comment on attachment 426923
Patch

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

&gt;&gt; Source/WebKit/Platform/IPC/ArgumentCoders.h:-517
&gt;&gt; -        hashMap.reserveInitialCapacity(hashMapSize);
&gt; 
&gt; Should we consider doing the trick we do for Vector here where if the key and value are both fixed size we can check that the buffer is big enough to contain size * (sizeof(key type) + sizeof(value type)) and then reserve? I don&apos;t have a good feeling about what type of HashMaps/HashSets we use so I am not sure if that is a useful optimization.

Not sure what you suggest can be done, but I’m sure we can do some kind of reality check about the remaining size of the decoding stream and reserve if it passes that check.

But I don’t see this in VectorArgumentCoder. Where is the code for that trick you are referring to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753650</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 11:01:33 -0700</bug_when>
    <thetext>Oh, I see now. That first bool in the template!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753651</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 11:01:56 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Oh, I see now. That first bool in the template!

That’s a surprisingly narrow optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753657</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 11:09:04 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; Oh, I see now. That first bool in the template!
&gt; 
&gt; That’s a surprisingly narrow optimization.

It’s a more specific optimization for a smaller set of types. It’s &quot;treat this as a single buffer and read it all at once using decodeFixedLengthData&quot; when it’s a simple scalar.

It does seem like there are conditions where we can sufficiently vet the size and use it to preallocate space in the hash table. Using the relationship between the size of the remaining data and the size that we pre-allocate.

But, like you, Sam, I don’t know how important and valuable this optimization is. It saves memory (very important) on hash tables that we send across IPC (wait, what?, why?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753670</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-23 12:06:34 -0700</bug_when>
    <thetext>Committed r276510 (236967@main): &lt;https://commits.webkit.org/236967@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753897</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-24 15:02:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/77110020&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426923</attachid>
            <date>2021-04-23 10:38:05 -0700</date>
            <delta_ts>2021-04-23 10:58:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224984-20210423103804.patch</filename>
            <type>text/plain</type>
            <size>18511</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM1ODBlOGM5YjJlNTEyMDAzODM0YTdm
ZjMxYTBkMDNhZTM2ZGFiN2QuLjMwYzNjNzNmNmMzZmM1Y2ZmNmEzNDUyMzg0YTQ1MDA4MzFiZDlm
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDQtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBkZWNvZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBi
YXNlZCBvbiB1bnRydXN0ZWQgZGF0YSAoc2l6ZXMpIGluIHRoZSBzdHJlYW07IHJlbGF0ZWQgY2hh
bmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0
OTg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwOgorICAgICAgICAoV1RGOjpQZXJz
aXN0ZW5jZTo6RGVjb2Rlcjo6YnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQpOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkRlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSk6
IFJlZmFjdG9yIHRvIHVzZSBidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZC4KKworICAgICAgICAq
IHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oOiBBZGRlZCBidWZmZXJQb2ludGVy
Rm9yRGlyZWN0UmVhZCBmdW5jdGlvbiBmb3IgdXNlIGluIHRoZQorICAgICAgICByYXJlIGNhc2Vz
IHdoZXJlIHdlIHdhbnQgdG8gcmVhZCBkaXJlY3RseSBvdXQgb2YgdGhlIGRlY29kZXIgYnVmZmVy
LCByYXRoZXIgdGhhbiB3cml0aW5nIHRvIGEKKyAgICAgICAgcGFzc2VkLWluIHBvaW50ZXIuIEFs
c28gZGlkIGEgc21hbGwgcmVmYWN0b3Jpbmcgb2YgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFp
biB0byB1c2UgJiYKKyAgICAgICAgcmF0aGVyIHRoYW4gYW4gaWYgc3RhdGVtZW50LgorCiAyMDIx
LTA0LTIyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCB0cmFjZSBwb2ludHMgZm9yIFdLV2ViVmlldyBzbmFwc2hvdHRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAzM2Q0NzkwYmU5NmViMTk0NjIzN2Q0NTgxMDIwODNmMjlhZmI4OGYzLi5hODc0ZmE5MDVhM2Zh
MmYxZWVmOTg1ODMxZTYwMDA0N2VmZDI1NDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMjEtMDQtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSBkZWNvZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBiYXNlZCBvbiB1bnRydXN0ZWQgZGF0YSAo
c2l6ZXMpIGluIHRoZSBzdHJlYW07IHJlbGF0ZWQgY2hhbmdlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0OTg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0NlcnRp
ZmljYXRlSW5mb0NGTmV0LmNwcDoKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OmRlY29kZUNG
RGF0YSk6IFJlbW92ZWQgdW5uZWVkZWQgY2hlY2sgZm9yIHplcm8gc2l6ZS4gUmVtb3ZlZCBjb2Rl
IHRoYXQKKyAgICAgICAgbG9jYWxseSBhbGxvY2F0ZXMgYSB2ZWN0b3IgYmVmb3JlIGJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4gaXMgY2FsbGVkLiBJbnN0ZWFkIHVzZQorICAgICAgICBidWZm
ZXJQb2ludGVyRm9yRGlyZWN0UmVhZCwgd2hpY2ggbWFrZXMgZG9lcyB0aGUgYnVmZmVyIHNpemUg
Y2hlY2ssIGFuZCBwYXNzIHRoZSBwb2ludGVyCisgICAgICAgIGRpcmVjdGx5IHRvIENGRGF0YUNy
ZWF0ZS4KKwogMjAyMS0wNC0yMiAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFNvbWV0aW1lcyBhcHBIaWdobGlnaHRzIGFyZSBub3QgcGFpbnRlZCB3
aGVuIGNyZWF0ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVlZTlhZGRiNTliMTQ4M2E1Y2U5MTJlZmZkOTY4MmI2
MGExYzM4ZTMuLmFmZjJiOGJhMzU2NzNkYjQyZjJjMzcwYzUyNGU0OWVjZWY4NWJkOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDQtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJlbW92ZSBkZWNvZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyBiYXNl
ZCBvbiB1bnRydXN0ZWQgZGF0YSAoc2l6ZXMpIGluIHRoZSBzdHJlYW07IHJlbGF0ZWQgY2hhbmdl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0OTg0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaDogUmVtb3ZlIHRoZSBjYWxscyB0bworICAgICAgICBI
YXNoTWFwOjpyZXNlcnZlSW5pdGlhbENhcGFjaXR5IGFuZCBIYXNoU2V0OjpyZXNlcnZlSW5pdGlh
bENhcGFjaXR5LCBiYXNlZAorICAgICAgICBvbiBudW1iZXIgcmVhZCBpbiBmcm9tIHRoZSBkZWNv
ZGVyLiBUaGlzIG1lYW5zIHRoZXJlIHdpbGwgYmUgbW9yZSB3YXN0ZWQKKyAgICAgICAgbWVtb3J5
IGluIHRoZXNlIEhhc2hNYXAgYW5kIEhhc2hTZXQgb2JqZWN0cywgc28gd2UgaGF2ZSB0byB0ZXN0
IHRvIG1ha2UKKyAgICAgICAgc3VyZSB0aGlzIGRvZXMgbm90IGNyZWF0ZSBhIHBlcmZvcm1hbmNl
IHByb2JsZW0uIEJ1dCB3aXRob3V0IHRoaXMgY2hlY2ssCisgICAgICAgIHdlIGFyZSB0cnlpbmcg
dG8gYWxsb2NhdGUgbWVtb3J5IGJhc2VkIG9uIGFuIHVuc3RydXN0ZWQgc2l6ZS4KKworICAgICAg
ICAqIFNoYXJlZC9Db2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxSZWZQdHI8QXBwbGVQYXlFcnJvcj4+OjplbmNvZGUpOiBSZW1v
dmVkIHRoZSBjb2RlcgorICAgICAgICBmb3IgYSBWZWN0b3Igb2YgdGhlc2UgUmVmUHRyLCByZXBs
YWNlZCBpdCB3aXRoIGEgY29kZXIgZm9yIGFuIGluZGl2aWR1YWwgb25lLAorICAgICAgICBhbGxv
d2luZyB0aGUgVmVjdG9yIEFyZ3VtZW50Q29kZXIgdGVtcGxhdGUgdG8gaGFuZGxlIHZlY3RvciBz
aXplIGFuZCBjb25zdHJ1Y3Rpb24uCisgICAgICAgIE9uZSBiZW5lZml0IGlzIHRoYXQgdGhpcyBh
ZGRzIGluIGEgc2hyaW5rVG9GaXQgYW5kIHByZXZlbnRzIHVzIGZyb20gbWFraW5nIGFueQorICAg
ICAgICBzZXBhcmF0ZSBtaXN0YWtlIGFib3V0IHByZS1zaXppbmcgdGhlIFZlY3RvciBoZXJlIHNp
bmNlIHdlIHVzZSBzaGFyZWQgY29kZS4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWZQ
dHI8QXBwbGVQYXlFcnJvcj4+OjpkZWNvZGUpOiBEaXR0by4KKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+Pjo6ZW5jb2RlKTogRGl0dG8uCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj46OmRlY29kZSk6IERpdHRvLgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3Rh
dHVzVmVjdG9yPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3Rvcj46OmRlY29kZSk6CisgICAgICAg
IFJlbW92ZWQgdW5uZWNlc3Nhcnkgc3BlY2lhbGl6YXRpb24gZm9yIHRoZSBLZXlTdGF0dXNWZWN0
b3IuIFRoZXJlIGlzIGFscmVhZHkKKyAgICAgICAgYW4gQXJndW1lbnRDb2RlciBmb3IgVmVjdG9y
LCBmb3Igc3RkOjpwYWlyLCBmb3IgUmVmPFNoYXJlZEJ1ZmZlcj4sIGFuZCBmb3IKKyAgICAgICAg
ZW51bWVyYXRpb25zIGxpa2UgQ0RNS2V5U3RhdHVzLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gaGF2
ZSBhIHNwZWNpYWxpemVkCisgICAgICAgIGNvZGVyIGZvciB0aGlzLiBUaGlzIGZ1bmN0aW9uIHRo
YXQgd2UgYXJlIHJlbW92aW5nIGhhZCBhIGNhbGwgdG8KKyAgICAgICAgcmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSwgYnV0IHRoZSBWZWN0b3IgQXJndW1lbnRDb2RlciB0ZW1wbGF0ZSBkb2VzIG5vdC4K
KworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDogUmVwbGFjZWQgdGhl
CisgICAgICAgIEFyZ3VtZW50Q29kZXI8VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBcHBsZVBheUVy
cm9yPj4+IHNwZWNpYWxpemF0aW9uIHdpdGgKKyAgICAgICAgQXJndW1lbnRDb2RlcjxSZWZQdHI8
V2ViQ29yZTo6QXBwbGVQYXlFcnJvcj4+LiBSZW1vdmVkIHRoZQorICAgICAgICBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yPiBzcGVjaWFs
aXphdGlvbi4KKwogMjAyMS0wNC0yMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTWFjXSBDTUJhc2VDbGFzcyBvYmplY3QgcG9pbnRlcnMgY2FuIGJlY29tZSB1
bmFsaWduZWQgb24geDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0
ZW50RGVjb2Rlci5jcHAKaW5kZXggODU5NWZjYWYyM2EyYjljMTJkNDBkMzc3MzAzOGIxMmZmMDk4
NjQ4Ni4uODNjZGNkNTQyZjg1ZjllMWMwODY2YTZlYTAwNTU1M2QyYTcwYWZlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00NywxNSArNDcsMjQgQEAgYm9vbCBEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluKHNpemVfdCBzaXplKSBjb25zdAogICAgIHJldHVybiBzaXplIDw9IHN0YXRpY19jYXN0
PHNpemVfdD4obV9idWZmZXJFbmQgLSBtX2J1ZmZlclBvc2l0aW9uKTsKIH0KIAotYm9vbCBEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCitj
b25zdCB1aW50OF90KiBEZWNvZGVyOjpidWZmZXJQb2ludGVyRm9yRGlyZWN0UmVhZChzaXplX3Qg
c2l6ZSkKIHsKICAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtZW1j
cHkoZGF0YSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZSk7CisgICAgYXV0byBkYXRhID0gbV9idWZm
ZXJQb3NpdGlvbjsKICAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7CiAKICAgICBFbmNvZGVy
Ojp1cGRhdGVDaGVja3N1bUZvckRhdGEobV9zaGExLCBkYXRhLCBzaXplKTsKKyAgICByZXR1cm4g
ZGF0YTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEodWludDhfdCog
ZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgYXV0byBidWZmZXIgPSBidWZmZXJQb2ludGVyRm9y
RGlyZWN0UmVhZChzaXplKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIG1lbWNweShkYXRhLCBidWZmZXIsIHNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rl
ci5oIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudERlY29kZXIuaAppbmRl
eCBjNmRiNTA3ZTAxMDg1NjRlYmU1OTFlM2I5NTQwMDJiMDE2ZDg3ZTkwLi43MDkxNDI5MzA3MDFk
OTJjNzNhYjBmYzRhN2U3ZGRlYzczMjFkYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9w
ZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnREZWNvZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsMTMgKzgxLDExIEBAIHB1YmxpYzoKICAgICBi
b29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRzKSBjb25z
dAogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZh
bHVlLCAiVHlwZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUhIik7Ci0K
LSAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSAvIHNpemVvZihUKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBy
ZXR1cm4gYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVvZihU
KSk7CisgICAgICAgIHJldHVybiBudW1FbGVtZW50cyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpIC8gc2l6ZW9mKFQpICYmIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4o
bnVtRWxlbWVudHMgKiBzaXplb2YoVCkpOwogICAgIH0KIAorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBXQVJOX1VOVVNFRF9SRVRVUk4gY29uc3QgdWludDhfdCogYnVmZmVyUG9pbnRlckZvckRpcmVj
dFJlYWQoc2l6ZV90IG51bUJ5dGVzKTsKKwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lQ
Q0RlY29kZXIgPSBmYWxzZTsKIAogcHJpdmF0ZToKQEAgLTEwMyw0ICsxMDEsMyBAQCBwcml2YXRl
OgogCiB9IAogfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL0NlcnRpZmljYXRlSW5mb0NGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCmluZGV4IDkyYWZlNzNkNzQxNGQ1NjA1
MTAwM2QxNDEwNjY4NDJhZWM1OWJiNDAuLmJhMmY3YTBjMzNkNGNiMDY3YTlmNWI1YTE4NzFlMWJj
M2VmZTcxODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
Q2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwNSwxNyArMjA1LDE1IEBA
IHN0YXRpYyBPcHRpb25hbDxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gZGVjb2RlQ0ZEYXRhKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CiAgICAgZGVjb2Rl
ciA+PiBzaXplOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGlmIChVTkxJS0VMWSghaXNJbkJvdW5kczxzaXplX3Q+KCpzaXplKSkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3Rvcihz
dGF0aWNfY2FzdDxzaXplX3Q+KCpzaXplKSk7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh2ZWN0b3IuZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSkKKworICAgIGF1dG8gcG9p
bnRlciA9IGRlY29kZXIuYnVmZmVyUG9pbnRlckZvckRpcmVjdFJlYWQoc3RhdGljX2Nhc3Q8c2l6
ZV90Pigqc2l6ZSkpOworICAgIGlmICghcG9pbnRlcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCB2ZWN0b3Iu
ZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
KG51bGxwdHIsIHBvaW50ZXIsICpzaXplKSk7CiB9CiAKICNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJ
QUxJWkFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgK
aW5kZXggYmIyYjNjNDYwMWMwZTM4NzJhY2MxYWUzM2M5NTg3YzQ4MjNiZmQzZS4uOTc2ZDY1MjVl
Njg4YWE4MmQzZmYwYTRkMTM1M2M3YjZiMTUwNWVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTE0LDcgKzUxNCw2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
IEhhc2hNYXBUeXBlIGhhc2hNYXA7Ci0gICAgICAgIGhhc2hNYXAucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShoYXNoTWFwU2l6ZSk7CiAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBoYXNo
TWFwU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKICAgICAg
ICAgICAgIGRlY29kZXIgPj4ga2V5OwpAQCAtNTgwLDcgKzU3OSw2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEtleUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBl
bmFtZSBIYXNoCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEhh
c2hTZXRUeXBlIGhhc2hTZXQ7Ci0gICAgICAgIGhhc2hTZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShoYXNoU2V0U2l6ZSk7CiAgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoYXNoU2V0
U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxLZXlBcmc+IGtleTsKICAgICAgICAg
ICAgIGRlY29kZXIgPj4ga2V5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29j
b2EvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9D
b2NvYS9XZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQppbmRleCA3ODU3NGY3YWMxMzAwNWVk
ODAzOTcwZTNhMTBhODBjNDZmYWJkMWE3Li4xMTYxNDJkNmY5YTIxMmZmNDQ5Nzk2YzU2OTJhMWIw
YjMwNzM4NGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJDb3Jl
QXJndW1lbnRDb2RlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9X
ZWJDb3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbQpAQCAtMzQ0LDM4ICszNDQsMjggQEAgYm9vbCBB
cmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFi
aWxpdGllcz46OmRlY29kZSgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcmd1bWVudENv
ZGVyPFZlY3RvcjxSZWZQdHI8QXBwbGVQYXlFcnJvcj4+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFZlY3RvcjxSZWZQdHI8QXBwbGVQYXlFcnJvcj4+JiBlcnJvcnMpCit2b2lkIEFy
Z3VtZW50Q29kZXI8UmVmUHRyPEFwcGxlUGF5RXJyb3I+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFJlZlB0cjxBcHBsZVBheUVycm9yPiYgZXJyb3IpCiB7Ci0gICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZXJyb3JzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBl
cnJvciA6IGVycm9ycykgewotICAgICAgICBlbmNvZGVyIDw8ICEhZXJyb3I7Ci0gICAgICAgIGlm
IChlcnJvcikKLSAgICAgICAgICAgIGVuY29kZXIgPDwgKmVycm9yOwotICAgIH0KKyAgICBlbmNv
ZGVyIDw8ICEhZXJyb3I7CisgICAgaWYgKGVycm9yKQorICAgICAgICBlbmNvZGVyIDw8ICplcnJv
cjsKIH0KIAotT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxBcHBsZVBheUVycm9yPj4+IEFyZ3VtZW50
Q29kZXI8VmVjdG9yPFJlZlB0cjxBcHBsZVBheUVycm9yPj4+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPFJlZlB0cjxBcHBsZVBheUVycm9yPj4gQXJndW1lbnRDb2RlcjxSZWZQ
dHI8QXBwbGVQYXlFcnJvcj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICB1aW50
NjRfdCBzaXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgT3B0aW9uYWw8
Ym9vbD4gaXNWYWxpZDsKKyAgICBkZWNvZGVyID4+IGlzVmFsaWQ7CisgICAgaWYgKCFpc1ZhbGlk
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgVmVjdG9yPFJlZlB0cjxBcHBs
ZVBheUVycm9yPj4gZXJyb3JzOwotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNWYWxpZDsKLSAgICAgICAgZGVjb2RlciA+
PiBpc1ZhbGlkOwotICAgICAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIFJlZlB0cjxBcHBsZVBheUVycm9yPiBlcnJvcjsKKyAgICBpZiAoISpp
c1ZhbGlkKQorICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKLSAgICAgICAgUmVmUHRyPEFw
cGxlUGF5RXJyb3I+IGVycm9yOwotICAgICAgICBpZiAoKmlzVmFsaWQpIHsKLSAgICAgICAgICAg
IGVycm9yID0gQXBwbGVQYXlFcnJvcjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICAgICAgaWYg
KCFlcnJvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICB9
Ci0gICAgICAgIGVycm9ycy5hcHBlbmQoV1RGTW92ZShlcnJvcikpOwotICAgIH0KLSAgICByZXR1
cm4gZXJyb3JzOworICAgIGVycm9yID0gQXBwbGVQYXlFcnJvcjo6ZGVjb2RlKGRlY29kZXIpOwor
ICAgIGlmICghZXJyb3IpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IGVycm9yOwogfQogCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudFNlc3Npb25F
cnJvcj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpQYXltZW50U2Vz
c2lvbkVycm9yJiBlcnJvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCmluZGV4IDkxZDhiMTkzZDA2YTFhMGU4MGYzZjc2OTBjYmIzZmE3YzQzZTEz
ZTMuLjc2MDcyNjI0NTg2MDA4YzllNDY3NDk2NDA1YmIwOTc5YmVlY2MzYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5MDgsMjcg
KzI5MDgsMTYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFByb21pc2VkQXR0YWNobWVudEluZm8+Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUHJvbWlzZWRBdHQKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+Pj46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pj4mIG9yaWdpbnMpCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+JiBv
cmlnaW4pCiB7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ob3JpZ2lucy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lucykKLSAgICAgICAgZW5jb2Rl
ciA8PCAqb3JpZ2luOworICAgIGVuY29kZXIgPDwgKm9yaWdpbjsKIH0KICAgICAKLWJvb2wgQXJn
dW1lbnRDb2RlcjxWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+JiBvcmlnaW5zKQorYm9v
bCBBcmd1bWVudENvZGVyPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiYgb3JpZ2luKQogewotICAgIHVpbnQ2NF90
IGRhdGFTaXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YVNpemUpKQorICAgIG9yaWdp
biA9IFNlY3VyaXR5T3JpZ2luOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgaWYgKCFvcmlnaW4pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBkYXRh
U2l6ZTsgKytpKSB7Ci0gICAgICAgIGF1dG8gZGVjb2RlZE9yaWdpblJlZlB0ciA9IFNlY3VyaXR5
T3JpZ2luOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZGVjb2RlZE9yaWdpblJlZlB0
cikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgb3JpZ2lucy5hcHBlbmQoZGVj
b2RlZE9yaWdpblJlZlB0ci5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0gICAgb3JpZ2lucy5z
aHJpbmtUb0ZpdCgpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMxNDksMzggKzMxMzgs
NiBAQCBPcHRpb25hbDxXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246Ok1lc3NhZ2U+ICBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkNETUluc3RhbgogCiAgICAgcmV0dXJuIG1ha2VPcHRpb25hbDxX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246Ok1lc3NhZ2U+KHsgdHlwZSwgYnVmZmVyLnJlbGVh
c2VOb25OdWxsKCkgfSk7CiB9Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDRE1JbnN0
YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3Rvcj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3RvciYga2V5U3Rh
dHVzZXMpCi17Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oa2V5U3RhdHVz
ZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGtleVN0YXR1cyA6IGtleVN0YXR1c2VzKSB7Ci0g
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleSA9IGtleVN0YXR1cy5maXJzdC5jb3B5UmVm
KCk7Ci0gICAgICAgIGVuY29kZXIgPDwga2V5IDw8IGtleVN0YXR1cy5zZWNvbmQ7Ci0gICAgfQot
fQotCi1PcHRpb25hbDxXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1ZlY3Rv
cj4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1c1Zl
Y3Rvcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHVpbnQ2NF90IGRhdGFTaXpl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YVNpemUpKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uOjpLZXlTdGF0dXNW
ZWN0b3Iga2V5U3RhdHVzZXM7Ci0gICAga2V5U3RhdHVzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShkYXRhU2l6ZSk7Ci0KLSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgZGF0YVNpemU7ICsr
aSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXk7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoa2V5KSB8fCAha2V5KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgICAgICBXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25DbGllbnQ6OktleVN0YXR1
cyBzdGF0dXM7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdHVzKSkKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAga2V5U3RhdHVzZXMudW5jaGVja2Vk
QXBwZW5kKHsga2V5LnJlbGVhc2VOb25OdWxsKCksIHN0YXR1cyB9KTsKLSAgICB9Ci0gICAgcmV0
dXJuIGtleVN0YXR1c2VzOwotfQogI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAK
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CkBAIC0zMjQ2LDcgKzMyMDMsNyBAQCBPcHRpb25h
bDxSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VEYXRhPj46OgogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYg
KCFpc0VuZ2FnZWQpCi0gICAgICAgIHJldHVybiBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPigp
OworICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBhdXRvIHJlc3VsdCA9IEFyZ3Vt
ZW50Q29kZXI8UmVmPFdlYkNvcmU6OkltYWdlRGF0YT4+OjpkZWNvZGUoZGVjb2Rlcik7CiAgICAg
aWYgKCFyZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCmluZGV4IDM0MTNiZDhlNzM5ZTI1MTdlNzBhODlhMGE1NjQ1YTFkOWIwMWQ3YzMuLjllMjM3
OTFmYWNiZGI3ZTQ2Yzk2ODJlZGI0ZDA0YTFlZWViNzAwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzA0LDkgKzcwNCw5IEBAIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVu
dFJlcXVlc3Q6Ok1lcmNoYW50CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6Ok1l
cmNoYW50Q2FwYWJpbGl0aWVzJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QXBwbGVQYXlFcnJvcj4+PiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkFwcGxl
UGF5RXJyb3I+PiYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPFdlYkNvcmU6
OkFwcGxlUGF5RXJyb3I+Pj4gZGVjb2RlKERlY29kZXImKTsKK3RlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkFwcGxlUGF5RXJyb3I+PiB7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6QXBwbGVQYXlFcnJv
cj4mKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8UmVmUHRyPFdlYkNvcmU6OkFwcGxlUGF5RXJyb3I+
PiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpQYXltZW50U2Vzc2lvbkVycm9yPiB7CkBAIC03NjEsOSArNzYxLDkgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQcm9taXNlZEF0dGFjaG1lbnRJ
bmZvPiB7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiwgV2ViQ29yZTo6UHJvbWlzZWRBdHRhY2htZW50SW5mbyYpOwogfTsKIAotdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
Pj4+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+PiYpOwotICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9S
RVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+PiYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
LCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+Jik7CisgICAgc3RhdGljIFdB
Uk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgUmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPiYpOwogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpGb250QXR0cmlidXRlcz4gewpAQCAtODExLDExICs4MTEsNiBAQCB0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6TWVzc2Fn
ZT4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q0RN
SW5zdGFuY2VTZXNzaW9uOjpNZXNzYWdlJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6
OkNETUluc3RhbmNlU2Vzc2lvbjo6TWVzc2FnZT4gZGVjb2RlKERlY29kZXImKTsKIH07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
OjpLZXlTdGF0dXNWZWN0b3I+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNv
bnN0IFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVjdG9yJik7Ci0gICAg
c3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzVmVj
dG9yPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKICNlbmRpZgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+PiB7Cg==
</data>
<flag name="review"
          id="447359"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>