<?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>141978</bug_id>
          
          <creation_ts>2015-02-24 10:51:57 -0800</creation_ts>
          <short_desc>bmalloc: Added a little more abstraction for large objects</short_desc>
          <delta_ts>2015-02-24 11:12:33 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1071720</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-24 10:51:57 -0800</bug_when>
    <thetext>bmalloc: Added a little more abstraction for large objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071723</commentid>
    <comment_count>1</comment_count>
      <attachid>247246</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-24 10:59:53 -0800</bug_when>
    <thetext>Created attachment 247246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071726</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-24 11:12:33 -0800</bug_when>
    <thetext>Committed r180576: &lt;http://trac.webkit.org/changeset/180576&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247246</attachid>
            <date>2015-02-24 10:59:53 -0800</date>
            <delta_ts>2015-02-24 11:02:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141978-20150224105942.patch</filename>
            <type>text/plain</type>
            <size>49651</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDU3NCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE1LTAyLTI0ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgYm1hbGxvYzogQWRkZWQgYSBs
aXR0bGUgbW9yZSBhYnN0cmFjdGlvbiBmb3IgbGFyZ2Ugb2JqZWN0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxOTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgZWFjaCBjbGllbnQg
bmVlZGVkIHRvIG1hbmFnZSB0aGUgYm91bmRhcnkgdGFncyBvZgorICAgICAgICBhIGxhcmdlIG9i
amVjdCB1c2luZyBmcmVlIGZ1bmN0aW9ucy4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgTGFyZ2VP
YmplY3QKKyAgICAgICAgY2xhc3MgdGhhdCBkb2VzIHRoaW5ncyBhIGxpdHRsZSBtb3JlIG90b21h
dGljYWxseS4KKworICAgICAgICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkFs
bG9jYXRvcjo6cmVhbGxvY2F0ZSk6IFVzZSB0aGUgbmV3IExhcmdlT2JqZWN0IGNsYXNzLgorCisg
ICAgICAgICogYm1hbGxvYy9CZWdpblRhZy5oOgorICAgICAgICAoYm1hbGxvYzo6QmVnaW5UYWc6
OmlzSW5GcmVlTGlzdCk6IERlbGV0ZWQuIE1vdmVkIHRoaXMgbG9naWMgaW50byB0aGUKKyAgICAg
ICAgTGFyZ2VPYmplY3QgY2xhc3MuCisKKyAgICAgICAgKiBibWFsbG9jL0JvdW5kYXJ5VGFnLmg6
CisgICAgICAgIChibWFsbG9jOjpCb3VuZGFyeVRhZzo6aXNTZW50aW5lbCk6CisgICAgICAgIChi
bWFsbG9jOjpCb3VuZGFyeVRhZzo6Y29tcGFjdEJlZ2luKToKKyAgICAgICAgKGJtYWxsb2M6OkJv
dW5kYXJ5VGFnOjpzZXRSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpCb3VuZGFyeVRhZzo6aW5p
dFNlbnRpbmVsKTogQWRkZWQgYW4gZXhwbGljaXQgQVBJIGZvciBzZW50aW5lbHMsCisgICAgICAg
IHdoaWNoIHdlIHVzZWQgdG8gY3JlYXRlIGFuZCB0ZXN0IGZvciBpbXBsaWNpdGx5LgorCisgICAg
ICAgICogYm1hbGxvYy9Cb3VuZGFyeVRhZ0lubGluZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6OkJv
dW5kYXJ5VGFnOjppbml0KToKKyAgICAgICAgKGJtYWxsb2M6OnZhbGlkYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKGJtYWxsb2M6OnZhbGlkYXRlUHJldik6IERlbGV0ZWQuCisgICAgICAgIChibWFs
bG9jOjp2YWxpZGF0ZU5leHQpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Qm91bmRhcnlU
YWc6Om1lcmdlTGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpCb3VuZGFyeVRhZzo6
bWVyZ2VSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpCb3VuZGFyeVRhZzo6bWVy
Z2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Qm91bmRhcnlUYWc6OmRlYWxsb2NhdGUp
OiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Qm91bmRhcnlUYWc6OnNwbGl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKGJtYWxsb2M6OkJvdW5kYXJ5VGFnOjphbGxvY2F0ZSk6IERlbGV0ZWQuIE1v
dmVkIHRoaXMgbG9naWMgaW50byB0aGUKKyAgICAgICAgTGFyZ2VPYmplY3QgY2xhc3MuCisKKyAg
ICAgICAgKiBibWFsbG9jL0VuZFRhZy5oOgorICAgICAgICAoYm1hbGxvYzo6RW5kVGFnOjppbml0
KToKKyAgICAgICAgKGJtYWxsb2M6OkVuZFRhZzo6b3BlcmF0b3I9KTogRGVsZXRlZC4gUmUtcmVh
ZGluZyB0aGlzIGNvZGUsIEkgZm91bmQKKyAgICAgICAgc3BlY2lhbCBiZWhhdmlvciBpbiB0aGUg
YXNzaWdubWVudCBvcGVyYXRvciB0byBiZSBhIHN1cnByaXNpbmcgQVBJLgorICAgICAgICBTbywg
SSByZXBsYWNlZCB0aGUgYXNzaWdubWVudCBvcGVyYXRpb24gd2l0aCBhbiBleHBsaWNpdCBpbml0
aWFsaXppbmcKKyAgICAgICAgZnVuY3Rpb24uCisKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuY3Bw
OgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2NhdmVuZ2VMYXJnZVJhbmdlcyk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVhMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFw
OjpmaW5kWExhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVYTGFyZ2Up
OgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFs
bG9jOjpIZWFwOjpkZWFsbG9jYXRlTGFyZ2UpOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOiBO
byBiZWhhdmlvciBjaGFuZ2VzIGhlcmUgLS0ganVzdCBhZG9wdGluZyB0aGUKKyAgICAgICAgTGFy
Z2VPYmplY3QgaW50ZXJmYWNlLgorCisgICAgICAgICogYm1hbGxvYy9MYXJnZU9iamVjdC5oOiBB
ZGRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0OjpvcGVyYXRvciEpOgorICAgICAg
ICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6OmJlZ2luKToKKyAgICAgICAgKGJtYWxsb2M6Okxhcmdl
T2JqZWN0OjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0OjpyYW5nZSk6Cisg
ICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6TGFyZ2VPYmplY3QpOgorICAgICAgICAoYm1h
bGxvYzo6TGFyZ2VPYmplY3Q6OnNldEZyZWUpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VPYmpl
Y3Q6OmlzRnJlZSk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6aGFzUGh5c2ljYWxQ
YWdlcyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6c2V0SGFzUGh5c2ljYWxQYWdl
cyk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6aXNWYWxpZEFuZEZyZWUpOgorICAg
ICAgICAoYm1hbGxvYzo6TGFyZ2VPYmplY3Q6Om1lcmdlKToKKyAgICAgICAgKGJtYWxsb2M6Okxh
cmdlT2JqZWN0OjpzcGxpdCk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU9iamVjdDo6dmFsaWRh
dGVTZWxmKToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlT2JqZWN0Ojp2YWxpZGF0ZSk6IE1vdmVk
IHRoaXMgY29kZSBpbnRvIGEgY2xhc3MsIG91dCBvZgorICAgICAgICBCb3VuZGFyeVRhZyBmcmVl
IGZ1bmN0aW9ucy4KKworICAgICAgICBOZXcgdG8gdGhlIGNsYXNzIGFyZSB0aGVzZSBmZWF0dXJl
czoKKworICAgICAgICAgICAgKDEpIEV2ZXJ5IHJlZmVyZW5jZSB0byBhbiBvYmplY3QgaXMgdmFs
aWRhdGVkIHVwb24gY3JlYXRpb24gYW5kIHVzZS4KKworICAgICAgICAgICAgKDIpIFRoZXJlJ3Mg
YW4gZXhwbGljaXQgQVBJIGZvciAiVGhpcyBpcyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QKKyAg
ICAgICAgICAgIHRoYXQgbWlnaHQgYmUgc3RhbGUgKHRoZSBEb05vdFZhbGlkYXRlIEFQSSkiLgor
CisgICAgICAgICAgICAoMykgVGhlIGJlZ2luIGFuZCBlbmQgdGFncyBhcmUga2VwdCBpbiBzeW5j
IG90b21hdGljYWxseS4KKworICAgICAgICAqIGJtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OlNlZ3JlZ2F0ZWRGcmVlTGlzdDo6aW5zZXJ0KToKKyAgICAg
ICAgKGJtYWxsb2M6OlNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZUdyZWVkeSk6CisgICAgICAgIChi
bWFsbG9jOjpTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2UpOgorICAgICAgICAqIGJtYWxsb2MvU2Vn
cmVnYXRlZEZyZWVMaXN0Lmg6IEFkb3B0IHRoZSBMYXJnZU9iamVjdCBpbnRlcmZhY2UuCisKKyAg
ICAgICAgKiBibWFsbG9jL1ZNSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6Omdy
b3cpOgorICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmg6CisgICAgICAgIChibWFsbG9jOjpWTUhl
YXA6OmFsbG9jYXRlTGFyZ2VSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmRlYWxs
b2NhdGVMYXJnZVJhbmdlKTogQWRvcHQgdGhlIExhcmdlT2JqZWN0IGludGVyZmFjZS4KKwogMjAx
NS0wMi0yMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJt
YWxsb2Mgc2hvdWxkIGltcGxlbWVudCBtYWxsb2MgaW50cm9zcGVjdGlvbiAodG8gc3RvcCBmYWxz
ZS1wb3NpdGl2ZSBsZWFrcyB3aGVuIE1hbGxvY1N0YWNrTG9nZ2luZyBpcyBvZmYpCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODA1NzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKIAkJMTQ0OEMzMDEx
OEYzNzU0QzAwNTAyODM5IC8qIGJtYWxsb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDhDMkZFMThGMzc1NDMwMDUwMjgzOSAvKiBibWFsbG9jLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4OTVE
OTExQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDhGMUEzQTMxOUMwMDA2MjM1RCAvKiBF
bnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTE0ODk1RDkyMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZp
cm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ4OTVEOTAxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDNjIxNkYxQTlBOUE2MjAwRTcy
MjkzIC8qIExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEM5MTlDOTE4
RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM5MTlDODE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3Jt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRD
QzM5NEMxOEVBODg1ODAwNEFGRTM0IC8qIGxpYmJtYWxsb2MuYSBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjI3MUJFMThFQTM5NjMwMDhDMTUyRiAv
KiBsaWJibWFsbG9jLmEgKi87IH07CiAJCTE0REQ3ODhDMThGNDhDQUUwMDk1MDcwMiAvKiBMYXJn
ZUNodW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDdBQUE4ODE4Q0QxN0NFMDAyMjAxRTQgLyogTGFyZ2VDaHVuay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzIsNiArMTMzLDcgQEAKIAkJMTRC
NjUwQzYxOEYzOUY0ODAwNzUxOTY4IC8qIGJtYWxsb2MueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
Ym1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRCNjUwQzcx
OEYzOUY0ODAwNzUxOTY4IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBE
ZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QjY1
MEM5MThGM0EwNDIwMDc1MTk2OCAvKiBtYm1hbGxvYy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBt
Ym1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRDNjIxNkUx
QTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IExhcmdlT2JqZWN0Lmg7IHBhdGggPSBibWFsbG9jL0xhcmdlT2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzkxOUM4MThGQ0M1OUYwMDI4REI0MyAvKiBC
UGxhdGZvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQlBsYXRmb3JtLmg7
IHBhdGggPSBibWFsbG9jL0JQbGF0Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNENDMzk0NDE4RUE4NzQzMDA0QUZFMzQgLyogbGlibWJtYWxsb2MuZHlsaWIgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJtYm1hbGxvYy5keWxpYjsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMTREOURCNDUxN0YyNDQ3MTAwRUFB
Qjc5IC8qIEZpeGVkVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGlu
ZyA9IDA7IG5hbWUgPSBGaXhlZFZlY3Rvci5oOyBwYXRoID0gYm1hbGxvYy9GaXhlZFZlY3Rvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZp
ZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKQEAgLTIxOCw2ICsyMjAsNyBAQAogCQkJCTE0MTA1
RTdCMThEQkQ3QUYwMDNBMTA2RSAvKiBCb3VuZGFyeVRhZ0lubGluZXMuaCAqLywKIAkJCQkxNDE3
RjY0NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi8sCiAJCQkJMTQ3QUFBODgxOENEMTdD
RTAwMjIwMUU0IC8qIExhcmdlQ2h1bmsuaCAqLywKKwkJCQkxNEM2MjE2RTFBOUE5QTYyMDBFNzIy
OTMgLyogTGFyZ2VPYmplY3QuaCAqLywKIAkJCQkxNDZCRUUyMTE4Qzg0NUFFMDAwMkQ1QTIgLyog
U2VncmVnYXRlZEZyZWVMaXN0LmNwcCAqLywKIAkJCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIg
LyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi8sCiAJCQkpOwpAQCAtMzE5LDYgKzMyMiw3IEBACiAJ
CQkJMTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNERENzhCOTE4RjQ4RDZCMDA5NTA3MDIgLyogTWVkaXVtVHJhaXRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDQ4QzMwMTE4RjM3NTRDMDA1MDI4MzkgLyogYm1hbGxvYy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRDNjIxNkYxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVhbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAyNzRDMThGODlDM0QwMDExNUM5NyAvKiBTZWdy
ZWdhdGVkRnJlZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODhEMThGNDhDQzYwMDk1
MDcwMiAvKiBCZWdpblRhZy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxODA1NzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJEZWFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJMYXJnZUNodW5r
LmgiCisjaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAj
aW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0xMTYsOCArMTE3LDgg
QEAgdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBMYXJnZTogewotICAgICAgICBCZWdpblRhZyogYmVnaW5UYWcg
PSBMYXJnZUNodW5rOjpiZWdpblRhZyhvYmplY3QpOwotICAgICAgICBvbGRTaXplID0gYmVnaW5U
YWctPnNpemUoKTsKKyAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qob2JqZWN0KTsKKyAg
ICAgICAgb2xkU2l6ZSA9IGxhcmdlT2JqZWN0LnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgWExhcmdlOiB7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JlZ2lu
VGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CZWdpblRhZy5oCShy
ZXZpc2lvbiAxODA1NzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JlZ2luVGFnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDE1ICszMSw4IEBACiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNz
IEJlZ2luVGFnIDogcHVibGljIEJvdW5kYXJ5VGFnIHsKLXB1YmxpYzoKLSAgICBib29sIGlzSW5G
cmVlTGlzdChjb25zdCBSYW5nZSYpOwogfTsKIAotaW5saW5lIGJvb2wgQmVnaW5UYWc6OmlzSW5G
cmVlTGlzdChjb25zdCBSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGlzRnJlZSgpICYmICFp
c0VuZCgpICYmIHRoaXMtPnNpemUoKSA9PSByYW5nZS5zaXplKCkgJiYgdGhpcy0+Y29tcGFjdEJl
Z2luKCkgPT0gY29tcGFjdEJlZ2luKHJhbmdlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwogCiAjZW5kaWYgLy8gQmVnaW5UYWdfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9C
b3VuZGFyeVRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRh
cnlUYWcuaAkocmV2aXNpb24gMTgwNTc0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3Vu
ZGFyeVRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw5ICs0MSw3IEBAIGNsYXNzIFJhbmdlOwogY2xh
c3MgQm91bmRhcnlUYWcgewogcHVibGljOgogICAgIHN0YXRpYyBSYW5nZSBpbml0KExhcmdlQ2h1
bmsqKTsKLSAgICBzdGF0aWMgUmFuZ2UgZGVhbGxvY2F0ZSh2b2lkKik7Ci0gICAgc3RhdGljIHZv
aWQgYWxsb2NhdGUoY29uc3QgUmFuZ2UmLCBzaXplX3QsIFJhbmdlJiBsZWZ0b3ZlciwgYm9vbCYg
aGFzUGh5c2ljYWxQYWdlcyk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNvbXBhY3RCZWdpbihjb25z
dCBSYW5nZSYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wYWN0QmVnaW4odm9pZCopOwogCiAg
ICAgYm9vbCBpc0ZyZWUoKSB7IHJldHVybiBtX2lzRnJlZTsgfQogICAgIHZvaWQgc2V0RnJlZShi
b29sIGlzRnJlZSkgeyBtX2lzRnJlZSA9IGlzRnJlZTsgfQpAQCAtNjIsNiArNjAsOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IFJhbmdlJik7CiAgICAgCisgICAgYm9vbCBp
c1NlbnRpbmVsKCkgeyByZXR1cm4gIW1fY29tcGFjdEJlZ2luOyB9CisgICAgdm9pZCBpbml0U2Vu
dGluZWwoKTsKKyAgICAKICAgICBFbmRUYWcqIHByZXYoKTsKICAgICBCZWdpblRhZyogbmV4dCgp
OwogCkBAIC03MywxMSArNzQsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpY19hc3NlcnQoKDEgPDwg
Y29tcGFjdEJlZ2luQml0cykgLSAxID49IGxhcmdlTWluIC8gbGFyZ2VBbGlnbm1lbnQsICJjb21w
YWN0QmVnaW4gbXVzdCBiZSBlbmNvZGFibGUgaW4gYSBCb3VuZGFyeVRhZy4iKTsKICAgICBzdGF0
aWNfYXNzZXJ0KCgxIDw8IHNpemVCaXRzKSAtIDEgPj0gbGFyZ2VNYXgsICJsYXJnZU1heCBtdXN0
IGJlIGVuY29kYWJsZSBpbiBhIEJvdW5kYXJ5VGFnLiIpOwogCi0gICAgc3RhdGljIHZvaWQgc3Bs
aXQoY29uc3QgUmFuZ2UmLCBzaXplX3QsIEJlZ2luVGFnKiwgRW5kVGFnKiYsIFJhbmdlJiBsZWZ0
b3Zlcik7Ci0gICAgc3RhdGljIFJhbmdlIG1lcmdlTGVmdChjb25zdCBSYW5nZSYsIEJlZ2luVGFn
KiYsIEVuZFRhZyogcHJldiwgYm9vbCYgaGFzUGh5c2ljYWxQYWdlcyk7Ci0gICAgc3RhdGljIFJh
bmdlIG1lcmdlUmlnaHQoY29uc3QgUmFuZ2UmLCBFbmRUYWcqJiwgQmVnaW5UYWcqIG5leHQsIGJv
b2wmIGhhc1BoeXNpY2FsUGFnZXMpOwotICAgIHN0YXRpYyBSYW5nZSBtZXJnZShjb25zdCBSYW5n
ZSYsIEJlZ2luVGFnKiYsIEVuZFRhZyomKTsKLQogICAgIGJvb2wgbV9pc0ZyZWU6IDE7CiAgICAg
Ym9vbCBtX2lzRW5kOiAxOwogICAgIGJvb2wgbV9oYXNQaHlzaWNhbFBhZ2VzOiAxOwpAQCAtODUs
MTcgKzgxLDE3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplOiBzaXplQml0czsKIH07
CiAKLWlubGluZSB1bnNpZ25lZCBCb3VuZGFyeVRhZzo6Y29tcGFjdEJlZ2luKGNvbnN0IFJhbmdl
JiByYW5nZSkKK2lubGluZSB1bnNpZ25lZCBCb3VuZGFyeVRhZzo6Y29tcGFjdEJlZ2luKHZvaWQq
IG9iamVjdCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KAogICAgICAgICBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oCiAgICAgICAgICAgICByaWdodFNoaWZ0KAotICAg
ICAgICAgICAgICAgIG1hc2socmFuZ2UuYmVnaW4oKSwgbGFyZ2VNaW4gLSAxKSwgbGFyZ2VBbGln
bm1lbnRTaGlmdCkpKTsKKyAgICAgICAgICAgICAgICBtYXNrKG9iamVjdCwgbGFyZ2VNaW4gLSAx
KSwgbGFyZ2VBbGlnbm1lbnRTaGlmdCkpKTsKIH0KIAogaW5saW5lIHZvaWQgQm91bmRhcnlUYWc6
OnNldFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKIHsKLSAgICBtX2NvbXBhY3RCZWdpbiA9IGNv
bXBhY3RCZWdpbihyYW5nZSk7CisgICAgbV9jb21wYWN0QmVnaW4gPSBjb21wYWN0QmVnaW4ocmFu
Z2UuYmVnaW4oKSk7CiAgICAgbV9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLnNp
emUoKSk7CiAgICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPT0gcmFuZ2Uuc2l6ZSgpKTsKIH0KQEAg
LTExMiw2ICsxMDgsMTIgQEAgaW5saW5lIEJlZ2luVGFnKiBCb3VuZGFyeVRhZzo6bmV4dCgpCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QmVnaW5UYWcqPihuZXh0KTsKIH0KIAoraW5saW5l
IHZvaWQgQm91bmRhcnlUYWc6OmluaXRTZW50aW5lbCgpCit7CisgICAgc2V0UmFuZ2UoUmFuZ2Uo
bnVsbHB0ciwgbGFyZ2VNaW4pKTsKKyAgICBzZXRGcmVlKGZhbHNlKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgYm1hbGxvYwogCiAjZW5kaWYgLy8gQm91bmRhcnlUYWdfaApJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0JvdW5kYXJ5VGFnSW5saW5lcy5oCShyZXZpc2lvbiAxODA1NzQpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JvdW5kYXJ5VGFnSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNCw0OCArMzQsNiBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCB2YWxpZGF0ZShjb25zdCBSYW5nZSYgcmFuZ2UpCi17Ci0gICAgVU5VU0VEKHJhbmdl
KTsKLUlGX0RFQlVHKAotICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IExhcmdlQ2h1bms6OmJlZ2lu
VGFnKHJhbmdlLmJlZ2luKCkpOwotICAgIEVuZFRhZyogZW5kVGFnID0gTGFyZ2VDaHVuazo6ZW5k
VGFnKHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7Ci0KLSAgICBCQVNTRVJUKCFiZWdpblRh
Zy0+aXNFbmQoKSk7Ci0gICAgQkFTU0VSVChyYW5nZS5zaXplKCkgPj0gbGFyZ2VNaW4pOwotICAg
IEJBU1NFUlQoYmVnaW5UYWctPnNpemUoKSA9PSByYW5nZS5zaXplKCkpOwotCi0gICAgQkFTU0VS
VChiZWdpblRhZy0+c2l6ZSgpID09IGVuZFRhZy0+c2l6ZSgpKTsKLSAgICBCQVNTRVJUKGJlZ2lu
VGFnLT5pc0ZyZWUoKSA9PSBlbmRUYWctPmlzRnJlZSgpKTsKLSAgICBCQVNTRVJUKGJlZ2luVGFn
LT5oYXNQaHlzaWNhbFBhZ2VzKCkgPT0gZW5kVGFnLT5oYXNQaHlzaWNhbFBhZ2VzKCkpOwotICAg
IEJBU1NFUlQoc3RhdGljX2Nhc3Q8Qm91bmRhcnlUYWcqPihlbmRUYWcpID09IHN0YXRpY19jYXN0
PEJvdW5kYXJ5VGFnKj4oYmVnaW5UYWcpIHx8IGVuZFRhZy0+aXNFbmQoKSk7Ci0pOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgdmFsaWRhdGVQcmV2KEVuZFRhZyogcHJldiwgdm9pZCogb2JqZWN0
KQotewotICAgIHNpemVfdCBwcmV2U2l6ZSA9IHByZXYtPnNpemUoKTsKLSAgICB2b2lkKiBwcmV2
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSBwcmV2U2l6ZTsKLSAgICB2YWxp
ZGF0ZShSYW5nZShwcmV2T2JqZWN0LCBwcmV2U2l6ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgdmFsaWRhdGVOZXh0KEJlZ2luVGFnKiBuZXh0LCBjb25zdCBSYW5nZSYgcmFuZ2UpCi17Ci0g
ICAgaWYgKG5leHQtPnNpemUoKSA9PSBsYXJnZU1pbiAmJiAhbmV4dC0+Y29tcGFjdEJlZ2luKCkg
JiYgIW5leHQtPmlzRnJlZSgpKSAvLyBSaWdodCBzZW50aW5lbCB0YWcuCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHZvaWQqIG5leHRPYmplY3QgPSByYW5nZS5lbmQoKTsKLSAgICBzaXplX3QgbmV4
dFNpemUgPSBuZXh0LT5zaXplKCk7Ci0gICAgdmFsaWRhdGUoUmFuZ2UobmV4dE9iamVjdCwgbmV4
dFNpemUpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZhbGlkYXRlKEVuZFRhZyogcHJldiwg
Y29uc3QgUmFuZ2UmIHJhbmdlLCBCZWdpblRhZyogbmV4dCkKLXsKLSAgICB2YWxpZGF0ZVByZXYo
cHJldiwgcmFuZ2UuYmVnaW4oKSk7Ci0gICAgdmFsaWRhdGUocmFuZ2UpOwotICAgIHZhbGlkYXRl
TmV4dChuZXh0LCByYW5nZSk7Ci19Ci0KIGlubGluZSBSYW5nZSBCb3VuZGFyeVRhZzo6aW5pdChM
YXJnZUNodW5rKiBjaHVuaykKIHsKICAgICBSYW5nZSByYW5nZShjaHVuay0+YmVnaW4oKSwgY2h1
bmstPmVuZCgpIC0gY2h1bmstPmJlZ2luKCkpOwpAQCAtODYsNyArNDQsNyBAQCBpbmxpbmUgUmFu
Z2UgQm91bmRhcnlUYWc6OmluaXQoTGFyZ2VDaHVuCiAgICAgYmVnaW5UYWctPnNldEhhc1BoeXNp
Y2FsUGFnZXMoZmFsc2UpOwogCiAgICAgRW5kVGFnKiBlbmRUYWcgPSBMYXJnZUNodW5rOjplbmRU
YWcocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICAqZW5kVGFnID0gKmJlZ2luVGFn
OworICAgIGVuZFRhZy0+aW5pdChiZWdpblRhZyk7CiAKICAgICAvLyBNYXJrIHRoZSBsZWZ0IGFu
ZCByaWdodCBlZGdlcyBvZiBvdXIgY2h1bmsgYXMgYWxsb2NhdGVkLiBUaGlzIG5hdHVyYWxseQog
ICAgIC8vIHByZXZlbnRzIG1lcmdpbmcgbG9naWMgZnJvbSBvdmVyZmxvd2luZyBiZXlvbmQgb3Vy
IGNodW5rLCB3aXRob3V0IHJlcXVpcmluZwpAQCAtOTQsMTI3ICs1MiwxNSBAQCBpbmxpbmUgUmFu
Z2UgQm91bmRhcnlUYWc6OmluaXQoTGFyZ2VDaHVuCiAgICAgCiAgICAgRW5kVGFnKiBsZWZ0U2Vu
dGluZWwgPSBiZWdpblRhZy0+cHJldigpOwogICAgIEJBU1NFUlQobGVmdFNlbnRpbmVsID49IHN0
YXRpY19jYXN0PHZvaWQqPihjaHVuaykpOwotICAgIGxlZnRTZW50aW5lbC0+c2V0UmFuZ2UoUmFu
Z2UobnVsbHB0ciwgbGFyZ2VNaW4pKTsKLSAgICBsZWZ0U2VudGluZWwtPnNldEZyZWUoZmFsc2Up
OworICAgIGxlZnRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7CiAKICAgICBCZWdpblRhZyogcmln
aHRTZW50aW5lbCA9IGVuZFRhZy0+bmV4dCgpOwogICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA8
IHN0YXRpY19jYXN0PHZvaWQqPihyYW5nZS5iZWdpbigpKSk7Ci0gICAgcmlnaHRTZW50aW5lbC0+
c2V0UmFuZ2UoUmFuZ2UobnVsbHB0ciwgbGFyZ2VNaW4pKTsKLSAgICByaWdodFNlbnRpbmVsLT5z
ZXRGcmVlKGZhbHNlKTsKKyAgICByaWdodFNlbnRpbmVsLT5pbml0U2VudGluZWwoKTsKICAgICAK
ICAgICByZXR1cm4gcmFuZ2U7CiB9CiAKLWlubGluZSBSYW5nZSBCb3VuZGFyeVRhZzo6bWVyZ2VM
ZWZ0KGNvbnN0IFJhbmdlJiByYW5nZSwgQmVnaW5UYWcqJiBiZWdpblRhZywgRW5kVGFnKiBwcmV2
LCBib29sJiBoYXNQaHlzaWNhbFBhZ2VzKQotewotICAgIFJhbmdlIGxlZnQocmFuZ2UuYmVnaW4o
KSAtIHByZXYtPnNpemUoKSwgcHJldi0+c2l6ZSgpKTsKLSAgICBSYW5nZSBtZXJnZWQobGVmdC5i
ZWdpbigpLCBsZWZ0LnNpemUoKSArIHJhbmdlLnNpemUoKSk7Ci0KLSAgICBoYXNQaHlzaWNhbFBh
Z2VzICY9IHByZXYtPmhhc1BoeXNpY2FsUGFnZXMoKTsKLQotICAgIHByZXYtPmNsZWFyKCk7Ci0g
ICAgYmVnaW5UYWctPmNsZWFyKCk7Ci0KLSAgICBiZWdpblRhZyA9IExhcmdlQ2h1bms6OmJlZ2lu
VGFnKG1lcmdlZC5iZWdpbigpKTsKLSAgICByZXR1cm4gbWVyZ2VkOwotfQotCi1pbmxpbmUgUmFu
Z2UgQm91bmRhcnlUYWc6Om1lcmdlUmlnaHQoY29uc3QgUmFuZ2UmIHJhbmdlLCBFbmRUYWcqJiBl
bmRUYWcsIEJlZ2luVGFnKiBuZXh0LCBib29sJiBoYXNQaHlzaWNhbFBhZ2VzKQotewotICAgIFJh
bmdlIHJpZ2h0KHJhbmdlLmVuZCgpLCBuZXh0LT5zaXplKCkpOwotICAgIFJhbmdlIG1lcmdlZChy
YW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkgKyByaWdodC5zaXplKCkpOwotCi0gICAgaGFzUGh5
c2ljYWxQYWdlcyAmPSBuZXh0LT5oYXNQaHlzaWNhbFBhZ2VzKCk7Ci0KLSAgICBlbmRUYWctPmNs
ZWFyKCk7Ci0gICAgbmV4dC0+Y2xlYXIoKTsKLQotICAgIGVuZFRhZyA9IExhcmdlQ2h1bms6OmVu
ZFRhZyhtZXJnZWQuYmVnaW4oKSwgbWVyZ2VkLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1lcmdlZDsK
LX0KLQotSU5MSU5FIFJhbmdlIEJvdW5kYXJ5VGFnOjptZXJnZShjb25zdCBSYW5nZSYgcmFuZ2Us
IEJlZ2luVGFnKiYgYmVnaW5UYWcsIEVuZFRhZyomIGVuZFRhZykKLXsKLSAgICBFbmRUYWcqIHBy
ZXYgPSBiZWdpblRhZy0+cHJldigpOwotICAgIEJlZ2luVGFnKiBuZXh0ID0gZW5kVGFnLT5uZXh0
KCk7Ci0gICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzID0gYmVnaW5UYWctPmhhc1BoeXNpY2FsUGFn
ZXMoKTsKLQotICAgIHZhbGlkYXRlKHByZXYsIHJhbmdlLCBuZXh0KTsKLSAgICAKLSAgICBSYW5n
ZSBtZXJnZWQgPSByYW5nZTsKLQotICAgIGlmIChwcmV2LT5pc0ZyZWUoKSkKLSAgICAgICAgbWVy
Z2VkID0gbWVyZ2VMZWZ0KG1lcmdlZCwgYmVnaW5UYWcsIHByZXYsIGhhc1BoeXNpY2FsUGFnZXMp
OwotCi0gICAgaWYgKG5leHQtPmlzRnJlZSgpKQotICAgICAgICBtZXJnZWQgPSBtZXJnZVJpZ2h0
KG1lcmdlZCwgZW5kVGFnLCBuZXh0LCBoYXNQaHlzaWNhbFBhZ2VzKTsKLQotICAgIGJlZ2luVGFn
LT5zZXRSYW5nZShtZXJnZWQpOwotICAgIGJlZ2luVGFnLT5zZXRGcmVlKHRydWUpOwotICAgIGJl
Z2luVGFnLT5zZXRIYXNQaHlzaWNhbFBhZ2VzKGhhc1BoeXNpY2FsUGFnZXMpOwotCi0gICAgaWYg
KGVuZFRhZyAhPSBzdGF0aWNfY2FzdDxCb3VuZGFyeVRhZyo+KGJlZ2luVGFnKSkKLSAgICAgICAg
KmVuZFRhZyA9ICpiZWdpblRhZzsKLQotICAgIHZhbGlkYXRlKGJlZ2luVGFnLT5wcmV2KCksIG1l
cmdlZCwgZW5kVGFnLT5uZXh0KCkpOwotICAgIHJldHVybiBtZXJnZWQ7Ci19Ci0KLWlubGluZSBS
YW5nZSBCb3VuZGFyeVRhZzo6ZGVhbGxvY2F0ZSh2b2lkKiBvYmplY3QpCi17Ci0gICAgQmVnaW5U
YWcqIGJlZ2luVGFnID0gTGFyZ2VDaHVuazo6YmVnaW5UYWcob2JqZWN0KTsKLSAgICBCQVNTRVJU
KCFiZWdpblRhZy0+aXNGcmVlKCkpOwotCi0gICAgUmFuZ2UgcmFuZ2Uob2JqZWN0LCBiZWdpblRh
Zy0+c2l6ZSgpKTsKLSAgICBFbmRUYWcqIGVuZFRhZyA9IExhcmdlQ2h1bms6OmVuZFRhZyhyYW5n
ZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwotICAgIHJldHVybiBtZXJnZShyYW5nZSwgYmVnaW5U
YWcsIGVuZFRhZyk7Ci19Ci0KLUlOTElORSB2b2lkIEJvdW5kYXJ5VGFnOjpzcGxpdChjb25zdCBS
YW5nZSYgcmFuZ2UsIHNpemVfdCBzaXplLCBCZWdpblRhZyogYmVnaW5UYWcsIEVuZFRhZyomIGVu
ZFRhZywgUmFuZ2UmIGxlZnRvdmVyKQotewotICAgIGxlZnRvdmVyID0gUmFuZ2UocmFuZ2UuYmVn
aW4oKSArIHNpemUsIHJhbmdlLnNpemUoKSAtIHNpemUpOwotICAgIFJhbmdlIHNwbGl0KHJhbmdl
LmJlZ2luKCksIHNpemUpOwotCi0gICAgYmVnaW5UYWctPnNldFJhbmdlKHNwbGl0KTsKLQotICAg
IEVuZFRhZyogc3BsaXRFbmRUYWcgPSBMYXJnZUNodW5rOjplbmRUYWcoc3BsaXQuYmVnaW4oKSwg
c2l6ZSk7Ci0gICAgaWYgKHNwbGl0RW5kVGFnICE9IHN0YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4o
YmVnaW5UYWcpKQotICAgICAgICAqc3BsaXRFbmRUYWcgPSAqYmVnaW5UYWc7Ci0KLSAgICBCQVNT
RVJUKGxlZnRvdmVyLnNpemUoKSA+PSBsYXJnZU1pbik7Ci0gICAgQmVnaW5UYWcqIGxlZnRvdmVy
QmVnaW5UYWcgPSBMYXJnZUNodW5rOjpiZWdpblRhZyhsZWZ0b3Zlci5iZWdpbigpKTsKLSAgICAq
bGVmdG92ZXJCZWdpblRhZyA9ICpiZWdpblRhZzsKLSAgICBsZWZ0b3ZlckJlZ2luVGFnLT5zZXRS
YW5nZShsZWZ0b3Zlcik7Ci0KLSAgICBpZiAobGVmdG92ZXJCZWdpblRhZyAhPSBzdGF0aWNfY2Fz
dDxCb3VuZGFyeVRhZyo+KGVuZFRhZykpCi0gICAgICAgICplbmRUYWcgPSAqbGVmdG92ZXJCZWdp
blRhZzsKLQotICAgIHZhbGlkYXRlKGJlZ2luVGFnLT5wcmV2KCksIHNwbGl0LCBsZWZ0b3ZlckJl
Z2luVGFnKTsKLSAgICB2YWxpZGF0ZShsZWZ0b3ZlckJlZ2luVGFnLT5wcmV2KCksIGxlZnRvdmVy
LCBlbmRUYWctPm5leHQoKSk7Ci0KLSAgICBlbmRUYWcgPSBzcGxpdEVuZFRhZzsKLX0KLQotSU5M
SU5FIHZvaWQgQm91bmRhcnlUYWc6OmFsbG9jYXRlKGNvbnN0IFJhbmdlJiByYW5nZSwgc2l6ZV90
IHNpemUsIFJhbmdlJiBsZWZ0b3ZlciwgYm9vbCYgaGFzUGh5c2ljYWxQYWdlcykKLXsKLSAgICBC
ZWdpblRhZyogYmVnaW5UYWcgPSBMYXJnZUNodW5rOjpiZWdpblRhZyhyYW5nZS5iZWdpbigpKTsK
LSAgICBFbmRUYWcqIGVuZFRhZyA9IExhcmdlQ2h1bms6OmVuZFRhZyhyYW5nZS5iZWdpbigpLCBy
YW5nZS5zaXplKCkpOwotCi0gICAgQkFTU0VSVChiZWdpblRhZy0+aXNGcmVlKCkpOwotICAgIHZh
bGlkYXRlKGJlZ2luVGFnLT5wcmV2KCksIHJhbmdlLCBlbmRUYWctPm5leHQoKSk7Ci0KLSAgICBp
ZiAocmFuZ2Uuc2l6ZSgpIC0gc2l6ZSA+IGxhcmdlTWluKQotICAgICAgICBzcGxpdChyYW5nZSwg
c2l6ZSwgYmVnaW5UYWcsIGVuZFRhZywgbGVmdG92ZXIpOwotCi0gICAgaGFzUGh5c2ljYWxQYWdl
cyA9IGJlZ2luVGFnLT5oYXNQaHlzaWNhbFBhZ2VzKCk7Ci0KLSAgICBiZWdpblRhZy0+c2V0SGFz
UGh5c2ljYWxQYWdlcyh0cnVlKTsKLSAgICBiZWdpblRhZy0+c2V0RnJlZShmYWxzZSk7Ci0KLSAg
ICBlbmRUYWctPnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Ci0gICAgZW5kVGFnLT5zZXRGcmVl
KGZhbHNlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5kaWYgLy8gQm91bmRh
cnlUYWdJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW5kVGFnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbmRUYWcuaAkocmV2aXNpb24gMTgw
NTc0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbmRUYWcuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzIsMTQgKzMyLDE5IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgRW5kVGFnIDogcHVi
bGljIEJvdW5kYXJ5VGFnIHsKIHB1YmxpYzoKLSAgICBFbmRUYWcmIG9wZXJhdG9yPShjb25zdCBC
ZWdpblRhZyYpOworICAgIHZvaWQgaW5pdChCZWdpblRhZyopOwogfTsKIAotaW5saW5lIEVuZFRh
ZyYgRW5kVGFnOjpvcGVyYXRvcj0oY29uc3QgQmVnaW5UYWcmIG90aGVyKQoraW5saW5lIHZvaWQg
RW5kVGFnOjppbml0KEJlZ2luVGFnKiBvdGhlcikKIHsKLSAgICBzdGQ6Om1lbWNweSh0aGlzLCAm
b3RoZXIsIHNpemVvZihCb3VuZGFyeVRhZykpOworICAgIC8vIFRvIHNhdmUgc3BhY2UsIGFuIG9i
amVjdCBjYW4gaGF2ZSBvbmx5IG9uZSB0YWcsIHJlcHJlc2VudGluZyBib3RoCisgICAgLy8gaXRz
IGJlZ2luIGFuZCBpdHMgZW5kLiBJbiB0aGF0IGNhc2UsIHdlIG11c3QgYXZvaWQgaW5pdGlhbGl6
aW5nIHRoZQorICAgIC8vIGVuZCB0YWcsIHNpbmNlIHRoZXJlIGlzIG5vIGVuZCB0YWcuCisgICAg
aWYgKHN0YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4odGhpcykgPT0gc3RhdGljX2Nhc3Q8Qm91bmRh
cnlUYWcqPihvdGhlcikpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6bWVtY3B5KHRoaXMs
IG90aGVyLCBzaXplb2YoQm91bmRhcnlUYWcpKTsKICAgICBzZXRFbmQodHJ1ZSk7Ci0gICAgcmV0
dXJuICp0aGlzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcC5jcHAJKHJldmlzaW9uIDE4MDU3NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDkgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpbmNsdWRlICJCb3VuZGFyeVRhZ0lubGluZXMuaCIKICNpbmNsdWRlICJIZWFwLmgi
CiAjaW5jbHVkZSAiTGFyZ2VDaHVuay5oIgorI2luY2x1ZGUgIkxhcmdlT2JqZWN0LmgiCiAjaW5j
bHVkZSAiTGluZS5oIgogI2luY2x1ZGUgIk1lZGl1bUNodW5rLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgpAQCAtMTQ0LDEwICsxNDQsMTAgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZUxhcmdlUmFuZ2VzKHN0
ZDo6dW5pcQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSYW5n
ZSByYW5nZSA9IG1fbGFyZ2VSYW5nZXMudGFrZUdyZWVkeSh2bVBhZ2VTaXplKTsKLSAgICAgICAg
aWYgKCFyYW5nZSkKKyAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2Jq
ZWN0cy50YWtlR3JlZWR5KHZtUGFnZVNpemUpOworICAgICAgICBpZiAoIWxhcmdlT2JqZWN0KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3ZtSGVhcC5kZWFsbG9jYXRlTGFyZ2VSYW5n
ZShsb2NrLCByYW5nZSk7CisgICAgICAgIG1fdm1IZWFwLmRlYWxsb2NhdGVMYXJnZVJhbmdlKGxv
Y2ssIGxhcmdlT2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhCiAgICAgbV9pc0FsbG9jYXRpbmdQYWdl
cyA9IHRydWU7CiAKICAgICB2b2lkKiByZXN1bHQgPSB2bUFsbG9jYXRlKGFsaWdubWVudCwgc2l6
ZSk7Ci0gICAgbV94TGFyZ2VSYW5nZXMucHVzaChSYW5nZShyZXN1bHQsIHNpemUpKTsKKyAgICBt
X3hMYXJnZU9iamVjdHMucHVzaChSYW5nZShyZXN1bHQsIHNpemUpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uo
c3RkOjpsb2NrX2d1YQogCiBSYW5nZSBIZWFwOjpmaW5kWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCiB7Ci0gICAgZm9yIChhdXRvJiByYW5nZSA6IG1f
eExhcmdlUmFuZ2VzKSB7CisgICAgZm9yIChhdXRvJiByYW5nZSA6IG1feExhcmdlT2JqZWN0cykg
ewogICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSAhPSBvYmplY3QpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgcmV0dXJuIHJhbmdlOwpAQCAtMzUwLDExICszNTAsMTEgQEAgUmFuZ2Ug
SGVhcDo6ZmluZFhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8UwogCiB2b2lkIEhlYXA6OmRlYWxsb2Nh
dGVYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHZvaWQqIG9iamVj
dCkKIHsKLSAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV94TGFyZ2VSYW5nZXMpIHsKKyAgICBmb3Ig
KGF1dG8mIHJhbmdlIDogbV94TGFyZ2VPYmplY3RzKSB7CiAgICAgICAgIGlmIChyYW5nZS5iZWdp
bigpICE9IG9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJhbmdlIHRv
RGVhbGxvY2F0ZSA9IG1feExhcmdlUmFuZ2VzLnBvcCgmcmFuZ2UpOworICAgICAgICBSYW5nZSB0
b0RlYWxsb2NhdGUgPSBtX3hMYXJnZU9iamVjdHMucG9wKCZyYW5nZSk7CiAKICAgICAgICAgbG9j
ay51bmxvY2soKTsKICAgICAgICAgdm1EZWFsbG9jYXRlKHRvRGVhbGxvY2F0ZS5iZWdpbigpLCB0
b0RlYWxsb2NhdGUuc2l6ZSgpKTsKQEAgLTM2NCwyNCArMzY0LDI0IEBAIHZvaWQgSGVhcDo6ZGVh
bGxvY2F0ZVhMYXJnZShzdGQ6OnVuaXF1ZV8KICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6YWxsb2Nh
dGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmIHJhbmdl
LCBzaXplX3Qgc2l6ZSwgUmFuZ2UmIGxlZnRvdmVyKQordm9pZCogSGVhcDo6YWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBib29sIGhhc1BoeXNpY2FsUGFnZXM7Ci0gICAgQm91bmRh
cnlUYWc6OmFsbG9jYXRlKHJhbmdlLCBzaXplLCBsZWZ0b3ZlciwgaGFzUGh5c2ljYWxQYWdlcyk7
CisgICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7CiAKLSAgICBpZiAoIWhhc1BoeXNp
Y2FsUGFnZXMpCi0gICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJl
Z2luKCksIHJhbmdlLnNpemUoKSk7Ci19CisgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNp
emUgPiBsYXJnZU1pbikgeworICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2Jq
ZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNwbGl0KHNpemUpOworICAgICAgICBsYXJnZU9iamVj
dCA9IHNwbGl0LmZpcnN0OworICAgICAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQoc3BsaXQuc2Vj
b25kKTsKKyAgICB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgY29uc3QgUmFuZ2UmIHJhbmdlLCBzaXplX3Qgc2l6ZSkKLXsK
LSAgICBSYW5nZSBsZWZ0b3ZlcjsKLSAgICBhbGxvY2F0ZUxhcmdlKGxvY2ssIHJhbmdlLCBzaXpl
LCBsZWZ0b3Zlcik7CisgICAgbGFyZ2VPYmplY3Quc2V0RnJlZShmYWxzZSk7CiAKLSAgICBpZiAo
ISFsZWZ0b3ZlcikKLSAgICAgICAgbV9sYXJnZVJhbmdlcy5pbnNlcnQobGVmdG92ZXIpOworICAg
IGlmICghbGFyZ2VPYmplY3QuaGFzUGh5c2ljYWxQYWdlcygpKSB7CisgICAgICAgIHZtQWxsb2Nh
dGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNp
emUoKSk7CisgICAgICAgIGxhcmdlT2JqZWN0LnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Cisg
ICAgfQogICAgIAotICAgIHJldHVybiByYW5nZS5iZWdpbigpOworICAgIHJldHVybiBsYXJnZU9i
amVjdC5iZWdpbigpOwogfQogCiB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQpAQCAtMzkyLDExICszOTIsMTEg
QEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcgogICAgIAogICAgIG1f
aXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwogCi0gICAgUmFuZ2UgcmFuZ2UgPSBtX2xhcmdlUmFu
Z2VzLnRha2Uoc2l6ZSk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmFuZ2UgPSBtX3ZtSGVh
cC5hbGxvY2F0ZUxhcmdlUmFuZ2Uoc2l6ZSk7CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qg
PSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOworICAgIGlmICghbGFyZ2VPYmplY3QpCisgICAg
ICAgIGxhcmdlT2JqZWN0ID0gbV92bUhlYXAuYWxsb2NhdGVMYXJnZVJhbmdlKHNpemUpOwogCi0g
ICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2UobG9jaywgcmFuZ2UsIHNpemUpOworICAgIHJldHVybiBh
bGxvY2F0ZUxhcmdlKGxvY2ssIGxhcmdlT2JqZWN0LCBzaXplKTsKIH0KIAogdm9pZCogSGVhcDo6
YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCkBAIC00MTMsMzEg
KzQxMywzOSBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyCiAKICAg
ICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAotICAgIFJhbmdlIHJhbmdlID0gbV9sYXJn
ZVJhbmdlcy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmFuZ2UgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlUmFuZ2UoYWxpZ25t
ZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKKyAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9
IG1fbGFyZ2VPYmplY3RzLnRha2UoYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKKyAg
ICBpZiAoIWxhcmdlT2JqZWN0KQorICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9j
YXRlTGFyZ2VSYW5nZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwogCiAgICAgc2l6
ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAxOwotICAgIGlmICh0ZXN0KHJhbmdlLmJl
Z2luKCksIGFsaWdubWVudE1hc2spKSB7Ci0gICAgICAgIC8vIEJlY2F1c2Ugd2UgYWxsb2NhdGUg
bGVmdC10by1yaWdodCwgd2UgbXVzdCBleHBsaWNpdGx5IGFsbG9jYXRlIHRoZQotICAgICAgICAv
LyB1bmFsaWduZWQgc3BhY2Ugb24gdGhlIGxlZnQgaW4gb3JkZXIgdG8gYnJlYWsgb2ZmIHRoZSBh
bGlnbmVkIHNwYWNlCi0gICAgICAgIC8vIHdlIHdhbnQgaW4gdGhlIG1pZGRsZS4KLSAgICAgICAg
UmFuZ2UgYWxpZ25lZDsKLSAgICAgICAgc2l6ZV90IHVuYWxpZ25lZFNpemUgPSByb3VuZFVwVG9N
dWx0aXBsZU9mKGFsaWdubWVudCwgcmFuZ2UuYmVnaW4oKSArIGxhcmdlTWluKSAtIHJhbmdlLmJl
Z2luKCk7Ci0gICAgICAgIGFsbG9jYXRlTGFyZ2UobG9jaywgcmFuZ2UsIHVuYWxpZ25lZFNpemUs
IGFsaWduZWQpOwotICAgICAgICBhbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWduZWQsIHNpemUpOwot
ICAgICAgICBkZWFsbG9jYXRlTGFyZ2UobG9jaywgcmFuZ2UuYmVnaW4oKSk7Ci0gICAgICAgIHJl
dHVybiBhbGlnbmVkLmJlZ2luKCk7Ci0gICAgfQorICAgIGlmICghdGVzdChsYXJnZU9iamVjdC5i
ZWdpbigpLCBhbGlnbm1lbnRNYXNrKSkKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2UobG9j
aywgbGFyZ2VPYmplY3QsIHNpemUpOwogCi0gICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2UobG9jaywg
cmFuZ2UsIHNpemUpOworICAgIC8vIEJlY2F1c2Ugd2UgYWxsb2NhdGUgVk0gbGVmdC10by1yaWdo
dCwgd2UgbXVzdCBleHBsaWNpdGx5IGFsbG9jYXRlIHRoZQorICAgIC8vIHVuYWxpZ25lZCBzcGFj
ZSBvbiB0aGUgbGVmdCBpbiBvcmRlciB0byBicmVhayBvZmYgdGhlIGFsaWduZWQgc3BhY2UKKyAg
ICAvLyB3ZSB3YW50IGluIHRoZSBtaWRkbGUuCisgICAgc2l6ZV90IHByZWZpeFNpemUgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbGFyZ2VPYmplY3QuYmVnaW4oKSArIGxhcmdlTWlu
KSAtIGxhcmdlT2JqZWN0LmJlZ2luKCk7CisgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJn
ZU9iamVjdD4gcGFpciA9IGxhcmdlT2JqZWN0LnNwbGl0KHByZWZpeFNpemUpOworICAgIGFsbG9j
YXRlTGFyZ2UobG9jaywgcGFpci5maXJzdCwgcHJlZml4U2l6ZSk7CisgICAgYWxsb2NhdGVMYXJn
ZShsb2NrLCBwYWlyLnNlY29uZCwgc2l6ZSk7CisgICAgZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIHBh
aXIuZmlyc3QpOworICAgIHJldHVybiBwYWlyLnNlY29uZC5iZWdpbigpOwogfQogCi12b2lkIEhl
YXA6OmRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCog
b2JqZWN0KQordm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIGNvbnN0IExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCkKIHsKLSAgICBSYW5nZSBy
YW5nZSA9IEJvdW5kYXJ5VGFnOjpkZWFsbG9jYXRlKG9iamVjdCk7Ci0gICAgbV9sYXJnZVJhbmdl
cy5pbnNlcnQocmFuZ2UpOworICAgIEJBU1NFUlQoIWxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKKyAg
ICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOworICAgIAorICAgIExhcmdlT2JqZWN0IG1lcmdl
ZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7CisgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdl
ZCk7CiAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHZvaWQqIG9iamVjdCkKK3sK
KyAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChvYmplY3QpOworICAgIGRlYWxsb2NhdGVMYXJn
ZShsb2NrLCBsYXJnZU9iamVjdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxODA1NzQpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODEsOSArODEsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwg
U21hbGxMaW5lKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSopOwogCi0gICAgdm9pZCogYWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QpOwot
ICAgIHZvaWQgYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29u
c3QgUmFuZ2UmLCBzaXplX3QsIFJhbmdlJiBsZWZ0b3Zlcik7Ci0gICAgUmFuZ2UgYWxsb2NhdGVM
YXJnZUNodW5rKCk7CisgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOworICAgIHZvaWQgZGVhbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVjdCYpOwog
CiAgICAgdm9pZCBzcGxpdExhcmdlKEJlZ2luVGFnKiwgc2l6ZV90LCBFbmRUYWcqJiwgUmFuZ2Um
KTsKICAgICB2b2lkIG1lcmdlTGFyZ2UoQmVnaW5UYWcqJiwgRW5kVGFnKiYsIFJhbmdlJik7CkBA
IC0xMDQsOCArMTAzLDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U21hbGxQYWdlKj4gbV9zbWFs
bFBhZ2VzOwogICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4gbV9tZWRpdW1QYWdlczsKIAotICAgIFNl
Z3JlZ2F0ZWRGcmVlTGlzdCBtX2xhcmdlUmFuZ2VzOwotICAgIFZlY3RvcjxSYW5nZT4gbV94TGFy
Z2VSYW5nZXM7CisgICAgU2VncmVnYXRlZEZyZWVMaXN0IG1fbGFyZ2VPYmplY3RzOworICAgIFZl
Y3RvcjxSYW5nZT4gbV94TGFyZ2VPYmplY3RzOwogCiAgICAgYm9vbCBtX2lzQWxsb2NhdGluZ1Bh
Z2VzOwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgTGFyZ2VPYmplY3RfaAorI2RlZmluZSBMYXJnZU9iamVjdF9oCisK
KyNpbmNsdWRlICJCZWdpblRhZy5oIgorI2luY2x1ZGUgIkVuZFRhZy5oIgorI2luY2x1ZGUgIkxh
cmdlQ2h1bmsuaCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBMYXJnZU9iamVjdCB7
CitwdWJsaWM6CisgICAgTGFyZ2VPYmplY3QoKTsKKyAgICBMYXJnZU9iamVjdCh2b2lkKik7CisK
KyAgICBlbnVtIERvTm90VmFsaWRhdGVUYWcgeyBEb05vdFZhbGlkYXRlIH07CisgICAgTGFyZ2VP
YmplY3QoRG9Ob3RWYWxpZGF0ZVRhZywgdm9pZCopOworICAgIAorICAgIGJvb2wgb3BlcmF0b3Ih
KCkgeyByZXR1cm4gIW1fb2JqZWN0OyB9CisKKyAgICBjaGFyKiBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXIqPihtX29iamVjdCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVnaW5UYWctPnNpemUoKTsgfQorICAgIFJhbmdlIHJhbmdlKCkgY29u
c3QgeyByZXR1cm4gUmFuZ2UobV9vYmplY3QsIHNpemUoKSk7IH0KKworICAgIHZvaWQgc2V0RnJl
ZShib29sKSBjb25zdDsKKyAgICBib29sIGlzRnJlZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wg
aGFzUGh5c2ljYWxQYWdlcygpIGNvbnN0OworICAgIHZvaWQgc2V0SGFzUGh5c2ljYWxQYWdlcyhi
b29sKSBjb25zdDsKKyAgICAKKyAgICBib29sIGlzVmFsaWRBbmRGcmVlKHNpemVfdCkgY29uc3Q7
CisKKyAgICBMYXJnZU9iamVjdCBtZXJnZSgpIGNvbnN0OworICAgIHN0ZDo6cGFpcjxMYXJnZU9i
amVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0KHNpemVfdCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
TGFyZ2VPYmplY3QoQmVnaW5UYWcqLCBFbmRUYWcqLCB2b2lkKik7CisKKyAgICB2b2lkIHZhbGlk
YXRlKCkgY29uc3Q7CisgICAgdm9pZCB2YWxpZGF0ZVNlbGYoKSBjb25zdDsKKworICAgIEJlZ2lu
VGFnKiBtX2JlZ2luVGFnOworICAgIEVuZFRhZyogbV9lbmRUYWc7CisgICAgdm9pZCogbV9vYmpl
Y3Q7Cit9OworCitpbmxpbmUgTGFyZ2VPYmplY3Q6OkxhcmdlT2JqZWN0KCkKKyAgICA6IG1fYmVn
aW5UYWcobnVsbHB0cikKKyAgICAsIG1fZW5kVGFnKG51bGxwdHIpCisgICAgLCBtX29iamVjdChu
dWxscHRyKQoreworfQorCitpbmxpbmUgTGFyZ2VPYmplY3Q6OkxhcmdlT2JqZWN0KHZvaWQqIG9i
amVjdCkKKyAgICA6IG1fYmVnaW5UYWcoTGFyZ2VDaHVuazo6YmVnaW5UYWcob2JqZWN0KSkKKyAg
ICAsIG1fZW5kVGFnKExhcmdlQ2h1bms6OmVuZFRhZyhvYmplY3QsIG1fYmVnaW5UYWctPnNpemUo
KSkpCisgICAgLCBtX29iamVjdChvYmplY3QpCit7CisgICAgdmFsaWRhdGUoKTsKK30KKworaW5s
aW5lIExhcmdlT2JqZWN0OjpMYXJnZU9iamVjdChEb05vdFZhbGlkYXRlVGFnLCB2b2lkKiBvYmpl
Y3QpCisgICAgOiBtX2JlZ2luVGFnKExhcmdlQ2h1bms6OmJlZ2luVGFnKG9iamVjdCkpCisgICAg
LCBtX2VuZFRhZyhMYXJnZUNodW5rOjplbmRUYWcob2JqZWN0LCBtX2JlZ2luVGFnLT5zaXplKCkp
KQorICAgICwgbV9vYmplY3Qob2JqZWN0KQoreworfQorCitpbmxpbmUgTGFyZ2VPYmplY3Q6Okxh
cmdlT2JqZWN0KEJlZ2luVGFnKiBiZWdpblRhZywgRW5kVGFnKiBlbmRUYWcsIHZvaWQqIG9iamVj
dCkKKyAgICA6IG1fYmVnaW5UYWcoYmVnaW5UYWcpCisgICAgLCBtX2VuZFRhZyhlbmRUYWcpCisg
ICAgLCBtX29iamVjdChvYmplY3QpCit7Cit9CisKK2lubGluZSB2b2lkIExhcmdlT2JqZWN0Ojpz
ZXRGcmVlKGJvb2wgaXNGcmVlKSBjb25zdAoreworICAgIHZhbGlkYXRlKCk7CisgICAgbV9iZWdp
blRhZy0+c2V0RnJlZShpc0ZyZWUpOworICAgIG1fZW5kVGFnLT5zZXRGcmVlKGlzRnJlZSk7Cit9
CisKK2lubGluZSBib29sIExhcmdlT2JqZWN0Ojppc0ZyZWUoKSBjb25zdAoreworICAgIHZhbGlk
YXRlKCk7CisgICAgcmV0dXJuIG1fYmVnaW5UYWctPmlzRnJlZSgpOworfQorCitpbmxpbmUgYm9v
bCBMYXJnZU9iamVjdDo6aGFzUGh5c2ljYWxQYWdlcygpIGNvbnN0Cit7CisgICAgdmFsaWRhdGUo
KTsKKyAgICByZXR1cm4gbV9iZWdpblRhZy0+aGFzUGh5c2ljYWxQYWdlcygpOworfQorCitpbmxp
bmUgdm9pZCBMYXJnZU9iamVjdDo6c2V0SGFzUGh5c2ljYWxQYWdlcyhib29sIGhhc1BoeXNpY2Fs
UGFnZXMpIGNvbnN0Cit7CisgICAgdmFsaWRhdGUoKTsKKyAgICBtX2JlZ2luVGFnLT5zZXRIYXNQ
aHlzaWNhbFBhZ2VzKGhhc1BoeXNpY2FsUGFnZXMpOworICAgIG1fZW5kVGFnLT5zZXRIYXNQaHlz
aWNhbFBhZ2VzKGhhc1BoeXNpY2FsUGFnZXMpOworfQorCitpbmxpbmUgYm9vbCBMYXJnZU9iamVj
dDo6aXNWYWxpZEFuZEZyZWUoc2l6ZV90IGV4cGVjdGVkU2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fYmVnaW5UYWctPmlzRnJlZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKG1fYmVnaW5UYWctPmlzRW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChtX2JlZ2luVGFnLT5zaXplKCkgIT0gZXhwZWN0ZWRTaXplKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKG1fYmVnaW5UYWctPmNvbXBhY3RCZWdpbigpICE9IEJvdW5kYXJ5
VGFnOjpjb21wYWN0QmVnaW4obV9vYmplY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIExhcmdlT2JqZWN0IExhcmdlT2JqZWN0OjptZXJn
ZSgpIGNvbnN0Cit7CisgICAgdmFsaWRhdGUoKTsKKyAgICBCQVNTRVJUKGlzRnJlZSgpKTsKKwor
ICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdlcyA9IG1fYmVnaW5UYWctPmhhc1BoeXNpY2FsUGFnZXMo
KTsKKworICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IG1fYmVnaW5UYWc7CisgICAgRW5kVGFnKiBl
bmRUYWcgPSBtX2VuZFRhZzsKKyAgICBSYW5nZSByYW5nZSA9IHRoaXMtPnJhbmdlKCk7CisgICAg
CisgICAgRW5kVGFnKiBwcmV2ID0gYmVnaW5UYWctPnByZXYoKTsKKyAgICBpZiAocHJldi0+aXNG
cmVlKCkpIHsKKyAgICAgICAgUmFuZ2UgbGVmdChyYW5nZS5iZWdpbigpIC0gcHJldi0+c2l6ZSgp
LCBwcmV2LT5zaXplKCkpOworICAgICAgICByYW5nZSA9IFJhbmdlKGxlZnQuYmVnaW4oKSwgbGVm
dC5zaXplKCkgKyByYW5nZS5zaXplKCkpOworICAgICAgICBoYXNQaHlzaWNhbFBhZ2VzICY9IHBy
ZXYtPmhhc1BoeXNpY2FsUGFnZXMoKTsKKworICAgICAgICBwcmV2LT5jbGVhcigpOworICAgICAg
ICBiZWdpblRhZy0+Y2xlYXIoKTsKKworICAgICAgICBiZWdpblRhZyA9IExhcmdlQ2h1bms6OmJl
Z2luVGFnKHJhbmdlLmJlZ2luKCkpOworICAgIH0KKworICAgIEJlZ2luVGFnKiBuZXh0ID0gZW5k
VGFnLT5uZXh0KCk7CisgICAgaWYgKG5leHQtPmlzRnJlZSgpKSB7CisgICAgICAgIFJhbmdlIHJp
Z2h0KHJhbmdlLmVuZCgpLCBuZXh0LT5zaXplKCkpOworICAgICAgICByYW5nZSA9IFJhbmdlKHJh
bmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSArIHJpZ2h0LnNpemUoKSk7CisKKyAgICAgICAgaGFz
UGh5c2ljYWxQYWdlcyAmPSBuZXh0LT5oYXNQaHlzaWNhbFBhZ2VzKCk7CisKKyAgICAgICAgZW5k
VGFnLT5jbGVhcigpOworICAgICAgICBuZXh0LT5jbGVhcigpOworCisgICAgICAgIGVuZFRhZyA9
IExhcmdlQ2h1bms6OmVuZFRhZyhyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOworICAgIH0K
KworICAgIGJlZ2luVGFnLT5zZXRSYW5nZShyYW5nZSk7CisgICAgYmVnaW5UYWctPnNldEZyZWUo
dHJ1ZSk7CisgICAgYmVnaW5UYWctPnNldEhhc1BoeXNpY2FsUGFnZXMoaGFzUGh5c2ljYWxQYWdl
cyk7CisgICAgZW5kVGFnLT5pbml0KGJlZ2luVGFnKTsKKworICAgIHJldHVybiBMYXJnZU9iamVj
dChiZWdpblRhZywgZW5kVGFnLCByYW5nZS5iZWdpbigpKTsKK30KKworaW5saW5lIHN0ZDo6cGFp
cjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IExhcmdlT2JqZWN0OjpzcGxpdChzaXplX3Qgc2l6
ZSkgY29uc3QKK3sKKyAgICBCQVNTRVJUKGlzRnJlZSgpKTsKKworICAgIFJhbmdlIHNwbGl0KGJl
Z2luKCksIHNpemUpOworICAgIFJhbmdlIGxlZnRvdmVyID0gUmFuZ2Uoc3BsaXQuZW5kKCksIHRo
aXMtPnNpemUoKSAtIHNpemUpOworICAgIEJBU1NFUlQobGVmdG92ZXIuc2l6ZSgpID49IGxhcmdl
TWluKTsKKworICAgIEJlZ2luVGFnKiBzcGxpdEJlZ2luVGFnID0gbV9iZWdpblRhZzsKKyAgICBF
bmRUYWcqIHNwbGl0RW5kVGFnID0gTGFyZ2VDaHVuazo6ZW5kVGFnKHNwbGl0LmJlZ2luKCksIHNp
emUpOworCisgICAgQmVnaW5UYWcqIGxlZnRvdmVyQmVnaW5UYWcgPSBMYXJnZUNodW5rOjpiZWdp
blRhZyhsZWZ0b3Zlci5iZWdpbigpKTsKKyAgICBFbmRUYWcqIGxlZnRvdmVyRW5kVGFnID0gbV9l
bmRUYWc7CisKKyAgICBzcGxpdEJlZ2luVGFnLT5zZXRSYW5nZShzcGxpdCk7CisgICAgc3BsaXRF
bmRUYWctPmluaXQoc3BsaXRCZWdpblRhZyk7CisKKyAgICAqbGVmdG92ZXJCZWdpblRhZyA9ICpz
cGxpdEJlZ2luVGFnOworICAgIGxlZnRvdmVyQmVnaW5UYWctPnNldFJhbmdlKGxlZnRvdmVyKTsK
KyAgICBsZWZ0b3ZlckVuZFRhZy0+aW5pdChsZWZ0b3ZlckJlZ2luVGFnKTsKKworICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcigKKyAgICAgICAgTGFyZ2VPYmplY3Qoc3BsaXRCZWdpblRhZywgc3Bs
aXRFbmRUYWcsIHNwbGl0LmJlZ2luKCkpLAorICAgICAgICBMYXJnZU9iamVjdChsZWZ0b3ZlckJl
Z2luVGFnLCBsZWZ0b3ZlckVuZFRhZywgbGVmdG92ZXIuYmVnaW4oKSkpOworfQorCitpbmxpbmUg
dm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGVTZWxmKCkgY29uc3QKK3sKKyAgICBCQVNTRVJUKCFt
X2JlZ2luVGFnLT5pc0VuZCgpKTsKKyAgICBCQVNTRVJUKG1fZW5kVGFnLT5pc0VuZCgpIHx8IHN0
YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4obV9lbmRUYWcpID09IHN0YXRpY19jYXN0PEJvdW5kYXJ5
VGFnKj4obV9iZWdpblRhZykpOworCisgICAgQkFTU0VSVChzaXplKCkgPj0gbGFyZ2VNaW4pOwor
CisgICAgQkFTU0VSVChtX2JlZ2luVGFnLT5zaXplKCkgPT0gbV9lbmRUYWctPnNpemUoKSk7Cisg
ICAgQkFTU0VSVChtX2JlZ2luVGFnLT5pc0ZyZWUoKSA9PSBtX2VuZFRhZy0+aXNGcmVlKCkpOwor
ICAgIEJBU1NFUlQobV9iZWdpblRhZy0+aGFzUGh5c2ljYWxQYWdlcygpID09IG1fZW5kVGFnLT5o
YXNQaHlzaWNhbFBhZ2VzKCkpOworfQorCitpbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6dmFsaWRh
dGUoKSBjb25zdAoreworICAgIGlmICghbV9iZWdpblRhZy0+cHJldigpLT5pc1NlbnRpbmVsKCkp
IHsKKyAgICAgICAgTGFyZ2VPYmplY3QgcHJldihEb05vdFZhbGlkYXRlLCBiZWdpbigpIC0gbV9i
ZWdpblRhZy0+cHJldigpLT5zaXplKCkpOworICAgICAgICBwcmV2LnZhbGlkYXRlU2VsZigpOwor
ICAgIH0KKworICAgIHZhbGlkYXRlU2VsZigpOworCisgICAgaWYgKCFtX2VuZFRhZy0+bmV4dCgp
LT5pc1NlbnRpbmVsKCkpIHsKKyAgICAgICAgTGFyZ2VPYmplY3QgbmV4dChEb05vdFZhbGlkYXRl
LCBiZWdpbigpICsgc2l6ZSgpKTsKKyAgICAgICAgbmV4dC52YWxpZGF0ZVNlbGYoKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIExhcmdlT2JqZWN0X2gK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAJ
KHJldmlzaW9uIDE4MDU3NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZy
ZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNzQgKzM1LDY4IEBAIFNlZ3JlZ2F0ZWRGcmVl
TGlzdDo6U2VncmVnYXRlZEZyZWVMaXN0KCkKICAgICBCQVNTRVJUKHN0YXRpY19jYXN0PHNpemVf
dD4oJnNlbGVjdChsYXJnZU1heCkgLSBtX2xpc3RzLmJlZ2luKCkpID09IG1fbGlzdHMuc2l6ZSgp
IC0gMSk7CiB9CiAKLXZvaWQgU2VncmVnYXRlZEZyZWVMaXN0OjppbnNlcnQoY29uc3QgUmFuZ2Um
IHJhbmdlKQordm9pZCBTZWdyZWdhdGVkRnJlZUxpc3Q6Omluc2VydChjb25zdCBMYXJnZU9iamVj
dCYgbGFyZ2VPYmplY3QpCiB7Ci1JRl9ERUJVRygKLSAgICBCZWdpblRhZyogYmVnaW5UYWcgPSBM
YXJnZUNodW5rOjpiZWdpblRhZyhyYW5nZS5iZWdpbigpKTsKLSAgICBCQVNTRVJUKGJlZ2luVGFn
LT5pc0luRnJlZUxpc3QocmFuZ2UpKTsKLSkKLQotICAgIGF1dG8mIGxpc3QgPSBzZWxlY3QocmFu
Z2Uuc2l6ZSgpKTsKLSAgICBsaXN0LnB1c2gocmFuZ2UpOworICAgIEJBU1NFUlQobGFyZ2VPYmpl
Y3QuaXNGcmVlKCkpOworICAgIGF1dG8mIGxpc3QgPSBzZWxlY3QobGFyZ2VPYmplY3Quc2l6ZSgp
KTsKKyAgICBsaXN0LnB1c2gobGFyZ2VPYmplY3QucmFuZ2UoKSk7CiB9CiAKLVJhbmdlIFNlZ3Jl
Z2F0ZWRGcmVlTGlzdDo6dGFrZUdyZWVkeShzaXplX3Qgc2l6ZSkKK0xhcmdlT2JqZWN0IFNlZ3Jl
Z2F0ZWRGcmVlTGlzdDo6dGFrZUdyZWVkeShzaXplX3Qgc2l6ZSkKIHsKICAgICBmb3IgKHNpemVf
dCBpID0gbV9saXN0cy5zaXplKCk7IGktLSA+IDA7ICkgewotICAgICAgICBSYW5nZSByYW5nZSA9
IHRha2VHcmVlZHkobV9saXN0c1tpXSwgc2l6ZSk7Ci0gICAgICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gdGFrZUdyZWVkeShtX2xpc3RzW2ldLCBzaXpl
KTsKKyAgICAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogICAgIH0K
LSAgICByZXR1cm4gUmFuZ2UoKTsKKyAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKIH0KIAotUmFu
Z2UgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlR3JlZWR5KExpc3QmIGxpc3QsIHNpemVfdCBzaXpl
KQorTGFyZ2VPYmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlR3JlZWR5KExpc3QmIGxpc3Qs
IHNpemVfdCBzaXplKQogewogICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUoKTsgaS0tID4g
MDsgKSB7Ci0gICAgICAgIFJhbmdlIHJhbmdlID0gbGlzdFtpXTsKLQogICAgICAgICAvLyBXZSBk
b24ndCBlYWdlcmx5IHJlbW92ZSBpdGVtcyB3aGVuIHdlIG1lcmdlIGFuZC9vciBzcGxpdCByYW5n
ZXMsCiAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gdmFsaWRhdGUgZWFjaCBmcmVlIGxpc3QgZW50
cnkgYmVmb3JlIHVzaW5nIGl0LgotICAgICAgICBCZWdpblRhZyogYmVnaW5UYWcgPSBMYXJnZUNo
dW5rOjpiZWdpblRhZyhyYW5nZS5iZWdpbigpKTsKLSAgICAgICAgaWYgKCFiZWdpblRhZy0+aXNJ
bkZyZWVMaXN0KHJhbmdlKSkgeworICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJn
ZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbGlzdFtpXS5iZWdpbigpKTsKKyAgICAgICAgaWYgKCFs
YXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJlZShsaXN0W2ldLnNpemUoKSkpIHsKICAgICAgICAgICAg
IGxpc3QucG9wKGkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAocmFuZ2Uuc2l6ZSgpIDwgc2l6ZSkKKyAgICAgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUo
KSA8IHNpemUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBsaXN0LnBvcChpKTsK
LSAgICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiAgICAg
fQogCi0gICAgcmV0dXJuIFJhbmdlKCk7CisgICAgcmV0dXJuIExhcmdlT2JqZWN0KCk7CiB9CiAK
LVJhbmdlIFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3Qgc2l6ZSkKK0xhcmdlT2JqZWN0
IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3Qgc2l6ZSkKIHsKICAgICBmb3IgKGF1dG8q
IGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0ICE9IG1fbGlzdHMuZW5kKCk7ICsrbGlzdCkgewot
ICAgICAgICBSYW5nZSByYW5nZSA9IHRha2UoKmxpc3QsIHNpemUpOwotICAgICAgICBpZiAoIXJh
bmdlKQorICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IHRha2UoKmxpc3QsIHNpemUp
OworICAgICAgICBpZiAoIWxhcmdlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgcmV0dXJuIHJhbmdlOworICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7CiAgICAgfQot
ICAgIHJldHVybiBSYW5nZSgpOworICAgIHJldHVybiBMYXJnZU9iamVjdCgpOwogfQogCi1SYW5n
ZSBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2Uoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUs
IHNpemVfdCB1bmFsaWduZWRTaXplKQorTGFyZ2VPYmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0
YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkK
IHsKICAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0ICE9IG1fbGlzdHMu
ZW5kKCk7ICsrbGlzdCkgewotICAgICAgICBSYW5nZSByYW5nZSA9IHRha2UoKmxpc3QsIGFsaWdu
bWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgICAgIGlmICghcmFuZ2UpCisgICAgICAg
IExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gdGFrZSgqbGlzdCwgYWxpZ25tZW50LCBzaXplLCB1
bmFsaWduZWRTaXplKTsKKyAgICAgICAgaWYgKCFsYXJnZU9iamVjdCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIHJldHVybiByYW5nZTsKKyAgICAgICAgcmV0dXJuIGxhcmdlT2Jq
ZWN0OwogICAgIH0KLSAgICByZXR1cm4gUmFuZ2UoKTsKKyAgICByZXR1cm4gTGFyZ2VPYmplY3Qo
KTsKIH0KIAogSU5MSU5FIGF1dG8gU2VncmVnYXRlZEZyZWVMaXN0OjpzZWxlY3Qoc2l6ZV90IHNp
emUpIC0+IExpc3QmCkBAIC0xMTYsNjEgKzExMCw1NyBAQCBJTkxJTkUgYXV0byBTZWdyZWdhdGVk
RnJlZUxpc3Q6OnNlbGVjdChzCiAgICAgcmV0dXJuIG1fbGlzdHNbcmVzdWx0XTsKIH0KIAotSU5M
SU5FIFJhbmdlIFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShMaXN0JiBsaXN0LCBzaXplX3Qgc2l6
ZSkKK0lOTElORSBMYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2UoTGlzdCYgbGlz
dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgUmFuZ2UgZmlyc3Q7CisgICAgTGFyZ2VPYmplY3QgZmly
c3Q7CiAgICAgc2l6ZV90IGVuZCA9IGxpc3Quc2l6ZSgpID4gc2VncmVnYXRlZEZyZWVMaXN0U2Vh
cmNoRGVwdGggPyBsaXN0LnNpemUoKSAtIHNlZ3JlZ2F0ZWRGcmVlTGlzdFNlYXJjaERlcHRoIDog
MDsKICAgICBmb3IgKHNpemVfdCBpID0gbGlzdC5zaXplKCk7IGktLSA+IGVuZDsgKSB7Ci0gICAg
ICAgIFJhbmdlIHJhbmdlID0gbGlzdFtpXTsKLQogICAgICAgICAvLyBXZSBkb24ndCBlYWdlcmx5
IHJlbW92ZSBpdGVtcyB3aGVuIHdlIG1lcmdlIGFuZC9vciBzcGxpdCByYW5nZXMsIHNvCiAgICAg
ICAgIC8vIHdlIG5lZWQgdG8gdmFsaWRhdGUgZWFjaCBmcmVlIGxpc3QgZW50cnkgYmVmb3JlIHVz
aW5nIGl0LgotICAgICAgICBCZWdpblRhZyogYmVnaW5UYWcgPSBMYXJnZUNodW5rOjpiZWdpblRh
ZyhyYW5nZS5iZWdpbigpKTsKLSAgICAgICAgaWYgKCFiZWdpblRhZy0+aXNJbkZyZWVMaXN0KHJh
bmdlKSkgeworICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9O
b3RWYWxpZGF0ZSwgbGlzdFtpXS5iZWdpbigpKTsKKyAgICAgICAgaWYgKCFsYXJnZU9iamVjdC5p
c1ZhbGlkQW5kRnJlZShsaXN0W2ldLnNpemUoKSkpIHsKICAgICAgICAgICAgIGxpc3QucG9wKGkp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocmFuZ2Uu
c2l6ZSgpIDwgc2l6ZSkKKyAgICAgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSA8IHNpemUpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoISFmaXJzdCAmJiBmaXJzdCA8IHJh
bmdlKQorICAgICAgICBpZiAoISFmaXJzdCAmJiBmaXJzdC5iZWdpbigpIDwgbGFyZ2VPYmplY3Qu
YmVnaW4oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGZpcnN0ID0gcmFuZ2U7
CisgICAgICAgIGZpcnN0ID0gbGFyZ2VPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHJldHVybiBm
aXJzdDsKIH0KIAotSU5MSU5FIFJhbmdlIFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShMaXN0JiBs
aXN0LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUp
CitJTkxJTkUgTGFyZ2VPYmplY3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlKExpc3QmIGxpc3Qs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKIHsK
ICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKICAgICBzaXplX3QgYWxpZ25t
ZW50TWFzayA9IGFsaWdubWVudCAtIDE7CiAKLSAgICBSYW5nZSBmaXJzdDsKKyAgICBMYXJnZU9i
amVjdCBmaXJzdDsKICAgICBzaXplX3QgZW5kID0gbGlzdC5zaXplKCkgPiBzZWdyZWdhdGVkRnJl
ZUxpc3RTZWFyY2hEZXB0aCA/IGxpc3Quc2l6ZSgpIC0gc2VncmVnYXRlZEZyZWVMaXN0U2VhcmNo
RGVwdGggOiAwOwogICAgIGZvciAoc2l6ZV90IGkgPSBsaXN0LnNpemUoKTsgaS0tID4gZW5kOyAp
IHsKLSAgICAgICAgUmFuZ2UgcmFuZ2UgPSBsaXN0W2ldOwotCiAgICAgICAgIC8vIFdlIGRvbid0
IGVhZ2VybHkgcmVtb3ZlIGl0ZW1zIHdoZW4gd2UgbWVyZ2UgYW5kL29yIHNwbGl0IHJhbmdlcywg
c28KICAgICAgICAgLy8gd2UgbmVlZCB0byB2YWxpZGF0ZSBlYWNoIGZyZWUgbGlzdCBlbnRyeSBi
ZWZvcmUgdXNpbmcgaXQuCi0gICAgICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IExhcmdlQ2h1bms6
OmJlZ2luVGFnKHJhbmdlLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWJlZ2luVGFnLT5pc0luRnJl
ZUxpc3QocmFuZ2UpKSB7CisgICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KExhcmdlT2Jq
ZWN0OjpEb05vdFZhbGlkYXRlLCBsaXN0W2ldLmJlZ2luKCkpOworICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0LmlzVmFsaWRBbmRGcmVlKGxpc3RbaV0uc2l6ZSgpKSkgewogICAgICAgICAgICAgbGlz
dC5wb3AoaSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChyYW5nZS5zaXplKCkgPCBzaXplKQorICAgICAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIDwg
c2l6ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICh0ZXN0KHJhbmdlLmJl
Z2luKCksIGFsaWdubWVudE1hc2spICYmIHJhbmdlLnNpemUoKSA8IHVuYWxpZ25lZFNpemUpCisg
ICAgICAgIGlmICh0ZXN0KGxhcmdlT2JqZWN0LmJlZ2luKCksIGFsaWdubWVudE1hc2spICYmIGxh
cmdlT2JqZWN0LnNpemUoKSA8IHVuYWxpZ25lZFNpemUpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBpZiAoISFmaXJzdCAmJiBmaXJzdCA8IHJhbmdlKQorICAgICAgICBpZiAoISFm
aXJzdCAmJiBmaXJzdC5iZWdpbigpIDwgbGFyZ2VPYmplY3QuYmVnaW4oKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGZpcnN0ID0gcmFuZ2U7CisgICAgICAgIGZpcnN0ID0gbGFy
Z2VPYmplY3Q7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmaXJzdDsKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkocmV2aXNpb24gMTgwNTc0KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBTZWdyZWdhdGVkRnJlZUxpc3RfaAogI2RlZmlu
ZSBTZWdyZWdhdGVkRnJlZUxpc3RfaAogCi0jaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJM
YXJnZU9iamVjdC5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgPGFycmF5PgogCkBA
IC0zNiwzNCArMzYsMzQgQEAgY2xhc3MgU2VncmVnYXRlZEZyZWVMaXN0IHsKIHB1YmxpYzoKICAg
ICBTZWdyZWdhdGVkRnJlZUxpc3QoKTsKIAotICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFJhbmdlJik7
CisgICAgdm9pZCBpbnNlcnQoY29uc3QgTGFyZ2VPYmplY3QmKTsKIAotICAgIC8vIFJldHVybnMg
YSByZWFzb25hYmxlIGZpdCBmb3IgdGhlIHByb3ZpZGVkIHNpemUsIG9yIFJhbmdlKCkgaWYgbm8g
Zml0Ci0gICAgLy8gaXMgZm91bmQuIE1heSByZXR1cm4gUmFuZ2UoKSBzcHVyaW91c2x5IGlmIHNl
YXJjaGluZyB0YWtlcyB0b28gbG9uZy4KKyAgICAvLyBSZXR1cm5zIGEgcmVhc29uYWJsZSBmaXQg
Zm9yIHRoZSBwcm92aWRlZCBzaXplLCBvciBMYXJnZU9iamVjdCgpIGlmIG5vIGZpdAorICAgIC8v
IGlzIGZvdW5kLiBNYXkgcmV0dXJuIExhcmdlT2JqZWN0KCkgc3B1cmlvdXNseSBpZiBzZWFyY2hp
bmcgdGFrZXMgdG9vIGxvbmcuCiAgICAgLy8gSW5jcmVtZW50YWxseSByZW1vdmVzIHN0YWxlIGl0
ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZSBzZWFyY2hpbmcuCi0gICAgLy8gRG9lcyBub3Qg
ZWFnZXJseSByZW1vdmUgdGhlIHJldHVybmVkIHJhbmdlIGZyb20gdGhlIGZyZWUgbGlzdC4KLSAg
ICBSYW5nZSB0YWtlKHNpemVfdCk7CisgICAgLy8gRG9lcyBub3QgZWFnZXJseSByZW1vdmUgdGhl
IHJldHVybmVkIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QuCisgICAgTGFyZ2VPYmplY3QgdGFr
ZShzaXplX3QpOwogCiAgICAgLy8gUmV0dXJucyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJv
dmlkZWQgYWxpZ25tZW50IGFuZCBzaXplLCBvcgotICAgIC8vIGEgcmVhc29uYWJsZSBmaXQgZm9y
IHRoZSBwcm92aWRlZCB1bmFsaWduZWQgc2l6ZSwgb3IgUmFuZ2UoKSBpZiBubyBmaXQKLSAgICAv
LyBpcyBmb3VuZC4gTWF5IHJldHVybiBSYW5nZSgpIHNwdXJpb3VzbHkgaWYgc2VhcmNoaW5nIHRh
a2VzIHRvbyBsb25nLgotICAgIC8vIEluY3JlbWVudGFsbHkgcmVtb3ZlcyBzdGFsZSBpdGVtcyBm
cm9tIHRoZSBmcmVlIGxpc3Qgd2hpbGUgc2VhcmNoaW5nLgotICAgIC8vIERvZXMgbm90IGVhZ2Vy
bHkgcmVtb3ZlIHRoZSByZXR1cm5lZCByYW5nZSBmcm9tIHRoZSBmcmVlIGxpc3QuCi0gICAgUmFu
Z2UgdGFrZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRTaXplKTsK
LQotICAgIC8vIFJldHVybnMgYW4gdW5yZWFzb25hYmxlIGZpdCBmb3IgdGhlIHByb3ZpZGVkIHNp
emUsIG9yIFJhbmdlKCkgaWYgbm8gZml0Ci0gICAgLy8gaXMgZm91bmQuIE5ldmVyIHJldHVybnMg
UmFuZ2UoKSBzcHVyaW91c2x5LgotICAgIC8vIEluY3JlbWVudGFsbHkgcmVtb3ZlcyBzdGFsZSBp
dGVtcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hpbGUgc2VhcmNoaW5nLgotICAgIC8vIEVhZ2VybHkg
cmVtb3ZlcyB0aGUgcmV0dXJuZWQgcmFuZ2UgZnJvbSB0aGUgZnJlZSBsaXN0LgotICAgIFJhbmdl
IHRha2VHcmVlZHkoc2l6ZV90KTsKKyAgICAvLyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJv
dmlkZWQgdW5hbGlnbmVkIHNpemUsIG9yIExhcmdlT2JqZWN0KCkgaWYgbm8KKyAgICAvLyBmaXQg
aXMgZm91bmQuIE1heSByZXR1cm4gTGFyZ2VPYmplY3QoKSBzcHVyaW91c2x5IGlmIHNlYXJjaGlu
ZyB0YWtlcyB0b28KKyAgICAvLyBsb25nLiBJbmNyZW1lbnRhbGx5IHJlbW92ZXMgc3RhbGUgaXRl
bXMgZnJvbSB0aGUgZnJlZSBsaXN0IHdoaWxlCisgICAgLy8gc2VhcmNoaW5nLiBEb2VzIG5vdCBl
YWdlcmx5IHJlbW92ZSB0aGUgcmV0dXJuZWQgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4KKyAg
ICBMYXJnZU9iamVjdCB0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxp
Z25lZFNpemUpOworCisgICAgLy8gUmV0dXJucyBhbiB1bnJlYXNvbmFibGUgZml0IGZvciB0aGUg
cHJvdmlkZWQgc2l6ZSwgb3IgTGFyZ2VPYmplY3QoKSBpZiBubworICAgIC8vIGZpdCBpcyBmb3Vu
ZC4gTmV2ZXIgcmV0dXJucyBMYXJnZU9iamVjdCgpIHNwdXJpb3VzbHkuIEluY3JlbWVudGFsbHkK
KyAgICAvLyByZW1vdmVzIHN0YWxlIGl0ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZSBzZWFy
Y2hpbmcuIEVhZ2VybHkgcmVtb3ZlcworICAgIC8vIHRoZSByZXR1cm5lZCBvYmplY3QgZnJvbSB0
aGUgZnJlZSBsaXN0LgorICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoc2l6ZV90KTsKICAgICAK
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmFuZ2U+IExpc3Q7CiAKICAgICBMaXN0JiBz
ZWxlY3Qoc2l6ZV90KTsKLSAgICBSYW5nZSB0YWtlKExpc3QmLCBzaXplX3QpOwotICAgIFJhbmdl
IHRha2UoTGlzdCYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxpZ25lZFNp
emUpOwotICAgIFJhbmdlIHRha2VHcmVlZHkoTGlzdCYsIHNpemVfdCk7CisgICAgTGFyZ2VPYmpl
Y3QgdGFrZShMaXN0Jiwgc2l6ZV90KTsKKyAgICBMYXJnZU9iamVjdCB0YWtlKExpc3QmLCBzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRTaXplKTsKKyAgICBMYXJnZU9i
amVjdCB0YWtlR3JlZWR5KExpc3QmLCBzaXplX3QpOwogCiAgICAgc3RkOjphcnJheTxMaXN0LCAx
OT4gbV9saXN0czsKIH07CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCShyZXZpc2lv
biAxODA1NzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBWTUhlYXA6Omdyb3coKQogICAgICAgICBtX21l
ZGl1bVBhZ2VzLnB1c2goaXQpOwogCiAgICAgTGFyZ2VDaHVuayogbGFyZ2VDaHVuayA9IHN1cGVy
Q2h1bmstPmxhcmdlQ2h1bmsoKTsKLSAgICBtX2xhcmdlUmFuZ2VzLmluc2VydChCb3VuZGFyeVRh
Zzo6aW5pdChsYXJnZUNodW5rKSk7CisgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KExhcmdlT2Jq
ZWN0KEJvdW5kYXJ5VGFnOjppbml0KGxhcmdlQ2h1bmspLmJlZ2luKCkpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAx
ODA1NzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQXN5bmNUYXNrLmgiCiAjaW5jbHVkZSAiRml4
ZWRWZWN0b3IuaCIKICNpbmNsdWRlICJMYXJnZUNodW5rLmgiCisjaW5jbHVkZSAiTGFyZ2VPYmpl
Y3QuaCIKICNpbmNsdWRlICJNZWRpdW1DaHVuay5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCkBAIC01MSwxOSArNTIsMTkgQEAgcHVibGljOgog
CiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNtYWxsUGFnZSgpOwogICAgIE1lZGl1bVBhZ2UqIGFs
bG9jYXRlTWVkaXVtUGFnZSgpOwotICAgIFJhbmdlIGFsbG9jYXRlTGFyZ2VSYW5nZShzaXplX3Qp
OwotICAgIFJhbmdlIGFsbG9jYXRlTGFyZ2VSYW5nZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qs
IHNpemVfdCB1bmFsaWduZWRTaXplKTsKKyAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlUmFu
Z2Uoc2l6ZV90KTsKKyAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlUmFuZ2Uoc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7CiAKICAgICB2b2lkIGRlYWxs
b2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBTbWFsbFBhZ2Uq
KTsKICAgICB2b2lkIGRlYWxsb2NhdGVNZWRpdW1QYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+JiwgTWVkaXVtUGFnZSopOwotICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlUmFuZ2Uoc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBSYW5nZSk7CisgICAgdm9pZCBkZWFsbG9jYXRl
TGFyZ2VSYW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jik7
CiAKIHByaXZhdGU6CiAgICAgdm9pZCBncm93KCk7CiAKICAgICBWZWN0b3I8U21hbGxQYWdlKj4g
bV9zbWFsbFBhZ2VzOwogICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4gbV9tZWRpdW1QYWdlczsKLSAg
ICBTZWdyZWdhdGVkRnJlZUxpc3QgbV9sYXJnZVJhbmdlczsKKyAgICBTZWdyZWdhdGVkRnJlZUxp
c3QgbV9sYXJnZU9iamVjdHM7CiAjaWYgQk9TKERBUldJTikKICAgICBab25lIG1fem9uZTsKICNl
bmRpZgpAQCAtODUsMjYgKzg2LDI2IEBAIGlubGluZSBNZWRpdW1QYWdlKiBWTUhlYXA6OmFsbG9j
YXRlTWVkaXUKICAgICByZXR1cm4gbV9tZWRpdW1QYWdlcy5wb3AoKTsKIH0KIAotaW5saW5lIFJh
bmdlIFZNSGVhcDo6YWxsb2NhdGVMYXJnZVJhbmdlKHNpemVfdCBzaXplKQoraW5saW5lIExhcmdl
T2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZVJhbmdlKHNpemVfdCBzaXplKQogewotICAgIFJh
bmdlIHJhbmdlID0gbV9sYXJnZVJhbmdlcy50YWtlKHNpemUpOwotICAgIGlmICghcmFuZ2UpIHsK
KyAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSk7
CisgICAgaWYgKCFsYXJnZU9iamVjdCkgewogICAgICAgICBncm93KCk7Ci0gICAgICAgIHJhbmdl
ID0gbV9sYXJnZVJhbmdlcy50YWtlKHNpemUpOwotICAgICAgICBCQVNTRVJUKHJhbmdlKTsKKyAg
ICAgICAgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOworICAgICAgICBC
QVNTRVJUKGxhcmdlT2JqZWN0KTsKICAgICB9Ci0gICAgcmV0dXJuIHJhbmdlOworICAgIHJldHVy
biBsYXJnZU9iamVjdDsKIH0KIAotaW5saW5lIFJhbmdlIFZNSGVhcDo6YWxsb2NhdGVMYXJnZVJh
bmdlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkK
K2lubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFyZ2VSYW5nZShzaXplX3QgYWxp
Z25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCiB7Ci0gICAgUmFuZ2Ug
cmFuZ2UgPSBtX2xhcmdlUmFuZ2VzLnRha2UoYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXpl
KTsKLSAgICBpZiAoIXJhbmdlKSB7CisgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xh
cmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7CisgICAgaWYg
KCFsYXJnZU9iamVjdCkgewogICAgICAgICBncm93KCk7Ci0gICAgICAgIHJhbmdlID0gbV9sYXJn
ZVJhbmdlcy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgICAgIEJB
U1NFUlQocmFuZ2UpOworICAgICAgICBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uo
YWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKKyAgICAgICAgQkFTU0VSVChsYXJnZU9i
amVjdCk7CiAgICAgfQotICAgIHJldHVybiByYW5nZTsKKyAgICByZXR1cm4gbGFyZ2VPYmplY3Q7
CiB9CiAKIGlubGluZSB2b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgU21hbGxQYWdlKiBwYWdlKQpAQCAtMTI1LDI3ICsx
MjYsMjAgQEAgaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlTWVkaXVtUGFnZQogICAgIG1f
bWVkaXVtUGFnZXMucHVzaChwYWdlKTsKIH0KIAotaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9j
YXRlTGFyZ2VSYW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgUmFuZ2Ug
cmFuZ2UpCitpbmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZVJhbmdlKHN0ZDo6dW5p
cXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QpCiB7
Ci0gICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gTGFyZ2VDaHVuazo6YmVnaW5UYWcocmFuZ2UuYmVn
aW4oKSk7Ci0gICAgRW5kVGFnKiBlbmRUYWcgPSBMYXJnZUNodW5rOjplbmRUYWcocmFuZ2UuYmVn
aW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICAKICAgICAvLyBUZW1wb3JhcmlseSBtYXJrIHRoaXMg
cmFuZ2UgYXMgYWxsb2NhdGVkIHRvIHByZXZlbnQgY2xpZW50cyBmcm9tIG1lcmdpbmcKICAgICAv
LyB3aXRoIGl0IGFuZCB0aGVuIHJlYWxsb2NhdGluZyBpdCB3aGlsZSB3ZSdyZSBtZXNzaW5nIHdp
dGggaXRzIHBoeXNpY2FsIHBhZ2VzLgotICAgIGJlZ2luVGFnLT5zZXRGcmVlKGZhbHNlKTsKLSAg
ICBlbmRUYWctPnNldEZyZWUoZmFsc2UpOworICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFsc2Up
OwogCiAgICAgbG9jay51bmxvY2soKTsKLSAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xv
cHB5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CisgICAgdm1EZWFsbG9jYXRlUGh5c2lj
YWxQYWdlc1Nsb3BweShsYXJnZU9iamVjdC5iZWdpbigpLCBsYXJnZU9iamVjdC5zaXplKCkpOwog
ICAgIGxvY2subG9jaygpOwogCi0gICAgYmVnaW5UYWctPnNldEZyZWUodHJ1ZSk7Ci0gICAgZW5k
VGFnLT5zZXRGcmVlKHRydWUpOwotCi0gICAgYmVnaW5UYWctPnNldEhhc1BoeXNpY2FsUGFnZXMo
ZmFsc2UpOwotICAgIGVuZFRhZy0+c2V0SGFzUGh5c2ljYWxQYWdlcyhmYWxzZSk7CisgICAgbGFy
Z2VPYmplY3Quc2V0RnJlZSh0cnVlKTsKKyAgICBsYXJnZU9iamVjdC5zZXRIYXNQaHlzaWNhbFBh
Z2VzKGZhbHNlKTsKIAotICAgIG1fbGFyZ2VSYW5nZXMuaW5zZXJ0KHJhbmdlKTsKKyAgICBtX2xh
cmdlT2JqZWN0cy5pbnNlcnQobGFyZ2VPYmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFs
bG9jCg==
</data>
<flag name="review"
          id="272187"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>