<?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>171622</bug_id>
          
          <creation_ts>2017-05-03 15:19:49 -0700</creation_ts>
          <short_desc>Make the VPIO audio unit a singleton, shared between multiple CaptureSources</short_desc>
          <delta_ts>2017-05-03 16:50:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304300</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-05-03 15:19:49 -0700</bug_when>
    <thetext>Make the VPIO audio unit a singleton, shared between multiple CaptureSources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304303</commentid>
    <comment_count>1</comment_count>
      <attachid>308967</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-05-03 15:24:04 -0700</bug_when>
    <thetext>Created attachment 308967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304305</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-05-03 15:25:28 -0700</bug_when>
    <thetext>rdar://problem/31848585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304366</commentid>
    <comment_count>3</comment_count>
      <attachid>308982</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-05-03 16:32:00 -0700</bug_when>
    <thetext>Created attachment 308982
Patch for Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304377</commentid>
    <comment_count>4</comment_count>
      <attachid>308982</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-03 16:50:22 -0700</bug_when>
    <thetext>Comment on attachment 308982
Patch for Landing

Clearing flags on attachment: 308982

Committed r216156: &lt;http://trac.webkit.org/changeset/216156&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308967</attachid>
            <date>2017-05-03 15:24:04 -0700</date>
            <delta_ts>2017-05-03 16:31:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171622-20170503152403.patch</filename>
            <type>text/plain</type>
            <size>39046</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTI3ZDA1YmU2OWJkNWJh
