<?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>77590</bug_id>
          
          <creation_ts>2012-02-01 17:53:31 -0800</creation_ts>
          <short_desc>Move the scrolling coordinator to page/scrolling</short_desc>
          <delta_ts>2012-02-01 18:34:27 -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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>547533</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 17:53:31 -0800</bug_when>
    <thetext>Move the scrolling coordinator to page/scrolling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547536</commentid>
    <comment_count>1</comment_count>
      <attachid>125055</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 17:55:41 -0800</bug_when>
    <thetext>Created attachment 125055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547563</commentid>
    <comment_count>2</comment_count>
      <attachid>125055</attachid>
    <who name="">mitz</who>
    <bug_when>2012-02-01 18:33:17 -0800</bug_when>
    <thetext>Comment on attachment 125055
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547564</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-01 18:34:27 -0800</bug_when>
    <thetext>Committed r106523: &lt;http://trac.webkit.org/changeset/106523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125055</attachid>
            <date>2012-02-01 17:55:41 -0800</date>
            <delta_ts>2012-02-01 18:33:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77590-20120201175602.patch</filename>
            <type>text/plain</type>
            <size>50136</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E5ZDQ5OWM0YzQ3YWY0
YjBiMjJlMjdiMWVhYmQ4NzliN2Y4MmUzMS4uNzgzNDkzNzIxNzA3NTIyZWFjMDllYmVlNDM0NDhl
MDBhNDkyM2E2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAyLTAxICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgc2Ny
b2xsaW5nIGNvb3JkaW5hdG9yIHRvIHBhZ2Uvc2Nyb2xsaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU5MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFB1dCBzY3JvbGxpbmcgcmVsYXRlZCBmaWxlcyBp
biBwYWdlL3Njcm9sbGluZyB0byBhdm9pZCBjbHV0dGVyaW5nIHRoZSBwYWdlIGRpcmVjdG9yeS4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wYWdlL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcC4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9TY3JvbGxpbmdDb29yZGluYXRvci5oLgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tLgorCiAyMDEyLTAy
LTAxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQ29yZSBw
YXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDQ0MjY2Mz4gUGFnaW5hdGVkIGRpc3BsYXkgZG9lcyBu
b3QgcmVzcGVjdCBwYWdlLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWFmOTNhZTQ4YTcwNmNh
MTgyYzFlNGZkNmVkODA5YjI5OTVmNGU0Ni4uNTE2NzJkY2U0NzBjYWM4NmI1MGU1ZDczN2NkYTUw
M2JjZDk3MWYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMzY0LDcgKzM2NCw2IEBACiAJCTFBMTQxNEI2MTNBMEYwNTAwMDE5
OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMTQxNEI0MTNBMEYwNTAwMDE5
OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9ICgpOyB9OyB9OwogCQkxQTFEMTM4MDBBNTMyNTUyMDA2NEJGNUYgLyogRE9NWFBhdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUQxMzdFMEE1
MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTFBMUQxMzgxMEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0
aC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUQx
MzdGMEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5tbSAqLzsgfTsKLQkJMUExRjI4QTExNDlF
NjI5ODAwRkJDMzVGIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRjI4OUYxNDlFNjI5ODAwRkJDMzVG
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovOyB9OwogCQkxQTIxOUIzQjBEQ0E4N0FC
MDA0MEUzQTAgLyogbnBmdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMjE5QjNBMERDQTg3QUIwMDQwRTNBMCAvKiBucGZ1bmN0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBMjI0
NjQ5MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIyNDY0MzBDQzk4RERCMDBDMDUyNDAg
LyogU1FMaXRlRGF0YWJhc2UuY3BwICovOyB9OwogCQkxQTIyNDY0QTBDQzk4RERCMDBDMDUyNDAg
LyogU1FMaXRlRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMjI0NjQ0MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zODAsOCAr
Mzc5LDYgQEAKIAkJMUEyRTZFNTkwQ0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMkU2RTU3MENDNTUy
MTMwMDRBMjA2MiAvKiBTUUxWYWx1ZS5jcHAgKi87IH07CiAJCTFBMkU2RTVBMENDNTUyMTMwMDRB
MjA2MiAvKiBTUUxWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEyRTZFNTgwQ0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyRTZFN0EwQ0M1NTZE
NTAwNEEyMDYyIC8qIFNRTGl0ZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyRTZFNzgwQ0M1NTZENTAwNEEyMDYyIC8qIFNRTGl0
ZUF1dGhvcml6ZXIuY3BwICovOyB9OwotCQkxQTJGOUQ3OTE0OTY4Qzc0MDA2NUFDNjMgLyogU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUEyRjlENzcxNDk2OEM3NDAwNjVBQzYzIC8qIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yLmNwcCAqLzsgfTsKLQkJMUEyRjlEN0ExNDk2OEM3NDAwNjVBQzYzIC8qIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTJGOUQ3ODE0OTY4Qzc0MDA2NUFDNjMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTM0MTdDOTBD
RUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMzQxN0M3MENFQ0ZGMjUwMDQ5Q0JERSAv
KiBKU0N1c3RvbVZvaWRDYWxsYmFjay5oICovOyB9OwogCQkxQTM0MTdDQTBDRUNGRjI1MDA0OUNC
REUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzNDE3QzgwQ0VDRkYyNTAwNDlDQkRFIC8qIEpTQ3VzdG9t
Vm9pZENhbGxiYWNrLmNwcCAqLzsgfTsKIAkJMUE0OTRCRkEwQTEyMkY0NDAwRkRBRkMxIC8qIEpT
SFRNTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE0OTRCRjgwQTEyMkY0NDAwRkRBRkMxIC8qIEpTSFRNTEVsZW1lbnQuY3BwICovOyB9
OwpAQCAtNTg3LDYgKzU4NCw5IEBACiAJCTFBRTgyRkVDMENBQjA3RUUwMDIyMzdBRSAvKiBKU1NR
TFJlc3VsdFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUU4MkZFQTBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuY3BwICovOyB9
OwogCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTgyRkVCMENBQjA3RUUw
MDIyMzdBRSAvKiBKU1NRTFJlc3VsdFNldC5oICovOyB9OwogCQkxQUYzMjY3OTBENzhCOTQ0MDA2
OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUYzMjY3NzBENzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMUFGNjJF
RTYxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGNjJFRTMxNERBMjJBNzAw
NDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovOyB9OworCQkxQUY2MkVFNzE0
REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGNjJFRTQxNERBMjJBNzAwNDE1NTZD
IC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLzsgfTsKKwkJMUFGNjJFRTgxNERBMjJBNzAw
NDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUY2MkVFNTE0REEyMkE3MDA0MTU1NkMgLyogU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxQUY4RTExQTEyNTY1OTI2MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRjhFMTE5MTI1NjU5
MjYwMDIzMEZGNyAvKiBQcm94eVNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTFBRjhFMTMzMTI1NjVBNDQwMDIzMEZGNyAvKiBQcm94eVNl
cnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUY4RTEzMjEyNTY1QTQ0MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuY3BwICovOyB9OwogCQkxQUY4
RTFDMzEyNTY3M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUY4RTFDMTEyNTY3M0UwMDAyMzBG
RjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5jcHAgKi87IH07CkBAIC03MDYxLDcgKzcwNjEsNiBAQAog
CQkxQTE0MTRCNDEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTFEMTM3RTBBNTMyNTUyMDA2NEJGNUYgLyogRE9NWFBhdGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NWFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUExRDEzN0YwQTUzMjU1MjAwNjRCRjVGIC8qIERPTVhQYXRoLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NWFBhdGgubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMUYyODlGMTQ5RTYyOTgwMEZCQzM1RiAvKiBTY3JvbGxp
bmdDb29yZGluYXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTIxOUIzQTBEQ0E4N0FCMDA0MEUzQTAgLyogbnBmdW5jdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbnBmdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUEyMjQ2NDMwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZURhdGFiYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNRTGl0ZURhdGFiYXNlLmNw
cDsgcGF0aCA9IHNxbC9TUUxpdGVEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFBMjI0NjQ0MENDOThEREIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxpdGVEYXRhYmFzZS5oOyBwYXRoID0gc3Fs
L1NRTGl0ZURhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDc3LDgg
KzcwNzYsNiBAQAogCQkxQTJFNkU1NzBDQzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMVmFsdWUuY3BwOyBwYXRoID0g
c3FsL1NRTFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEyRTZFNTgw
Q0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFNRTFZhbHVlLmg7IHBhdGggPSBzcWwvU1FMVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUEyRTZFNzgwQ0M1NTZENTAwNEEyMDYyIC8qIFNRTGl0ZUF1dGhvcml6
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU1FMaXRlQXV0aG9y
aXplci5jcHA7IHBhdGggPSBzcWwvU1FMaXRlQXV0aG9yaXplci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFBMkY5RDc3MTQ5NjhDNzQwMDY1QUM2MyAvKiBTY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxp
bmdDb29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMkY5RDc4
MTQ5NjhDNzQwMDY1QUM2MyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQTM0MTdDNzBDRUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lk
Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21Wb2lk
Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzNDE3QzgwQ0VDRkYy
NTAwNDlDQkRFIC8qIEpTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUE0OTRCQkIwQTEyMkRDRDAwRkRBRkMxIC8qIEhUTUxFbGVtZW50
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03MzIzLDYgKzczMjAsOSBAQAogCQkxQUU4MkZFQTBDQUIwN0VF
MDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTUUxSZXN1bHRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQUU4MkZFQjBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxSZXN1bHRTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFGMzI2NzcwRDc4Qjk0NDAwNjhGMEM0IC8qIEVkaXRvckNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3JDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGNjJFRTMxNERBMjJBNzAwNDE1NTZDIC8qIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFBRjYyRUU0MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxpbmdDb29y
ZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBRjYyRUU1MTREQTIy
QTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdDb29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUY4RTExOTEyNTY1OTI2MDAyMzBGRjcgLyogUHJveHlTZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlTZXJ2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFGOEUxMzIxMjU2NUE0NDAwMjMwRkY3IC8qIFByb3h5U2VydmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5U2VydmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFGOEUxQzExMjU2NzNFMDAwMjMwRkY3
IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJveHlTZXJ2ZXJDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMzkwNSw2ICsxMzkwNSwyNCBAQAogCQkJdGFiV2lkdGggPSA4OwogCQkJdXNlc1RhYnMgPSAw
OwogCQl9OworCQkxQUY2MkVFMTE0REEyMkE3MDA0MTU1NkMgLyogc2Nyb2xsaW5nICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQUY2MkVFMjE0REEyMkE3
MDA0MTU1NkMgLyogbWFjICovLAorCQkJCTFBRjYyRUU0MTREQTIyQTcwMDQxNTU2QyAvKiBTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAgKi8sCisJCQkJMUFGNjJFRTUxNERBMjJBNzAwNDE1NTZDIC8q
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHNjcm9sbGluZzsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTFBRjYyRUUyMTREQTIyQTcwMDQx
NTU2QyAvKiBtYWMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTFBRjYyRUUzMTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5t
bSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMUM1RkFFQ0EwRENGRDhDOTAwRDU4Rjc4IC8qIEluc3BlY3RvciAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNTAxNiw2ICsxNTAzNCw3IEBA
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzMTZGRTEwNjBFNkUxRDg0MDBCRjYwODggLyogYW5pbWF0
aW9uICovLAogCQkJCTkzQzA5QTgyMEIwNjRGMDUwMDVBQkQ0RCAvKiBtYWMgKi8sCisJCQkJMUFG
NjJFRTExNERBMjJBNzAwNDE1NTZDIC8qIHNjcm9sbGluZyAqLywKIAkJCQk4NTM4RjAwMDBBRDcx
NzcwMDA2QTgxRDEgLyogQWJzdHJhY3RWaWV3LmlkbCAqLywKIAkJCQlCQ0Y0OENFNjEzNzBEMTE0
MDA0RTg3RDYgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oICovLAogCQkJCUJDMTI0RUU0MEMyNjQx
Q0QwMDlFMjM0OSAvKiBCYXJJbmZvLmNwcCAqLywKQEAgLTE1MTM2LDggKzE1MTU1LDYgQEAKIAkJ
CQlCQ0VDMDFCQTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCAqLywKIAkJCQlCQ0VDMDFC
QjBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggKi8sCiAJCQkJQkNFQzAxQkMwQzI3NERBQzAw
OUY0RUM5IC8qIFNjcmVlbi5pZGwgKi8sCi0JCQkJMUEyRjlENzcxNDk2OEM3NDAwNjVBQzYzIC8q
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCAqLywKLQkJCQkxQTJGOUQ3ODE0OTY4Qzc0MDA2NUFD
NjMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCAqLywKIAkJCQlCQ0QwRTBGNzBFOTcyQzM1MDAy
NjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwICovLAogCQkJCUJDRDBFMEY4MEU5NzJDMzUwMDI2
NURFQSAvKiBTZWN1cml0eU9yaWdpbi5oICovLAogCQkJCUJDRDBFMEY5MEU5NzJDMzUwMDI2NURF
QSAvKiBTZWN1cml0eU9yaWdpbkhhc2guaCAqLywKQEAgLTE2NTE5LDcgKzE2NTM2LDYgQEAKIAkJ
CQk5M0MwOUE3RTBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tICovLAogCQkJ
CTY1QkYwMjNDMDk3NDgxOTAwMEM0MzE5NiAvKiBGcmFtZU1hYy5tbSAqLywKIAkJCQkxQzI2NDk3
QjBEN0UyNEVDMDBCRDEwRjIgLyogUGFnZU1hYy5jcHAgKi8sCi0JCQkJMUExRjI4OUYxNDlFNjI5
ODAwRkJDMzVGIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tICovLAogCQkJCUY1ODc4NTRD
MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlRnJhbWVWaWV3LmggKi8sCiAJCQkpOwogCQkJcGF0
aCA9IG1hYzsKQEAgLTIzNDM0LDcgKzIzNDUwLDYgQEAKIAkJCQkwRkU3MTQwNjE0MjE3MEI4MDBE
QjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDkyNUI2
ODBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQTg0RjA1MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMUEyRjlEN0ExNDk2OEM3NDAwNjVBQzYzIC8qIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0MwOUM4NjBCMDY1N0FBMDA1QUJE
NEQgLyogU2Nyb2xsVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkQ2RTI2MDlBRjk0MzUw
MEY1OTc1OSAvKiBTY3JvbGxWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REMjEyNTFG
MTJEMDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MDcy
LDYgKzI0MDg3LDcgQEAKIAkJCQk4QUQwQTU5ODE0Qzg4MzU4MDAwRDgzQzUgLyogRE9NV2ViS2l0
Q1NTUmVnaW9uUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzIwQjBBMTE0RDMz
MjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJD
RjY4NzhBMTREMzJFRkYwMDM0MEYzOSAvKiBFbGVtZW50QXR0cmlidXRlRGF0YS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUFGNjJFRTgxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI2NDg4LDggKzI2NTA0LDYgQEAKIAkJCQkwRkU3MTQw
NTE0MjE3MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVEOTI1QjY3MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxCZWhhdmlvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUE4NEYwNDE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKLQkJCQkxQTJGOUQ3OTE0OTY4Qzc0MDA2
NUFDNjMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUEx
RjI4QTExNDlFNjI5ODAwRkJDMzVGIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZp
ZXdNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0REMTEyNTFGMTJEMDAzRUYyNjkgLyog
U2VhcmNoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjY5OTgsNiArMjcwMTIsOCBA
QAogCQkJCTU3M0QxMzQ3MTRDRTM5RkYwMDU3QUJDQSAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJp
Y0V2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNGNjg3ODgxNEQzMkVCNTAwMzQw
RjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBRjYy
RUU2MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBRjYyRUU3MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdDb29yZGlu
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TY3JvbGxpbmdD
b29yZGluYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4M2JjYjRhYTAz
NGM5MjgzNWUyNWEyM2JhNWQyMjM0MGFjYTlhZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TY3JvbGxpbmdDb29yZGlu
YXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi0KLSNp
bmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yLmgiCi0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmNyZWF0ZShQYWdlKiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Ny
b2xsaW5nQ29vcmRpbmF0b3IocGFnZSkpOwotfQotCi1TY3JvbGxpbmdDb29yZGluYXRvcjo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwg
bV9kaWREaXNwYXRjaERpZFVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKGZhbHNlKQotewot
fQotCi1TY3JvbGxpbmdDb29yZGluYXRvcjo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKLXsKLSAg
ICBBU1NFUlQoIW1fcGFnZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnBhZ2VE
ZXN0cm95ZWQoKQotewotICAgIEFTU0VSVChtX3BhZ2UpOwotICAgIG1fcGFnZSA9IDA7Ci19Ci0K
LWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KSBjb25zdAotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICAvLyBXZSBjdXJyZW50bHkgb25seSBo
YW5kbGUgdGhlIG1haW4gZnJhbWUuCi0gICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUoKSAhPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3luY0ZyYW1lVmlld0dlb21ldHJ5
KEZyYW1lVmlldyogZnJhbWVWaWV3KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKG1fcGFnZSk7Ci0KLSAgICBpZiAoZnJhbWVWaWV3LT5mcmFtZSgpICE9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdmlzaWJsZUNv
bnRlbnRSZWN0ID0gZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICBJbnRTaXpl
IGNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9tYWluRnJhbWVHZW9tZXRyeU11dGV4KTsKLSAgICBpZiAobV9tYWluRnJh
bWVWaXNpYmxlQ29udGVudFJlY3QgPT0gdmlzaWJsZUNvbnRlbnRSZWN0ICYmIG1fbWFpbkZyYW1l
Q29udGVudHNTaXplID09IGNvbnRlbnRzU2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9t
YWluRnJhbWVWaXNpYmxlQ29udGVudFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7Ci0gICAgbV9t
YWluRnJhbWVDb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7Ci0KLSAgICAvLyBGSVhNRTogSW5m
b3JtIHRoZSBzY3JvbGxpbmcgdGhyZWFkIHRoYXQgdGhlIGZyYW1lIGdlb21ldHJ5IGhhcyBjaGFu
Z2VkLgotfQotCi1ib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICAvLyBGSVhNRTogQ2hl
Y2sgZm9yIHdoZWVsIGV2ZW50IGhhbmRsZXJzLgotICAgIC8vIEZJWE1FOiBDaGVjayBpZiB3ZSdy
ZSBvdmVyIGEgc3ViZnJhbWUgb3Igb3ZlcmZsb3cgZGl2LgotICAgIC8vIEZJWE1FOiBBcyBzb29u
IGFzIHdlJ3ZlIGRldGVybWluZWQgdGhhdCB3ZSBjYW4gaGFuZGxlIHRoZSB3aGVlbCBldmVudCwg
d2Ugc2hvdWxkIGRvIHRoZQotICAgIC8vIGJ1bGsgb2YgdGhlIHdvcmsgb24gdGhlIHNjcm9sbGlu
ZyB0aHJlYWQgYW5kIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCi0gICAgLy8gRklYTUU6IEhh
bmRsZSBydWJiZXJiYW5kaW5nLgotICAgIGZsb2F0IGRlbHRhWCA9IHdoZWVsRXZlbnQuZGVsdGFY
KCk7Ci0gICAgZmxvYXQgZGVsdGFZID0gd2hlZWxFdmVudC5kZWx0YVkoKTsKLQotICAgIC8vIFNs
aWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBieSBhcHBseWluZyB0aGUgPSBjYXNl
IHRvIGRlbHRhWQotICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpCi0gICAg
ICAgIGRlbHRhWCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBkZWx0YVkgPSAwOwotCi0gICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXQgPSBJbnRTaXplKC1kZWx0YVgsIC1kZWx0YVkpOwotICAgIGRpc3Bh
dGNoT25TY3JvbGxpbmdUaHJlYWQoYmluZCgmU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbEJ5
T25TY3JvbGxpbmdUaHJlYWQsIHRoaXMsIHNjcm9sbE9mZnNldCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotYm9vbCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6aGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JikKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgot
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkaWRVcGRhdGVNYWluRnJhbWVTY3JvbGxQb3Np
dGlvbigpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbjsKLQotICAg
IHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbWFpbkZyYW1lR2VvbWV0cnlNdXRleCk7
Ci0gICAgICAgIEFTU0VSVChtX2RpZERpc3BhdGNoRGlkVXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9z
aXRpb24pOwotCi0gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gbV9tYWluRnJhbWVTY3JvbGxQb3Np
dGlvbjsKLSAgICAgICAgbV9kaWREaXNwYXRjaERpZFVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0
aW9uID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSB7Ci0gICAgICAgIGZyYW1lVmlldy0+c2V0Q29uc3Ry
YWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgICAgICBmcmFtZVZpZXctPnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGZy
YW1lVmlldy0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7Ci0gICAg
fQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TY3JvbGxpbmdD
b29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TY3JvbGxpbmdDb29yZGluYXRvci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjk1ZDgwMzE1YzYxMTMzZmQ2NGIzZjlj
NzE4YWIyNDAzOGVlMmQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxpbmdD
b29yZGluYXRvcl9oCi0jZGVmaW5lIFNjcm9sbGluZ0Nvb3JkaW5hdG9yX2gKLQotI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCi0KLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi0j
aWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lVmlldzsKLWNsYXNzIEdyYXBoaWNzTGF5
ZXI7Ci1jbGFzcyBQYWdlOwotY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwotCi0jaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQotY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7Ci0jZW5kaWYKLQot
Y2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
Y3JvbGxpbmdDb29yZGluYXRvcj4gY3JlYXRlKFBhZ2UqKTsKLSAgICB+U2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKTsKLQotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpOwotCi0gICAgLy8gUmV0dXJuIHdo
ZXRoZXIgdGhpcyBzY3JvbGxpbmcgY29vcmRpbmF0b3IgaGFuZGxlcyBzY3JvbGxpbmcgZm9yIHRo
ZSBnaXZlbiBmcmFtZSB2aWV3LgotICAgIGJvb2wgY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFt
ZVZpZXcoRnJhbWVWaWV3KikgY29uc3Q7Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5l
dmVyIHRoZSBzY3JvbGwgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCi0g
ICAgdm9pZCBmcmFtZVZpZXdTY3JvbGxMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBjb25zdCBH
cmFwaGljc0xheWVyKik7Ci0KLSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBo
b3Jpem9udGFsIHNjcm9sbGJhciBsYXllciBmb3IgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdl
cy4KLSAgICB2b2lkIGZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiBob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpOwotCi0g
ICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIg
bGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCi0gICAgdm9pZCBmcmFtZVZp
ZXdWZXJ0aWNhbFNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyosIEdyYXBoaWNzTGF5
ZXIqIHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpOwotCi0gICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3
aGVuZXZlciB0aGUgZ2VvbWV0cnkgb2YgdGhlIGdpdmVuIGZyYW1lIHZpZXcgY2hhbmdlcywKLSAg
ICAvLyBpbmNsdWRpbmcgdGhlIHZpc2libGUgY29udGVudCByZWN0IGFuZCB0aGUgY29udGVudCBz
aXplLgotICAgIHZvaWQgc3luY0ZyYW1lVmlld0dlb21ldHJ5KEZyYW1lVmlldyopOwotCi0gICAg
Ly8gQ2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuIFdpbGwgdHJ5IHRvIGhhbmRsZSB0aGUg
d2hlZWwgZXZlbnQgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQsCi0gICAgLy8gYW5kIHJldHVybiBm
YWxzZSBpZiB0aGUgZXZlbnQgbXVzdCBiZSBzZW50IGFnYWluIHRvIHRoZSBXZWJDb3JlIGV2ZW50
IGhhbmRsZXIuCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpOwotCi0jaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQotICAgIC8vIENhbiBiZSBjYWxs
ZWQgZnJvbSBhbnkgdGhyZWFkLiBXaWxsIHRyeSB0byBoYW5kbGUgdGhlIGdlc3R1cmUgZXZlbnQg
b24gdGhlIHNjcm9sbGluZyB0aHJlYWQsCi0gICAgLy8gYW5kIHJldHVybiBmYWxzZSBpZiB0aGUg
ZXZlbnQgbXVzdCBiZSBzZW50IGFnYWluIHRvIHRoZSBXZWJDb3JlIGV2ZW50IGhhbmRsZXIuCi0g
ICAgYm9vbCBoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsK
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBh
Z2UqKTsKLQotICAgIC8vIEZJWE1FOiBPbmNlIHdlIGhhdmUgYSBwcm9wZXIgdGhyZWFkL3J1biBs
b29wIGFic3RyYWN0aW9uIHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoZXNlCi0gICAgLy8gZnVuY3Rp
b25zIGFuZCBqdXN0IHVzZSBzb21ldGhpbmcgbGlrZSBzY3JvbGxpbmdSdW5Mb29wKCktPmRpc3Bh
dGNoKGZ1bmN0aW9uKTsKLSAgICBzdGF0aWMgYm9vbCBpc1Njcm9sbGluZ1RocmVhZCgpOwotICAg
IHN0YXRpYyB2b2lkIGRpc3BhdGNoT25TY3JvbGxpbmdUaHJlYWQoY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgY2Fs
bGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgotICAgIHZvaWQgZGlkVXBkYXRlTWFpbkZyYW1lU2Ny
b2xsUG9zaXRpb24oKTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBvbmx5
IGJlIGNhbGxlZCBmcm9tIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgotICAgIHZvaWQgc2Nyb2xsQnlP
blNjcm9sbGluZ1RocmVhZChjb25zdCBJbnRTaXplJiBvZmZzZXQpOwotCi0gICAgLy8gVGhpcyBm
dW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtYWluIGZyYW1lIGdlb21ldHJ5IG11dGV4
IGhlbGQuCi0gICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uT25TY3Jv
bGxpbmdUaHJlYWQoY29uc3QgRmxvYXRQb2ludCYpOwotCi1wcml2YXRlOgotICAgIFBhZ2UqIG1f
cGFnZTsKLQotICAgIE11dGV4IG1fbWFpbkZyYW1lR2VvbWV0cnlNdXRleDsKLSAgICBJbnRSZWN0
IG1fbWFpbkZyYW1lVmlzaWJsZUNvbnRlbnRSZWN0OwotICAgIEludFNpemUgbV9tYWluRnJhbWVD
b250ZW50c1NpemU7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxQbGF0Zm9ybUxh
eWVyPiBtX21haW5GcmFtZVNjcm9sbExheWVyOwotI2VuZGlmCi0KLSAgICBib29sIG1fZGlkRGlz
cGF0Y2hEaWRVcGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbjsKLSAgICBJbnRQb2ludCBtX21h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2VuZGlmIC8vIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNTM1ZDJi
OTg1ODUwMWJmNDE4ZmJjMjQwMTIyZGUyMTVkMmNjYmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCi0KLSNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0KLSNpbXBvcnQgIkZyYW1l
Vmlldy5oIgotI2ltcG9ydCAiUGFnZS5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+Ci0jaW1wb3J0IDx3dGYvRnVuY3Rpb25hbC5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQu
aD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBTY3JvbGxpbmdUaHJlYWQgewotcHVibGljOgotICAgIFNjcm9sbGluZ1RocmVhZCgpCi0gICAg
ICAgIDogbV90aHJlYWRJZGVudGlmaWVyKDApCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXND
dXJyZW50VGhyZWFkKCkgY29uc3Q7Ci0gICAgdm9pZCBkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2
b2lkKCk+Jik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjcmVhdGVUaHJlYWRJZk5lZWRlZCgpOwot
Ci0gICAgc3RhdGljIHZvaWQqIHRocmVhZENhbGxiYWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCk7
Ci0gICAgdm9pZCB0aHJlYWRCb2R5KCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB0aHJlYWRSdW5Mb29w
U291cmNlQ2FsbGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKTsKLSAgICB2b2lkIHRocmVhZFJ1
bkxvb3BTb3VyY2VDYWxsYmFjaygpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElk
ZW50aWZpZXI7Ci0KLSAgICBUaHJlYWRDb25kaXRpb24gbV9pbml0aWFsaXplUnVuTG9vcENvbmRp
dGlvbjsKLSAgICBNdXRleCBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXg7Ci0gICAg
Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV90aHJlYWRSdW5Mb29wOwotICAgIFJldGFp
blB0cjxDRlJ1bkxvb3BTb3VyY2VSZWY+IG1fdGhyZWFkUnVuTG9vcFNvdXJjZTsKLQotICAgIE11
dGV4IG1fZnVuY3Rpb25zTXV0ZXg7Ci0gICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX2Z1
bmN0aW9uczsKLX07Ci0KLWJvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKSBj
b25zdAotewotICAgIGlmICghbV90aHJlYWRJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IG1fdGhyZWFkSWRlbnRpZmllcjsK
LX0KLQotdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElmTmVlZGVkKCkKLXsKLSAg
ICBpZiAobV90aHJlYWRJZGVudGlmaWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RocmVh
ZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ssIHRoaXMsICJXZWJDb3Jl
OiBTY3JvbGxpbmciKTsKLQotICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gaW5pdGlhbGl6
ZSB0aGUgcnVuIGxvb3AuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9pbml0
aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLQotICAgICAgICB3aGlsZSAoIW1fdGhyZWFk
UnVuTG9vcCkKLSAgICAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb24ud2FpdCht
X2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOwotICAgIH0KLX0KLQotdm9pZCogU2Ny
b2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpCi17Ci0g
ICAgc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xsaW5nVGhyZWFkKS0+dGhyZWFk
Qm9keSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0aHJl
YWRCb2R5KCkKLXsKLSAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkpOwotCi0gICAgLy8gSW5p
dGlhbGl6ZSB0aGUgcnVuIGxvb3AuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKLQotICAgICAgICBtX3RocmVhZFJ1
bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7Ci0KLSAgICAgICAgQ0ZSdW5Mb29wU291cmNl
Q29udGV4dCBjb250ZXh0ID0geyAwLCB0aGlzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB0aHJlYWRS
dW5Mb29wU291cmNlQ2FsbGJhY2sgfTsKLSAgICAgICAgbV90aHJlYWRSdW5Mb29wU291cmNlID0g
YWRvcHRDRihDRlJ1bkxvb3BTb3VyY2VDcmVhdGUoMCwgMCwgJmNvbnRleHQpKTsKLSAgICAgICAg
Q0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV90aHJlYWRSdW5Mb29w
U291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotCi0gICAgICAgIG1faW5pdGlh
bGl6ZVJ1bkxvb3BDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgfQotCi0gICAgQ0ZSdW5Mb29w
UnVuKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRSdW5Mb29wU291cmNlQ2Fs
bGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKQotewotICAgIHN0YXRpY19jYXN0PFNjcm9sbGlu
Z1RocmVhZCo+KHNjcm9sbGluZ1RocmVhZCktPnRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygp
OwotfQotCi12b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkUnVuTG9vcFNvdXJjZUNhbGxiYWNr
KCkKLXsKLSAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkpOwotCi0gICAgVmVjdG9yPEZ1bmN0
aW9uPHZvaWQgKCk+ID4gZnVuY3Rpb25zOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9mdW5jdGlvbnNNdXRleCk7Ci0gICAgICAgIG1fZnVuY3Rpb25zLnN3YXAoZnVuY3Rp
b25zKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXpl
KCk7ICsraSkKLSAgICAgICAgZnVuY3Rpb25zW2ldKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVGhy
ZWFkOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBj
cmVhdGVUaHJlYWRJZk5lZWRlZCgpOwotCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9mdW5jdGlvbnNNdXRleCk7Ci0gICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlv
bik7Ci0gICAgfQotCi0gICAgQ0ZSdW5Mb29wU291cmNlU2lnbmFsKG1fdGhyZWFkUnVuTG9vcFNv
dXJjZS5nZXQoKSk7Ci0gICAgQ0ZSdW5Mb29wV2FrZVVwKG1fdGhyZWFkUnVuTG9vcC5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyBTY3JvbGxpbmdUaHJlYWQmIHNjcm9sbGluZ1RocmVhZCgpCi17Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChTY3JvbGxpbmdUaHJlYWQsIHNjcm9sbGluZ1RocmVhZCwgKCkp
OwotICAgIHJldHVybiBzY3JvbGxpbmdUaHJlYWQ7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZp
ZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIGlmIChmcmFtZVZpZXctPmZyYW1lKCkg
IT0gbV9wYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6
IEltcGxlbWVudC4KLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3VmVy
dGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhp
Y3NMYXllciopCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9w
YWdlKTsKLSAgICAKLSAgICBpZiAoZnJhbWVWaWV3LT5mcmFtZSgpICE9IG1fcGFnZS0+bWFpbkZy
YW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0K
LXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Njcm9sbExheWVyRGlkQ2hhbmdl
KEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX3BhZ2UpOwotCi0g
ICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUoKSAhPSBtX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYWluRnJhbWVHZW9tZXRyeU11
dGV4KTsKLSAgICBtX21haW5GcmFtZVNjcm9sbExheWVyID0gc2Nyb2xsTGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKTsKLQotICAgIC8vIEZJWE1FOiBJbmZvcm0gdGhlIHNjcm9sbGluZyB0aHJlYWQ/Ci19
Ci0KLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzU2Nyb2xsaW5nVGhyZWFkKCkKLXsKLSAg
ICByZXR1cm4gc2Nyb2xsaW5nVGhyZWFkKCkuaXNDdXJyZW50VGhyZWFkKCk7Ci19Ci0KLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRpc3BhdGNoT25TY3JvbGxpbmdUaHJlYWQoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgcmV0dXJuIHNjcm9sbGluZ1RocmVhZCgp
LmRpc3BhdGNoKGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Ny
b2xsQnlPblNjcm9sbGluZ1RocmVhZChjb25zdCBJbnRTaXplJiBvZmZzZXQpCi17Ci0gICAgQVNT
RVJUKGlzU2Nyb2xsaW5nVGhyZWFkKCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbWFp
bkZyYW1lR2VvbWV0cnlNdXRleCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNhY2hlIHRo
ZSBzY3JvbGwgcG9zaXRpb24gYXMgd2VsbCBvciBhbHdheXMgZ2V0IGl0IGZyb20gdGhlIGxheWVy
PwotICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gSW50UG9pbnQoW21fbWFpbkZyYW1lU2Ny
b2xsTGF5ZXIuZ2V0KCkgcG9zaXRpb25dKTsKLSAgICBzY3JvbGxQb3NpdGlvbiA9IC1zY3JvbGxQ
b3NpdGlvbjsKLQotICAgIHNjcm9sbFBvc2l0aW9uICs9IG9mZnNldDsKLSAgICBzY3JvbGxQb3Np
dGlvbi5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVtU2Nyb2xs
UG9zaXRpb24gPSBJbnRQb2ludChtX21haW5GcmFtZUNvbnRlbnRzU2l6ZS53aWR0aCgpIC0gbV9t
YWluRnJhbWVWaXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSwgbV9tYWluRnJhbWVDb250ZW50c1Np
emUuaGVpZ2h0KCkgLSBtX21haW5GcmFtZVZpc2libGVDb250ZW50UmVjdC5oZWlnaHQoKSk7Ci0g
ICAgc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbi5zaHJ1bmtUbyhtYXhpbXVtU2Nyb2xs
UG9zaXRpb24pOwotCi0gICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uU2Ny
b2xsaW5nVGhyZWFkKC1zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICBtX21haW5GcmFtZVNjcm9sbFBv
c2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0gICAgaWYgKCFtX2RpZERpc3BhdGNoRGlkVXBkYXRl
TWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24pIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChiaW5k
KCZTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGlkVXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24s
IHRoaXMpKTsKLSAgICAgICAgbV9kaWREaXNwYXRjaERpZFVwZGF0ZU1haW5GcmFtZVNjcm9sbFBv
c2l0aW9uID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVw
ZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb25PblNjcm9sbGluZ1RocmVhZChjb25zdCBG
bG9hdFBvaW50JiBzY3JvbGxMYXllclBvc2l0aW9uKQotewotICAgIEFTU0VSVChpc1Njcm9sbGlu
Z1RocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fbWFpbkZyYW1lR2VvbWV0cnlNdXRleC50cnlMb2Nr
KCkpOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNl
dERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgW21fbWFpbkZyYW1lU2Nyb2xsTGF5ZXIuZ2V0KCkg
c2V0UG9zaXRpb246c2Nyb2xsTGF5ZXJQb3NpdGlvbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODNiY2I0YWEwMzRjOTI4
MzVlMjVhMjNiYTVkMjIzNDBhY2E5YWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0wLDAgKzEsMTU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5h
dG9yPiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlKSk7Cit9CisKK1Njcm9s
bGluZ0Nvb3JkaW5hdG9yOjpTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlKQorICAgIDog
bV9wYWdlKHBhZ2UpCisgICAgLCBtX2RpZERpc3BhdGNoRGlkVXBkYXRlTWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb24oZmFsc2UpCit7Cit9CisKK1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp+U2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKQoreworICAgIEFTU0VSVCghbV9wYWdlKTsKK30KKwordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6cGFnZURlc3Ryb3llZCgpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7Cisg
ICAgbV9wYWdlID0gMDsKK30KKworYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0
ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIC8v
IFdlIGN1cnJlbnRseSBvbmx5IGhhbmRsZSB0aGUgbWFpbiBmcmFtZS4KKyAgICBpZiAoZnJhbWVW
aWV3LT5mcmFtZSgpICE9IG1fcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpz
eW5jRnJhbWVWaWV3R2VvbWV0cnkoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChmcmFtZVZp
ZXctPmZyYW1lKCkgIT0gbV9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBmcmFtZVZpZXctPnZpc2libGVDb250ZW50
UmVjdCgpOworICAgIEludFNpemUgY29udGVudHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1Np
emUoKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX21haW5GcmFtZUdlb21ldHJ5TXV0ZXgp
OworICAgIGlmIChtX21haW5GcmFtZVZpc2libGVDb250ZW50UmVjdCA9PSB2aXNpYmxlQ29udGVu
dFJlY3QgJiYgbV9tYWluRnJhbWVDb250ZW50c1NpemUgPT0gY29udGVudHNTaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX21haW5GcmFtZVZpc2libGVDb250ZW50UmVjdCA9IHZpc2libGVD
b250ZW50UmVjdDsKKyAgICBtX21haW5GcmFtZUNvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsK
KworICAgIC8vIEZJWE1FOiBJbmZvcm0gdGhlIHNjcm9sbGluZyB0aHJlYWQgdGhhdCB0aGUgZnJh
bWUgZ2VvbWV0cnkgaGFzIGNoYW5nZWQuCit9CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQor
eworICAgIC8vIEZJWE1FOiBDaGVjayBmb3Igd2hlZWwgZXZlbnQgaGFuZGxlcnMuCisgICAgLy8g
RklYTUU6IENoZWNrIGlmIHdlJ3JlIG92ZXIgYSBzdWJmcmFtZSBvciBvdmVyZmxvdyBkaXYuCisg
ICAgLy8gRklYTUU6IEFzIHNvb24gYXMgd2UndmUgZGV0ZXJtaW5lZCB0aGF0IHdlIGNhbiBoYW5k
bGUgdGhlIHdoZWVsIGV2ZW50LCB3ZSBzaG91bGQgZG8gdGhlCisgICAgLy8gYnVsayBvZiB0aGUg
d29yayBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZCBhbmQgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlv
bi4KKyAgICAvLyBGSVhNRTogSGFuZGxlIHJ1YmJlcmJhbmRpbmcuCisgICAgZmxvYXQgZGVsdGFY
ID0gd2hlZWxFdmVudC5kZWx0YVgoKTsKKyAgICBmbG9hdCBkZWx0YVkgPSB3aGVlbEV2ZW50LmRl
bHRhWSgpOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9sbGluZyB2ZXJ0aWNhbGx5IGJ5
IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0g
ZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRl
bHRhWSA9IDA7CisKKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldCA9IEludFNpemUoLWRlbHRhWCwg
LWRlbHRhWSk7CisgICAgZGlzcGF0Y2hPblNjcm9sbGluZ1RocmVhZChiaW5kKCZTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2Nyb2xsQnlPblNjcm9sbGluZ1RocmVhZCwgdGhpcywgc2Nyb2xsT2Zmc2V0
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiti
b29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZv
cm1HZXN0dXJlRXZlbnQmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJu
IGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRpZFVwZGF0
ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHNj
cm9sbFBvc2l0aW9uOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYWlu
RnJhbWVHZW9tZXRyeU11dGV4KTsKKyAgICAgICAgQVNTRVJUKG1fZGlkRGlzcGF0Y2hEaWRVcGRh
dGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbik7CisKKyAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBt
X21haW5GcmFtZVNjcm9sbFBvc2l0aW9uOworICAgICAgICBtX2RpZERpc3BhdGNoRGlkVXBkYXRl
TWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24gPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpIHsKKyAgICAgICAg
ZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7Cisg
ICAgICAgIGZyYW1lVmlldy0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHNjcm9sbFBv
c2l0aW9uKTsKKyAgICAgICAgZnJhbWVWaWV3LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250
ZW50RWRnZSh0cnVlKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjk1
ZDgwMzE1YzYxMTMzZmQ2NGIzZjljNzE4YWIyNDAzOGVlMmQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaApAQCAt
MCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsaW5nQ29vcmRpbmF0b3Jf
aAorI2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvcl9oCisKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFBMQVRGT1JN
KE1BQykKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3Mg
UGFnZTsKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKKworI2lmIEVOQUJMRShHRVNUVVJFX0VW
RU5UUykKK2NsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OworI2VuZGlmCisKK2NsYXNzIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNjcm9sbGluZ0Nv
b3JkaW5hdG9yPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsaW5nQ29v
cmRpbmF0b3I+IGNyZWF0ZShQYWdlKik7CisgICAgflNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisK
KyAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKKworICAgIC8vIFJldHVybiB3aGV0aGVyIHRoaXMg
c2Nyb2xsaW5nIGNvb3JkaW5hdG9yIGhhbmRsZXMgc2Nyb2xsaW5nIGZvciB0aGUgZ2l2ZW4gZnJh
bWUgdmlldy4KKyAgICBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KEZyYW1l
VmlldyopIGNvbnN0OworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2Ny
b2xsIGxheWVyIGZvciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZvaWQgZnJh
bWVWaWV3U2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3KiwgY29uc3QgR3JhcGhpY3NMYXll
ciopOworCisgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaG9yaXpvbnRhbCBz
Y3JvbGxiYXIgbGF5ZXIgZm9yIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMuCisgICAgdm9p
ZCBmcmFtZVZpZXdIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoRnJhbWVWaWV3Kiwg
R3JhcGhpY3NMYXllciogaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKTsKKworICAgIC8vIFNob3Vs
ZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGxheWVyIGZvciB0
aGUgZ2l2ZW4gZnJhbWUgdmlldyBjaGFuZ2VzLgorICAgIHZvaWQgZnJhbWVWaWV3VmVydGljYWxT
Y3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqLCBHcmFwaGljc0xheWVyKiB2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyKTsKKworICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhl
IGdlb21ldHJ5IG9mIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGNoYW5nZXMsCisgICAgLy8gaW5jbHVk
aW5nIHRoZSB2aXNpYmxlIGNvbnRlbnQgcmVjdCBhbmQgdGhlIGNvbnRlbnQgc2l6ZS4KKyAgICB2
b2lkIHN5bmNGcmFtZVZpZXdHZW9tZXRyeShGcmFtZVZpZXcqKTsKKworICAgIC8vIENhbiBiZSBj
YWxsZWQgZnJvbSBhbnkgdGhyZWFkLiBXaWxsIHRyeSB0byBoYW5kbGUgdGhlIHdoZWVsIGV2ZW50
IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLAorICAgIC8vIGFuZCByZXR1cm4gZmFsc2UgaWYgdGhl
IGV2ZW50IG11c3QgYmUgc2VudCBhZ2FpbiB0byB0aGUgV2ViQ29yZSBldmVudCBoYW5kbGVyLgor
ICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKwor
I2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKKyAgICAvLyBDYW4gYmUgY2FsbGVkIGZyb20gYW55
IHRocmVhZC4gV2lsbCB0cnkgdG8gaGFuZGxlIHRoZSBnZXN0dXJlIGV2ZW50IG9uIHRoZSBzY3Jv
bGxpbmcgdGhyZWFkLAorICAgIC8vIGFuZCByZXR1cm4gZmFsc2UgaWYgdGhlIGV2ZW50IG11c3Qg
YmUgc2VudCBhZ2FpbiB0byB0aGUgV2ViQ29yZSBldmVudCBoYW5kbGVyLgorICAgIGJvb2wgaGFu
ZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CisKKyAg
ICAvLyBGSVhNRTogT25jZSB3ZSBoYXZlIGEgcHJvcGVyIHRocmVhZC9ydW4gbG9vcCBhYnN0cmFj
dGlvbiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGVzZQorICAgIC8vIGZ1bmN0aW9ucyBhbmQganVz
dCB1c2Ugc29tZXRoaW5nIGxpa2Ugc2Nyb2xsaW5nUnVuTG9vcCgpLT5kaXNwYXRjaChmdW5jdGlv
bik7CisgICAgc3RhdGljIGJvb2wgaXNTY3JvbGxpbmdUaHJlYWQoKTsKKyAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaE9uU2Nyb2xsaW5nVGhyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHRo
ZSBtYWluIHRocmVhZC4KKyAgICB2b2lkIGRpZFVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9u
KCk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjYW4gb25seSBiZSBjYWxsZWQg
ZnJvbSB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAgICB2b2lkIHNjcm9sbEJ5T25TY3JvbGxpbmdU
aHJlYWQoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gbXVz
dCBiZSBjYWxsZWQgd2l0aCB0aGUgbWFpbiBmcmFtZSBnZW9tZXRyeSBtdXRleCBoZWxkLgorICAg
IHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uU2Nyb2xsaW5nVGhyZWFk
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKworcHJpdmF0ZToKKyAgICBQYWdlKiBtX3BhZ2U7CisKKyAg
ICBNdXRleCBtX21haW5GcmFtZUdlb21ldHJ5TXV0ZXg7CisgICAgSW50UmVjdCBtX21haW5GcmFt
ZVZpc2libGVDb250ZW50UmVjdDsKKyAgICBJbnRTaXplIG1fbWFpbkZyYW1lQ29udGVudHNTaXpl
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9tYWlu
RnJhbWVTY3JvbGxMYXllcjsKKyNlbmRpZgorCisgICAgYm9vbCBtX2RpZERpc3BhdGNoRGlkVXBk
YXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb247CisgICAgSW50UG9pbnQgbV9tYWluRnJhbWVTY3Jv
bGxQb3NpdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdDb29yZGluYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA1MzVkMmI5ODU4NTAxYmY0
MThmYmMyNDAxMjJkZTIxNWQyY2NiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQpAQCAtMCwwICsx
LDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCisKKyNpbXBvcnQgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisK
KyNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiUGFnZS5oIgorI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDx3dGYvRnVuY3Rpb25hbC5oPgorI2ltcG9ydCA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTY3JvbGxpbmdUaHJlYWQgeworcHVibGljOgorICAgIFNjcm9sbGlu
Z1RocmVhZCgpCisgICAgICAgIDogbV90aHJlYWRJZGVudGlmaWVyKDApCisgICAgeworICAgIH0K
KworICAgIGJvb2wgaXNDdXJyZW50VGhyZWFkKCkgY29uc3Q7CisgICAgdm9pZCBkaXNwYXRjaChj
b25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVUaHJl
YWRJZk5lZWRlZCgpOworCisgICAgc3RhdGljIHZvaWQqIHRocmVhZENhbGxiYWNrKHZvaWQqIHNj
cm9sbGluZ1RocmVhZCk7CisgICAgdm9pZCB0aHJlYWRCb2R5KCk7CisKKyAgICBzdGF0aWMgdm9p
ZCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKTsKKyAg
ICB2b2lkIHRocmVhZFJ1bkxvb3BTb3VyY2VDYWxsYmFjaygpOworCisgICAgVGhyZWFkSWRlbnRp
ZmllciBtX3RocmVhZElkZW50aWZpZXI7CisKKyAgICBUaHJlYWRDb25kaXRpb24gbV9pbml0aWFs
aXplUnVuTG9vcENvbmRpdGlvbjsKKyAgICBNdXRleCBtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0
aW9uTXV0ZXg7CisgICAgCisgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV90aHJlYWRSdW5M
b29wOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BTb3VyY2VSZWY+IG1fdGhyZWFkUnVuTG9vcFNv
dXJjZTsKKworICAgIE11dGV4IG1fZnVuY3Rpb25zTXV0ZXg7CisgICAgVmVjdG9yPEZ1bmN0aW9u
PHZvaWQoKT4gPiBtX2Z1bmN0aW9uczsKK307CisKK2Jvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1
cnJlbnRUaHJlYWQoKSBjb25zdAoreworICAgIGlmICghbV90aHJlYWRJZGVudGlmaWVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IG1fdGhy
ZWFkSWRlbnRpZmllcjsKK30KKwordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmNyZWF0ZVRocmVhZElm
TmVlZGVkKCkKK3sKKyAgICBpZiAobV90aHJlYWRJZGVudGlmaWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3RocmVhZElkZW50aWZpZXIgPSBjcmVhdGVUaHJlYWQodGhyZWFkQ2FsbGJhY2ss
IHRoaXMsICJXZWJDb3JlOiBTY3JvbGxpbmciKTsKKworICAgIC8vIFdhaXQgZm9yIHRoZSB0aHJl
YWQgdG8gaW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3AuCisgICAgeworICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKKworICAgICAgICB3
aGlsZSAoIW1fdGhyZWFkUnVuTG9vcCkKKyAgICAgICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BD
b25kaXRpb24ud2FpdChtX2luaXRpYWxpemVSdW5Mb29wQ29uZGl0aW9uTXV0ZXgpOworICAgIH0K
K30KKwordm9pZCogU2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxp
bmdUaHJlYWQpCit7CisgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVGhyZWFkKj4oc2Nyb2xsaW5n
VGhyZWFkKS0+dGhyZWFkQm9keSgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nVGhyZWFkOjp0aHJlYWRCb2R5KCkKK3sKKyAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkp
OworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcnVuIGxvb3AuCisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9pbml0aWFsaXplUnVuTG9vcENvbmRpdGlvbk11dGV4KTsKKworICAg
ICAgICBtX3RocmVhZFJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7CisKKyAgICAgICAg
Q0ZSdW5Mb29wU291cmNlQ29udGV4dCBjb250ZXh0ID0geyAwLCB0aGlzLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCB0aHJlYWRSdW5Mb29wU291cmNlQ2FsbGJhY2sgfTsKKyAgICAgICAgbV90aHJlYWRS
dW5Mb29wU291cmNlID0gYWRvcHRDRihDRlJ1bkxvb3BTb3VyY2VDcmVhdGUoMCwgMCwgJmNvbnRl
eHQpKTsKKyAgICAgICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
bV90aHJlYWRSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworCisg
ICAgICAgIG1faW5pdGlhbGl6ZVJ1bkxvb3BDb25kaXRpb24uYnJvYWRjYXN0KCk7CisgICAgfQor
CisgICAgQ0ZSdW5Mb29wUnVuKCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjp0aHJlYWRS
dW5Mb29wU291cmNlQ2FsbGJhY2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKQoreworICAgIHN0YXRp
Y19jYXN0PFNjcm9sbGluZ1RocmVhZCo+KHNjcm9sbGluZ1RocmVhZCktPnRocmVhZFJ1bkxvb3BT
b3VyY2VDYWxsYmFjaygpOworfQorCit2b2lkIFNjcm9sbGluZ1RocmVhZDo6dGhyZWFkUnVuTG9v
cFNvdXJjZUNhbGxiYWNrKCkKK3sKKyAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkpOworCisg
ICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQgKCk+ID4gZnVuY3Rpb25zOworCisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIG1fZnVuY3Rp
b25zLnN3YXAoZnVuY3Rpb25zKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgZnVuY3Rpb25zW2ldKCk7Cit9CisKK3Zv
aWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKK3sKKyAgICBjcmVhdGVUaHJlYWRJZk5lZWRlZCgpOworCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAgIG1fZnVuY3Rpb25z
LmFwcGVuZChmdW5jdGlvbik7CisgICAgfQorCisgICAgQ0ZSdW5Mb29wU291cmNlU2lnbmFsKG1f
dGhyZWFkUnVuTG9vcFNvdXJjZS5nZXQoKSk7CisgICAgQ0ZSdW5Mb29wV2FrZVVwKG1fdGhyZWFk
UnVuTG9vcC5nZXQoKSk7Cit9CisKK3N0YXRpYyBTY3JvbGxpbmdUaHJlYWQmIHNjcm9sbGluZ1Ro
cmVhZCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTY3JvbGxpbmdUaHJlYWQsIHNjcm9s
bGluZ1RocmVhZCwgKCkpOworICAgIHJldHVybiBzY3JvbGxpbmdUaHJlYWQ7Cit9CisKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0hvcml6b250YWxTY3JvbGxiYXJMYXllckRp
ZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldywgR3JhcGhpY3NMYXllciopCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wYWdlKTsKKworICAgIGlmIChmcmFt
ZVZpZXctPmZyYW1lKCkgIT0gbV9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZnJhbWVWaWV3VmVydGljYWxTY3JvbGxiYXJMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZy
YW1lVmlldywgR3JhcGhpY3NMYXllciopCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQobV9wYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVWaWV3LT5mcmFtZSgpICE9
IG1fcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Njcm9s
bExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25zdCBHcmFwaGljc0xheWVy
KiBzY3JvbGxMYXllcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VChtX3BhZ2UpOworCisgICAgaWYgKGZyYW1lVmlldy0+ZnJhbWUoKSAhPSBtX3BhZ2UtPm1haW5G
cmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYWlu
RnJhbWVHZW9tZXRyeU11dGV4KTsKKyAgICBtX21haW5GcmFtZVNjcm9sbExheWVyID0gc2Nyb2xs
TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKKworICAgIC8vIEZJWE1FOiBJbmZvcm0gdGhlIHNjcm9s
bGluZyB0aHJlYWQ/Cit9CisKK2Jvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmlzU2Nyb2xsaW5n
VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gc2Nyb2xsaW5nVGhyZWFkKCkuaXNDdXJyZW50VGhyZWFk
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRpc3BhdGNoT25TY3JvbGxpbmdU
aHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgcmV0dXJuIHNj
cm9sbGluZ1RocmVhZCgpLmRpc3BhdGNoKGZ1bmN0aW9uKTsKK30KKwordm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2Nyb2xsQnlPblNjcm9sbGluZ1RocmVhZChjb25zdCBJbnRTaXplJiBvZmZz
ZXQpCit7CisgICAgQVNTRVJUKGlzU2Nyb2xsaW5nVGhyZWFkKCkpOworCisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fbWFpbkZyYW1lR2VvbWV0cnlNdXRleCk7CisKKyAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIGNhY2hlIHRoZSBzY3JvbGwgcG9zaXRpb24gYXMgd2VsbCBvciBhbHdheXMgZ2V0IGl0
IGZyb20gdGhlIGxheWVyPworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gSW50UG9pbnQo
W21fbWFpbkZyYW1lU2Nyb2xsTGF5ZXIuZ2V0KCkgcG9zaXRpb25dKTsKKyAgICBzY3JvbGxQb3Np
dGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKKworICAgIHNjcm9sbFBvc2l0aW9uICs9IG9mZnNldDsK
KyAgICBzY3JvbGxQb3NpdGlvbi5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICBJbnRQb2lu
dCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24gPSBJbnRQb2ludChtX21haW5GcmFtZUNvbnRlbnRzU2l6
ZS53aWR0aCgpIC0gbV9tYWluRnJhbWVWaXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSwgbV9tYWlu
RnJhbWVDb250ZW50c1NpemUuaGVpZ2h0KCkgLSBtX21haW5GcmFtZVZpc2libGVDb250ZW50UmVj
dC5oZWlnaHQoKSk7CisgICAgc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbi5zaHJ1bmtU
byhtYXhpbXVtU2Nyb2xsUG9zaXRpb24pOworCisgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5
ZXJQb3NpdGlvbk9uU2Nyb2xsaW5nVGhyZWFkKC1zY3JvbGxQb3NpdGlvbik7CisKKyAgICBtX21h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgaWYgKCFtX2RpZERp
c3BhdGNoRGlkVXBkYXRlTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24pIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChiaW5kKCZTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGlkVXBkYXRlTWFpbkZyYW1l
U2Nyb2xsUG9zaXRpb24sIHRoaXMpKTsKKyAgICAgICAgbV9kaWREaXNwYXRjaERpZFVwZGF0ZU1h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb25PblNjcm9sbGlu
Z1RocmVhZChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxMYXllclBvc2l0aW9uKQoreworICAgIEFT
U0VSVChpc1Njcm9sbGluZ1RocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbWFpbkZyYW1lR2VvbWV0
cnlNdXRleC50cnlMb2NrKCkpOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtD
QVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgW21fbWFpbkZyYW1lU2Ny
b2xsTGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246c2Nyb2xsTGF5ZXJQb3NpdGlvbl07CisgICAgW0NB
VHJhbnNhY3Rpb24gY29tbWl0XTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
</data>
<flag name="review"
          id="126468"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>