<?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>102621</bug_id>
          
          <creation_ts>2012-11-18 16:14:33 -0800</creation_ts>
          <short_desc>[BlackBerry] Update Web Notifications Implementation</short_desc>
          <delta_ts>2012-11-22 22:40:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</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="Jeff Rogers">jrogers</reporter>
          <assigned_to name="Jeff Rogers">jrogers</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770217</commentid>
    <comment_count>0</comment_count>
    <who name="Jeff Rogers">jrogers</who>
    <bug_when>2012-11-18 16:14:33 -0800</bug_when>
    <thetext>The web notifications implementation for the Blackberry port needs to be updated to reflect the current client API and internal implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774167</commentid>
    <comment_count>1</comment_count>
      <attachid>175726</attachid>
    <who name="Jeff Rogers">jrogers</who>
    <bug_when>2012-11-22 18:55:25 -0800</bug_when>
    <thetext>Created attachment 175726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774223</commentid>
    <comment_count>2</comment_count>
      <attachid>175726</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-22 22:40:02 -0800</bug_when>
    <thetext>Comment on attachment 175726
Patch

Clearing flags on attachment: 175726

Committed r135559: &lt;http://trac.webkit.org/changeset/135559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774224</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-22 22:40:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175726</attachid>
            <date>2012-11-22 18:55:25 -0800</date>
            <delta_ts>2012-11-22 22:40:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102621-20121122215310.patch</filename>
            <type>text/plain</type>
            <size>42377</size>
            <attacher name="Jeff Rogers">jrogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZmMzkyMzA2YmEwZGNjMGM1