MjVjNTI1ZDI2YjU0NjI4NmExZWUwMTc5ZS4uNDZiNTIzZTM2NDEwOTNiNzY4MzVhYTg1MWU3MGMz
Yzk5NGI1MGRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE3LTA1LTAzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgdGhlIFZQSU8gYXVk
aW8gdW5pdCBhIHNpbmdsZXRvbiwgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgQ2FwdHVyZVNvdXJj
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYy
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIGltcGxlbW5ldGF0aW9uIG9mIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgaW50byBhIHNoYXJl
ZCBzaW5nbGV0b24gY2xhc3MsIENvcmVBdWRpb1NoYXJlZFVuaXQsCisgICAgICAgIHdoaWNoIHdp
bGwgc2VuZCBhdWRpbyB0byBlYWNoIG9mIGl0J3MgY2xpZW50IENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2VzLiBUaGUgZmlyc3QgcmVnaXN0ZXJlZCBjbGllbnQgd2lsbAorICAgICAgICBkZWZpbmUgdGhl
IHNldHRpbmdzIHVzZWQgYnkgdGhlIHNoYXJlZCB1bml0LgorCisgICAgICAgIERyaXZlLWJ5IGZp
eGVzOiBGaXggdXAgc2V0VXNlQVZGb3VuZGF0aW9uQXVkaW9DYXB0dXJlKCkgdG8gYWx3YXlzIGFj
Y2VwdCB0aGUgZmlyc3QgdmFsdWUgc2V0LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29y
ZUF1ZGlvU2hhcmVkVW5pdDo6aXNQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb1NoYXJlZFVuaXQ6Om1pY3JvcGhvbmVGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9T
aGFyZWRVbml0OjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hh
cmVkVW5pdDo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b3JlQXVkaW9TaGFyZWRVbml0OjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnByZWZlcnJlZElPQnVmZmVyU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlTWljcm9w
aG9uZVByb2MpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmln
dXJlU3BlYWtlclByb2MpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6
Y2hlY2tUaW1lc3RhbXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6
OnByb3ZpZGVTcGVha2VyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9TaGFyZWRV
bml0OjpzcGVha2VyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVk
VW5pdDo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb1NoYXJlZFVuaXQ6Om1pY3JvcGhvbmVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpD
b3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3JlQXVkaW9TaGFyZWRVbml0OjpkZWZhdWx0SW5wdXREZXZpY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjp+Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2Vs
bGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkU2FtcGxlUmF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpw
cmVmZXJyZWRJT0J1ZmZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9waG9uZVByb2MpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclBy
b2MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
Y2hlY2tUaW1lc3RhbXBzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhv
bmVTYW1wbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6Om1pY3JvcGhvbmVDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpjbGVhbnVwQXVkaW9Vbml0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXREZXZpY2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0
dXBBdWRpb1VuaXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnN1c3BlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6cmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OnNldFVzZUFWRm91bmRh
dGlvbkF1ZGlvQ2FwdHVyZSk6CisKIDIwMTctMDUtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzIHRv
IFN0eWxlOjpJbnZhbGlkYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwCmlu
ZGV4IDliOGI1MGU0M2VhYjg0NTBlNjVhNjFhODY3OGY5ZWViMWM2YzEyMzEuLmViZDcxZjg0MGNh
YzVkMjY5NDI4ZmUyNmI1ZjQ4ZDBmNjZjOTA1NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZS5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJl
RGV2aWNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVRp
bWVBVkZvdW5kYXRpb24uaCIKKyNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5oIgogI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbnZlcnRlci5oPgogI2luY2x1ZGUg
PEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KICNpbmNsdWRlIDxDb3JlTWVkaWEvQ01TeW5jLmg+CkBA
IC01OCw4NSArNTksMjA5IEBAIHB1YmxpYzoKIGNvbnN0IFVJbnQzMiBvdXRwdXRCdXMgPSAwOwog
Y29uc3QgVUludDMyIGlucHV0QnVzID0gMTsKIAotQ2FwdHVyZVNvdXJjZU9yRXJyb3IgQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IE1l
ZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQotewotICAgIFN0cmluZyBsYWJlbDsKLSAgICB1
aW50MzJfdCBwZXJzaXN0ZW50SUQgPSAwOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBhdXRvIGRl
dmljZSA9IENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5jb3JlQXVk
aW9EZXZpY2VXaXRoVUlEKGRldmljZUlEKTsKLSAgICBpZiAoIWRldmljZSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKK2NsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQgeworcHVibGljOgorICAgIHN0YXRp
YyBDb3JlQXVkaW9TaGFyZWRVbml0JiBzaW5nbGV0b24oKTsKIAotICAgIGxhYmVsID0gZGV2aWNl
LT5sYWJlbCgpOwotICAgIHBlcnNpc3RlbnRJRCA9IGRldmljZS0+ZGV2aWNlSUQoKTsKLSNlbGlm
IFBMQVRGT1JNKElPUykKLSAgICBhdXRvIGRldmljZSA9IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmF1ZGlvU2Vzc2lvbkRldmljZVdpdGhVSUQoZGV2aWNl
SUQpOwotICAgIGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4geyB9OworICAgIHZvaWQgYWRk
Q2xpZW50KENvcmVBdWRpb0NhcHR1cmVTb3VyY2UmKTsKKyAgICB2b2lkIHJlbW92ZUNsaWVudChD
b3JlQXVkaW9DYXB0dXJlU291cmNlJik7CiAKLSAgICBsYWJlbCA9IGRldmljZS0+bGFiZWwoKTsK
KyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0Rh
dGEoKTsKKyAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIHsgcmV0dXJuIG1faW9Vbml0U3RhcnRl
ZDsgfQorCisgICAgT1NTdGF0dXMgc3VzcGVuZCgpOworCisgICAgT1NTdGF0dXMgc2V0dXBBdWRp
b1VuaXRzKCk7CisgICAgdm9pZCBjbGVhbnVwQXVkaW9Vbml0cygpOworCisgICAgdm9pZCBhZGRF
Y2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYpOworICAgIHZvaWQg
cmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmKTsKKwor
ICAgIHN0YXRpYyBzaXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7CisKKyAgICBjb25zdCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG1pY3JvcGhvbmVGb3JtYXQoKSBjb25zdCB7IHJldHVy
biBtX21pY3JvcGhvbmVQcm9jRm9ybWF0OyB9CisKK3ByaXZhdGU6CisgICAgT1NTdGF0dXMgY29u
ZmlndXJlU3BlYWtlclByb2MoKTsKKyAgICBPU1N0YXR1cyBjb25maWd1cmVNaWNyb3Bob25lUHJv
YygpOworICAgIE9TU3RhdHVzIGRlZmF1bHRPdXRwdXREZXZpY2UodWludDMyX3QqKTsKKyAgICBP
U1N0YXR1cyBkZWZhdWx0SW5wdXREZXZpY2UodWludDMyX3QqKTsKKworICAgIHN0YXRpYyBPU1N0
YXR1cyBtaWNyb3Bob25lQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
KiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0
Kik7CisgICAgT1NTdGF0dXMgcHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJbnQzMiwgQXVk
aW9CdWZmZXJMaXN0Kik7CisKKyAgICBzdGF0aWMgT1NTdGF0dXMgc3BlYWtlckNhbGxiYWNrKHZv
aWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwg
VUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworICAgIE9TU3RhdHVzIHByb3ZpZGVT
cGVha2VyRGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0
YW1wJiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgVmVjdG9yPENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UqPiBtX2NsaWVudHM7CisKKyAgICBBdWRpb1VuaXQgbV9pb1Vu
aXQgeyBudWxscHRyIH07CisKKyAgICAvLyBPbmx5IHJlYWQvbW9kaWZpZWQgZnJvbSB0aGUgSU8g
dGhyZWFkLgorICAgIFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPj4gbV9hY3RpdmVT
b3VyY2VzOworCisgICAgZW51bSBRdWV1ZUFjdGlvbiB7IEFkZCwgUmVtb3ZlIH07CisgICAgVmVj
dG9yPHN0ZDo6cGFpcjxRdWV1ZUFjdGlvbiwgUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+PiBt
X3BlbmRpbmdTb3VyY2VzOworCisgICAgdWludDMyX3QgbV9jYXB0dXJlRGV2aWNlSUQgeyAwIH07
CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9taWNyb3Bob25lUHJvY0Zvcm1hdDsK
KyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX21pY3JvcGhvbmVTYW1wbGVCdWZm
ZXI7CisgICAgdWludDY0X3QgbV9sYXRlc3RNaWNUaW1lU3RhbXAgeyAwIH07CisKKyAgICBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9zcGVha2VyUHJvY0Zvcm1hdDsKKyAgICBSZWZQdHI8QXVk
aW9TYW1wbGVCdWZmZXJMaXN0PiBtX3NwZWFrZXJTYW1wbGVCdWZmZXI7CisKKyAgICBkb3VibGUg
bV9EVFNDb252ZXJzaW9uUmF0aW8geyAwIH07CisKKyAgICBib29sIG1faW9Vbml0SW5pdGlhbGl6
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pb1VuaXRTdGFydGVkIHsgZmFsc2UgfTsKKworICAg
IExvY2sgbV9wZW5kaW5nU291cmNlUXVldWVMb2NrOworICAgIExvY2sgbV9pbnRlcm5hbFN0YXRl
TG9jazsKKworICAgIGludDMyX3QgbV9zdXNwZW5kQ291bnQgeyAwIH07CisgICAgaW50MzJfdCBt
X3Byb2R1Y2luZ0NvdW50IHsgMCB9OworCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CisgICAgbXV0YWJs
ZSBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgbV9zdXBwb3J0ZWRDb25z
dHJhaW50czsKKyAgICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lk
IGNoZWNrVGltZXN0YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCYsIHVpbnQ2NF90LCBkb3VibGUp
OworCisgICAgU3RyaW5nIG1faW9Vbml0TmFtZTsKKyAgICB1aW50NjRfdCBtX3NwZWFrZXJQcm9j
c0NhbGxlZCB7IDAgfTsKKyAgICB1aW50NjRfdCBtX21pY3JvcGhvbmVQcm9jc0NhbGxlZCB7IDAg
fTsKICNlbmRpZgotICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0
dXJlU291cmNlKGRldmljZUlELCBsYWJlbCwgcGVyc2lzdGVudElEKSk7Cit9OwogCi0gICAgaWYg
KGNvbnN0cmFpbnRzKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc291cmNlLT5hcHBseUNvbnN0
cmFpbnRzKCpjb25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUoKS5maXJzdCk7CitDb3JlQXVkaW9TaGFyZWRVbml0
JiBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb3JlQXVkaW9TaGFyZWRVbml0PiBzaW5nbGV0b247CisgICAgcmV0dXJuIHNpbmds
ZXRvbjsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjphZGRDbGllbnQoQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZSYgY2xpZW50KQoreworICAgIG1fY2xpZW50cy5hcHBlbmQoJmNsaWVudCk7
Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVtb3ZlQ2xpZW50KENvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMucmVtb3ZlQWxsKCZjbGllbnQp
OworfQorCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmFkZEVjaG9DYW5jZWxsYXRpb25Tb3Vy
Y2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCit7CisgICAgaWYgKCFzb3VyY2Uuc2V0
T3V0cHV0Rm9ybWF0KG1fc3BlYWtlclByb2NGb3JtYXQpKSB7CisgICAgICAgIExPRyhNZWRpYSwg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmFkZEVjaG9DYW5jZWxsYXRpb25Tb3VyY2U6IHNvdXJjZSAl
cCBjb25maWd1cmVPdXRwdXQgZmFpbGVkIiwgJnNvdXJjZSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7CisK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2sp
OworICAgIG1fcGVuZGluZ1NvdXJjZXMuYXBwZW5kKHsgUXVldWVBY3Rpb246OkFkZCwgc291cmNl
IH0pOwogfQogCi1SZWFsdGltZU1lZGlhU291cmNlOjpBdWRpb0NhcHR1cmVGYWN0b3J5JiBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCkKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
cmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJj
ZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZh
Y3Rvcnk+IGZhY3Rvcnk7Ci0gICAgcmV0dXJuIGZhY3RvcnkuZ2V0KCk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKKyAgICBtX3BlbmRp
bmdTb3VyY2VzLmFwcGVuZCh7IFF1ZXVlQWN0aW9uOjpSZW1vdmUsIHNvdXJjZSB9KTsKIH0KIAot
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJp
bmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIGxhYmVsLCB1aW50MzJfdCBwZXJzaXN0ZW50SUQp
Ci0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlKGRldmljZUlELCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpBdWRpbywgbGFiZWwpCi0gICAgLCBtX2NhcHR1cmVEZXZpY2VJRChwZXJzaXN0ZW50
SUQpCitzaXplX3QgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJlZmVycmVkSU9CdWZmZXJTaXplKCkK
IHsKLSAgICBtX211dGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRT
ZXNzaW9uKCkuYnVmZmVyU2l6ZSgpOworfQogCi0gICAgc2V0Vm9sdW1lKDEuMCk7Ci0gICAgc2V0
U2FtcGxlUmF0ZShwcmVmZXJyZWRTYW1wbGVSYXRlKCkpOwotICAgIHNldEVjaG9DYW5jZWxsYXRp
b24odHJ1ZSk7CitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdHMo
KQoreworICAgIGlmIChtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQo
IW1fY2xpZW50cy5pc0VtcHR5KCkpOwogCiAgICAgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0
aW1lYmFzZUluZm87CiAgICAgbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOwogICAg
IG1fRFRTQ29udmVyc2lvblJhdGlvID0gMWUtOSAqIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJh
c2VJbmZvLm51bWVyKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLmRlbm9tKTsK
LX0KLQotQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKQot
ewotICAgIHN1c3BlbmQoKTsKLSAgICBjbGVhbnVwQXVkaW9Vbml0cygpOwogCi0gICAgbV9hY3Rp
dmVTb3VyY2VzLmNsZWFyKCk7Ci0gICAgbV9wZW5kaW5nU291cmNlcy5jbGVhcigpOworICAgIEF1
ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gaW9Vbml0RGVzY3JpcHRpb24gPSB7IGtBdWRpb1VuaXRU
eXBlX091dHB1dCwga0F1ZGlvVW5pdFN1YlR5cGVfVm9pY2VQcm9jZXNzaW5nSU8sIGtBdWRpb1Vu
aXRNYW51ZmFjdHVyZXJfQXBwbGUsIDAsIDAgfTsKKyAgICBBdWRpb0NvbXBvbmVudCBpb0NvbXBv
bmVudCA9IEF1ZGlvQ29tcG9uZW50RmluZE5leHQobnVsbHB0ciwgJmlvVW5pdERlc2NyaXB0aW9u
KTsKKyAgICBBU1NFUlQoaW9Db21wb25lbnQpOworICAgIGlmICghaW9Db21wb25lbnQpIHsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRz
KCVwKSB1bmFibGUgdG8gZmluZCB2cGlvIHVuaXQgY29tcG9uZW50IiwgdGhpcyk7CisgICAgICAg
IHJldHVybiAtMTsKKyAgICB9CiAKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgbV9zcGVha2VyUHJv
Y3NDYWxsZWQgPSAwOwotICAgIG1fbWljcm9waG9uZVByb2NzQ2FsbGVkICA9IDA7CisgICAgQ0ZT
dHJpbmdSZWYgbmFtZSA9IG51bGxwdHI7CisgICAgQXVkaW9Db21wb25lbnRDb3B5TmFtZShpb0Nv
bXBvbmVudCwgJm5hbWUpOworICAgIGlmIChuYW1lKSB7CisgICAgICAgIG1faW9Vbml0TmFtZSA9
IG5hbWU7CisgICAgICAgIENGUmVsZWFzZShuYW1lKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSBjcmVhdGVkIFwiJXNcIiBj
b21wb25lbnQiLCB0aGlzLCBtX2lvVW5pdE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQogI2Vu
ZGlmCi19CiAKLWRvdWJsZSBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcmVmZXJyZWRTYW1wbGVS
YXRlKCkKLXsKLSAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxl
UmF0ZSgpOwotfQorICAgIGF1dG8gZXJyID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhpb0Nv
bXBvbmVudCwgJm1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwg
IkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIG9w
ZW4gdnBpbyB1bml0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZl
cnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KIAotc2l6ZV90IENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnByZWZlcnJlZElPQnVmZmVyU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLmJ1ZmZlclNpemUoKTsKKyAgICB1aW50MzJfdCBwYXJhbSA9
IG1fY2xpZW50cy5maXJzdCgpLT5lY2hvQ2FuY2VsbGF0aW9uKCk7CisgICAgZXJyID0gQXVkaW9V
bml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBVVZvaWNlSU9Qcm9wZXJ0eV9Wb2ljZVByb2Nlc3Np
bmdFbmFibGVBR0MsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCAmcGFyYW0sIHNp
emVvZihwYXJhbSkpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8g
dW5pdCBlY2hvIGNhbmNlbGxhdGlvbiwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgcGFyYW0gPSAxOworICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
aW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5hYmxlSU8sIGtBdWRpb1VuaXRTY29w
ZV9JbnB1dCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisgICAgaWYgKGVycikg
eworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlv
VW5pdHMoJXApIHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IGlucHV0LCBlcnJvciAlZCAoJS40
cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOwor
ICAgIH0KKyNlbHNlCisgICAgaWYgKCFtX2NhcHR1cmVEZXZpY2VJRCkgeworICAgICAgICBlcnIg
PSBkZWZhdWx0SW5wdXREZXZpY2UoJm1fY2FwdHVyZURldmljZUlEKTsKKyAgICAgICAgaWYgKGVy
cikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgZXJyID0gQXVkaW9Vbml0
U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2
aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJm1fY2FwdHVyZURldmljZUlE
LCBzaXplb2YobV9jYXB0dXJlRGV2aWNlSUQpKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5h
YmxlIHRvIHNldCB2cGlvIHVuaXQgY2FwdHVyZSBkZXZpY2UgSUQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAg
fQorI2VuZGlmCisKKyAgICBlcnIgPSBjb25maWd1cmVNaWNyb3Bob25lUHJvYygpOworICAgIGlm
IChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBBdWRpb1VuaXRJbml0aWFs
aXplKG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgQXVkaW9Vbml0SW5pdGlhbGl6
ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9
IHRydWU7CisKKyAgICBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJvYygpOworICAgIGlmIChlcnIp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gZXJyOwogfQogCi1PU1N0YXR1cyBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYygpCitPU1N0YXR1
cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYygpCiB7CiAgICAg
QVVSZW5kZXJDYWxsYmFja1N0cnVjdCBjYWxsYmFjayA9IHsgbWljcm9waG9uZUNhbGxiYWNrLCB0
aGlzIH07CiAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1
ZGlvT3V0cHV0VW5pdFByb3BlcnR5X1NldElucHV0Q2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9H
bG9iYWwsIGlucHV0QnVzLCAmY2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpOwogICAgIGlmIChl
cnIpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmln
dXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IG1pYyBwcm9jLCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBM
T0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYygl
cCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgbWljIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQog
CkBAIC0xNDUsMTQgKzI3MCwxNCBAQCBPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpj
b25maWd1cmVNaWNyb3Bob25lUHJvYygpCiAgICAgVUludDMyIHNpemUgPSBzaXplb2YobWljcm9w
aG9uZVByb2NGb3JtYXQpOwogICAgIGVyciA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1faW9Vbml0
LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQs
IGlucHV0QnVzLCAmbWljcm9waG9uZVByb2NGb3JtYXQsICZzaXplKTsKICAgICBpZiAoZXJyKSB7
Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1p
Y3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1dCBzdHJlYW0gZm9ybWF0LCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBMT0co
TWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkg
dW5hYmxlIHRvIGdldCBvdXRwdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAK
LSAgICBtaWNyb3Bob25lUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGUoKTsKKyAg
ICBtaWNyb3Bob25lUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IG1fY2xpZW50cy5maXJzdCgpLT5z
YW1wbGVSYXRlKCk7CiAgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtB
dWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIGlu
cHV0QnVzLCAmbWljcm9waG9uZVByb2NGb3JtYXQsIHNpemUpOwogICAgIGlmIChlcnIpIHsKLSAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9w
aG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFi
bGUgdG8gc2V0IG91dHB1dCBzdHJlYW0gZm9ybWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAo
aW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIApAQCAt
MTYyLDEyICsyODcsMTIgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmln
dXJlTWljcm9waG9uZVByb2MoKQogICAgIHJldHVybiBlcnI7CiB9CiAKLU9TU3RhdHVzIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCkKK09TU3RhdHVzIENvcmVB
dWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCkKIHsKICAgICBBVVJlbmRlckNh
bGxiYWNrU3RydWN0IGNhbGxiYWNrID0geyBzcGVha2VyQ2FsbGJhY2ssIHRoaXMgfTsKICAgICBh
dXRvIGVyciA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVy
dHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAm
Y2FsbGJhY2ssIHNpemVvZihjYWxsYmFjaykpOwogICAgIGlmIChlcnIpIHsKLSAgICAgICAgTE9H
KE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2MoJXAp
IHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IHNwZWFrZXIgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJsZSB0byBzZXQgdnBp
byB1bml0IHNwZWFrZXIgcHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChj
aGFyKikmZXJyKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKQEAgLTE3NiwxNCArMzAx
LDE0IEBAIE9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQ
cm9jKCkKICAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihzcGVha2VyUHJvY0Zvcm1hdCk7CiAgICAg
ZXJyID0gQXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9T
dHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3BlYWtlclBy
b2NGb3JtYXQsICZzaXplKTsKICAgICBpZiAoZXJyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8g
Z2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6
OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3Jt
YXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAg
ICAgIHJldHVybiBlcnI7CiAgICAgfQogCi0gICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJh
dGUgPSBzYW1wbGVSYXRlKCk7CisgICAgc3BlYWtlclByb2NGb3JtYXQubVNhbXBsZVJhdGUgPSBt
X2NsaWVudHMuZmlyc3QoKS0+c2FtcGxlUmF0ZSgpOwogICAgIGVyciA9IEF1ZGlvVW5pdFNldFBy
b3BlcnR5KG1faW9Vbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIG91dHB1dEJ1cywgJnNwZWFrZXJQcm9jRm9ybWF0LCBzaXplKTsKICAg
ICBpZiAoZXJyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6
OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3Jt
YXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAg
ICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZVNwZWFrZXJQcm9j
KCVwKSB1bmFibGUgdG8gZ2V0IGlucHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAg
fQogCkBAIC0xOTMsMzIgKzMxOCwxNSBAQCBPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNl
Ojpjb25maWd1cmVTcGVha2VyUHJvYygpCiAgICAgcmV0dXJuIGVycjsKIH0KIAotdm9pZCBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjphZGRFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZSYgc291cmNlKQotewotICAgIGlmICghc291cmNlLnNldE91dHB1dEZvcm1hdCht
X3NwZWFrZXJQcm9jRm9ybWF0KSkgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjphZGRFY2hvQ2FuY2VsbGF0aW9uU291cmNlOiBzb3VyY2UgJXAgY29uZmlndXJl
T3V0cHV0IGZhaWxlZCIsICZzb3VyY2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNlUXVldWVMb2NrKTsKLSAg
ICBtX3BlbmRpbmdTb3VyY2VzLmFwcGVuZCh7IFF1ZXVlQWN0aW9uOjpBZGQsIHNvdXJjZSB9KTsK
LX0KLQotdm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9u
U291cmNlKEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQotewotICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7Ci0gICAgbV9wZW5kaW5n
U291cmNlcy5hcHBlbmQoeyBRdWV1ZUFjdGlvbjo6UmVtb3ZlLCBzb3VyY2UgfSk7Ci19Ci0KICNp
ZiAhTE9HX0RJU0FCTEVECi12b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0
YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1l
LCBkb3VibGUgaG9zdFRpbWUpCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0
YW1wcyhjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCB1aW50NjRfdCBzYW1wbGVUaW1l
LCBkb3VibGUgaG9zdFRpbWUpCiB7CiAgICAgaWYgKCF0aW1lU3RhbXAubVNhbXBsZVRpbWUgfHwg
c2FtcGxlVGltZSA9PSBtX2xhdGVzdE1pY1RpbWVTdGFtcCB8fCAhaG9zdFRpbWUpCi0gICAgICAg
IExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNoZWNrVGltZXN0YW1wczogdW51
c3VhbCB0aW1lc3RhbXBzLCBzYW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1l
ID0gJWxsZCwgaG9zdFRpbWUgJWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwg
aG9zdFRpbWUpOworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpjaGVj
a1RpbWVzdGFtcHM6IHVudXN1YWwgdGltZXN0YW1wcywgc2FtcGxlIHRpbWUgPSAlbGxkLCBwcmV2
aW91cyBzYW1wbGUgdGltZSA9ICVsbGQsIGhvc3RUaW1lICVmIiwgc2FtcGxlVGltZSwgbV9sYXRl
c3RNaWNUaW1lU3RhbXAsIGhvc3RUaW1lKTsKIH0KICNlbmRpZgogCi1PU1N0YXR1cyBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9u
RmxhZ3MmIC8qaW9BY3Rpb25GbGFncyovLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1w
LCBVSW50MzIgLyppbkJ1c051bWJlciovLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVm
ZmVyTGlzdCogaW9EYXRhKQorT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvdmlkZVNw
ZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiAvKmlvQWN0aW9uRmxhZ3MqLywg
Y29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIC8qaW5CdXNOdW1iZXIqLywg
VUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKIHsKICAgICAv
LyBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gdW5pdCBuZWVkcyBkYXRhIHRvIHBsYXkgdGhyb3VnaCB0
aGUgc3BlYWtlcnMuCiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMjI2LDcgKzMzNCw3IEBAIE9TU3Rh
dHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyYKICNlbmRpZgogCiAgICAgaWYgKG1fc3BlYWtlclNhbXBsZUJ1ZmZl
ci0+c2FtcGxlQ2FwYWNpdHkoKSA8IGluTnVtYmVyRnJhbWVzKSB7Ci0gICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2VyRGF0YTogc3BlYWtlciBz
YW1wbGUgYnVmZmVyIHNpemUgKCVkKSB0b28gc21hbGwgZm9yIGFtb3VudCBvZiBzYW1wbGUgZGF0
YSByZXF1ZXN0ZWQgKCVkKSEiLCBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBsZUNhcGFjaXR5
KCksIChpbnQpaW5OdW1iZXJGcmFtZXMpOworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9T
aGFyZWRVbml0Ojpwcm92aWRlU3BlYWtlckRhdGE6IHNwZWFrZXIgc2FtcGxlIGJ1ZmZlciBzaXpl
ICglZCkgdG9vIHNtYWxsIGZvciBhbW91bnQgb2Ygc2FtcGxlIGRhdGEgcmVxdWVzdGVkICglZCkh
IiwgbV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpLCAoaW50KWluTnVtYmVy
RnJhbWVzKTsKICAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwogICAgIH0KIApAQCAt
MjcyLDE1ICszODAsMTUgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJvdmlk
ZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJgogICAgIHJldHVybiBub0Vy
cjsKIH0KIAotT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3BlYWtlckNhbGxiYWNr
KHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25GbGFn
cywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIs
IFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCitPU1N0YXR1
cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1
ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJh
bWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKIHsKICAgICBBU1NFUlQoaW9BY3Rpb25GbGFn
cyk7CiAgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKLSAgICBhdXRvIGRhdGFTb3VyY2UgPSBzdGF0
aWNfY2FzdDxDb3JlQXVkaW9DYXB0dXJlU291cmNlKj4oaW5SZWZDb24pOworICAgIGF1dG8gZGF0
YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVBdWRpb1NoYXJlZFVuaXQqPihpblJlZkNvbik7CiAg
ICAgcmV0dXJuIGRhdGFTb3VyY2UtPnByb3ZpZGVTcGVha2VyRGF0YSgqaW9BY3Rpb25GbGFncywg
KmluVGltZVN0YW1wLCBpbkJ1c051bWJlciwgaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7CiB9CiAK
LU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxl
cyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9U
aW1lU3RhbXAmIHRpbWVTdGFtcCwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJG
cmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogLyppb0RhdGEqLykKK09TU3RhdHVzIENvcmVBdWRpb1No
YXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyYgaW9BY3Rpb25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAmIHRpbWVTdGFtcCwgVUlu
dDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCog
Lyppb0RhdGEqLykKIHsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgKyttX21pY3JvcGhvbmVQcm9j
c0NhbGxlZDsKQEAgLTI5MSw3ICszOTksNyBAQCBPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRgogICAg
IEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCA9IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlci0+
YnVmZmVyTGlzdCgpOwogICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0UmVuZGVyKG1faW9Vbml0LCAm
aW9BY3Rpb25GbGFncywgJnRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCAm
YnVmZmVyTGlzdCk7CiAgICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTWljcm9waG9uZVNhbXBsZXMoJXApIEF1ZGlvVW5pdFJl
bmRlciBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpwcm9jZXNz
TWljcm9waG9uZVNhbXBsZXMoJXApIEF1ZGlvVW5pdFJlbmRlciBmYWlsZWQgd2l0aCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICByZXR1cm4g
ZXJyOwogICAgIH0KIApAQCAtMzAzLDI3ICs0MTEsMzAgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlv
bkYKICAgICBtX2xhdGVzdE1pY1RpbWVTdGFtcCA9IHNhbXBsZVRpbWU7CiAgICAgbV9taWNyb3Bo
b25lU2FtcGxlQnVmZmVyLT5zZXRUaW1lcyhhZGp1c3RlZEhvc3RUaW1lLCBzYW1wbGVUaW1lKTsK
IAotCi0gICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShzYW1wbGVUaW1lLCBtX21p
Y3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZl
ci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51bWJlckZyYW1lcyk7
CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBtX2NsaWVudHMpIHsKKyAgICAgICAgaWYgKGNsaWVu
dC0+aXNQcm9kdWNpbmdEYXRhKCkpCisgICAgICAgICAgICBjbGllbnQtPmF1ZGlvU2FtcGxlc0F2
YWlsYWJsZShNZWRpYVRpbWUoc2FtcGxlVGltZSwgbV9taWNyb3Bob25lUHJvY0Zvcm1hdC5zYW1w
bGVSYXRlKCkpLCBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPmJ1ZmZlckxpc3QoKSwgbV9taWNy
b3Bob25lUHJvY0Zvcm1hdCwgaW5OdW1iZXJGcmFtZXMpOworICAgIH0KIAogICAgIHJldHVybiBu
b0VycjsKIH0KIAotT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6bWljcm9waG9uZUNh
bGxiYWNrKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rp
b25GbGFncywgY29uc3QgQXVkaW9UaW1lU3RhbXAqIGluVGltZVN0YW1wLCBVSW50MzIgaW5CdXNO
dW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCitP
U1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5S
ZWZDb24sIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBB
dWRpb1RpbWVTdGFtcCogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGlu
TnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKIHsKICAgICBBU1NFUlQoaW9B
Y3Rpb25GbGFncyk7CiAgICAgQVNTRVJUKGluVGltZVN0YW1wKTsKLSAgICBDb3JlQXVkaW9DYXB0
dXJlU291cmNlKiBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZSo+KGluUmVmQ29uKTsKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0KiBkYXRhU291cmNlID0gc3Rh
dGljX2Nhc3Q8Q29yZUF1ZGlvU2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKICAgICByZXR1cm4gZGF0
YVNvdXJjZS0+cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1l
U3RhbXAsIGluQnVzTnVtYmVyLCBpbk51bWJlckZyYW1lcywgaW9EYXRhKTsKIH0KIAotdm9pZCBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpjbGVhbnVwQXVkaW9Vbml0cygpCit2b2lkIENvcmVBdWRp
b1NoYXJlZFVuaXQ6OmNsZWFudXBBdWRpb1VuaXRzKCkKIHsKKyAgICBBU1NFUlQobV9jbGllbnRz
LmlzRW1wdHkoKSk7CiAgICAgaWYgKG1faW9Vbml0SW5pdGlhbGl6ZWQpIHsKICAgICAgICAgQVNT
RVJUKG1faW9Vbml0KTsKICAgICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRpYWxpemUo
bV9pb1VuaXQpOwogICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2xlYW51cEF1ZGlvVW5pdHMoJXApIEF1ZGlvVW5pdFVuaW5p
dGlhbGl6ZSBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNo
YXIqKSZlcnIpOworICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
Y2xlYW51cEF1ZGlvVW5pdHMoJXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSBmYWlsZWQgd2l0aCBl
cnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICBt
X2lvVW5pdEluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgfQogCkBAIC0zMzksOTcgKzQ1MCwxMyBA
QCB2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNsZWFudXBBdWRpb1VuaXRzKCkKICNlbmRp
ZgogfQogCi1PU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXREZXZp
Y2UodWludDMyX3QqIGRldmljZUlEKQotewotICAgIEFTU0VSVChtX2lvVW5pdCk7Ci0KLSAgICBV
SW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mKCpkZXZpY2VJRCk7Ci0gICAgYXV0byBlcnIgPSBB
dWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0N1
cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlucHV0QnVzLCBkZXZpY2VJRCwg
JnByb3BlcnR5U2l6ZSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdElucHV0RGV2aWNlKCVwKSB1bmFibGUgdG8gZ2V0IGRl
ZmF1bHQgaW5wdXQgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotT1NTdGF0dXMgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCkKLXsKLSAgICBpZiAobV9pb1VuaXQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXRE
ZXNjcmlwdGlvbiA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9W
b2ljZVByb2Nlc3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9Owot
ICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChu
dWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOwotICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Ci0g
ICAgaWYgKCFpb0NvbXBvbmVudCkgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBmaW5kIHZwaW8gdW5pdCBj
b21wb25lbnQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotI2lmICFMT0df
RElTQUJMRUQKLSAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKLSAgICBBdWRpb0NvbXBv
bmVudENvcHlOYW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7Ci0gICAgaWYgKG5hbWUpIHsKLSAgICAg
ICAgbV9pb1VuaXROYW1lID0gbmFtZTsKLSAgICAgICAgQ0ZSZWxlYXNlKG5hbWUpOwotICAgICAg
ICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXAp
IGNyZWF0ZWQgXCIlc1wiIGNvbXBvbmVudCIsIHRoaXMsIG1faW9Vbml0TmFtZS51dGY4KCkuZGF0
YSgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGF1dG8gZXJyID0gQXVkaW9Db21wb25lbnRJbnN0
YW5jZU5ldyhpb0NvbXBvbmVudCwgJm1faW9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAg
IExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkg
dW5hYmxlIHRvIG9wZW4gdnBpbyB1bml0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHVpbnQz
Ml90IHBhcmFtID0gZWNob0NhbmNlbGxhdGlvbigpOwotICAgIGVyciA9IEF1ZGlvVW5pdFNldFBy
b3BlcnR5KG1faW9Vbml0LCBrQVVWb2ljZUlPUHJvcGVydHlfVm9pY2VQcm9jZXNzaW5nRW5hYmxl
QUdDLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgJnBhcmFtLCBzaXplb2YocGFy
YW0pKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgZWNo
byBjYW5jZWxsYXRpb24sIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciop
JmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oSU9TKQot
ICAgIHBhcmFtID0gMTsKLSAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwg
a0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQs
IGlucHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotICAgIGlmIChlcnIpIHsKLSAgICAg
ICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVw
KSB1bmFibGUgdG8gZW5hYmxlIHZwaW8gdW5pdCBpbnB1dCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhp
cywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0j
ZWxzZQotICAgIGlmICghbV9jYXB0dXJlRGV2aWNlSUQpIHsKLSAgICAgICAgZXJyID0gZGVmYXVs
dElucHV0RGV2aWNlKCZtX2NhcHR1cmVEZXZpY2VJRCk7Ci0gICAgICAgIGlmIChlcnIpCi0gICAg
ICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGVyciA9IEF1ZGlvVW5pdFNldFByb3Bl
cnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1
ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZtX2NhcHR1cmVEZXZpY2VJRCwgc2l6ZW9m
KG1fY2FwdHVyZURldmljZUlEKSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEs
ICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBz
ZXQgdnBpbyB1bml0IGNhcHR1cmUgZGV2aWNlIElELCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAo
aW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgZXJyID0gY29uZmlndXJlTWljcm9waG9uZVByb2MoKTsKLSAgICBpZiAoZXJyKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShtX2lv
VW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIEF1ZGlvVW5pdEluaXRpYWxpemUoKSBmYWls
ZWQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAg
ICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSB0cnVlOwot
Ci0gICAgZXJyID0gY29uZmlndXJlU3BlYWtlclByb2MoKTsKLSAgICBpZiAoZXJyKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotdm9pZCBDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpzdGFydFByb2R1Y2luZ0RhdGEoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
KyAgICBpZiAoKyttX3Byb2R1Y2luZ0NvdW50ICE9IDEpCisgICAgICAgIHJldHVybjsKKwogICAg
IGlmIChtX2lvVW5pdFN0YXJ0ZWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDQ2LDQwICs0NzMs
NDQgQEAgdm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdGFydFByb2R1Y2luZ0RhdGEoKQog
CiAgICAgZXJyID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9pb1VuaXQpOwogICAgIGlmIChlcnIp
IHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnQoJXAp
IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1No
YXJlZFVuaXQ6OnN0YXJ0KCVwKSBBdWRpb091dHB1dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJv
ciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgbV9pb1VuaXRTdGFydGVkID0gdHJ1ZTsKLSAgICBtX211dGVkID0g
ZmFsc2U7CiB9CiAKLXZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0Rh
dGEoKQordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wUHJvZHVjaW5nRGF0YSgpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorICAgIGlmICgtLW1fcHJvZHVjaW5nQ291bnQp
CisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghbV9pb1VuaXQgfHwgIW1faW9Vbml0U3RhcnRl
ZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdG9w
KG1faW9Vbml0KTsKICAgICBpZiAoZXJyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OnN0b3AoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGgg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAg
TE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0
U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIq
KSZlcnIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9pb1VuaXRTdGFydGVkID0g
ZmFsc2U7Ci0gICAgbV9tdXRlZCA9IHRydWU7CiB9CiAKLU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnN1c3BlbmQoKQorT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3VzcGVu
ZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorICAgIG1fYWN0aXZlU291cmNl
cy5jbGVhcigpOworICAgIG1fcGVuZGluZ1NvdXJjZXMuY2xlYXIoKTsKKwogICAgIGlmIChtX2lv
VW5pdFN0YXJ0ZWQpIHsKICAgICAgICAgQVNTRVJUKG1faW9Vbml0KTsKICAgICAgICAgYXV0byBl
cnIgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKICAgICAgICAgaWYgKGVycikgewot
ICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKCVw
KSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMs
IChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9TaGFyZWRVbml0OjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGgg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKICAgICAgICAg
ICAgIHJldHVybiBlcnI7CiAgICAgICAgIH0KICAgICAgICAgbV9pb1VuaXRTdGFydGVkID0gZmFs
c2U7CkBAIC00ODksNyArNTIwLDcgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
c3VzcGVuZCgpCiAgICAgICAgIEFTU0VSVChtX2lvVW5pdCk7CiAgICAgICAgIGF1dG8gZXJyID0g
QXVkaW9Vbml0VW5pbml0aWFsaXplKG1faW9Vbml0KTsKICAgICAgICAgaWYgKGVycikgewotICAg
ICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVzdW1lKCVwKSBB
dWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywg
KGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRp
b1NoYXJlZFVuaXQ6OnJlc3VtZSglcCkgQXVkaW9Vbml0VW5pbml0aWFsaXplIGZhaWxlZCB3aXRo
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAg
ICAgICByZXR1cm4gZXJyOwogICAgICAgICB9CiAgICAgICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQg
PSBmYWxzZTsKQEAgLTQ5OCwyMCArNTI5LDk2IEBAIE9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnN1c3BlbmQoKQogICAgIHJldHVybiAwOwogfQogCi1PU1N0YXR1cyBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpyZXN1bWUoKQorT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVm
YXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZpY2VJRCkKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2lvVW5pdCk7Ci0gICAgQVNTRVJUKCFtX2lvVW5pdFN0
YXJ0ZWQpOwogCi0gICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7
Ci0gICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVybiBl
cnI7CisgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZigqZGV2aWNlSUQpOworICAgIGF1
dG8gZXJyID0gQXVkaW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQ
cm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywg
ZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAgIGlmIChlcnIpCisgICAgICAgIExPRyhNZWRp
YSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmRlZmF1bHRJbnB1dERldmljZSglcCkgdW5hYmxlIHRv
IGdldCBkZWZhdWx0IGlucHV0IGRldmljZSBJRCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAKKyAgICByZXR1cm4gZXJyOworfQorCitDYXB0dXJl
U291cmNlT3JFcnJvciBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCit7CisgICAg
U3RyaW5nIGxhYmVsOworICAgIHVpbnQzMl90IHBlcnNpc3RlbnRJRCA9IDA7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIGF1dG8gZGV2aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6
OnNpbmdsZXRvbigpLmNvcmVBdWRpb0RldmljZVdpdGhVSUQoZGV2aWNlSUQpOworICAgIGlmICgh
ZGV2aWNlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgbGFiZWwgPSBkZXZpY2UtPmxhYmVs
KCk7CisgICAgcGVyc2lzdGVudElEID0gZGV2aWNlLT5kZXZpY2VJRCgpOworI2VsaWYgUExBVEZP
Uk0oSU9TKQorICAgIGF1dG8gZGV2aWNlID0gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2luZ2xldG9uKCkuYXVkaW9TZXNzaW9uRGV2aWNlV2l0aFVJRChkZXZpY2VJRCk7Cisg
ICAgaWYgKCFkZXZpY2UpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBsYWJlbCA9IGRldmlj
ZS0+bGFiZWwoKTsKKyNlbmRpZgorICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlKGRldmljZUlELCBsYWJlbCwgcGVyc2lzdGVudElEKSk7CisKKyAg
ICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5
Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpLmZpcnN0KTsKICAgICB9Ci0gICAgbV9p
b1VuaXRTdGFydGVkID0gZmFsc2U7CisgICAgcmV0dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdU
Rk1vdmUoc291cmNlKSk7Cit9CiAKLSAgICByZXR1cm4gZXJyOworUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0
b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0b3J5LmdldCgpOworfQorCitDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNl
SUQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIHVpbnQzMl90IHBlcnNpc3RlbnRJRCkKKyAgICA6IFJl
YWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvLCBsYWJlbCkKKyAgICAsIG1fY2FwdHVyZURldmljZUlEKHBlcnNpc3RlbnRJRCkKK3sKKyAg
ICBtX211dGVkID0gdHJ1ZTsKKworICAgIHNldFZvbHVtZSgxLjApOworICAgIHNldFNhbXBsZVJh
dGUoQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxlUmF0ZSgpKTsKKyAgICBzZXRF
Y2hvQ2FuY2VsbGF0aW9uKHRydWUpOworCisgICAgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xl
dG9uKCkuYWRkQ2xpZW50KCp0aGlzKTsKK30KKworQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkNv
cmVBdWRpb0NhcHR1cmVTb3VyY2UoKQoreworICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmds
ZXRvbigpLnJlbW92ZUNsaWVudCgqdGhpcyk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNv
dXJjZSkKK3sKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5hZGRFY2hvQ2Fu
Y2VsbGF0aW9uU291cmNlKHNvdXJjZSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNv
dXJjZSkKK3sKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5yZW1vdmVFY2hv
Q2FuY2VsbGF0aW9uU291cmNlKHNvdXJjZSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBDb3JlQXVkaW9TaGFyZWRVbml0Ojpz
aW5nbGV0b24oKS5zdGFydFByb2R1Y2luZ0RhdGEoKTsKKyAgICBtX2lzUHJvZHVjaW5nRGF0YSA9
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLmlzUHJvZHVjaW5nRGF0YSgpOworCisg
ICAgaWYgKG1fYXVkaW9Tb3VyY2VQcm92aWRlciAmJiBtX2lzUHJvZHVjaW5nRGF0YSkKKyAgICAg
ICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyLT5wcmVwYXJlKCZDb3JlQXVkaW9TaGFyZWRVbml0Ojpz
aW5nbGV0b24oKS5taWNyb3Bob25lRm9ybWF0KCkuc3RyZWFtRGVzY3JpcHRpb24oKSk7Cit9CisK
K3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAg
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnN0b3BQcm9kdWNpbmdEYXRhKCk7Cisg
ICAgbV9pc1Byb2R1Y2luZ0RhdGEgPSBmYWxzZTsKKworICAgIGlmIChtX2F1ZGlvU291cmNlUHJv
dmlkZXIpCisgICAgICAgIG1fYXVkaW9Tb3VyY2VQcm92aWRlci0+dW5wcmVwYXJlKCk7CiB9CiAK
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC01NTMsNiArNjYwLDE3IEBAIHZvaWQgQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dGluZ3NEaWRDaGFuZ2UoKQogICAgIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OnNldHRpbmdzRGlkQ2hhbmdlKCk7CiB9CiAKK0F1ZGlvU291cmNlUHJvdmlkZXIq
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmF1ZGlvU291cmNlUHJvdmlkZXIoKQoreworICAgIGlm
ICghbV9hdWRpb1NvdXJjZVByb3ZpZGVyKSB7CisgICAgICAgIG1fYXVkaW9Tb3VyY2VQcm92aWRl
ciA9IFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpjcmVhdGUoKnRoaXMpOworICAgICAg
ICBpZiAobV9pc1Byb2R1Y2luZ0RhdGEpCisgICAgICAgICAgICBtX2F1ZGlvU291cmNlUHJvdmlk
ZXItPnByZXBhcmUoJkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLm1pY3JvcGhvbmVG
b3JtYXQoKS5zdHJlYW1EZXNjcmlwdGlvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9hdWRp
b1NvdXJjZVByb3ZpZGVyLmdldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
LmgKaW5kZXggMTNmNDE2Y2UxMjA1MjM3OTZkNmNhMjUyNDcwNDJiOWJjMjI5NmNlMi4uYTQwN2I1
MGM3MjAwZTIwMjg2NzM4ZDc1NjMxY2Q3M2I1MzY2MTc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZS5oCkBAIC00OSw2ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDsKIGNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKIGNs
YXNzIENhcHR1cmVEZXZpY2VJbmZvOworY2xhc3MgV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM7CiAKIGNsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRp
YVNvdXJjZSB7CiBwdWJsaWM6CkBAIC03MSwxMyArNzIsMTIgQEAgcHJpdmF0ZToKICAgICBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYg
bGFiZWwsIHVpbnQzMl90IHBlcnNpc3RlbnRJRCk7CiAgICAgdmlydHVhbCB+Q29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZSgpOwogCisgICAgZnJpZW5kIGNsYXNzIENvcmVBdWRpb1NoYXJlZFVuaXQ7CisK
ICAgICBib29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwogICAgIHZvaWQgc3RvcFByb2R1
Y2luZ0RhdGEoKSBmaW5hbDsKLSAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQotCi0gICAgT1NTdGF0dXMgc3VzcGVuZCgpOwot
ICAgIE9TU3RhdHVzIHJlc3VtZSgpOworICAgIGJvb2wgaXNQcm9kdWNpbmdEYXRhKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9pc1Byb2R1Y2luZ0RhdGE7IH0KIAogICAgIGJvb2wgYXBwbHlWb2x1
bWUoZG91YmxlKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBhcHBseVNhbXBs
ZVJhdGUoaW50KSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CkBAIC04Niw1OSArODYsMTggQEAg
cHJpdmF0ZToKICAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBh
YmlsaXRpZXMoKSBjb25zdCBmaW5hbDsKICAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5n
ZSgpIGZpbmFsOwotCi0gICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXRzKCk7Ci0gICAgdm9pZCBj
bGVhbnVwQXVkaW9Vbml0cygpOwotICAgIE9TU3RhdHVzIGNvbmZpZ3VyZVNwZWFrZXJQcm9jKCk7
Ci0gICAgT1NTdGF0dXMgY29uZmlndXJlTWljcm9waG9uZVByb2MoKTsKLSAgICBPU1N0YXR1cyBk
ZWZhdWx0T3V0cHV0RGV2aWNlKHVpbnQzMl90Kik7Ci0gICAgT1NTdGF0dXMgZGVmYXVsdElucHV0
RGV2aWNlKHVpbnQzMl90Kik7Ci0KLSAgICBzdGF0aWMgT1NTdGF0dXMgbWljcm9waG9uZUNhbGxi
YWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0
YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOwotICAgIE9TU3RhdHVzIHBy
b2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYsIGNvbnN0
IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVmZmVyTGlzdCopOwotCi0g
ICAgc3RhdGljIE9TU3RhdHVzIHNwZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRp
b0J1ZmZlckxpc3QqKTsKLSAgICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0
UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMy
LCBBdWRpb0J1ZmZlckxpc3QqKTsKLQotICAgIHN0YXRpYyBkb3VibGUgcHJlZmVycmVkU2FtcGxl
UmF0ZSgpOwotICAgIHN0YXRpYyBzaXplX3QgcHJlZmVycmVkSU9CdWZmZXJTaXplKCk7Ci0KLSAg
ICBBdWRpb1VuaXQgbV9pb1VuaXQgeyBudWxscHRyIH07Ci0KLSAgICAvLyBPbmx5IHJlYWQvbW9k
aWZpZWQgZnJvbSB0aGUgSU8gdGhyZWFkLgotICAgIFZlY3RvcjxSZWY8QXVkaW9TYW1wbGVEYXRh
U291cmNlPj4gbV9hY3RpdmVTb3VyY2VzOwotCi0gICAgZW51bSBRdWV1ZUFjdGlvbiB7IEFkZCwg
UmVtb3ZlIH07Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxRdWV1ZUFjdGlvbiwgUmVmPEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZT4+PiBtX3BlbmRpbmdTb3VyY2VzOworICAgIEF1ZGlvU291cmNlUHJvdmlk
ZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSBmaW5hbDsKIAogICAgIHVpbnQzMl90IG1fY2FwdHVy
ZURldmljZUlEIHsgMCB9OwogCi0gICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fbWljcm9w
aG9uZVByb2NGb3JtYXQ7Ci0gICAgUmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9taWNy
b3Bob25lU2FtcGxlQnVmZmVyOwotICAgIHVpbnQ2NF90IG1fbGF0ZXN0TWljVGltZVN0YW1wIHsg
MCB9OwotCi0gICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fc3BlYWtlclByb2NGb3JtYXQ7
Ci0gICAgUmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9zcGVha2VyU2FtcGxlQnVmZmVy
OwotCi0gICAgZG91YmxlIG1fRFRTQ29udmVyc2lvblJhdGlvIHsgMCB9OwotCi0gICAgYm9vbCBt
X2lvVW5pdEluaXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faW9Vbml0U3RhcnRlZCB7
IGZhbHNlIH07Ci0KLSAgICBMb2NrIG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jazsKLSAgICBMb2Nr
IG1faW50ZXJuYWxTdGF0ZUxvY2s7CisgICAgYm9vbCBtX2lzUHJvZHVjaW5nRGF0YSB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKIAogICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0
aWVzOwogICAgIG11dGFibGUgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
IG1fc3VwcG9ydGVkQ29uc3RyYWludHM7CiAgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7CiAKLSNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgdm9pZCBjaGVja1RpbWVzdGFtcHMoY29uc3QgQXVkaW9UaW1lU3RhbXAmLCB1
aW50NjRfdCwgZG91YmxlKTsKLQotICAgIFN0cmluZyBtX2lvVW5pdE5hbWU7Ci0gICAgdWludDY0
X3QgbV9zcGVha2VyUHJvY3NDYWxsZWQgeyAwIH07Ci0gICAgdWludDY0X3QgbV9taWNyb3Bob25l
UHJvY3NDYWxsZWQgeyAwIH07Ci0jZW5kaWYKKyAgICBSZWZQdHI8V2ViQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM+IG1fYXVkaW9Tb3VyY2VQcm92aWRlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcApp
bmRleCAzMTU4NzAxYTcxNTE1ODVjNGQ2ODRlZTUyYTdiY2ZiOWU5Y2JiMTU4Li44MTI0N2EzMDQy
N2QyYzg1MThiNjJiMzVhMjNlYmE1OTBiNjk4NTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCkBAIC00NywxMiArNDcsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OnNldFVzZUFWRm91
bmRhdGlvbkF1ZGlvQ2FwdHVyZShib29sIGVuYWJsZWQpCiB7Ci0gICAgc3RhdGljIGJvb2wgYWN0
aXZlID0gZmFsc2U7Ci0gICAgaWYgKGFjdGl2ZSA9PSBlbmFibGVkKQorICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPGJvb2w+IGFjdGl2ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoYWN0aXZlICYm
IGFjdGl2ZS52YWx1ZSgpID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFjdGl2
ZSA9IGVuYWJsZWQ7Ci0gICAgaWYgKGFjdGl2ZSkgeworICAgIGlmIChhY3RpdmUudmFsdWUoKSkg
ewogICAgICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5zZXRBdWRp
b0ZhY3RvcnkoQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKSk7CiAgICAgICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnNldEF1ZGlvQ2FwdHVyZURldmljZU1h
bmFnZXIoQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkpOwogICAgIH0gZWxzZSB7
Cg==
</data>
<flag name="review"
          id="330132"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308982</attachid>
            <date>2017-05-03 16:32:00 -0700</date>
            <delta_ts>2017-05-03 16:50:22 -0700</delta_ts>
            <desc>Patch for Landing</desc>
            <filename>bug-171622-20170503163200.patch</filename>
            <type>text/plain</type>
            <size>39146</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY0NDc4NTJhNmU0ZGVh
MGY2MzJjY2Q4MDMzNGRjYzY4NjJiYzBlNS4uMTAyMzBiMjIxZjFiOTIwYjIyZjZhOTI2MWJlMjUz
ZGZiNzJlZDM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE3LTA1LTAzICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgdGhlIFZQSU8gYXVk
aW8gdW5pdCBhIHNpbmdsZXRvbiwgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgQ2FwdHVyZVNvdXJj
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTYy
MgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBNb3ZlIHRo
ZSBpbXBsZW1uZXRhdGlvbiBvZiBDb3JlQXVkaW9DYXB0dXJlU291cmNlIGludG8gYSBzaGFyZWQg
c2luZ2xldG9uIGNsYXNzLCBDb3JlQXVkaW9TaGFyZWRVbml0LAorICAgICAgICB3aGljaCB3aWxs
IHNlbmQgYXVkaW8gdG8gZWFjaCBvZiBpdCdzIGNsaWVudCBDb3JlQXVkaW9DYXB0dXJlU291cmNl
cy4gVGhlIGZpcnN0IHJlZ2lzdGVyZWQgY2xpZW50IHdpbGwKKyAgICAgICAgZGVmaW5lIHRoZSBz
ZXR0aW5ncyB1c2VkIGJ5IHRoZSBzaGFyZWQgdW5pdC4KKworICAgICAgICBEcml2ZS1ieSBmaXhl
czogRml4IHVwIHNldFVzZUFWRm91bmRhdGlvbkF1ZGlvQ2FwdHVyZSgpIHRvIGFsd2F5cyBhY2Nl
cHQgdGhlIGZpcnN0IHZhbHVlIHNldC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb1NoYXJlZFVuaXQ6OmlzUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb3Jl
QXVkaW9TaGFyZWRVbml0OjptaWNyb3Bob25lRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9TaGFyZWRVbml0OjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hh
cmVkVW5pdDo6cmVtb3ZlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmFkZEVjaG9DYW5jZWxsYXRpb25Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29y
ZUF1ZGlvU2hhcmVkVW5pdDo6cmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb3JlQXVkaW9TaGFyZWRVbml0OjpwcmVmZXJyZWRJT0J1ZmZlclNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpb1VuaXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3VyZU1pY3JvcGhv
bmVQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3Vy
ZVNwZWFrZXJQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNo
ZWNrVGltZXN0YW1wcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9TaGFyZWRVbml0Ojpw
cm92aWRlU3BlYWtlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5p
dDo6c3BlYWtlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVu
aXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9TaGFyZWRVbml0OjptaWNyb3Bob25lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29y
ZUF1ZGlvU2hhcmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElucHV0RGV2aWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2U6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxh
dGlvblNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpy
ZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJl
ZmVycmVkSU9CdWZmZXJTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9j
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNo
ZWNrVGltZXN0YW1wcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3BlYWtlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25l
U2FtcGxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjptaWNyb3Bob25lQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y2xlYW51cEF1ZGlvVW5pdHMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZGVmYXVsdElucHV0RGV2aWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVw
QXVkaW9Vbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpzdXNwZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0Nh
cHR1cmVTb3VyY2U6OnJlc3VtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpzZXRVc2VBVkZvdW5kYXRp
b25BdWRpb0NhcHR1cmUpOgorCiAyMDE3LTA1LTAzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHRoZSBpbWFnZXJlYWR5IGV2
ZW50IHRvIHJlbGlhYmx5IHRlc3QgdGhlIGFzeW5jIGltYWdlIGRlY29kaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggOWI4YjUwZTQzZWFiODQ1MGU2NWE2MWE4Njc4
ZjllZWIxYzZjMTIzMS4uMzU0MmViMzA0ZjUxZGI0MWVjOTc4MDBiMjM4NDJmNDU2ZTQ1NDBjMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcApAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lZGlhVGltZUFWRm91bmRhdGlvbi5oIgorI2luY2x1ZGUgIldl
YkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmgiCiAjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1
ZGlvQ29udmVydGVyLmg+CiAjaW5jbHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5oPgogI2luY2x1
ZGUgPENvcmVNZWRpYS9DTVN5bmMuaD4KQEAgLTU4LDg1ICs1OSwyMDkgQEAgcHVibGljOgogY29u
c3QgVUludDMyIG91dHB1dEJ1cyA9IDA7CiBjb25zdCBVSW50MzIgaW5wdXRCdXMgPSAxOwogCi1D
YXB0dXJlU291cmNlT3JFcnJvciBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3Qg
U3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCi17
Ci0gICAgU3RyaW5nIGxhYmVsOwotICAgIHVpbnQzMl90IHBlcnNpc3RlbnRJRCA9IDA7Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIGF1dG8gZGV2aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNpbmdsZXRvbigpLmNvcmVBdWRpb0RldmljZVdpdGhVSUQoZGV2aWNlSUQpOwotICAg
IGlmICghZGV2aWNlKQotICAgICAgICByZXR1cm4geyB9OworY2xhc3MgQ29yZUF1ZGlvU2hhcmVk
VW5pdCB7CitwdWJsaWM6CisgICAgc3RhdGljIENvcmVBdWRpb1NoYXJlZFVuaXQmIHNpbmdsZXRv
bigpOwogCi0gICAgbGFiZWwgPSBkZXZpY2UtPmxhYmVsKCk7Ci0gICAgcGVyc2lzdGVudElEID0g
ZGV2aWNlLT5kZXZpY2VJRCgpOwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgIGF1dG8gZGV2aWNl
ID0gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkuYXVkaW9T
ZXNzaW9uRGV2aWNlV2l0aFVJRChkZXZpY2VJRCk7Ci0gICAgaWYgKCFkZXZpY2UpCi0gICAgICAg
IHJldHVybiB7IH07CisgICAgdm9pZCBhZGRDbGllbnQoQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSYp
OworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENvcmVBdWRpb0NhcHR1cmVTb3VyY2UmKTsKIAotICAg
IGxhYmVsID0gZGV2aWNlLT5sYWJlbCgpOworICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCk7
CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpOworICAgIGJvb2wgaXNQcm9kdWNpbmdEYXRh
KCkgeyByZXR1cm4gbV9pb1VuaXRTdGFydGVkOyB9CisKKyAgICBPU1N0YXR1cyBzdXNwZW5kKCk7
CisKKyAgICBPU1N0YXR1cyBzZXR1cEF1ZGlvVW5pdHMoKTsKKyAgICB2b2lkIGNsZWFudXBBdWRp
b1VuaXRzKCk7CisKKyAgICB2b2lkIGFkZEVjaG9DYW5jZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1w
bGVEYXRhU291cmNlJik7CisgICAgdm9pZCByZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZSYpOworCisgICAgc3RhdGljIHNpemVfdCBwcmVmZXJyZWRJT0J1
ZmZlclNpemUoKTsKKworICAgIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgbWljcm9w
aG9uZUZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWljcm9waG9uZVByb2NGb3JtYXQ7IH0KKwor
cHJpdmF0ZToKKyAgICBPU1N0YXR1cyBjb25maWd1cmVTcGVha2VyUHJvYygpOworICAgIE9TU3Rh
dHVzIGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCk7CisgICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1
dERldmljZSh1aW50MzJfdCopOworICAgIE9TU3RhdHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50
MzJfdCopOworCisgICAgc3RhdGljIE9TU3RhdHVzIG1pY3JvcGhvbmVDYWxsYmFjayh2b2lkKiwg
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQz
MiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKyAgICBPU1N0YXR1cyBwcm9jZXNzTWljcm9w
aG9uZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHN0YXRpYyBP
U1N0YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
KiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0
Kik7CisgICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlv
bkZsYWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZm
ZXJMaXN0Kik7CisKKyAgICBWZWN0b3I8Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSo+IG1fY2xpZW50
czsKKworICAgIEF1ZGlvVW5pdCBtX2lvVW5pdCB7IG51bGxwdHIgfTsKKworICAgIC8vIE9ubHkg
cmVhZC9tb2RpZmllZCBmcm9tIHRoZSBJTyB0aHJlYWQuCisgICAgVmVjdG9yPFJlZjxBdWRpb1Nh
bXBsZURhdGFTb3VyY2U+PiBtX2FjdGl2ZVNvdXJjZXM7CisKKyAgICBlbnVtIFF1ZXVlQWN0aW9u
IHsgQWRkLCBSZW1vdmUgfTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFF1ZXVlQWN0aW9uLCBSZWY8
QXVkaW9TYW1wbGVEYXRhU291cmNlPj4+IG1fcGVuZGluZ1NvdXJjZXM7CisKKyAgICB1aW50MzJf
dCBtX2NhcHR1cmVEZXZpY2VJRCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biBtX21pY3JvcGhvbmVQcm9jRm9ybWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q+IG1fbWljcm9waG9uZVNhbXBsZUJ1ZmZlcjsKKyAgICB1aW50NjRfdCBtX2xhdGVzdE1pY1Rp
bWVTdGFtcCB7IDAgfTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFrZXJQ
cm9jRm9ybWF0OworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fc3BlYWtlclNh
bXBsZUJ1ZmZlcjsKKworICAgIGRvdWJsZSBtX0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKKwor
ICAgIGJvb2wgbV9pb1VuaXRJbml0aWFsaXplZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lvVW5p
dFN0YXJ0ZWQgeyBmYWxzZSB9OworCisgICAgTG9jayBtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2s7
CisgICAgTG9jayBtX2ludGVybmFsU3RhdGVMb2NrOworCisgICAgaW50MzJfdCBtX3N1c3BlbmRD
b3VudCB7IDAgfTsKKyAgICBpbnQzMl90IG1fcHJvZHVjaW5nQ291bnQgeyAwIH07CisKKyAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBt
X2NhcGFiaWxpdGllczsKKyAgICBtdXRhYmxlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRD
b25zdHJhaW50cyBtX3N1cHBvcnRlZENvbnN0cmFpbnRzOworICAgIG11dGFibGUgc3RkOjpvcHRp
b25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworCisj
aWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgY2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGlt
ZVN0YW1wJiwgdWludDY0X3QsIGRvdWJsZSk7CisKKyAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwor
ICAgIHVpbnQ2NF90IG1fc3BlYWtlclByb2NzQ2FsbGVkIHsgMCB9OworICAgIHVpbnQ2NF90IG1f
bWljcm9waG9uZVByb2NzQ2FsbGVkIHsgMCB9OwogI2VuZGlmCi0gICAgYXV0byBzb3VyY2UgPSBh
ZG9wdFJlZigqbmV3IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlSUQsIGxhYmVsLCBwZXJz
aXN0ZW50SUQpKTsKK307CiAKLSAgICBpZiAoY29uc3RyYWludHMpIHsKLSAgICAgICAgYXV0byBy
ZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKLSAgICAgICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpLmZp
cnN0KTsKK0NvcmVBdWRpb1NoYXJlZFVuaXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRv
bigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvcmVBdWRpb1NoYXJlZFVuaXQ+IHNp
bmdsZXRvbjsKKyAgICByZXR1cm4gc2luZ2xldG9uOworfQorCit2b2lkIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmFkZENsaWVudChDb3JlQXVkaW9DYXB0dXJlU291cmNlJiBjbGllbnQpCit7CisgICAg
bV9jbGllbnRzLmFwcGVuZCgmY2xpZW50KTsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpyZW1vdmVDbGllbnQoQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSYgY2xpZW50KQoreworICAgIG1f
Y2xpZW50cy5yZW1vdmVBbGwoJmNsaWVudCk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5p
dDo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJjZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJj
ZSkKK3sKKyAgICBpZiAoIXNvdXJjZS5zZXRPdXRwdXRGb3JtYXQobV9zcGVha2VyUHJvY0Zvcm1h
dCkpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6YWRkRWNob0Nh
bmNlbGxhdGlvblNvdXJjZTogc291cmNlICVwIGNvbmZpZ3VyZU91dHB1dCBmYWlsZWQiLCAmc291
cmNlKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9y
RXJyb3IoV1RGTW92ZShzb3VyY2UpKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fcGVuZGluZ1NvdXJjZVF1ZXVlTG9jayk7CisgICAgbV9wZW5kaW5nU291cmNlcy5hcHBlbmQo
eyBRdWV1ZUFjdGlvbjo6QWRkLCBzb3VyY2UgfSk7CiB9CiAKLVJlYWx0aW1lTWVkaWFTb3VyY2U6
OkF1ZGlvQ2FwdHVyZUZhY3RvcnkmIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmZhY3RvcnkoKQor
dm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZSYgc291cmNlKQogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeT4gZmFjdG9yeTsKLSAgICByZXR1cm4gZmFj
dG9yeS5nZXQoKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BlbmRpbmdTb3Vy
Y2VRdWV1ZUxvY2spOworICAgIG1fcGVuZGluZ1NvdXJjZXMuYXBwZW5kKHsgUXVldWVBY3Rpb246
OlJlbW92ZSwgc291cmNlIH0pOwogfQogCi1Db3JlQXVkaW9DYXB0dXJlU291cmNlOjpDb3JlQXVk
aW9DYXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbGFi
ZWwsIHVpbnQzMl90IHBlcnNpc3RlbnRJRCkKLSAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2
aWNlSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvLCBsYWJlbCkKLSAgICAsIG1f
Y2FwdHVyZURldmljZUlEKHBlcnNpc3RlbnRJRCkKK3NpemVfdCBDb3JlQXVkaW9TaGFyZWRVbml0
OjpwcmVmZXJyZWRJT0J1ZmZlclNpemUoKQogewotICAgIG1fbXV0ZWQgPSB0cnVlOworICAgIHJl
dHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCk7Cit9CiAKLSAg
ICBzZXRWb2x1bWUoMS4wKTsKLSAgICBzZXRTYW1wbGVSYXRlKHByZWZlcnJlZFNhbXBsZVJhdGUo
KSk7Ci0gICAgc2V0RWNob0NhbmNlbGxhdGlvbih0cnVlKTsKK09TU3RhdHVzIENvcmVBdWRpb1No
YXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0cygpCit7CisgICAgaWYgKG1faW9Vbml0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIEFTU0VSVCghbV9jbGllbnRzLmlzRW1wdHkoKSk7CiAKICAgICBt
YWNoX3RpbWViYXNlX2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKICAgICBtYWNoX3RpbWViYXNl
X2luZm8oJnRpbWViYXNlSW5mbyk7CiAgICAgbV9EVFNDb252ZXJzaW9uUmF0aW8gPSAxZS05ICog
c3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91
YmxlPih0aW1lYmFzZUluZm8uZGVub20pOwotfQotCi1Db3JlQXVkaW9DYXB0dXJlU291cmNlOjp+
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSgpCi17Ci0gICAgc3VzcGVuZCgpOwotICAgIGNsZWFudXBB
dWRpb1VuaXRzKCk7CiAKLSAgICBtX2FjdGl2ZVNvdXJjZXMuY2xlYXIoKTsKLSAgICBtX3BlbmRp
bmdTb3VyY2VzLmNsZWFyKCk7CisgICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBpb1VuaXRE
ZXNjcmlwdGlvbiA9IHsga0F1ZGlvVW5pdFR5cGVfT3V0cHV0LCBrQXVkaW9Vbml0U3ViVHlwZV9W
b2ljZVByb2Nlc3NpbmdJTywga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZSwgMCwgMCB9Owor
ICAgIEF1ZGlvQ29tcG9uZW50IGlvQ29tcG9uZW50ID0gQXVkaW9Db21wb25lbnRGaW5kTmV4dChu
dWxscHRyLCAmaW9Vbml0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChpb0NvbXBvbmVudCk7Cisg
ICAgaWYgKCFpb0NvbXBvbmVudCkgeworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBmaW5kIHZwaW8gdW5pdCBj
b21wb25lbnQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogI2lmICFMT0df
RElTQUJMRUQKLSAgICBtX3NwZWFrZXJQcm9jc0NhbGxlZCA9IDA7Ci0gICAgbV9taWNyb3Bob25l
UHJvY3NDYWxsZWQgID0gMDsKKyAgICBDRlN0cmluZ1JlZiBuYW1lID0gbnVsbHB0cjsKKyAgICBB
dWRpb0NvbXBvbmVudENvcHlOYW1lKGlvQ29tcG9uZW50LCAmbmFtZSk7CisgICAgaWYgKG5hbWUp
IHsKKyAgICAgICAgbV9pb1VuaXROYW1lID0gbmFtZTsKKyAgICAgICAgQ0ZSZWxlYXNlKG5hbWUp
OworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlv
VW5pdHMoJXApIGNyZWF0ZWQgXCIlc1wiIGNvbXBvbmVudCIsIHRoaXMsIG1faW9Vbml0TmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CiAjZW5kaWYKLX0KIAotZG91YmxlIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OnByZWZlcnJlZFNhbXBsZVJhdGUoKQotewotICAgIHJldHVybiBBdWRpb1Nlc3Np
b246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19CisgICAgYXV0byBlcnIgPSBBdWRp
b0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmbV9pb1VuaXQpOworICAgIGlmIChl
cnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBB
dWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9yICVkICglLjRzKSIs
IHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAg
fQogCi1zaXplX3QgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJlZmVycmVkSU9CdWZmZXJTaXpl
KCkKLXsKLSAgICByZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuYnVmZmVyU2l6
ZSgpOworICAgIHVpbnQzMl90IHBhcmFtID0gbV9jbGllbnRzLmZpcnN0KCktPmVjaG9DYW5jZWxs
YXRpb24oKTsKKyAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0FVVm9p
Y2VJT1Byb3BlcnR5X1ZvaWNlUHJvY2Vzc2luZ0VuYWJsZUFHQywga0F1ZGlvVW5pdFNjb3BlX0ds
b2JhbCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisgICAgaWYgKGVycikgewor
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5p
dHMoJXApIHVuYWJsZSB0byBzZXQgdnBpbyB1bml0IGVjaG8gY2FuY2VsbGF0aW9uLCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4g
ZXJyOworICAgIH0KKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBwYXJhbSA9IDE7CisgICAgZXJy
ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0
eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCBpbnB1dEJ1cywgJnBhcmFtLCBzaXpl
b2YocGFyYW0pKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIGVuYWJsZSB2cGlv
IHVuaXQgaW5wdXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
cik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoIW1fY2FwdHVy
ZURldmljZUlEKSB7CisgICAgICAgIGVyciA9IGRlZmF1bHRJbnB1dERldmljZSgmbV9jYXB0dXJl
RGV2aWNlSUQpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAg
ICB9CisKKyAgICBlcnIgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvT3V0
cHV0VW5pdFByb3BlcnR5X0N1cnJlbnREZXZpY2UsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlu
cHV0QnVzLCAmbV9jYXB0dXJlRGV2aWNlSUQsIHNpemVvZihtX2NhcHR1cmVEZXZpY2VJRCkpOwor
ICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBjYXB0dXJlIGRl
dmljZSBJRCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsK
KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisjZW5kaWYKKworICAgIGVyciA9IGNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKCk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIGVyciA9IEF1ZGlvVW5pdEluaXRpYWxpemUobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsK
KyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1Vu
aXRzKCVwKSBBdWRpb1VuaXRJbml0aWFsaXplKCkgZmFpbGVkLCBlcnJvciAlZCAoJS40cykiLCB0
aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KyAgICBtX2lvVW5pdEluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGVyciA9IGNvbmZpZ3VyZVNw
ZWFrZXJQcm9jKCk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiBlcnI7CiB9CiAKLU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKCkKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OmNvbmZpZ3Vy
ZU1pY3JvcGhvbmVQcm9jKCkKIHsKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGNhbGxiYWNr
ID0geyBtaWNyb3Bob25lQ2FsbGJhY2ssIHRoaXMgfTsKICAgICBhdXRvIGVyciA9IEF1ZGlvVW5p
dFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfU2V0SW5wdXRD
YWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgaW5wdXRCdXMsICZjYWxsYmFjaywgc2l6
ZW9mKGNhbGxiYWNrKSk7CiAgICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRv
IHNldCB2cGlvIHVuaXQgbWljIHByb2MsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6
OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBtaWMg
cHJvYywgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKICAg
ICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKQEAgLTE0NSwxNCArMjcwLDE0IEBAIE9TU3RhdHVz
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCkKICAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihtaWNyb3Bob25lUHJvY0Zvcm1hdCk7CiAgICAgZXJyID0gQXVk
aW9Vbml0R2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3Jt
YXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1h
dCwgJnNpemUpOwogICAgIGlmIChlcnIpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBnZXQg
b3V0cHV0IHN0cmVhbSBmb3JtYXQsIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAo
Y2hhciopJmVycik7CisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNv
bmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCVwKSB1bmFibGUgdG8gZ2V0IG91dHB1dCBzdHJlYW0gZm9y
bWF0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAg
ICAgICByZXR1cm4gZXJyOwogICAgIH0KIAotICAgIG1pY3JvcGhvbmVQcm9jRm9ybWF0Lm1TYW1w
bGVSYXRlID0gc2FtcGxlUmF0ZSgpOworICAgIG1pY3JvcGhvbmVQcm9jRm9ybWF0Lm1TYW1wbGVS
YXRlID0gbV9jbGllbnRzLmZpcnN0KCktPnNhbXBsZVJhdGUoKTsKICAgICBlcnIgPSBBdWRpb1Vu
aXRTZXRQcm9wZXJ0eShtX2lvVW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwg
a0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgaW5wdXRCdXMsICZtaWNyb3Bob25lUHJvY0Zvcm1hdCwg
c2l6ZSk7CiAgICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYyglcCkgdW5hYmxlIHRvIHNldCBvdXRw
dXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFy
KikmZXJyKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmln
dXJlTWljcm9waG9uZVByb2MoJXApIHVuYWJsZSB0byBzZXQgb3V0cHV0IHN0cmVhbSBmb3JtYXQs
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAg
IHJldHVybiBlcnI7CiAgICAgfQogCkBAIC0xNjIsMTIgKzI4NywxMiBAQCBPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpjb25maWd1cmVNaWNyb3Bob25lUHJvYygpCiAgICAgcmV0dXJu
IGVycjsKIH0KIAotT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3Bl
YWtlclByb2MoKQorT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtl
clByb2MoKQogewogICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgY2FsbGJhY2sgPSB7IHNwZWFr
ZXJDYWxsYmFjaywgdGhpcyB9OwogICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5p
dFNjb3BlX0lucHV0LCBvdXRwdXRCdXMsICZjYWxsYmFjaywgc2l6ZW9mKGNhbGxiYWNrKSk7CiAg
ICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNl
Ojpjb25maWd1cmVTcGVha2VyUHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtl
ciBwcm9jLCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwor
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0Ojpjb25maWd1cmVTcGVha2Vy
UHJvYyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgc3BlYWtlciBwcm9jLCBlcnJvciAlZCAo
JS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwogICAgICAgICByZXR1cm4gZXJy
OwogICAgIH0KIApAQCAtMTc2LDE0ICszMDEsMTQgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2MoKQogICAgIFVJbnQzMiBzaXplID0gc2l6ZW9m
KHNwZWFrZXJQcm9jRm9ybWF0KTsKICAgICBlcnIgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX2lv
VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lu
cHV0LCBvdXRwdXRCdXMsICZzcGVha2VyUHJvY0Zvcm1hdCwgJnNpemUpOwogICAgIGlmIChlcnIp
IHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJl
U3BlYWtlclByb2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJs
ZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKLSAgICBz
cGVha2VyUHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGUoKTsKKyAgICBzcGVha2Vy
UHJvY0Zvcm1hdC5tU2FtcGxlUmF0ZSA9IG1fY2xpZW50cy5maXJzdCgpLT5zYW1wbGVSYXRlKCk7
CiAgICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb1VuaXRQcm9w
ZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgb3V0cHV0QnVzLCAmc3Bl
YWtlclByb2NGb3JtYXQsIHNpemUpOwogICAgIGlmIChlcnIpIHsKLSAgICAgICAgTE9HKE1lZGlh
LCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJs
ZSB0byBnZXQgaW5wdXQgc3RyZWFtIGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVk
VW5pdDo6Y29uZmlndXJlU3BlYWtlclByb2MoJXApIHVuYWJsZSB0byBnZXQgaW5wdXQgc3RyZWFt
IGZvcm1hdCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsK
ICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAKQEAgLTE5MywzMiArMzE4LDE1IEBAIE9TU3Rh
dHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNvbmZpZ3VyZVNwZWFrZXJQcm9jKCkKICAgICBy
ZXR1cm4gZXJyOwogfQogCi12b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmFkZEVjaG9DYW5j
ZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBzb3VyY2UpCi17Ci0gICAgaWYg
KCFzb3VyY2Uuc2V0T3V0cHV0Rm9ybWF0KG1fc3BlYWtlclByb2NGb3JtYXQpKSB7Ci0gICAgICAg
IExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmFkZEVjaG9DYW5jZWxsYXRpb25T
b3VyY2U6IHNvdXJjZSAlcCBjb25maWd1cmVPdXRwdXQgZmFpbGVkIiwgJnNvdXJjZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3Bl
bmRpbmdTb3VyY2VRdWV1ZUxvY2spOwotICAgIG1fcGVuZGluZ1NvdXJjZXMuYXBwZW5kKHsgUXVl
dWVBY3Rpb246OkFkZCwgc291cmNlIH0pOwotfQotCi12b2lkIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnJlbW92ZUVjaG9DYW5jZWxsYXRpb25Tb3VyY2UoQXVkaW9TYW1wbGVEYXRhU291cmNlJiBz
b3VyY2UpCi17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9wZW5kaW5nU291cmNl
UXVldWVMb2NrKTsKLSAgICBtX3BlbmRpbmdTb3VyY2VzLmFwcGVuZCh7IFF1ZXVlQWN0aW9uOjpS
ZW1vdmUsIHNvdXJjZSB9KTsKLX0KLQogI2lmICFMT0dfRElTQUJMRUQKLXZvaWQgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6Y2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1l
U3RhbXAsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKK3ZvaWQgQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6Y2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiB0aW1l
U3RhbXAsIHVpbnQ2NF90IHNhbXBsZVRpbWUsIGRvdWJsZSBob3N0VGltZSkKIHsKICAgICBpZiAo
IXRpbWVTdGFtcC5tU2FtcGxlVGltZSB8fCBzYW1wbGVUaW1lID09IG1fbGF0ZXN0TWljVGltZVN0
YW1wIHx8ICFob3N0VGltZSkKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6Y2hlY2tUaW1lc3RhbXBzOiB1bnVzdWFsIHRpbWVzdGFtcHMsIHNhbXBsZSB0aW1lID0g
JWxsZCwgcHJldmlvdXMgc2FtcGxlIHRpbWUgPSAlbGxkLCBob3N0VGltZSAlZiIsIHNhbXBsZVRp
bWUsIG1fbGF0ZXN0TWljVGltZVN0YW1wLCBob3N0VGltZSk7CisgICAgICAgIExPRyhNZWRpYSwg
IkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmNoZWNrVGltZXN0YW1wczogdW51c3VhbCB0aW1lc3RhbXBz
LCBzYW1wbGUgdGltZSA9ICVsbGQsIHByZXZpb3VzIHNhbXBsZSB0aW1lID0gJWxsZCwgaG9zdFRp
bWUgJWYiLCBzYW1wbGVUaW1lLCBtX2xhdGVzdE1pY1RpbWVTdGFtcCwgaG9zdFRpbWUpOwogfQog
I2VuZGlmCiAKLU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb3ZpZGVTcGVha2Vy
RGF0YShBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyYgLyppb0FjdGlvbkZsYWdzKi8sIGNvbnN0
IEF1ZGlvVGltZVN0YW1wJiB0aW1lU3RhbXAsIFVJbnQzMiAvKmluQnVzTnVtYmVyKi8sIFVJbnQz
MiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCitPU1N0YXR1cyBDb3Jl
QXVkaW9TaGFyZWRVbml0Ojpwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9u
RmxhZ3MmIC8qaW9BY3Rpb25GbGFncyovLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1w
LCBVSW50MzIgLyppbkJ1c051bWJlciovLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVm
ZmVyTGlzdCogaW9EYXRhKQogewogICAgIC8vIENhbGxlZCB3aGVuIHRoZSBhdWRpbyB1bml0IG5l
ZWRzIGRhdGEgdG8gcGxheSB0aHJvdWdoIHRoZSBzcGVha2Vycy4KICNpZiAhTE9HX0RJU0FCTEVE
CkBAIC0yMjYsNyArMzM0LDcgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJv
dmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJgogI2VuZGlmCiAKICAg
ICBpZiAobV9zcGVha2VyU2FtcGxlQnVmZmVyLT5zYW1wbGVDYXBhY2l0eSgpIDwgaW5OdW1iZXJG
cmFtZXMpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cHJv
dmlkZVNwZWFrZXJEYXRhOiBzcGVha2VyIHNhbXBsZSBidWZmZXIgc2l6ZSAoJWQpIHRvbyBzbWFs
bCBmb3IgYW1vdW50IG9mIHNhbXBsZSBkYXRhIHJlcXVlc3RlZCAoJWQpISIsIG1fc3BlYWtlclNh
bXBsZUJ1ZmZlci0+c2FtcGxlQ2FwYWNpdHkoKSwgKGludClpbk51bWJlckZyYW1lcyk7CisgICAg
ICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnByb3ZpZGVTcGVha2VyRGF0YTog
c3BlYWtlciBzYW1wbGUgYnVmZmVyIHNpemUgKCVkKSB0b28gc21hbGwgZm9yIGFtb3VudCBvZiBz
YW1wbGUgZGF0YSByZXF1ZXN0ZWQgKCVkKSEiLCBtX3NwZWFrZXJTYW1wbGVCdWZmZXItPnNhbXBs
ZUNhcGFjaXR5KCksIChpbnQpaW5OdW1iZXJGcmFtZXMpOwogICAgICAgICByZXR1cm4ga0F1ZGlv
X1BhcmFtRXJyb3I7CiAgICAgfQogCkBAIC0yNzIsMTUgKzM4MCwxNSBAQCBPU1N0YXR1cyBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0
aW9uRmxhZ3MmCiAgICAgcmV0dXJuIG5vRXJyOwogfQogCi1PU1N0YXR1cyBDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzcGVha2VyQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdFJlbmRl
ckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCogaW5UaW1l
U3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1
ZmZlckxpc3QqIGlvRGF0YSkKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNwZWFrZXJD
YWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlvQWN0
aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUludDMyIGluQnVz
TnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQog
ewogICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKICAgICBBU1NFUlQoaW5UaW1lU3RhbXApOwot
ICAgIGF1dG8gZGF0YVNvdXJjZSA9IHN0YXRpY19jYXN0PENvcmVBdWRpb0NhcHR1cmVTb3VyY2Uq
PihpblJlZkNvbik7CisgICAgYXV0byBkYXRhU291cmNlID0gc3RhdGljX2Nhc3Q8Q29yZUF1ZGlv
U2hhcmVkVW5pdCo+KGluUmVmQ29uKTsKICAgICByZXR1cm4gZGF0YVNvdXJjZS0+cHJvdmlkZVNw
ZWFrZXJEYXRhKCppb0FjdGlvbkZsYWdzLCAqaW5UaW1lU3RhbXAsIGluQnVzTnVtYmVyLCBpbk51
bWJlckZyYW1lcywgaW9EYXRhKTsKIH0KIAotT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZTo6cHJvY2Vzc01pY3JvcGhvbmVTYW1wbGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBp
b0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgaW5C
dXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAvKmlvRGF0
YSovKQorT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cHJvY2Vzc01pY3JvcGhvbmVTYW1w
bGVzKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzJiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRp
b1RpbWVTdGFtcCYgdGltZVN0YW1wLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJl
ckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiAvKmlvRGF0YSovKQogewogI2lmICFMT0dfRElTQUJM
RUQKICAgICArK21fbWljcm9waG9uZVByb2NzQ2FsbGVkOwpAQCAtMjkxLDcgKzM5OSw3IEBAIE9T
U3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyhB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GCiAgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0ID0g
bV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCk7CiAgICAgYXV0byBlcnIgPSBB
dWRpb1VuaXRSZW5kZXIobV9pb1VuaXQsICZpb0FjdGlvbkZsYWdzLCAmdGltZVN0YW1wLCBpbkJ1
c051bWJlciwgaW5OdW1iZXJGcmFtZXMsICZidWZmZXJMaXN0KTsKICAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NNaWNyb3Bo
b25lU2FtcGxlcyglcCkgQXVkaW9Vbml0UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRz
KSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIExPRyhNZWRpYSwgIkNv
cmVBdWRpb1NoYXJlZFVuaXQ6OnByb2Nlc3NNaWNyb3Bob25lU2FtcGxlcyglcCkgQXVkaW9Vbml0
UmVuZGVyIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogCkBAIC0zMDMsMjcgKzQxMSwz
MCBAQCBPU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTWljcm9waG9uZVNh
bXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRgogICAgIG1fbGF0ZXN0TWljVGltZVN0YW1wID0g
c2FtcGxlVGltZTsKICAgICBtX21pY3JvcGhvbmVTYW1wbGVCdWZmZXItPnNldFRpbWVzKGFkanVz
dGVkSG9zdFRpbWUsIHNhbXBsZVRpbWUpOwogCi0KLSAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUo
TWVkaWFUaW1lKHNhbXBsZVRpbWUsIG1fbWljcm9waG9uZVByb2NGb3JtYXQuc2FtcGxlUmF0ZSgp
KSwgbV9taWNyb3Bob25lU2FtcGxlQnVmZmVyLT5idWZmZXJMaXN0KCksIG1fbWljcm9waG9uZVBy
b2NGb3JtYXQsIGluTnVtYmVyRnJhbWVzKTsKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IG1fY2xp
ZW50cykgeworICAgICAgICBpZiAoY2xpZW50LT5pc1Byb2R1Y2luZ0RhdGEoKSkKKyAgICAgICAg
ICAgIGNsaWVudC0+YXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShzYW1wbGVUaW1lLCBt
X21pY3JvcGhvbmVQcm9jRm9ybWF0LnNhbXBsZVJhdGUoKSksIG1fbWljcm9waG9uZVNhbXBsZUJ1
ZmZlci0+YnVmZmVyTGlzdCgpLCBtX21pY3JvcGhvbmVQcm9jRm9ybWF0LCBpbk51bWJlckZyYW1l
cyk7CisgICAgfQogCiAgICAgcmV0dXJuIG5vRXJyOwogfQogCi1PU1N0YXR1cyBDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjptaWNyb3Bob25lQ2FsbGJhY2sodm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiBpb0FjdGlvbkZsYWdzLCBjb25zdCBBdWRpb1RpbWVTdGFtcCog
aW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBB
dWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK09TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6Om1p
Y3JvcGhvbmVDYWxsYmFjayh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MqIGlvQWN0aW9uRmxhZ3MsIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiBpblRpbWVTdGFtcCwgVUlu
dDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCog
aW9EYXRhKQogewogICAgIEFTU0VSVChpb0FjdGlvbkZsYWdzKTsKICAgICBBU1NFUlQoaW5UaW1l
U3RhbXApOwotICAgIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UqIGRhdGFTb3VyY2UgPSBzdGF0aWNf
Y2FzdDxDb3JlQXVkaW9DYXB0dXJlU291cmNlKj4oaW5SZWZDb24pOworICAgIENvcmVBdWRpb1No
YXJlZFVuaXQqIGRhdGFTb3VyY2UgPSBzdGF0aWNfY2FzdDxDb3JlQXVkaW9TaGFyZWRVbml0Kj4o
aW5SZWZDb24pOwogICAgIHJldHVybiBkYXRhU291cmNlLT5wcm9jZXNzTWljcm9waG9uZVNhbXBs
ZXMoKmlvQWN0aW9uRmxhZ3MsICppblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJh
bWVzLCBpb0RhdGEpOwogfQogCi12b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNsZWFudXBB
dWRpb1VuaXRzKCkKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6Y2xlYW51cEF1ZGlvVW5pdHMo
KQogeworICAgIEFTU0VSVChtX2NsaWVudHMuaXNFbXB0eSgpKTsKICAgICBpZiAobV9pb1VuaXRJ
bml0aWFsaXplZCkgewogICAgICAgICBBU1NFUlQobV9pb1VuaXQpOwogICAgICAgICBhdXRvIGVy
ciA9IEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZShtX2lvVW5pdCk7CiAgICAgICAgIGlmIChlcnIpCi0g
ICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjbGVhbnVwQXVk
aW9Vbml0cyglcCkgQXVkaW9Vbml0VW5pbml0aWFsaXplIGZhaWxlZCB3aXRoIGVycm9yICVkICgl
LjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisgICAgICAgICAgICBMT0coTWVk
aWEsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpjbGVhbnVwQXVkaW9Vbml0cyglcCkgQXVkaW9Vbml0
VW5pbml0aWFsaXplIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJy
LCAoY2hhciopJmVycik7CiAgICAgICAgIG1faW9Vbml0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAg
ICB9CiAKQEAgLTMzOSw5NyArNDUwLDEzIEBAIHZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6
Y2xlYW51cEF1ZGlvVW5pdHMoKQogI2VuZGlmCiB9CiAKLU9TU3RhdHVzIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2U6OmRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQpCi17Ci0gICAg
QVNTRVJUKG1faW9Vbml0KTsKLQotICAgIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YoKmRl
dmljZUlEKTsKLSAgICBhdXRvIGVyciA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1faW9Vbml0LCBr
QXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0ds
b2JhbCwgaW5wdXRCdXMsIGRldmljZUlELCAmcHJvcGVydHlTaXplKTsKLSAgICBpZiAoZXJyKQot
ICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpkZWZhdWx0SW5wdXRE
ZXZpY2UoJXApIHVuYWJsZSB0byBnZXQgZGVmYXVsdCBpbnB1dCBkZXZpY2UgSUQsIGVycm9yICVk
ICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0KLSAgICByZXR1cm4gZXJy
OwotfQotCi1PU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzZXR1cEF1ZGlvVW5pdHMo
KQotewotICAgIGlmIChtX2lvVW5pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBdWRpb0Nv
bXBvbmVudERlc2NyaXB0aW9uIGlvVW5pdERlc2NyaXB0aW9uID0geyBrQXVkaW9Vbml0VHlwZV9P
dXRwdXQsIGtBdWRpb1VuaXRTdWJUeXBlX1ZvaWNlUHJvY2Vzc2luZ0lPLCBrQXVkaW9Vbml0TWFu
dWZhY3R1cmVyX0FwcGxlLCAwLCAwIH07Ci0gICAgQXVkaW9Db21wb25lbnQgaW9Db21wb25lbnQg
PSBBdWRpb0NvbXBvbmVudEZpbmROZXh0KG51bGxwdHIsICZpb1VuaXREZXNjcmlwdGlvbik7Ci0g
ICAgQVNTRVJUKGlvQ29tcG9uZW50KTsKLSAgICBpZiAoIWlvQ29tcG9uZW50KSB7Ci0gICAgICAg
IExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkg
dW5hYmxlIHRvIGZpbmQgdnBpbyB1bml0IGNvbXBvbmVudCIsIHRoaXMpOwotICAgICAgICByZXR1
cm4gLTE7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIENGU3RyaW5nUmVmIG5hbWUg
PSBudWxscHRyOwotICAgIEF1ZGlvQ29tcG9uZW50Q29weU5hbWUoaW9Db21wb25lbnQsICZuYW1l
KTsKLSAgICBpZiAobmFtZSkgewotICAgICAgICBtX2lvVW5pdE5hbWUgPSBuYW1lOwotICAgICAg
ICBDRlJlbGVhc2UobmFtZSk7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkgY3JlYXRlZCBcIiVzXCIgY29tcG9uZW50IiwgdGhp
cywgbV9pb1VuaXROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0
byBlcnIgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGlvQ29tcG9uZW50LCAmbV9pb1VuaXQp
OwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1bmFibGUgdG8gb3BlbiB2cGlvIHVuaXQsIGVycm9y
ICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAgIHJldHVy
biBlcnI7Ci0gICAgfQotCi0gICAgdWludDMyX3QgcGFyYW0gPSBlY2hvQ2FuY2VsbGF0aW9uKCk7
Ci0gICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBVVZvaWNlSU9Qcm9w
ZXJ0eV9Wb2ljZVByb2Nlc3NpbmdFbmFibGVBR0MsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIGlu
cHV0QnVzLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
TE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2V0dXBBdWRpb1VuaXRzKCVwKSB1
bmFibGUgdG8gc2V0IHZwaW8gdW5pdCBlY2hvIGNhbmNlbGxhdGlvbiwgZXJyb3IgJWQgKCUuNHMp
IiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAg
ICB9Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgcGFyYW0gPSAxOwotICAgIGVyciA9IEF1ZGlv
VW5pdFNldFByb3BlcnR5KG1faW9Vbml0LCBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5hYmxl
SU8sIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgaW5wdXRCdXMsICZwYXJhbSwgc2l6ZW9mKHBhcmFt
KSk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpzZXR1cEF1ZGlvVW5pdHMoJXApIHVuYWJsZSB0byBlbmFibGUgdnBpbyB1bml0IGlu
cHV0LCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAg
ICAgICByZXR1cm4gZXJyOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKCFtX2NhcHR1cmVEZXZpY2VJ
RCkgewotICAgICAgICBlcnIgPSBkZWZhdWx0SW5wdXREZXZpY2UoJm1fY2FwdHVyZURldmljZUlE
KTsKLSAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0g
ICAgZXJyID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQ
cm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywg
Jm1fY2FwdHVyZURldmljZUlELCBzaXplb2YobV9jYXB0dXJlRGV2aWNlSUQpKTsKLSAgICBpZiAo
ZXJyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVw
QXVkaW9Vbml0cyglcCkgdW5hYmxlIHRvIHNldCB2cGlvIHVuaXQgY2FwdHVyZSBkZXZpY2UgSUQs
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7Ci0gICAgICAg
IHJldHVybiBlcnI7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBlcnIgPSBjb25maWd1cmVNaWNyb3Bo
b25lUHJvYygpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBlcnIg
PSBBdWRpb1VuaXRJbml0aWFsaXplKG1faW9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAg
IExPRyhNZWRpYSwgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNldHVwQXVkaW9Vbml0cyglcCkg
QXVkaW9Vbml0SW5pdGlhbGl6ZSgpIGZhaWxlZCwgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGlu
dCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgbV9p
b1VuaXRJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBlcnIgPSBjb25maWd1cmVTcGVha2VyUHJv
YygpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gZXJy
OwotfQotCi12b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgp
Cit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorICAgIGlmICgrK21fcHJvZHVjaW5nQ291bnQgIT0g
MSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC00NDYsNDAgKzQ3Myw0NCBAQCB2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2U6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiAKICAgICBlcnIgPSBBdWRpb091dHB1dFVuaXRTdGFy
dChtX2lvVW5pdCk7CiAgICAgaWYgKGVycikgewotICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpzdGFydCglcCkgQXVkaW9PdXRwdXRVbml0U3RhcnQgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnQoJXApIEF1ZGlvT3V0cHV0
VW5pdFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAo
Y2hhciopJmVycik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2lvVW5pdFN0YXJ0
ZWQgPSB0cnVlOwotICAgIG1fbXV0ZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6
OnN0b3BQcm9kdWNpbmdEYXRhKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisg
ICAgaWYgKC0tbV9wcm9kdWNpbmdDb3VudCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFt
X2lvVW5pdCB8fCAhbV9pb1VuaXRTdGFydGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IGVyciA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOwogICAgIGlmIChlcnIpIHsKLSAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcCglcCkgQXVkaW9P
dXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOworICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0
OjpzdG9wKCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRz
KSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKLSAgICBtX211dGVkID0gdHJ1ZTsKIH0K
IAotT1NTdGF0dXMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3VzcGVuZCgpCitPU1N0YXR1cyBD
b3JlQXVkaW9TaGFyZWRVbml0OjpzdXNwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCisgICAgbV9hY3RpdmVTb3VyY2VzLmNsZWFyKCk7CisgICAgbV9wZW5kaW5nU291cmNl
cy5jbGVhcigpOworCiAgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkgewogICAgICAgICBBU1NFUlQo
bV9pb1VuaXQpOwogICAgICAgICBhdXRvIGVyciA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1Vu
aXQpOwogICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdp
dGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnJlc3VtZSglcCkgQXVkaW9P
dXRwdXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVy
ciwgKGNoYXIqKSZlcnIpOwogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAg
ICAgICBtX2lvVW5pdFN0YXJ0ZWQgPSBmYWxzZTsKQEAgLTQ4OSw3ICs1MjAsNyBAQCBPU1N0YXR1
cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdXNwZW5kKCkKICAgICAgICAgQVNTRVJUKG1faW9V
bml0KTsKICAgICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRpYWxpemUobV9pb1VuaXQp
OwogICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9D
YXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSBmYWlsZWQgd2l0
aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzdW1lKCVwKSBBdWRpb1Vu
aXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCll
cnIsIChjaGFyKikmZXJyKTsKICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgIH0KICAg
ICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwpAQCAtNDk4LDIwICs1MjksMTAyIEBA
IE9TU3RhdHVzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN1c3BlbmQoKQogICAgIHJldHVybiAw
OwogfQogCi1PU1N0YXR1cyBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoKQorT1NTdGF0
dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdElucHV0RGV2aWNlKHVpbnQzMl90KiBkZXZp
Y2VJRCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2lvVW5p
dCk7Ci0gICAgQVNTRVJUKCFtX2lvVW5pdFN0YXJ0ZWQpOwogCi0gICAgYXV0byBlcnIgPSBBdWRp
b091dHB1dFVuaXRTdGFydChtX2lvVW5pdCk7Ci0gICAgaWYgKGVycikgewotICAgICAgICBMT0co
TWVkaWEsICJDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpyZXN1bWUoJXApIEF1ZGlvT3V0cHV0VW5p
dFN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hh
ciopJmVycik7Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgVUludDMyIHByb3BlcnR5U2l6ZSA9
IHNpemVvZigqZGV2aWNlSUQpOworICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0R2V0UHJvcGVydHko
bV9pb1VuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9DdXJyZW50RGV2aWNlLCBrQXVkaW9V
bml0U2NvcGVfR2xvYmFsLCBpbnB1dEJ1cywgZGV2aWNlSUQsICZwcm9wZXJ0eVNpemUpOworICAg
IGlmIChlcnIpCisgICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OmRlZmF1
bHRJbnB1dERldmljZSglcCkgdW5hYmxlIHRvIGdldCBkZWZhdWx0IGlucHV0IGRldmljZSBJRCwg
ZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKKyAgICAKKyAg
ICByZXR1cm4gZXJyOworfQorCitDYXB0dXJlU291cmNlT3JFcnJvciBDb3JlQXVkaW9DYXB0dXJl
U291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMpCit7CisgICAgU3RyaW5nIGxhYmVsOworICAgIHVpbnQzMl90IHBl
cnNpc3RlbnRJRCA9IDA7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZGV2aWNlID0gQ29y
ZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmNvcmVBdWRpb0RldmljZVdp
dGhVSUQoZGV2aWNlSUQpOworICAgIGlmICghZGV2aWNlKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgbGFiZWwgPSBkZXZpY2UtPmxhYmVsKCk7CisgICAgcGVyc2lzdGVudElEID0gZGV2aWNl
LT5kZXZpY2VJRCgpOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIGF1dG8gZGV2aWNlID0gQVZB
dWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkuYXVkaW9TZXNzaW9u
RGV2aWNlV2l0aFVJRChkZXZpY2VJRCk7CisgICAgaWYgKCFkZXZpY2UpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBsYWJlbCA9IGRldmljZS0+bGFiZWwoKTsKKyNlbmRpZgorICAgIGF1dG8g
c291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0dXJlU291cmNlKGRldmljZUlELCBs
YWJlbCwgcGVyc2lzdGVudElEKSk7CisKKyAgICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpLmZpcnN0KTsKICAgICB9Ci0gICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CisgICAgcmV0
dXJuIENhcHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7Cit9CiAKLSAgICByZXR1
cm4gZXJyOworUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgQ29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENvcmVBdWRpb0NhcHR1cmVTb3VyY2VGYWN0b3J5PiBmYWN0b3J5OworICAgIHJldHVybiBmYWN0
b3J5LmdldCgpOworfQorCitDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpDb3JlQXVkaW9DYXB0dXJl
U291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIHVpbnQz
Ml90IHBlcnNpc3RlbnRJRCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoZGV2aWNlSUQsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvLCBsYWJlbCkKKyAgICAsIG1fY2FwdHVyZURl
dmljZUlEKHBlcnNpc3RlbnRJRCkKK3sKKyAgICBtX211dGVkID0gdHJ1ZTsKKworICAgIHNldFZv
bHVtZSgxLjApOworICAgIHNldFNhbXBsZVJhdGUoQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9u
KCkuc2FtcGxlUmF0ZSgpKTsKKyAgICBzZXRFY2hvQ2FuY2VsbGF0aW9uKHRydWUpOworCisgICAg
Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCkuYWRkQ2xpZW50KCp0aGlzKTsKK30KKwor
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6fkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKQoreworICAg
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnJlbW92ZUNsaWVudCgqdGhpcyk7Cit9
CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YWRkRWNob0NhbmNlbGxhdGlvblNvdXJj
ZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBDb3JlQXVkaW9TaGFyZWRV
bml0OjpzaW5nbGV0b24oKS5hZGRFY2hvQ2FuY2VsbGF0aW9uU291cmNlKHNvdXJjZSk7Cit9CisK
K3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6cmVtb3ZlRWNob0NhbmNlbGxhdGlvblNvdXJj
ZShBdWRpb1NhbXBsZURhdGFTb3VyY2UmIHNvdXJjZSkKK3sKKyAgICBDb3JlQXVkaW9TaGFyZWRV
bml0OjpzaW5nbGV0b24oKS5yZW1vdmVFY2hvQ2FuY2VsbGF0aW9uU291cmNlKHNvdXJjZSk7Cit9
CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sK
KyAgICBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5zdGFydFByb2R1Y2luZ0RhdGEo
KTsKKyAgICBtX2lzUHJvZHVjaW5nRGF0YSA9IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRv
bigpLmlzUHJvZHVjaW5nRGF0YSgpOworCisgICAgaWYgKCFtX2lzUHJvZHVjaW5nRGF0YSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9tdXRlZCA9IGZhbHNlOworCisgICAgaWYgKG1fYXVkaW9T
b3VyY2VQcm92aWRlcikKKyAgICAgICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyLT5wcmVwYXJlKCZD
b3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5taWNyb3Bob25lRm9ybWF0KCkuc3RyZWFt
RGVzY3JpcHRpb24oKSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RvcFBy
b2R1Y2luZ0RhdGEoKQoreworICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnN0
b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgbV9pc1Byb2R1Y2luZ0RhdGEgPSBmYWxzZTsKKyAgICBt
X211dGVkID0gZmFsc2U7CisKKyAgICBpZiAobV9hdWRpb1NvdXJjZVByb3ZpZGVyKQorICAgICAg
ICBtX2F1ZGlvU291cmNlUHJvdmlkZXItPnVucHJlcGFyZSgpOwogfQogCiBjb25zdCBSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjYXBhYmls
aXRpZXMoKSBjb25zdApAQCAtNTUzLDYgKzY2NiwxNyBAQCB2b2lkIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnNldHRpbmdzRGlkQ2hhbmdlKCkKICAgICBSZWFsdGltZU1lZGlhU291cmNlOjpzZXR0
aW5nc0RpZENoYW5nZSgpOwogfQogCitBdWRpb1NvdXJjZVByb3ZpZGVyKiBDb3JlQXVkaW9DYXB0
dXJlU291cmNlOjphdWRpb1NvdXJjZVByb3ZpZGVyKCkKK3sKKyAgICBpZiAoIW1fYXVkaW9Tb3Vy
Y2VQcm92aWRlcikgeworICAgICAgICBtX2F1ZGlvU291cmNlUHJvdmlkZXIgPSBXZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlKCp0aGlzKTsKKyAgICAgICAgaWYgKG1faXNQcm9k
dWNpbmdEYXRhKQorICAgICAgICAgICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyLT5wcmVwYXJlKCZD
b3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5taWNyb3Bob25lRm9ybWF0KCkuc3RyZWFt
RGVzY3JpcHRpb24oKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fYXVkaW9Tb3VyY2VQcm92aWRl
ci5nZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCmluZGV4IDEzZjQx
NmNlMTIwNTIzNzk2ZDZjYTI1MjQ3MDQyYjliYzIyOTZjZTIuLmE0MDdiNTBjNzIwMGUyMDI4Njcz
OGQ3NTYzMWNkNzNiNTM2NjE3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaApA
QCAtNDksNiArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q7CiBjbGFzcyBBdWRpb1NhbXBsZURhdGFTb3VyY2U7CiBjbGFzcyBDYXB0dXJlRGV2
aWNlSW5mbzsKK2NsYXNzIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOwogCiBjbGFzcyBD
b3JlQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgewogcHVi
bGljOgpAQCAtNzEsMTMgKzcyLDEyIEBAIHByaXZhdGU6CiAgICAgQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIGxhYmVsLCB1aW50MzJf
dCBwZXJzaXN0ZW50SUQpOwogICAgIHZpcnR1YWwgfkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKTsK
IAorICAgIGZyaWVuZCBjbGFzcyBDb3JlQXVkaW9TaGFyZWRVbml0OworCiAgICAgYm9vbCBpc0Nh
cHR1cmVTb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBzdGFy
dFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKICAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmlu
YWw7Ci0gICAgYm9vbCBpc1Byb2R1Y2luZ0RhdGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lv
VW5pdFN0YXJ0ZWQ7IH0KLQotICAgIE9TU3RhdHVzIHN1c3BlbmQoKTsKLSAgICBPU1N0YXR1cyBy
ZXN1bWUoKTsKKyAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1faXNQcm9kdWNpbmdEYXRhOyB9CiAKICAgICBib29sIGFwcGx5Vm9sdW1lKGRvdWJsZSkgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgYXBwbHlTYW1wbGVSYXRlKGludCkgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtODYsNTkgKzg2LDE4IEBAIHByaXZhdGU6CiAgICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgY29u
c3QgZmluYWw7CiAgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5n
cygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoKSBmaW5hbDsKLQot
ICAgIE9TU3RhdHVzIHNldHVwQXVkaW9Vbml0cygpOwotICAgIHZvaWQgY2xlYW51cEF1ZGlvVW5p
dHMoKTsKLSAgICBPU1N0YXR1cyBjb25maWd1cmVTcGVha2VyUHJvYygpOwotICAgIE9TU3RhdHVz
IGNvbmZpZ3VyZU1pY3JvcGhvbmVQcm9jKCk7Ci0gICAgT1NTdGF0dXMgZGVmYXVsdE91dHB1dERl
dmljZSh1aW50MzJfdCopOwotICAgIE9TU3RhdHVzIGRlZmF1bHRJbnB1dERldmljZSh1aW50MzJf
dCopOwotCi0gICAgc3RhdGljIE9TU3RhdHVzIG1pY3JvcGhvbmVDYWxsYmFjayh2b2lkKiwgQXVk
aW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwg
VUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKLSAgICBPU1N0YXR1cyBwcm9jZXNzTWljcm9waG9u
ZVNhbXBsZXMoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MmLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsKLQotICAgIHN0YXRpYyBPU1N0
YXR1cyBzcGVha2VyQ2FsbGJhY2sodm9pZCosIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwg
Y29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJMaXN0Kik7
Ci0gICAgT1NTdGF0dXMgcHJvdmlkZVNwZWFrZXJEYXRhKEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZs
YWdzJiwgY29uc3QgQXVkaW9UaW1lU3RhbXAmLCBVSW50MzIsIFVJbnQzMiwgQXVkaW9CdWZmZXJM
aXN0Kik7Ci0KLSAgICBzdGF0aWMgZG91YmxlIHByZWZlcnJlZFNhbXBsZVJhdGUoKTsKLSAgICBz
dGF0aWMgc2l6ZV90IHByZWZlcnJlZElPQnVmZmVyU2l6ZSgpOwotCi0gICAgQXVkaW9Vbml0IG1f
aW9Vbml0IHsgbnVsbHB0ciB9OwotCi0gICAgLy8gT25seSByZWFkL21vZGlmaWVkIGZyb20gdGhl
IElPIHRocmVhZC4KLSAgICBWZWN0b3I8UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4+IG1fYWN0
aXZlU291cmNlczsKLQotICAgIGVudW0gUXVldWVBY3Rpb24geyBBZGQsIFJlbW92ZSB9OwotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8UXVldWVBY3Rpb24sIFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+
Pj4gbV9wZW5kaW5nU291cmNlczsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJj
ZVByb3ZpZGVyKCkgZmluYWw7CiAKICAgICB1aW50MzJfdCBtX2NhcHR1cmVEZXZpY2VJRCB7IDAg
fTsKIAotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX21pY3JvcGhvbmVQcm9jRm9ybWF0
OwotICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fbWljcm9waG9uZVNhbXBsZUJ1
ZmZlcjsKLSAgICB1aW50NjRfdCBtX2xhdGVzdE1pY1RpbWVTdGFtcCB7IDAgfTsKLQotICAgIENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBtX3NwZWFrZXJQcm9jRm9ybWF0OwotICAgIFJlZlB0cjxB
dWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1fc3BlYWtlclNhbXBsZUJ1ZmZlcjsKLQotICAgIGRvdWJs
ZSBtX0RUU0NvbnZlcnNpb25SYXRpbyB7IDAgfTsKLQotICAgIGJvb2wgbV9pb1VuaXRJbml0aWFs
aXplZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lvVW5pdFN0YXJ0ZWQgeyBmYWxzZSB9OwotCi0g
ICAgTG9jayBtX3BlbmRpbmdTb3VyY2VRdWV1ZUxvY2s7Ci0gICAgTG9jayBtX2ludGVybmFsU3Rh
dGVMb2NrOworICAgIGJvb2wgbV9pc1Byb2R1Y2luZ0RhdGEgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKICAgICBtdXRh
YmxlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBtX3N1cHBvcnRlZENv
bnN0cmFpbnRzOwogICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOwogCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZv
aWQgY2hlY2tUaW1lc3RhbXBzKGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgdWludDY0X3QsIGRvdWJs
ZSk7Ci0KLSAgICBTdHJpbmcgbV9pb1VuaXROYW1lOwotICAgIHVpbnQ2NF90IG1fc3BlYWtlclBy
b2NzQ2FsbGVkIHsgMCB9OwotICAgIHVpbnQ2NF90IG1fbWljcm9waG9uZVByb2NzQ2FsbGVkIHsg
MCB9OwotI2VuZGlmCisgICAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDPiBt
X2F1ZGlvU291cmNlUHJvdmlkZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKaW5kZXggMzE1ODcwMWE3
MTUxNTg1YzRkNjg0ZWU1MmE3YmNmYjllOWNiYjE1OC4uODEyNDdhMzA0MjdkMmM4NTE4YjYyYjM1
YTIzZWJhNTkwYjY5ODUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTWFjLmNwcApAQCAtNDcsMTIgKzQ3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpzZXRVc2VBVkZvdW5kYXRpb25BdWRpb0Nh
cHR1cmUoYm9vbCBlbmFibGVkKQogewotICAgIHN0YXRpYyBib29sIGFjdGl2ZSA9IGZhbHNlOwot
ICAgIGlmIChhY3RpdmUgPT0gZW5hYmxlZCkKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxib29s
PiBhY3RpdmUgPSBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKGFjdGl2ZSAmJiBhY3RpdmUudmFsdWUo
KSA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBhY3RpdmUgPSBlbmFibGVkOwot
ICAgIGlmIChhY3RpdmUpIHsKKyAgICBpZiAoYWN0aXZlLnZhbHVlKCkpIHsKICAgICAgICAgUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuc2V0QXVkaW9GYWN0b3J5KEFWQXVk
aW9DYXB0dXJlU291cmNlOjpmYWN0b3J5KCkpOwogICAgICAgICBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS5zZXRBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyKEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpKTsKICAgICB9IGVsc2Ugewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>