YTM5ZmJkYWQ4MmE5ODYyNjE3OGU1ZDcuLjFiODE3OTE0ZjgxZDVmNWFjMDg1YmYzZGZhMWQ1MTA5
YjM2YWRkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTEtMjIgIEplZmYgUm9n
ZXJzICA8anJvZ2Vyc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBVcGRhdGUgV2Vi
IE5vdGlmaWNhdGlvbnMgSW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjYyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGludGVybmFsbHkgYnkgR2VvcmdlIFN0YWlr
b3MgYW5kIEpvZSBNYXNvbi4KKyAgICAgICAgSW50ZXJuYWwgUFIgMTcyMTIwCisgICAgICAgIEFk
ZCBuZXcgTm90aWZpY2F0aW9uIGZpbGVzIGFuZCByZW1vdmUgb2Jzb2xldGUgb25lcy4KKworICAg
ICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZToKKwogMjAxMi0xMS0yMSAgS2FpIEtvZWhu
ZSAgPGthaS5rb2VobmVAZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gTWluR1c6IERvbid0IGFk
ZCBPcGVuR0wgbGlicmFyeSBkZXBlbmRlbmNpZXMgaGVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKaW5kZXggZWJkNWQ0NjczZWJhMDQ4MTdjN2IyZGU1NWZjYWYyZDkzNzkyZmQyNi4uNTEy
MDUzYzU0MGFiMTA4Nzk3ZGE4MWY2NWZhNjI4MjkwOThmZmE5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTItMTEtMjIgIEplZmYgUm9nZXJzICA8
anJvZ2Vyc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBVcGRhdGUgV2ViIE5vdGlm
aWNhdGlvbnMgSW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMjYyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJldmlld2VkIGludGVybmFsbHkgYnkgR2VvcmdlIFN0YWlrb3MgYW5k
IEpvZSBNYXNvbgorICAgICAgICBJbnRlcm5hbCBQUiAxNzIxMjAKKyAgICAgICAgQWRkIG5ldyBu
b3RpZmljYXRpb25zIGltcGxlbWVudGF0aW9uIGZvciB0aGUgQmxhY2tCZXJyeSBwb3J0LiBSZW5h
bWUKKyAgICAgICAgZXhpc3RpbmcgY2xhc3MgdG8gbWF0Y2ggQ2xpZW50IG5hbWluZy4gQWRkcyBO
b3RpZmljYXRpb25NYW5hZ2VyCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBtYW5hZ2luZyBu
b3RpZmljYXRpb25zIGFuZCBwZXJtaXNzaW9ucywgYW5kIGxvZ2ljCisgICAgICAgIGZvciBwYXNz
aW5nIHRoZSBub3RpZmljYXRpb25zIHRvIHRoZSBwbGF0Zm9ybSBwcm92aWRlci4KKworICAgICAg
ICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFn
ZVByaXZhdGU6OldlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZVByaXZhdGU6OmluaXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlOjp1cGRhdGVOb3RpZmljYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6Om5vdGlmaWNhdGlvbkNsaWNrZWQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpub3RpZmljYXRpb25DbG9z
ZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpub3RpZmljYXRpb25F
cnJvcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6Om5vdGlmaWNhdGlv
blNob3duKToKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAqIEFwaS9XZWJQYWdl
Q2xpZW50Lmg6CisgICAgICAgICogQXBpL1dlYlBhZ2VfcC5oOgorICAgICAgICAoV2ViUGFnZVBy
aXZhdGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6bm90
aWZpY2F0aW9uTWFuYWdlcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9u
Q2xpZW50QmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5OjpOb3RpZmljYXRpb25DbGll
bnRCbGFja0JlcnJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkNsaWVudEJsYWNr
QmVycnk6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uQ2xpZW50QmxhY2tC
ZXJyeTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkNsaWVudEJsYWNr
QmVycnk6OmNsZWFyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRp
b25DbGllbnRCbGFja0JlcnJ5Ojpub3RpZmljYXRpb25PYmplY3REZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeTo6bm90aWZpY2F0aW9uQ29u
dHJvbGxlckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmljYXRpb25DbGllbnRC
bGFja0JlcnJ5OjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOb3RpZmlj
YXRpb25DbGllbnRCbGFja0JlcnJ5OjpjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeTo6Y2hlY2tQZXJtaXNz
aW9uKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25DbGllbnRCbGFja0Jl
cnJ5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeSk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Tm90aWZpY2F0aW9u
TWFuYWdlcjo6Tm90aWZpY2F0aW9uTWFuYWdlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6Ok5vdGlmaWNhdGlvbk1hbmFnZXI6On5Ob3RpZmljYXRpb25NYW5hZ2VyKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6Tm90aWZpY2F0aW9uTWFuYWdlcjo6c2hvdyk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6Ok5vdGlmaWNhdGlvbk1hbmFnZXI6OmNhbmNlbCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Ok5vdGlmaWNhdGlvbk1hbmFnZXI6OmNsZWFyTm90aWZp
Y2F0aW9ucyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Ok5vdGlmaWNhdGlvbk1hbmFn
ZXI6Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6Ok5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6Tm90aWZpY2F0aW9uTWFuYWdlcjo6Y2FuY2VsUmVxdWVzdHNG
b3JQZXJtaXNzaW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Tm90aWZpY2F0aW9u
TWFuYWdlcjo6Y2hlY2tQZXJtaXNzaW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
Tm90aWZpY2F0aW9uTWFuYWdlcjo6dXBkYXRlUGVybWlzc2lvbik6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6Ok5vdGlmaWNhdGlvbk1hbmFnZXI6Om5vdGlmaWNhdGlvbkNsaWNrZWQpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpOb3RpZmljYXRpb25NYW5hZ2VyOjpub3RpZmlj
YXRpb25DbG9zZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpOb3RpZmljYXRpb25N
YW5hZ2VyOjpub3RpZmljYXRpb25FcnJvcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
Ok5vdGlmaWNhdGlvbk1hbmFnZXI6Om5vdGlmaWNhdGlvblNob3duKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6Tm90aWZpY2F0aW9uTWFuYWdlcjo6cmVtb3ZlTm90aWZpY2F0aW9uRnJv
bUNvbnRleHRNYXApOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvTm90aWZpY2F0aW9uTWFuYWdl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChOb3RpZmljYXRpb25NYW5h
Z2VyKToKKwogMjAxMi0xMS0yMSAgR2VuZXZpZXZlIE1hayAgPGdtYWtAcmltLmNvbT4KIAogICAg
ICAgICBbQmxhY2tCZXJyeV0gRHJvcCBTeW5jaHJvbm91cyBNb3VzZSBFdmVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggOTZhZDE1MDIxMGEyZDY5NDA0NDQwYTA3
ZTAzYWMxYWYzNmUyOGI2Ni4uZDUwYjdlMmUyYWQxYjcyZDdjYjY2YzcyMGVmNTNiOTQ3M2MyZDE4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTExNCw3ICsxMTQs
NyBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGJsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvSWNvbkRhdGFiYXNlQ2xpZW50QmxhY2tCZXJyeS5jcHAKICAgICBibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEJsYWNrQmVycnkuY3BwCiAgICAgYmxhY2tiZXJy
eS9XZWJDb3JlU3VwcG9ydC9OZXR3b3JrSW5mb0NsaWVudEJsYWNrQmVycnkuY3BwCi0gICAgYmxh
Y2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcAorICAg
IGJsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeS5j
cHAKICAgICBibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1BhZ2VQb3B1cEJsYWNrQmVycnkuY3Bw
CiAgICAgYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9OYXZpZ2F0b3JDb250ZW50VXRpbHNDbGll
bnRCbGFja0JlcnJ5LmNwcAogICAgIGJsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9w
dXBDbGllbnQuY3BwCkBAIC0xMzIsNiArMTMyLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJD
RVMKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcAogICAgIGJs
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcAogICAgIGJs
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JPdmVybGF5QmxhY2tCZXJyeS5jcHAKKyAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKICAgICBi
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVyUXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L1NlbGVjdGlvbk92ZXJsYXkuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlLmNwcAppbmRleCBiZDM3MmI5NjFjYzMzYzc5ZDcxMDQwNTFjYjAyN2RjZTljYjQwZDFi
Li5hZWNlOTU0MjkwMDUzYjk4YjJiNGFmM2I5NTEzMjg5ZjdkMTZjZDlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAKICNpbmNsdWRl
ICJOYXZpZ2F0b3JDb250ZW50VXRpbHNDbGllbnRCbGFja0JlcnJ5LmgiCiAjZW5kaWYKICNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotI2lu
Y2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRp
b25DbGllbnRCbGFja0JlcnJ5LmgiCiAjZW5kaWYKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGFnZUNhY2hlLmgiCkBAIC00MjksNiArNDI5LDkgQEAgV2ViUGFnZVByaXZhdGU6OldlYlBh
Z2VQcml2YXRlKFdlYlBhZ2UqIHdlYlBhZ2UsIFdlYlBhZ2VDbGllbnQqIGNsaWVudCwgY29uc3Qg
SW4KICAgICAsIG1fYXV0b2ZpbGxNYW5hZ2VyKEF1dG9maWxsTWFuYWdlcjo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV9kb2N1bWVudFN0eWxlUmVjYWxjUG9zdHBvbmVkKGZhbHNlKQogICAgICwgbV9k
b2N1bWVudENoaWxkTmVlZHNTdHlsZVJlY2FsYyhmYWxzZSkKKyNpZiBFTkFCTEUoTk9USUZJQ0FU
SU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgICwgbV9ub3RpZmljYXRp
b25NYW5hZ2VyKHRoaXMpCisjZW5kaWYKIHsKICAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVk
ID0gZmFsc2U7CiAgICAgaWYgKCFpc0luaXRpYWxpemVkKSB7CkBAIC01NjEsNyArNTY0LDcgQEAg
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6aW5pdChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nJiBwYWdlR3JvdXBOYW1lKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykg
fHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIFdlYkNvcmU6OnByb3ZpZGVOb3Rp
ZmljYXRpb24obV9wYWdlLCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjppbnN0YW5jZSgpKTsK
KyAgICBXZWJDb3JlOjpwcm92aWRlTm90aWZpY2F0aW9uKG1fcGFnZSwgbmV3IE5vdGlmaWNhdGlv
bkNsaWVudEJsYWNrQmVycnkodGhpcykpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkFWSUdBVE9S
X0NPTlRFTlRfVVRJTFMpCkBAIC01ODg3LDE2ICs1ODkwLDYgQEAgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyBXZWJQYWdlOjp0ZXh0SGFzQXR0cmlidXRlKGNvbnN0IEJsYWNrQmVycnk6OlBs
YXRmb3IKICAgICByZXR1cm4gIiI7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0QWxsb3dOb3RpZmlj
YXRpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9tYWluLCBib29sIGFs
bG93KQotewotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElG
SUNBVElPTlMpCi0gICAgc3RhdGljX2Nhc3Q8Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCo+KE5v
dGlmaWNhdGlvblByZXNlbnRlckltcGw6Omluc3RhbmNlKCkpLT5vblBlcm1pc3Npb24oZG9tYWlu
LmNfc3RyKCksIGFsbG93KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvbWFpbik7Ci0gICAg
VU5VU0VEX1BBUkFNKGFsbG93KTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlBhZ2U6OnNldEphdmFT
Y3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQogewogICAgIGQtPm1fcGFnZS0+
c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChlbmFibGVkKTsKQEAg
LTYxNjAsNSArNjE1Myw1MSBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpkaWRDb21wb3NpdGUoKQog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ29tcG9zaXRlKG1fcGFnZSk7CiB9CiAK
K3ZvaWQgV2ViUGFnZTo6dXBkYXRlTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiByZXF1ZXN0SWQsIGJvb2wgYWxsb3dlZCkKK3sKKyNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAg
IGQtPm5vdGlmaWNhdGlvbk1hbmFnZXIoKS51cGRhdGVQZXJtaXNzaW9uKHJlcXVlc3RJZCwgYWxs
b3dlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0SWQpOworICAgIFVOVVNFRF9Q
QVJBTShhbGxvd2VkKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2U6Om5vdGlmaWNhdGlvbkNs
aWNrZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbm90aWZpY2F0aW9uSWQp
Cit7CisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FU
SU9OUykKKyAgICBkLT5ub3RpZmljYXRpb25NYW5hZ2VyKCkubm90aWZpY2F0aW9uQ2xpY2tlZChu
b3RpZmljYXRpb25JZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShub3RpZmljYXRpb25JZCk7
CisjZW5kaWYKK30KKwordm9pZCBXZWJQYWdlOjpub3RpZmljYXRpb25DbG9zZWQoY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgbm90aWZpY2F0aW9uSWQpCit7CisjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAgICBkLT5u
b3RpZmljYXRpb25NYW5hZ2VyKCkubm90aWZpY2F0aW9uQ2xvc2VkKG5vdGlmaWNhdGlvbklkKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbklkKTsKKyNlbmRpZgorfQorCit2
b2lkIFdlYlBhZ2U6Om5vdGlmaWNhdGlvbkVycm9yKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIG5vdGlmaWNhdGlvbklkKQoreworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8
fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgZC0+bm90aWZpY2F0aW9uTWFuYWdl
cigpLm5vdGlmaWNhdGlvbkVycm9yKG5vdGlmaWNhdGlvbklkKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKG5vdGlmaWNhdGlvbklkKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2U6Om5vdGlm
aWNhdGlvblNob3duKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG5vdGlmaWNh
dGlvbklkKQoreworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05P
VElGSUNBVElPTlMpCisgICAgZC0+bm90aWZpY2F0aW9uTWFuYWdlcigpLm5vdGlmaWNhdGlvblNo
b3duKG5vdGlmaWNhdGlvbklkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlv
bklkKTsKKyNlbmRpZgorfQorCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZS5oCmluZGV4IDJmZTU2Y2EzMTRiMTM0ODU2YzA3N2UwMzQ1YzIyODA0ZmZkZmMzYWQuLmZjNzVi
MGY5YWY2NDg1MGM5MTJkNWI3MGNmZjFkYTFjNDRjOWJkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViUGFnZS5oCkBAIC0yNjgsOCArMjY4LDYgQEAgcHVibGljOgogCiAgICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyB0ZXh0SGFzQXR0cmlidXRlKGNvbnN0IEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpTdHJpbmcmIHF1ZXJ5KSBjb25zdDsKIAotICAgIHZvaWQgc2V0QWxsb3dO
b3RpZmljYXRpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9tYWluLCBi
b29sIGFsbG93KTsKLQogICAgIFBsYXRmb3JtOjpXZWJDb250ZXh0IHdlYkNvbnRleHQoVGFyZ2V0
RGV0ZWN0aW9uU3RyYXRlZ3kpIGNvbnN0OwogCiAgICAgdHlwZWRlZiBpbnRwdHJfdCBCYWNrRm9y
d2FyZElkOwpAQCAtMzY2LDYgKzM2NCwxMiBAQCBwdWJsaWM6CiAKICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nIHJlbmRlclRyZWVBc1RleHQoKTsKIAorICAgIHZvaWQgdXBkYXRlTm90
aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBy
ZXF1ZXN0SWQsIGJvb2wgYWxsb3dlZCk7CisgICAgdm9pZCBub3RpZmljYXRpb25DbGlja2VkKGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIG5vdGlmaWNhdGlvbklkKTsKKyAgICB2
b2lkIG5vdGlmaWNhdGlvbkNsb3NlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
JiBub3RpZmljYXRpb25JZCk7CisgICAgdm9pZCBub3RpZmljYXRpb25FcnJvcihjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBub3RpZmljYXRpb25JZCk7CisgICAgdm9pZCBub3Rp
ZmljYXRpb25TaG93bihjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBub3RpZmlj
YXRpb25JZCk7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB+V2ViUGFnZSgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNsaWVudC5oCmluZGV4IDY5MDM1YmExZjA5
OThkNGExOWVhNWRjMjY0Njk1OTdkNjE1MmIxMGQuLjI2ZGRmMDkxOGRmYTdhMjlmYmFlNzExMDY5
MDY5NGUzYmM4NWYxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZUNsaWVudC5oCkBAIC0yNjcsNiArMjY3LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdFVzZXJNZWRpYShjb25zdCBQbGF0Zm9ybTo6V2ViVXNlck1lZGlhUmVxdWVzdCYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsVXNlck1lZGlhUmVxdWVzdChjb25zdCBQbGF0Zm9y
bTo6V2ViVXNlck1lZGlhUmVxdWVzdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlu
ZFN0cmluZ1Jlc3VsdChpbnQgbnVtTWF0Y2hlcywgaW50IGN1cnJlbnRJbmRleCkgPSAwOworCisg
ICAgLy8gTWF0Y2ggd2l0aCBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24uCisgICAgZW51
bSBQZXJtaXNzaW9uIHsKKyAgICAgICAgUGVybWlzc2lvbkFsbG93ZWQsIC8vIFVzZXIgaGFzIGFs
bG93ZWQgbm90aWZpY2F0aW9ucworICAgICAgICBQZXJtaXNzaW9uTm90QWxsb3dlZCwgLy8gVXNl
ciBoYXMgbm90IHlldCBhbGxvd2VkCisgICAgICAgIFBlcm1pc3Npb25EZW5pZWQgLy8gVXNlciBo
YXMgZXhwbGljaXRseSBkZW5pZWQgcGVybWlzc2lvbgorICAgIH07CisgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTdHJpbmcmIC8qcmVxdWVzdElkKi8sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIC8qb3JpZ2luKi8pID0gMDsKKyAgICB2aXJ0dWFsIFBlcm1pc3Npb24gY2hlY2tOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIC8qb3Jp
Z2luKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd05vdGlmaWNhdGlvbihjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiAvKm5vdGlmaWNhdGlvbklkKi8sIGNvbnN0IEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIC8qdGl0bGUqLywgY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgLypib2R5Ki8sIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJp
bmcmIC8qaWNvblVybCovLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiAvKnRh
ZyovLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiAvKm9yaWdpbiovKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbE5vdGlmaWNhdGlvbihjb25zdCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6U3RyaW5nJiAvKmlkKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJOb3Rp
ZmljYXRpb25zKGNvbnN0IHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+
JiAvKm5vdGlmaWNhdGlvbklkcyovKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlv
bkRlc3Ryb3llZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiAvKm5vdGlmaWNh
dGlvbklkKi8pID0gMDsKIH07CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIH0gLy8gbmFtZXNwYWNl
IEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
UGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCmluZGV4
IDljMGEyNmRjYjhjOTVlZjI4NTI2MTljMGVmMzBjOWZmMmU4YWViNTUuLjEwYTIwOWUzMzJiN2M3
YzI0ZmJkYWE1YTcxNzA0MDEwMTg2NTgxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9XZWJQYWdlX3AuaApAQCAtMzEsNiArMzEsOSBAQAogI2luY2x1ZGUgPEVHTC9lZ2wuaD4KICNl
bmRpZgogI2luY2x1ZGUgIktVUkwuaCIKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5B
QkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbk1hbmFnZXIu
aCIKKyNlbmRpZgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCbGFja0JlcnJ5LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgpAQCAt
NDYxLDYgKzQ2NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsQ29tcG9zaXRlKCk7CiAgICAg
dm9pZCBkaWRDb21wb3NpdGUoKTsKIAorI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFC
TEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAgTm90aWZpY2F0aW9uTWFuYWdlciYgbm90aWZp
Y2F0aW9uTWFuYWdlcigpIHsgcmV0dXJuIG1fbm90aWZpY2F0aW9uTWFuYWdlcjsgfTsKKyNlbmRp
ZgorCiAgICAgV2ViUGFnZSogbV93ZWJQYWdlOwogICAgIFdlYlBhZ2VDbGllbnQqIG1fY2xpZW50
OwogICAgIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudEJsYWNrQmVycnkqIG1faW5zcGVjdG9yQ2xp
ZW50OwpAQCAtNjM1LDYgKzY0MiwxMSBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpJbnRQb2lu
dCBtX2NhY2hlZEhpdFRlc3RDb250ZW50UG9zOwogICAgIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQg
bV9jYWNoZWRIaXRUZXN0UmVzdWx0OworCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVO
QUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAgICBOb3RpZmljYXRpb25NYW5hZ2VyIG1fbm90
aWZpY2F0aW9uTWFuYWdlcjsKKyNlbmRpZgorCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+V2Vi
UGFnZVByaXZhdGUoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tC
ZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzc4MDYwOWVmZDJhOTFlZTQzN2E0Mzg0NjJmYzYwZGJjNjA1
MDY2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3Jl
U3VwcG9ydC9Ob3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5LmgiCisKKyNpZiBF
TkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorI2lu
Y2x1ZGUgIk5vdGlmaWNhdGlvbi5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25D
YWxsYmFjay5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJWb2lkQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5OjpOb3RpZmljYXRpb25DbGllbnRC
bGFja0JlcnJ5KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2
YXRlKQorICAgIDogbV93ZWJQYWdlUHJpdmF0ZSh3ZWJQYWdlUHJpdmF0ZSkKK3sKK30KKworYm9v
bCBOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZp
Y2F0aW9uKQoreworICAgIG1fd2ViUGFnZVByaXZhdGUtPm5vdGlmaWNhdGlvbk1hbmFnZXIoKS5z
aG93KG5vdGlmaWNhdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTm90aWZpY2F0
aW9uQ2xpZW50QmxhY2tCZXJyeTo6Y2FuY2VsKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQor
eworICAgIG1fd2ViUGFnZVByaXZhdGUtPm5vdGlmaWNhdGlvbk1hbmFnZXIoKS5jYW5jZWwobm90
aWZpY2F0aW9uKTsKK30KKworCit2b2lkIE5vdGlmaWNhdGlvbkNsaWVudEJsYWNrQmVycnk6OmNs
ZWFyTm90aWZpY2F0aW9ucyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAg
IG1fd2ViUGFnZVByaXZhdGUtPm5vdGlmaWNhdGlvbk1hbmFnZXIoKS5jbGVhck5vdGlmaWNhdGlv
bnMoY29udGV4dCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeTo6bm90
aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQorewor
ICAgIG1fd2ViUGFnZVByaXZhdGUtPm5vdGlmaWNhdGlvbk1hbmFnZXIoKS5ub3RpZmljYXRpb25P
YmplY3REZXN0cm95ZWQobm90aWZpY2F0aW9uKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25DbGll
bnRCbGFja0JlcnJ5Ojpub3RpZmljYXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkKK3sKKyAgICBk
ZWxldGUgdGhpczsKK30KKwordm9pZCBOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5OjpyZXF1
ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bm90aWZp
Y2F0aW9uTWFuYWdlcigpLnJlcXVlc3RQZXJtaXNzaW9uKGNvbnRleHQsIGNhbGxiYWNrKTsKK30K
Kwordm9pZCBOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5OjpyZXF1ZXN0UGVybWlzc2lvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvblBl
cm1pc3Npb25DYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bm90
aWZpY2F0aW9uTWFuYWdlcigpLnJlcXVlc3RQZXJtaXNzaW9uKGNvbnRleHQsIGNhbGxiYWNrKTsK
K30KKwordm9pZCBOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5OjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX3dl
YlBhZ2VQcml2YXRlLT5ub3RpZmljYXRpb25NYW5hZ2VyKCkuY2FuY2VsUmVxdWVzdHNGb3JQZXJt
aXNzaW9uKGNvbnRleHQpOworfQorCitOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24gTm90
aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeTo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPm5vdGlm
aWNhdGlvbk1hbmFnZXIoKS5jaGVja1Blcm1pc3Npb24oY29udGV4dCk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElP
TlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvbkNsaWVudEJsYWNrQmVycnkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYjQ0OTVkMjc1MzgyYzUzYjY5YTk1YTIwNTBiNzRlZmE0M2VlMWEwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlv
bkNsaWVudEJsYWNrQmVycnkuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJy
eV9oCisjZGVmaW5lIE5vdGlmaWNhdGlvbkNsaWVudEJsYWNrQmVycnlfaAorCisjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyNpbmNsdWRl
ICJOb3RpZmljYXRpb25DbGllbnQuaCIKKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNw
YWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKK30KK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBOb3RpZmljYXRpb25DbGllbnRCbGFja0JlcnJ5IDogcHVibGljIE5v
dGlmaWNhdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tC
ZXJyeShCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlKik7CisKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdyhOb3RpZmljYXRpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKE5vdGlm
aWNhdGlvbiopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRpb25PYmplY3REZXN0
cm95ZWQoTm90aWZpY2F0aW9uKik7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvbkNvbnRy
b2xsZXJEZXN0cm95ZWQoKTsKKyNpZiBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4pOworI2VuZGlmCisjaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjaz4pOworI2Vu
ZGlmCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0Kik7CisgICAgdmlydHVhbCBQZXJtaXNzaW9uIGNoZWNrUGVybWlzc2lv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKK3ByaXZhdGU6CisgICAgQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlUHJpdmF0ZTsKK307CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElP
TlMpCisjZW5kaWYgLy8gTm90aWZpY2F0aW9uQ2xpZW50QmxhY2tCZXJyeV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvTm90aWZpY2F0aW9uUHJl
c2VudGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg3MjVkOTM4ZTg0NzQyMTFkMmM4NTQyMGJlNjg4NTEwZDVjMjE1OTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNl
bnRlckltcGwuaCIKLQotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZ
X05PVElGSUNBVElPTlMpCi0jaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8RXZlbnQuaD4KLSNpbmNsdWRlIDxOb3RpZmljYXRpb24uaD4KLSNpbmNsdWRlIDxO
b3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5Lmg+Ci0jaW5jbHVkZSA8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oPgotI2luY2x1ZGUgPFVVSUQuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLU5vdGlmaWNhdGlvbkNsaWVudCogTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6aW5zdGFu
Y2UoKQotewotICAgIHN0YXRpYyBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKiBzX2luc3RhbmNl
ID0gMDsKLSAgICBpZiAoIXNfaW5zdGFuY2UpCi0gICAgICAgIHNfaW5zdGFuY2UgPSBuZXcgTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDsKLSAgICByZXR1cm4gc19pbnN0YW5jZTsKLX0KLQotTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCi17Ci0g
ICAgbV9wbGF0Zm9ybVByZXNlbnRlciA9IGFkb3B0UHRyKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpO
b3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0JlcnJ5OjpjcmVhdGUodGhpcykpOwotfQotCi1Ob3Rp
ZmljYXRpb25QcmVzZW50ZXJJbXBsOjp+Tm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCi17Ci19
Ci0KLWJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6c2hvdyhOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbikKLXsKLSAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKLSAgICBBU1NFUlQobm90
aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIFJlZlB0cjxOb3RpZmlj
YXRpb24+IG4gPSBub3RpZmljYXRpb247Ci0gICAgaWYgKG1fbm90aWZpY2F0aW9ucy5jb250YWlu
cyhuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNoZWNrUGVybWlzc2lvbihu
b3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgIT0gTm90aWZpY2F0aW9uQ2xp
ZW50OjpQZXJtaXNzaW9uQWxsb3dlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3Ry
aW5nIHV1aWQgPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgbV9ub3RpZmljYXRp
b25zLmFkZChuLCB1dWlkKTsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAobi0+aXNIVE1M
KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IExvYWQgYW5kIGRpc3BsYXkgSFRNTCBjb250ZW50Lgot
ICAgICAgICBtZXNzYWdlID0gbi0+dXJsKCkuc3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gRklYTUU6IFN0cmlwIHRoZSBjb250ZW50IGludG8gb25lIGxpbmUuCi0gICAgICAgIG1l
c3NhZ2UgPSBuLT5jb250ZW50cygpLnRpdGxlICsgIjogIiArIG4tPmNvbnRlbnRzKCkuYm9keTsK
LSAgICB9Ci0KLSAgICBtX3BsYXRmb3JtUHJlc2VudGVyLT5zaG93KHV1aWQsIG1lc3NhZ2UpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNh
bmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKLXsKLSAgICBBU1NFUlQobm90aWZpY2F0
aW9uKTsKLSAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBuID0gbm90aWZpY2F0aW9uOwotCi0gICAg
Tm90aWZpY2F0aW9uTWFwOjppdGVyYXRvciBpdCA9IG1fbm90aWZpY2F0aW9ucy5maW5kKG4pOwot
ICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGxhdGZvcm1QcmVzZW50ZXItPmNhbmNlbChpdC0+dmFsdWUpOwotICAgIG1fbm90aWZp
Y2F0aW9ucy5yZW1vdmUoaXQpOwotfQotCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6
Om5vdGlmaWNhdGlvbk9iamVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikK
LXsKLSAgICBBU1NFUlQobm90aWZpY2F0aW9uKTsKLSAgICBjYW5jZWwobm90aWZpY2F0aW9uKTsK
LX0KLQotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpub3RpZmljYXRpb25Db250cm9s
bGVyRGVzdHJveWVkKCkKLXsKLX0KLQotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpy
ZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAg
IG1fcGVybWlzc2lvblJlcXVlc3RzLmFkZChjb250ZXh0LCBjYWxsYmFjayk7Ci0gICAgbV9wbGF0
Zm9ybVByZXNlbnRlci0+cmVxdWVzdFBlcm1pc3Npb24oY29udGV4dC0+dXJsKCkuaG9zdCgpKTsK
LX0KLQotdm9pZCBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsOjpvblBlcm1pc3Npb24oY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgZG9tYWluLCBib29sIGlzQWxsb3dlZCkKLXsK
LSAgICBBU1NFUlQoIWRvbWFpbi5lbXB0eSgpKTsKLSAgICBQZXJtaXNzaW9uUmVxdWVzdE1hcDo6
aXRlcmF0b3IgaXQgPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5iZWdpbigpOwotICAgIGZvciAoOyBp
dCAhPSBtX3Blcm1pc3Npb25SZXF1ZXN0cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PmtleS0+dXJsKCkuaG9zdCgpICE9IGRvbWFpbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGlmIChpc0FsbG93ZWQpIHsKLSAgICAgICAgICAgIG1fYWxsb3dlZERvbWFpbnMuYWRk
KGRvbWFpbik7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmhhbmRsZUV2ZW50KCk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbV9hbGxvd2VkRG9tYWlucy5yZW1vdmUoZG9tYWluKTsKLQot
ICAgICAgICBtX3Blcm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUoaXQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotfQotCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6OmNhbmNlbFJlcXVl
c3RzRm9yUGVybWlzc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KikKLXsKLSAgICAvLyBCZWNh
dXNlIHdlIGFyZSB1c2luZyBtb2RhbCBkaWFsb2dzIHRvIHJlcXVlc3QgcGVybWlzc2lvbiwgaXQn
cyBpbXBvc3NpYmxlIHRvIGNhbmNlbCB0aGVtLgotfQotCi1Ob3RpZmljYXRpb25DbGllbnQ6OlBl
cm1pc3Npb24gTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbDo6Y2hlY2tQZXJtaXNzaW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAg
IC8vIEZJWE1FOiBTaG91bGQgc3RvcmUgdGhlIHBlcm1pc3Npb24gaW5mb3JtYXRpb24gaW50byBm
aWxlIHBlcm1hbmVudGx5IGluc3RlYWQgb2YgaW4gbV9hbGxvd2VkRG9tYWlucy4KLSAgICAvLyBU
aGUgc3VnZ2VzdGVkIHBsYWNlIHRvIGRvIHRoaXMgaXMgaW4gbV9wbGF0Zm9ybVByZXNlbnRlci0+
Y2hlY2tQZXJtaXNzaW9uKCkuCi0gICAgaWYgKG1fYWxsb3dlZERvbWFpbnMuY29udGFpbnMoY29u
dGV4dC0+dXJsKCkuaG9zdCgpKSkKLSAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6
UGVybWlzc2lvbkFsbG93ZWQ7Ci0gICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlz
c2lvbk5vdEFsbG93ZWQ7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHBsYXRm
b3JtIHNpZGUuCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlckltcGw6Om5vdGlmaWNhdGlvbkNs
aWNrZWQoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgaWQpCi17Ci0gICAgQVNT
RVJUKCFpZC5lbXB0eSgpKTsKLSAgICBOb3RpZmljYXRpb25NYXA6Oml0ZXJhdG9yIGl0ID0gbV9u
b3RpZmljYXRpb25zLmJlZ2luKCk7Ci0gICAgZm9yICg7IGl0ICE9IG1fbm90aWZpY2F0aW9ucy5l
bmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlID09IGlkICYmIGl0LT5rZXktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vdGlmaWNhdGlv
bj4gbm90aWZpY2F0aW9uID0gaXQtPmtleTsKLSAgICAgICAgICAgIGl0LT5rZXktPmRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZmFsc2UsIHRydWUp
KTsKLSAgICAgICAgICAgIG1fbm90aWZpY2F0aW9ucy5yZW1vdmUobm90aWZpY2F0aW9uKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FD
WV9OT1RJRklDQVRJT05TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNWU1MjA0ZGFhNzk2NGFhY2Q4ZmRmYTYzNzcz
MzYzOGMyYzBjMTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBOb3RpZmljYXRpb25QcmVzZW50
ZXJJbXBsX2gKLSNkZWZpbmUgTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbF9oCi0KLSNpZiBFTkFC
TEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotI2luY2x1
ZGUgPE5vdGlmaWNhdGlvbkFja0xpc3RlbmVyLmg+Ci0jaW5jbHVkZSA8Tm90aWZpY2F0aW9uQ2xp
ZW50Lmg+Ci0jaW5jbHVkZSA8Tm90aWZpY2F0aW9uUHJlc2VudGVyQmxhY2tCZXJyeS5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1l
c3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgUGxhdGZvcm0gewotY2xhc3MgU3RyaW5nOwot
fQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRl
ckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Tm90aWZpY2F0aW9uQ2xpZW50LCBwdWJsaWMgQmxhY2tC
ZXJyeTo6UGxhdGZvcm06Ok5vdGlmaWNhdGlvbkFja0xpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgTm90aWZpY2F0aW9uQ2xpZW50KiBpbnN0YW5jZSgpOwotICAgIHZpcnR1YWwgfk5vdGlm
aWNhdGlvblByZXNlbnRlckltcGwoKTsKLQotICAgIC8vIFJlcXVlc3RzIHRoYXQgYSBub3RpZmlj
YXRpb24gYmUgc2hvd24uCi0gICAgdmlydHVhbCBib29sIHNob3coV2ViQ29yZTo6Tm90aWZpY2F0
aW9uKik7Ci0KLSAgICAvLyBSZXF1ZXN0cyB0aGF0IGEgbm90aWZpY2F0aW9uIHRoYXQgaGFzIGFs
cmVhZHkgYmVlbiBzaG93biBiZSBjYW5jZWxlZC4KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKFdl
YkNvcmU6Ok5vdGlmaWNhdGlvbiopOwotCi0gICAgLy8gSW5mb3JtcyB0aGUgcHJlc2VudGVyIHRo
YXQgYSBXZWJDb3JlOjpOb3RpZmljYXRpb24gb2JqZWN0IGhhcyBiZWVuIGRlc3Ryb3llZAotICAg
IC8vIChzdWNoIGFzIGJ5IGEgcGFnZSB0cmFuc2l0aW9uKS4gVGhlIHByZXNlbnRlciBtYXkgY29u
dGludWUgc2hvd2luZwotICAgIC8vIHRoZSBub3RpZmljYXRpb24sIGJ1dCBtdXN0IG5vdCBhdHRl
bXB0IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXJzLgotICAgIHZpcnR1YWwgdm9pZCBub3RpZmlj
YXRpb25PYmplY3REZXN0cm95ZWQoV2ViQ29yZTo6Tm90aWZpY2F0aW9uKik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbm90aWZpY2F0aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpOwotCi0gICAgLy8gUmVx
dWVzdHMgdXNlciBwZXJtaXNzaW9uIHRvIHNob3cgZGVza3RvcCBub3RpZmljYXRpb25zIGZyb20g
YSBwYXJ0aWN1bGFyCi0gICAgLy8gc2NyaXB0IGNvbnRleHQuIFRoZSBjYWxsYmFjayBwYXJhbWV0
ZXIgc2hvdWxkIGJlIHJ1biB3aGVuIHRoZSB1c2VyIGhhcwotICAgIC8vIG1hZGUgYSBkZWNpc2lv
bi4KLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V2ViQ29yZTo6Vm9pZENhbGxiYWNrPik7Ci0KLSAg
ICAvLyBDYW5jZWwgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzIGZvciB0aGUgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC4KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9u
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQotICAgIC8vIENoZWNrcyB0aGUg
Y3VycmVudCBsZXZlbCBvZiBwZXJtaXNzaW9uLgotICAgIHZpcnR1YWwgUGVybWlzc2lvbiBjaGVj
a1Blcm1pc3Npb24oV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0gICAgLy8g
SW50ZXJmYWNlcyBpbmhlcml0ZWQgZnJvbSBOb3RpZmljYXRpb25BY2tMaXN0ZW5lci4KLSAgICB2
aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6U3RyaW5nJiBpZCk7Ci0gICAgdmlydHVhbCB2b2lkIG9uUGVybWlzc2lvbihjb25zdCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBkb21haW4sIGJvb2wgaXNBbGxvd2VkKTsKLQotcHJp
dmF0ZToKLSAgICBOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsKCk7Ci0KLXByaXZhdGU6Ci0gICAg
T3duUHRyPEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOb3RpZmljYXRpb25QcmVzZW50ZXJCbGFja0Jl
cnJ5PiBtX3BsYXRmb3JtUHJlc2VudGVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxX
ZWJDb3JlOjpOb3RpZmljYXRpb24+LCBTdHJpbmc+IE5vdGlmaWNhdGlvbk1hcDsKLSAgICBOb3Rp
ZmljYXRpb25NYXAgbV9ub3RpZmljYXRpb25zOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiwgUmVmUHRyPFdlYkNvcmU6OlZvaWRD
YWxsYmFjaz4gPiBQZXJtaXNzaW9uUmVxdWVzdE1hcDsKLSAgICBQZXJtaXNzaW9uUmVxdWVzdE1h
cCBtX3Blcm1pc3Npb25SZXF1ZXN0czsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FsbG93ZWRE
b21haW5zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
Tk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotI2VuZGlmIC8v
IE5vdGlmaWNhdGlvblByZXNlbnRlckltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvTm90aWZpY2F0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ob3RpZmljYXRpb25NYW5hZ2VyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wOThkNGQzNDNjNTI2Njk2YzFmZmZhYjY1ZTY1MzBjY2Y0NmE5MTY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvTm90
aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTm90aWZpY2F0
aW9uTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdB
Q1lfTk9USUZJQ0FUSU9OUykKKyNpbmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSAiVXNlckdlc3R1
cmVJbmRpY2F0b3IuaCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKworI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybVN0cmluZy5oPgorCisjaW5jbHVkZSA8dmVjdG9yPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktp
dCB7CisKK05vdGlmaWNhdGlvbk1hbmFnZXI6Ok5vdGlmaWNhdGlvbk1hbmFnZXIoV2ViUGFnZVBy
aXZhdGUqIHdlYlBhZ2VQcml2YXRlKQorICAgIDogbV93ZWJQYWdlUHJpdmF0ZSh3ZWJQYWdlUHJp
dmF0ZSkKK3sKK30KKworTm90aWZpY2F0aW9uTWFuYWdlcjo6fk5vdGlmaWNhdGlvbk1hbmFnZXIo
KQoreworfQorCitib29sIE5vdGlmaWNhdGlvbk1hbmFnZXI6OnNob3coTm90aWZpY2F0aW9uKiBu
b3RpZmljYXRpb24pCit7CisgICAgU3RyaW5nIG5vdGlmaWNhdGlvbklEID0gY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpOworICAgIG1fbm90aWZpY2F0aW9uTWFwLnNldChub3RpZmljYXRpb24s
IG5vdGlmaWNhdGlvbklEKTsKKyAgICBtX25vdGlmaWNhdGlvbklETWFwLnNldChub3RpZmljYXRp
b25JRCwgbm90aWZpY2F0aW9uKTsKKworICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmFkZChub3RpZmljYXRpb24tPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgVmVjdG9yPFN0cmluZz4oKSkuaXRlcmF0b3I7CisgICAgaXQt
PnNlY29uZC5hcHBlbmQobm90aWZpY2F0aW9uSUQpOworCisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+
Y2xpZW50KCktPnNob3dOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSUQsIG5vdGlmaWNhdGlvbi0+
dGl0bGUoKSwgbm90aWZpY2F0aW9uLT5ib2R5KCksIG5vdGlmaWNhdGlvbi0+aWNvblVSTCgpLnN0
cmluZygpLCBub3RpZmljYXRpb24tPnRhZygpLCBub3RpZmljYXRpb24tPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uTWFuYWdlcjo6Y2FuY2VsKE5vdGlmaWNhdGlvbiog
bm90aWZpY2F0aW9uKQoreworICAgIFN0cmluZyBub3RpZmljYXRpb25JRCA9IG1fbm90aWZpY2F0
aW9uTWFwLmdldChub3RpZmljYXRpb24pOworICAgIGlmICghbm90aWZpY2F0aW9uSUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fd2ViUGFnZVByaXZhdGUtPmNsaWVudCgpLT5jYW5jZWxOb3Rp
ZmljYXRpb24obm90aWZpY2F0aW9uSUQpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbk1hbmFnZXI6
OmNsZWFyTm90aWZpY2F0aW9ucyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorewor
ICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub3RpZmljYXRpb25D
b250ZXh0TWFwLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29u
dGV4dE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmluZz4mIG5v
dGlmaWNhdGlvbklEcyA9IGl0LT5zZWNvbmQ7CisgICAgc3RkOjp2ZWN0b3I8QmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZz4gaWRzOworICAgIHNpemVfdCBjb3VudCA9IG5vdGlmaWNhdGlvbklE
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgIGlkcy5wdXNoX2JhY2sobm90aWZpY2F0aW9uSURzW2ldKTsKKyAgICAgICAgUmVmUHRyPE5v
dGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gbV9ub3RpZmljYXRpb25JRE1hcC50YWtlKG5vdGlm
aWNhdGlvbklEc1tpXSk7CisgICAgICAgIGlmICghbm90aWZpY2F0aW9uKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgbm90aWZpY2F0aW9uLT5maW5hbGl6ZSgpOworICAgICAgICBt
X25vdGlmaWNhdGlvbk1hcC5yZW1vdmUobm90aWZpY2F0aW9uKTsKKyAgICB9CisKKyAgICBtX3dl
YlBhZ2VQcml2YXRlLT5jbGllbnQoKS0+Y2xlYXJOb3RpZmljYXRpb25zKGlkcyk7CisgICAgbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9u
TWFuYWdlcjo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90aWZp
Y2F0aW9uKQoreworICAgIFN0cmluZyBub3RpZmljYXRpb25JRCA9IG1fbm90aWZpY2F0aW9uTWFw
LnRha2Uobm90aWZpY2F0aW9uKTsKKyAgICBpZiAoIW5vdGlmaWNhdGlvbklEKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX25vdGlmaWNhdGlvbklETWFwLnJlbW92ZShub3RpZmljYXRpb25JRCk7
CisgICAgcmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAobm90aWZpY2F0aW9uSUQsIG5v
dGlmaWNhdGlvbik7CisgICAgbV93ZWJQYWdlUHJpdmF0ZS0+Y2xpZW50KCktPm5vdGlmaWNhdGlv
bkRlc3Ryb3llZChub3RpZmljYXRpb25JRCk7Cit9CisKKyNpZiBFTkFCTEUoTEVHQUNZX05PVElG
SUNBVElPTlMpCit2b2lkIE5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlcXVlc3RQZXJtaXNzaW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBj
YWxsYmFjaykKK3sKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKTsKKyAgICBTdHJpbmcgcmVxdWVzdElEID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0
cmluZygpOworICAgIG1fb3JpZ2luVG9JRE1hcC5zZXQob3JpZ2luLCByZXF1ZXN0SUQpOworICAg
IG1faWRUb09yaWdpbk1hcC5zZXQocmVxdWVzdElELCBvcmlnaW4pOworICAgIG1faWRUb1ZvaWRD
YWxsYmFja01hcC5zZXQocmVxdWVzdElELCBjYWxsYmFjayk7CisgICAgbV93ZWJQYWdlUHJpdmF0
ZS0+Y2xpZW50KCktPnJlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uKHJlcXVlc3RJRCwgb3Jp
Z2luLT50b1N0cmluZygpKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMp
Cit2b2lkIE5vdGlmaWNhdGlvbk1hbmFnZXI6OnJlcXVlc3RQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8Tm90aWZpY2F0aW9uUGVybWlzc2lvbkNh
bGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBTdHJpbmcgcmVxdWVzdElEID0gY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpOworICAgIG1fb3JpZ2luVG9JRE1hcC5zZXQob3JpZ2luLCByZXF1ZXN0
SUQpOworICAgIG1faWRUb09yaWdpbk1hcC5zZXQocmVxdWVzdElELCBvcmlnaW4pOworICAgIG1f
aWRUb0NhbGxiYWNrTWFwLnNldChyZXF1ZXN0SUQsIGNhbGxiYWNrKTsKKyAgICBtX3dlYlBhZ2VQ
cml2YXRlLT5jbGllbnQoKS0+cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb24ocmVxdWVzdElE
LCBvcmlnaW4tPnRvU3RyaW5nKCkpOworfQorI2VuZGlmCisKK3ZvaWQgTm90aWZpY2F0aW9uTWFu
YWdlcjo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGNvbnRleHQtPnNlY3Vy
aXR5T3JpZ2luKCk7CisgICAgU3RyaW5nIHJlcXVlc3RJRCA9IG1fb3JpZ2luVG9JRE1hcC50YWtl
KG9yaWdpbik7CisgICAgaWYgKCFyZXF1ZXN0SUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aWRUb09yaWdpbk1hcC5yZW1vdmUocmVxdWVzdElEKTsKKyNpZiBFTkFCTEUoTEVHQUNZX05PVElG
SUNBVElPTlMpCisgICAgbV9pZFRvVm9pZENhbGxiYWNrTWFwLnJlbW92ZShyZXF1ZXN0SUQpOwor
I2VuZGlmCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgbV9pZFRvQ2FsbGJhY2tNYXAu
cmVtb3ZlKHJlcXVlc3RJRCk7CisjZW5kaWYKK30KKworTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJt
aXNzaW9uIE5vdGlmaWNhdGlvbk1hbmFnZXI6OmNoZWNrUGVybWlzc2lvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOb3RpZmljYXRp
b25DbGllbnQ6OlBlcm1pc3Npb24+KG1fd2ViUGFnZVByaXZhdGUtPmNsaWVudCgpLT5jaGVja05v
dGlmaWNhdGlvblBlcm1pc3Npb24oY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmco
KSkpOworfQorCit2b2lkIE5vdGlmaWNhdGlvbk1hbmFnZXI6OnVwZGF0ZVBlcm1pc3Npb24oY29u
c3QgU3RyaW5nJiByZXF1ZXN0SUQsIGJvb2wgYWxsb3dlZCkKK3sKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IG1faWRUb09yaWdpbk1hcC50YWtlKHJlcXVlc3RJ
RCk7CisgICAgbV9vcmlnaW5Ub0lETWFwLnJlbW92ZShvcmlnaW4pOworCisjaWYgRU5BQkxFKExF
R0FDWV9OT1RJRklDQVRJT05TKQorICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHZvaWRDYWxsYmFj
ayA9IG1faWRUb1ZvaWRDYWxsYmFja01hcC50YWtlKHJlcXVlc3RJRCk7CisgICAgaWYgKHZvaWRD
YWxsYmFjaykgeworICAgICAgICB2b2lkQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQorICAg
IFJlZlB0cjxOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9pZFRv
Q2FsbGJhY2tNYXAudGFrZShyZXF1ZXN0SUQpOworICAgIGlmICghY2FsbGJhY2spCisgICAgICAg
IHJldHVybjsKKworICAgIGNhbGxiYWNrLT5oYW5kbGVFdmVudChOb3RpZmljYXRpb246OnBlcm1p
c3Npb25TdHJpbmcoYWxsb3dlZCA/IE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkFsbG93
ZWQgOiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQpKTsKKyNlbmRpZgorfQor
Cit2b2lkIE5vdGlmaWNhdGlvbk1hbmFnZXI6Om5vdGlmaWNhdGlvbkNsaWNrZWQoY29uc3QgU3Ry
aW5nJiBub3RpZmljYXRpb25JRCkKK3sKKyAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3RpZmlj
YXRpb24gPSBtX25vdGlmaWNhdGlvbklETWFwLmdldChub3RpZmljYXRpb25JRCk7CisgICAgaWYg
KCFub3RpZmljYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEluZGljYXRlIHRoYXQg
dGhpcyBldmVudCBpcyBiZWluZyBkaXNwYXRjaGVkIGluIHJlYWN0aW9uIHRvIGEgdXNlcidzIGlu
dGVyYWN0aW9uIHdpdGggYSBwbGF0Zm9ybSBub3RpZmljYXRpb24uCisgICAgVXNlckdlc3R1cmVJ
bmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAg
IG5vdGlmaWNhdGlvbi0+ZGlzcGF0Y2hDbGlja0V2ZW50KCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0
aW9uTWFuYWdlcjo6bm90aWZpY2F0aW9uQ2xvc2VkKGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9u
SUQpCit7CisgICAgUmVmUHRyPE5vdGlmaWNhdGlvbj4gbm90aWZpY2F0aW9uID0gbV9ub3RpZmlj
YXRpb25JRE1hcC50YWtlKG5vdGlmaWNhdGlvbklEKTsKKyAgICBpZiAoIW5vdGlmaWNhdGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9ub3RpZmljYXRpb25NYXAucmVtb3ZlKG5vdGlmaWNh
dGlvbik7CisgICAgcmVtb3ZlTm90aWZpY2F0aW9uRnJvbUNvbnRleHRNYXAobm90aWZpY2F0aW9u
SUQsIG5vdGlmaWNhdGlvbi5nZXQoKSk7CisgICAgbm90aWZpY2F0aW9uLT5kaXNwYXRjaENsb3Nl
RXZlbnQoKTsKK30KKwordm9pZCBOb3RpZmljYXRpb25NYW5hZ2VyOjpub3RpZmljYXRpb25FcnJv
cihjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbklEKQoreworICAgIFJlZlB0cjxOb3RpZmljYXRp
b24+IG5vdGlmaWNhdGlvbiA9IG1fbm90aWZpY2F0aW9uSURNYXAudGFrZShub3RpZmljYXRpb25J
RCk7CisgICAgaWYgKCFub3RpZmljYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIG5vdGlm
aWNhdGlvbi0+ZGlzcGF0Y2hFcnJvckV2ZW50KCk7Cit9CisKK3ZvaWQgTm90aWZpY2F0aW9uTWFu
YWdlcjo6bm90aWZpY2F0aW9uU2hvd24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25JRCkKK3sK
KyAgICBSZWZQdHI8Tm90aWZpY2F0aW9uPiBub3RpZmljYXRpb24gPSBtX25vdGlmaWNhdGlvbklE
TWFwLmdldChub3RpZmljYXRpb25JRCk7CisgICAgaWYgKCFub3RpZmljYXRpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIG5vdGlmaWNhdGlvbi0+ZGlzcGF0Y2hTaG93RXZlbnQoKTsKK30KKwor
dm9pZCBOb3RpZmljYXRpb25NYW5hZ2VyOjpyZW1vdmVOb3RpZmljYXRpb25Gcm9tQ29udGV4dE1h
cChjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbklELCBOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlv
bikKK3sKKyAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyB0aGUg
aGFzaCBtYXBzLgorICAgIE5vdGlmaWNhdGlvbkNvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9u
b3RpZmljYXRpb25Db250ZXh0TWFwLmZpbmQobm90aWZpY2F0aW9uLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIEFTU0VSVChpdCAhPSBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAuZW5k
KCkpOworICAgIHNpemVfdCBpbmRleCA9IGl0LT5zZWNvbmQuZmluZChub3RpZmljYXRpb25JRCk7
CisgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICBpdC0+c2Vjb25kLnJlbW92ZShp
bmRleCk7CisgICAgaWYgKGl0LT5zZWNvbmQuaXNFbXB0eSgpKQorICAgICAgICBtX25vdGlmaWNh
dGlvbkNvbnRleHRNYXAucmVtb3ZlKGl0KTsKK30KKworfQorfQorCisjZW5kaWYgLy8gRU5BQkxF
KE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L05vdGlmaWNhdGlvbk1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L05vdGlmaWNh
dGlvbk1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NmQwZWI2OTc4ZDc2YTg3N2RkOTBjN2FkMjYwMjU5
YmRiMzFhN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvTm90aWZpY2F0aW9uTWFuYWdlci5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOb3RpZmljYXRpb25NYW5hZ2Vy
X2gKKyNkZWZpbmUgTm90aWZpY2F0aW9uTWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoTk9USUZJQ0FU
SU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorI2luY2x1ZGUgIk5vdGlmaWNh
dGlvbi5oIgorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgIk5vdGlm
aWNhdGlvblBlcm1pc3Npb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlZvaWRDYWxs
YmFjay5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKworY2xhc3MgTm90aWZpY2F0
aW9uTWFuYWdlciB7CitwdWJsaWM6CisgICAgTm90aWZpY2F0aW9uTWFuYWdlcihXZWJQYWdlUHJp
dmF0ZSopOworICAgIH5Ob3RpZmljYXRpb25NYW5hZ2VyKCk7CisKKyAgICBib29sIHNob3coV2Vi
Q29yZTo6Tm90aWZpY2F0aW9uKik7CisgICAgdm9pZCBjYW5jZWwoV2ViQ29yZTo6Tm90aWZpY2F0
aW9uKik7CisgICAgdm9pZCBjbGVhck5vdGlmaWNhdGlvbnMoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOworICAgIHZvaWQgbm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKFdlYkNv
cmU6Ok5vdGlmaWNhdGlvbiopOworI2lmIEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAg
ICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlZvaWRDYWxsYmFjaz4pOworI2VuZGlmCisjaWYgRU5BQkxF
KE5PVElGSUNBVElPTlMpCisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpOb3RpZmljYXRpb25QZXJt
aXNzaW9uQ2FsbGJhY2s+KTsKKyNlbmRpZgorICAgIHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJt
aXNzaW9uKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBXZWJDb3JlOjpO
b3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24gY2hlY2tQZXJtaXNzaW9uKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworICAgIHZvaWQgdXBkYXRlUGVybWlzc2lvbihjb25z
dCBTdHJpbmcmIHJlcXVlc3RJRCwgYm9vbCBhbGxvd2VkKTsKKworICAgIHZvaWQgbm90aWZpY2F0
aW9uQ2xpY2tlZChjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbklEKTsKKyAgICB2b2lkIG5vdGlm
aWNhdGlvbkNsb3NlZChjb25zdCBTdHJpbmcmIG5vdGlmaWNhdGlvbklEKTsKKyAgICB2b2lkIG5v
dGlmaWNhdGlvbkVycm9yKGNvbnN0IFN0cmluZyYgbm90aWZpY2F0aW9uSUQpOworICAgIHZvaWQg
bm90aWZpY2F0aW9uU2hvd24oY29uc3QgU3RyaW5nJiBub3RpZmljYXRpb25JRCk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25Gcm9tQ29udGV4dE1hcChjb25zdCBTdHJp
bmcmIG5vdGlmaWNhdGlvbklELCBXZWJDb3JlOjpOb3RpZmljYXRpb24qKTsKKworICAgIFdlYlBh
Z2VQcml2YXRlKiBtX3dlYlBhZ2VQcml2YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
V2ViQ29yZTo6Tm90aWZpY2F0aW9uPiwgU3RyaW5nPiBOb3RpZmljYXRpb25NYXA7CisgICAgTm90
aWZpY2F0aW9uTWFwIG1fbm90aWZpY2F0aW9uTWFwOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPFdlYkNvcmU6Ok5vdGlmaWNhdGlvbj4gPiBOb3RpZmljYXRpb25JZE1hcDsK
KyAgICBOb3RpZmljYXRpb25JZE1hcCBtX25vdGlmaWNhdGlvbklETWFwOworCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiwgVmVjdG9y
PFN0cmluZz4gPiBOb3RpZmljYXRpb25Db250ZXh0TWFwOworICAgIE5vdGlmaWNhdGlvbkNvbnRl
eHRNYXAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwOworCisjaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdlYkNvcmU6Ok5vdGlmaWNh
dGlvblBlcm1pc3Npb25DYWxsYmFjaz4gPiBQZXJtaXNzaW9uQ2FsbGJhY2tNYXA7CisgICAgUGVy
bWlzc2lvbkNhbGxiYWNrTWFwIG1faWRUb0NhbGxiYWNrTWFwOworI2VuZGlmCisjaWYgRU5BQkxF
KExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+ID4gVm9pZENhbGxiYWNrTWFwOworICAgIFZvaWRDYWxs
YmFja01hcCBtX2lkVG9Wb2lkQ2FsbGJhY2tNYXA7CisjZW5kaWYKKyAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgU3RyaW5nPiBPcmlnaW5NYXA7Cisg
ICAgT3JpZ2luTWFwIG1fb3JpZ2luVG9JRE1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gPiBPcmlnaW5JZE1hcDsKKyAgICBP
cmlnaW5JZE1hcCBtX2lkVG9PcmlnaW5NYXA7Cit9OworCit9Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorI2VuZGlm
IC8vIE5vdGlmaWNhdGlvbk1hbmFnZXJfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>