<?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>222263</bug_id>
          
          <creation_ts>2021-02-22 02:23:21 -0800</creation_ts>
          <short_desc>Refactor OpenXR platform code into different classes and files.</short_desc>
          <delta_ts>2021-04-19 03:27:43 -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>WebXR</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>208988</blocked>
    
    <blocked>222173</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Imanol Fernandez">ifernandez</reporter>
          <assigned_to name="Imanol Fernandez">ifernandez</assigned_to>
          <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1732070</commentid>
    <comment_count>0</comment_count>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-02-22 02:23:21 -0800</bug_when>
    <thetext>OpenXR port is going to grow with graphics, extensions, swapchains, controllers and more. We should split the code into different files to make it more readable and maintanable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732073</commentid>
    <comment_count>1</comment_count>
      <attachid>421175</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-02-22 02:36:16 -0800</bug_when>
    <thetext>Created attachment 421175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732142</commentid>
    <comment_count>2</comment_count>
      <attachid>421175</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-02-22 08:38:23 -0800</bug_when>
    <thetext>Comment on attachment 421175
Patch

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

Looking great. Perhaps add also the new files to XCode

&gt; Source/WebCore/ChangeLog:3


Super nit: OpenXR is not really a WebKit &quot;port&quot;. It&apos;s just platform code.

&gt; Source/WebCore/ChangeLog:8
&gt; +        OpenXR port is going to grow with graphics, extensions, swapchains, controllers and more.

Ditto

&gt; Source/WebCore/platform/xr/openxr/OpenXRExtensions.cpp:2
&gt; + * Copyright (C) 2020 Igalia, S.L.

2021 :)

&gt; Source/WebCore/platform/xr/openxr/OpenXRInstance.cpp:2
&gt; + * Copyright (C) 2020 Igalia, S.L.

2021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732154</commentid>
    <comment_count>3</comment_count>
      <attachid>421201</attachid>
    <who name="Imanol Fernandez">ifernandez</who>
    <bug_when>2021-02-22 09:28:47 -0800</bug_when>
    <thetext>Created attachment 421201
Patch

Add files to Xcode and fix nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732840</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-24 05:13:27 -0800</bug_when>
    <thetext>Committed r273382: &lt;https://commits.webkit.org/r273382&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 421201.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732842</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-24 05:14:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/74691123&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421175</attachid>
            <date>2021-02-22 02:36:16 -0800</date>
            <delta_ts>2021-02-22 09:28:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222263-20210222113614.patch</filename>
            <type>text/plain</type>
            <size>49446</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg0NDU1OGNjNTgzNTkx
Mzk5YmY2YWFmOGNhMGE2MzBhNWM4NDVjNy4uNzU4Y2FjNjdlOTM2ZWI3OWZkN2E2NmRmOWVmZGM5
ZDlhOWY3OTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTAyLTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9y
IE9wZW5YUiBwb3J0IGludG8gZGlmZmVyZW50IGNsYXNzZXMgYW5kIGZpbGVzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMjYzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3BlblhSIHBvcnQgaXMgZ29p
bmcgdG8gZ3JvdyB3aXRoIGdyYXBoaWNzLCBleHRlbnNpb25zLCBzd2FwY2hhaW5zLCBjb250cm9s
bGVycyBhbmQgbW9yZS4KKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgdGhlIGNvZGUgaW50byBk
aWZmZXJlbnQgZmlsZXMgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlIGFuZCBtYWludGFuYWJsZS4K
KworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9P
cGVuWFJFeHRlbnNpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJF
eHRlbnNpb25zOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRXh0ZW5zaW9u
czo6T3BlblhSRXh0ZW5zaW9ucyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJFeHRlbnNp
b25zOjppc0V4dGVuc2lvblN1cHBvcnRlZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0veHIv
b3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0veHIv
b3BlbnhyL09wZW5YUkluc3RhbmNlLmNwcDogQWRkZWQuCisgICAgICAgIChQbGF0Zm9ybVhSOjpJ
bnN0YW5jZTo6SW1wbDo6eHJJbnN0YW5jZSBjb25zdCk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpJ
bnN0YW5jZTo6SW1wbDo6cXVldWUgY29uc3QpOgorICAgICAgICAoUGxhdGZvcm1YUjo6SW5zdGFu
Y2U6OkltcGw6OmV4dGVuc2lvbnMpOgorICAgICAgICAoUGxhdGZvcm1YUjo6SW5zdGFuY2U6Oklt
cGw6OkltcGwpOgorICAgICAgICAoUGxhdGZvcm1YUjo6SW5zdGFuY2U6OkltcGw6On5JbXBsKToK
KyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjpzaW5nbGV0b24pOgorICAgICAgICAoUGxh
dGZvcm1YUjo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3Rh
bmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmljZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3hy
L29wZW54ci9PcGVuWFJVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKFBsYXRmb3JtWFI6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpyZXN1bHRUb1N0cmluZyk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpYclBvc2VmVG9Qb3NlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Onhy
Vmlld1RvUG9zZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjp0b1hyVmlld0NvbmZpZ3VyYXRpb25U
eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5jcHA6
CisgICAgICAgIChQbGF0Zm9ybVhSOjppc1Nlc3Npb25BY3RpdmUpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6aXNTZXNzaW9uUmVhZHkpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNl
OjpPcGVuWFJEZXZpY2UpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpyZWNv
bW1lbmRlZFJlc29sdXRpb24pOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpp
bml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3Bl
blhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUkRldmljZTo6aW5pdGlhbGl6ZVJlZmVyZW5jZVNwYWNlKToKKyAgICAgICAg
KFBsYXRmb3JtWFI6Ok9wZW5YUkRldmljZTo6cmVxdWVzdEZyYW1lKToKKyAgICAgICAgKFBsYXRm
b3JtWFI6Ok9wZW5YUkRldmljZTo6dmlld3MgY29uc3QpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSRGV2aWNlOjplbnVtZXJhdGVSZWZlcmVuY2VTcGFjZXMgY29uc3QpOgorICAgICAgICAo
UGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpjcmVhdGVSZWZlcmVuY2VTcGFjZSk6CisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJlc2V0U2Vzc2lvbik6CisgICAgICAgIChQbGF0
Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmhhbmRsZVNlc3Npb25TdGF0ZUNoYW5nZSk6CisgICAgICAg
IChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OndhaXRVbnRpbFN0b3BwaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oOgorCiAyMDIxLTAyLTIyICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBIYW5k
bGUgUGFnZTo6ZGlkRmluaXNoTG9hZGluZ0ltYWdlRm9yRWxlbWVudCBhc3luY2hyb25vdXNseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCA4YTg2MTcyOTg4NzIwY2Y4OTRiNmExMzhjNWZiNDY0MDYwMGQ2ZTI1
Li42MDg1OTIzMjk4MTY1M2U0ZjUzZjEwMzcwNmM3OTJmMDkwNDJjYjdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMjE2Niw2ICsyMTY2LDggQEAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVc2VyRGVmaW5l
ZC5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAogcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCitwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5zdGFuY2UuY3BwIEBuby11bmlmeQor
cGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuY3BwIEBuby11bmlmeQogcGxhdGZv
cm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwIEBuby11bmlmeQogcGx1Z2lucy9ET01N
aW1lVHlwZS5jcHAKIHBsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zOGIzYzgxNDQ1MmQ1MzU2OTk2YWI1MjNlYjM4YmUxNjUwMTIwYTVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVu
c2lvbnMuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
aW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5YUkV4dGVuc2lvbnMu
aCIKKworI2lmIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKworc3RkOjp1bmlxdWVfcHRyPE9w
ZW5YUkV4dGVuc2lvbnM+IE9wZW5YUkV4dGVuc2lvbnM6OmNyZWF0ZSgpCit7CisgICAgdWludDMy
X3QgZXh0ZW5zaW9uQ291bnQgeyAwIH07CisgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVtZXJh
dGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMobnVsbHB0ciwgMCwgJmV4dGVuc2lvbkNvdW50
LCBudWxscHRyKTsKKworICAgIGlmIChYUl9GQUlMRUQocmVzdWx0KSB8fCAhZXh0ZW5zaW9uQ291
bnQpIHsKKyAgICAgICAgTE9HKFhSLCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3Bl
cnRpZXMoKTogbm8gZXh0ZW5zaW9uc1xuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIFZlY3RvcjxYckV4dGVuc2lvblByb3BlcnRpZXM+IGV4dGVuc2lvbnMoZXh0ZW5z
aW9uQ291bnQsIFtdIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cnVjdHVyZTxYckV4dGVuc2lv
blByb3BlcnRpZXMsIFhSX1RZUEVfRVhURU5TSU9OX1BST1BFUlRJRVM+KCk7CisgICAgfSgpKTsK
KworICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKG51
bGxwdHIsIGV4dGVuc2lvbkNvdW50LCAmZXh0ZW5zaW9uQ291bnQsIGV4dGVuc2lvbnMuZGF0YSgp
KTsKKyAgICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkpIHsKKyAgICAgICAgTE9HKFhSLCAieHJFbnVt
ZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSBmYWlsZWQ6ICVkXG4iLCByZXN1bHQp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gbWFrZVVuaXF1
ZTxPcGVuWFJFeHRlbnNpb25zPihXVEZNb3ZlKGV4dGVuc2lvbnMpKTsKK30KKworT3BlblhSRXh0
ZW5zaW9uczo6T3BlblhSRXh0ZW5zaW9ucyhWZWN0b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiYm
IGV4dGVuc2lvbnMpCisgICAgOiBtX2V4dGVuc2lvbnMoV1RGTW92ZShleHRlbnNpb25zKSkKK3sK
K30KKworYm9vbCBPcGVuWFJFeHRlbnNpb25zOjppc0V4dGVuc2lvblN1cHBvcnRlZChjb25zdCBj
aGFyKiBuYW1lKSBjb25zdAoreworICAgIGF1dG8gcG9zaXRpb24gPSBtX2V4dGVuc2lvbnMuZmlu
ZE1hdGNoaW5nKFtuYW1lXShhdXRvJiBwcm9wZXJ0eSkgeworICAgICAgICByZXR1cm4gIXN0cmNt
cChwcm9wZXJ0eS5leHRlbnNpb25OYW1lLCBuYW1lKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcG9z
aXRpb24gIT0gbm90Rm91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSRXh0ZW5zaW9ucy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRl
NGNhMzhhODI1Yjc3NWJiMmY4Mjg2YzJlNmE3MjY4ZjEzYjMzZTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSRXh0ZW5zaW9ucy5oCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhLCBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKKyNpbmNsdWRl
ICJPcGVuWFJVdGlscy5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisKK2NsYXNzIE9wZW5Y
UkV4dGVuc2lvbnMgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE9wZW5YUkV4dGVuc2lvbnMpOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSRXh0ZW5zaW9ucz4gY3JlYXRlKCk7CisgICAgT3BlblhS
RXh0ZW5zaW9ucyhWZWN0b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiYmKTsKKworICAgIGJvb2wg
aXNFeHRlbnNpb25TdXBwb3J0ZWQoY29uc3QgY2hhciopIGNvbnN0OworCitwcml2YXRlOgorICAg
IFZlY3RvcjxYckV4dGVuc2lvblByb3BlcnRpZXM+IG1fZXh0ZW5zaW9uczsKK307CisKK30gLy8g
bmFtZXNwYWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShXRUJYUikgJiYgVVNFKE9Q
RU5YUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVu
WFJJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
SW5zdGFuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhNDY1YzEwZDNiY2U2ZGU1Nzk3ZDI2ODdkY2M1MDMz
YzNkMDRiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJYUikgJiYgVVNFKE9QRU5YUikKKworI2luY2x1ZGUgIk9wZW5YUkV4dGVuc2lvbnMuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVhST3BlblhSLmgiCisKKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKwor
c3RydWN0IEluc3RhbmNlOjpJbXBsIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisKKyAgICBJbXBsKCk7CisgICAgfkltcGwoKTsKKworICAgIFhySW5zdGFuY2UgeHJJbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKyAgICBXb3JrUXVldWUmIHF1ZXVl
KCkgY29uc3QgeyByZXR1cm4gbV93b3JrUXVldWU7IH0KKyAgICBPcGVuWFJFeHRlbnNpb25zKiBl
eHRlbnNpb25zKCkgeyByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOyB9CisKK3ByaXZhdGU6Cisg
ICAgWHJJbnN0YW5jZSBtX2luc3RhbmNlIHsgWFJfTlVMTF9IQU5ETEUgfTsKKyAgICBSZWY8V29y
a1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BlblhSRXh0ZW5zaW9u
cz4gbV9leHRlbnNpb25zOworfTsKKworSW5zdGFuY2U6OkltcGw6OkltcGwoKQorICAgIDogbV93
b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIk9wZW5YUiBxdWV1ZSIpKQoreworICAgIG1fd29y
a1F1ZXVlLT5kaXNwYXRjaChbdGhpc10oKSB7CisgICAgICAgIExPRyhYUiwgIk9wZW5YUjogaW5p
dGlhbGl6aW5nXG4iKTsKKworICAgICAgICBtX2V4dGVuc2lvbnMgPSBPcGVuWFJFeHRlbnNpb25z
OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKCFtX2V4dGVuc2lvbnMtPmlzRXh0ZW5zaW9uU3VwcG9ydGVkKFhS
X01ORF9IRUFETEVTU19FWFRFTlNJT05fTkFNRSkpIHsKKyAgICAgICAgICAgIExPRyhYUiwgIlJl
cXVpcmVkIGV4dGVuc2lvbiAlcyBub3Qgc3VwcG9ydGVkIiwgWFJfTU5EX0hFQURMRVNTX0VYVEVO
U0lPTl9OQU1FKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzX2FwcGxpY2F0aW9uTmFtZSA9ICJXZWJYUiAoV2ViS2l0KSI7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX2FwcGxpY2F0aW9uVmVyc2lvbiA9IDE7CisK
KyAgICAgICAgY29uc3QgY2hhciogY29uc3QgZW5hYmxlZEV4dGVuc2lvbnNbXSA9IHsKKyAgICAg
ICAgICAgIFhSX01ORF9IRUFETEVTU19FWFRFTlNJT05fTkFNRQorICAgICAgICB9OworCisgICAg
ICAgIGF1dG8gY3JlYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckluc3RhbmNlQ3JlYXRlSW5m
bywgWFJfVFlQRV9JTlNUQU5DRV9DUkVBVEVfSU5GTz4oKTsKKyAgICAgICAgY3JlYXRlSW5mby5j
cmVhdGVGbGFncyA9IDA7CisgICAgICAgIHN0ZDo6bWVtY3B5KGNyZWF0ZUluZm8uYXBwbGljYXRp
b25JbmZvLmFwcGxpY2F0aW9uTmFtZSwgc19hcHBsaWNhdGlvbk5hbWUsIFhSX01BWF9BUFBMSUNB
VElPTl9OQU1FX1NJWkUpOworICAgICAgICBjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcGlW
ZXJzaW9uID0gWFJfQ1VSUkVOVF9BUElfVkVSU0lPTjsKKyAgICAgICAgY3JlYXRlSW5mby5hcHBs
aWNhdGlvbkluZm8uYXBwbGljYXRpb25WZXJzaW9uID0gc19hcHBsaWNhdGlvblZlcnNpb247Cisg
ICAgICAgIGNyZWF0ZUluZm8uZW5hYmxlZEFwaUxheWVyQ291bnQgPSAwOworICAgICAgICBjcmVh
dGVJbmZvLmVuYWJsZWRFeHRlbnNpb25Db3VudCA9IFdURl9BUlJBWV9MRU5HVEgoZW5hYmxlZEV4
dGVuc2lvbnMpOworICAgICAgICBjcmVhdGVJbmZvLmVuYWJsZWRFeHRlbnNpb25OYW1lcyA9IGVu
YWJsZWRFeHRlbnNpb25zOworCisgICAgICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyQ3JlYXRlSW5z
dGFuY2UoJmNyZWF0ZUluZm8sICZtX2luc3RhbmNlKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxF
RChyZXN1bHQsICJ4ckNyZWF0ZUluc3RhbmNlKCkiLCBtX2luc3RhbmNlKTsKKyAgICAgICAgaWYg
KG1faW5zdGFuY2UgPT0gWFJfTlVMTF9IQU5ETEUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgTE9HKFhSLCAieHJDcmVhdGVJbnN0YW5jZSgpOiB1c2luZyBpbnN0YW5jZSAlcFxuIiwg
bV9pbnN0YW5jZSk7CisgICAgfSk7Cit9CisKK0luc3RhbmNlOjpJbXBsOjp+SW1wbCgpCit7Cisg
ICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzXSB7CisgICAgICAgIGlmIChtX2luc3RhbmNl
ICE9IFhSX05VTExfSEFORExFKQorICAgICAgICAgICAgeHJEZXN0cm95SW5zdGFuY2UobV9pbnN0
YW5jZSk7CisgICAgfSk7Cit9CisKK0luc3RhbmNlJiBJbnN0YW5jZTo6c2luZ2xldG9uKCkKK3sK
KyAgICBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEluc3RhbmNlPiBzX2luc3RhbmNlOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBzX29uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKHNf
b25jZUZsYWcsCisgICAgICAgIFsmXSB7CisgICAgICAgICAgICBzX2luc3RhbmNlLmNvbnN0cnVj
dCgpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gc19pbnN0YW5jZS5nZXQoKTsKK30KKworSW5z
dGFuY2U6Okluc3RhbmNlKCkKKyAgICA6IG1faW1wbChtYWtlVW5pcXVlUmVmPEltcGw+KCkpCit7
Cit9CisKK3ZvaWQgSW5zdGFuY2U6OmVudW1lcmF0ZUltbWVyc2l2ZVhSRGV2aWNlcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IERldmljZUxpc3QmIGRldmljZXMpPiYmIGNhbGxiYWNrKQor
eworICAgIG1faW1wbC0+cXVldWUoKS5kaXNwYXRjaChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBjYWxsYmFja09uRXhpdCA9IG1h
a2VTY29wZUV4aXQoWyZdKCkgeworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjayh7IH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICht
X2ltcGwtPnhySW5zdGFuY2UoKSA9PSBYUl9OVUxMX0hBTkRMRSB8fCAhbV9pbXBsLT5leHRlbnNp
b25zKCkpIHsKKyAgICAgICAgICAgIExPRyhYUiwgIiVzIFVuYWJsZSB0byBlbnVtZXJhdGUgWFIg
ZGV2aWNlcy4gTm8gWHJJbnN0YW5jZSBwcmVzZW50XG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBzeXN0ZW1HZXRJbmZvID0g
Y3JlYXRlU3RydWN0dXJlPFhyU3lzdGVtR2V0SW5mbywgWFJfVFlQRV9TWVNURU1fR0VUX0lORk8+
KCk7CisgICAgICAgIHN5c3RlbUdldEluZm8uZm9ybUZhY3RvciA9IFhSX0ZPUk1fRkFDVE9SX0hF
QURfTU9VTlRFRF9ESVNQTEFZOworCisgICAgICAgIFhyU3lzdGVtSWQgc3lzdGVtSWQ7CisgICAg
ICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyR2V0U3lzdGVtKG1faW1wbC0+eHJJbnN0YW5jZSgpLCAm
c3lzdGVtR2V0SW5mbywgJnN5c3RlbUlkKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1
bHQsICJ4ckdldFN5c3RlbSIsIG1faW1wbC0+eHJJbnN0YW5jZSgpKTsKKworICAgICAgICBjYWxs
YmFja09uRXhpdC5yZWxlYXNlKCk7CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc3lzdGVtSWRdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICBtX2ltbWVyc2l2ZVhSRGV2aWNlcyA9IERldmljZUxpc3Q6OmZyb20obWFrZVVuaXF1
ZVJlZjxPcGVuWFJEZXZpY2U+KG1faW1wbC0+eHJJbnN0YW5jZSgpLCBzeXN0ZW1JZCwgbV9pbXBs
LT5xdWV1ZSgpLCAqbV9pbXBsLT5leHRlbnNpb25zKCksIFt0aGlzLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sobV9pbW1lcnNpdmVYUkRldmljZXMp
OworICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVO
WFIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
VXRpbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJVdGlscy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmUxYWE1NmJmZTA4OTQ4ZGI3NWNkMjkxMDc4YzU2Y2I5NDkyYWI4NDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
VXRpbHMuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxp
YSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtWFIuaCIKKyNpbmNsdWRl
IDxvcGVueHIvb3BlbnhyLmg+CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFBsYXRmb3JtWFIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBYclN0cnVjdHVyZVR5cGUgU3Ry
dWN0dXJlVHlwZT4KK1QgY3JlYXRlU3RydWN0dXJlKCkKK3sKKyAgICBUIG9iamVjdDsKKyAgICBz
dGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoVCkpOworICAgIG9iamVjdC50eXBlID0gU3Ry
dWN0dXJlVHlwZTsKKyAgICBvYmplY3QubmV4dCA9IG51bGxwdHI7CisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworaW5saW5lIFN0cmluZyByZXN1bHRUb1N0cmluZyhYclJlc3VsdCB2YWx1ZSwgWHJJ
bnN0YW5jZSBpbnN0YW5jZSkKK3sKKyAgICBjaGFyIGJ1ZmZlcltYUl9NQVhfUkVTVUxUX1NUUklO
R19TSVpFXTsKKyAgICBYclJlc3VsdCByZXN1bHQgPSB4clJlc3VsdFRvU3RyaW5nKGluc3RhbmNl
LCB2YWx1ZSwgYnVmZmVyKTsKKyAgICBpZiAocmVzdWx0ID09IFhSX1NVQ0NFU1MpCisgICAgICAg
IHJldHVybiBTdHJpbmcoYnVmZmVyKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZygiPHVua25vd24g
IiwgaW50KHZhbHVlKSwgIj4iKTsKK30KKworI2RlZmluZSBSRVRVUk5fSUZfRkFJTEVEKHJlc3Vs
dCwgY2FsbCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIGlmIChYUl9GQUlMRUQocmVzdWx0KSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBMT0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVuY19fLCBjYWxsLCByZXN1bHRUb1N0cmlu
ZyhyZXN1bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsgXAorICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworaW5saW5lIERldmljZTo6RnJhbWVEYXRh
OjpQb3NlIFhyUG9zZWZUb1Bvc2UoWHJQb3NlZiBwb3NlKQoreworICAgIERldmljZTo6RnJhbWVE
YXRhOjpQb3NlIHJlc3VsdDsKKyAgICByZXN1bHQub3JpZW50YXRpb24gPSB7IHBvc2Uub3JpZW50
YXRpb24ueCwgcG9zZS5vcmllbnRhdGlvbi55LCBwb3NlLm9yaWVudGF0aW9uLnosIHBvc2Uub3Jp
ZW50YXRpb24udyB9OworICAgIHJlc3VsdC5wb3NpdGlvbiA9IHsgcG9zZS5wb3NpdGlvbi54LCBw
b3NlLnBvc2l0aW9uLnksIHBvc2UucG9zaXRpb24ueiB9OworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2lubGluZSBEZXZpY2U6OkZyYW1lRGF0YTo6VmlldyB4clZpZXdUb1Bvc2UoWHJWaWV3IHZp
ZXcpCit7CisgICAgRGV2aWNlOjpGcmFtZURhdGE6OlZpZXcgcG9zZTsKKyAgICBwb3NlLnByb2pl
Y3Rpb24gPSBEZXZpY2U6OkZyYW1lRGF0YTo6Rm92IHsgdmlldy5mb3YuYW5nbGVVcCwgLXZpZXcu
Zm92LmFuZ2xlRG93biwgLXZpZXcuZm92LmFuZ2xlTGVmdCwgdmlldy5mb3YuYW5nbGVSaWdodCB9
OworICAgIHBvc2Uub2Zmc2V0ID0gWHJQb3NlZlRvUG9zZSh2aWV3LnBvc2UpOworICAgIHJldHVy
biBwb3NlOworfQorCitpbmxpbmUgWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdG9YclZpZXdDb25m
aWd1cmF0aW9uVHlwZShTZXNzaW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgewor
ICAgIGNhc2UgU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZVZyOgorICAgICAgICByZXR1cm4gWFJfVklF
V19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9TVEVSRU87CisgICAgY2FzZSBTZXNzaW9uTW9k
ZTo6SW5saW5lOgorICAgIGNhc2UgU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyOgorICAgICAgICBy
ZXR1cm4gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9NT05POworICAgIH07Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFhSX1ZJRVdfQ09ORklHVVJBVElP
Tl9UWVBFX1BSSU1BUllfTU9OTzsKK30KKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwCmluZGV4IGI5
NGU4NzFmNTdiODk3YzdlNDg0OWE0N2Y0YTY0YzMzMzBkNmQxNzYuLjVhYWYxODcxMzc4MWJkMjNj
N2UyYzUwZTRkNmQyYTE2NDZkMzVhOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAKQEAgLTIyLDI0NSArMjIsMjA1
IEBACiAKICNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCiAKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSA8b3BlbnhyL29wZW54cl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgIk9w
ZW5YUkV4dGVuc2lvbnMuaCIKKwogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFBs
YXRmb3JtWFIgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBYclN0cnVjdHVyZVR5cGUgU3RydWN0
dXJlVHlwZT4KLVQgY3JlYXRlU3RydWN0dXJlKCkKKworc3RhdGljIGJvb2wgaXNTZXNzaW9uQWN0
aXZlKFhyU2Vzc2lvblN0YXRlIHN0YXRlKQogewotICAgIFQgb2JqZWN0OwotICAgIHN0ZDo6bWVt
c2V0KCZvYmplY3QsIDAsIHNpemVvZihUKSk7Ci0gICAgb2JqZWN0LnR5cGUgPSBTdHJ1Y3R1cmVU
eXBlOwotICAgIG9iamVjdC5uZXh0ID0gbnVsbHB0cjsKLSAgICByZXR1cm4gb2JqZWN0OworICAg
IHJldHVybiBzdGF0ZSA9PSBYUl9TRVNTSU9OX1NUQVRFX1ZJU0lCTEUgfHwgc3RhdGUgPT0gWFJf
U0VTU0lPTl9TVEFURV9GT0NVU0VEOwogfQogCi1TdHJpbmcgcmVzdWx0VG9TdHJpbmcoWHJSZXN1
bHQgdmFsdWUsIFhySW5zdGFuY2UgaW5zdGFuY2UpCitzdGF0aWMgYm9vbCBpc1Nlc3Npb25SZWFk
eShYclNlc3Npb25TdGF0ZSBzdGF0ZSkKIHsKLSAgICBjaGFyIGJ1ZmZlcltYUl9NQVhfUkVTVUxU
X1NUUklOR19TSVpFXTsKLSAgICBYclJlc3VsdCByZXN1bHQgPSB4clJlc3VsdFRvU3RyaW5nKGlu
c3RhbmNlLCB2YWx1ZSwgYnVmZmVyKTsKLSAgICBpZiAocmVzdWx0ID09IFhSX1NVQ0NFU1MpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoYnVmZmVyKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiPHVu
a25vd24gIiwgaW50KHZhbHVlKSwgIj4iKTsKKyAgICByZXR1cm4gc3RhdGUgPj0gWFJfU0VTU0lP
Tl9TVEFURV9SRUFEWSAgJiYgc3RhdGUgPCBYUl9TRVNTSU9OX1NUQVRFX1NUT1BQSU5HOwogfQog
Ci0jZGVmaW5lIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCBjYWxsLCBpbnN0YW5jZSwgLi4uKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKFhSX0ZB
SUxFRChyZXN1bHQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIExPRyhYUiwgIiVzICVzOiAlc1xu
IiwgX19mdW5jX18sIGNhbGwsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgaW5zdGFuY2UpLnV0Zjgo
KS5kYXRhKCkpOyBcCi0gICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgfQotCi1zdHJ1Y3QgSW5zdGFuY2U6OkltcGwgewotICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKLQotICAgIEltcGwoKTsKLSAgICB+SW1wbCgpOwotCi0gICAgWHJJbnN0YW5j
ZSB4ckluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQotICAgIFdvcmtRdWV1
ZSYgcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3dvcmtRdWV1ZTsgfQotCi1wcml2YXRlOgotICAg
IHZvaWQgZW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgYm9vbCBjaGVj
a0luc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcygpIGNvbnN0OwotCi0gICAgWHJJbnN0YW5jZSBt
X2luc3RhbmNlIHsgWFJfTlVMTF9IQU5ETEUgfTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtR
dWV1ZTsKLX07Ci0KLXZvaWQgSW5zdGFuY2U6OkltcGw6OmVudW1lcmF0ZUFwaUxheWVyUHJvcGVy
dGllcygpIGNvbnN0CitPcGVuWFJEZXZpY2U6Ok9wZW5YUkRldmljZShYckluc3RhbmNlIGluc3Rh
bmNlLCBYclN5c3RlbUlkIHN5c3RlbSwgV29ya1F1ZXVlJiBxdWV1ZSwgY29uc3QgT3BlblhSRXh0
ZW5zaW9ucyYgZXh0ZW5zaW9ucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNr
KQorICAgIDogbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAsIG1fc3lzdGVtSWQoc3lzdGVtKQor
ICAgICwgbV9xdWV1ZShxdWV1ZSkKKyAgICAsIG1fZXh0ZW5zaW9ucyhleHRlbnNpb25zKQogewot
ICAgIEFTU0VSVCgmUnVuTG9vcDo6Y3VycmVudCgpID09ICZtX3dvcmtRdWV1ZS0+cnVuTG9vcCgp
KTsKLSAgICB1aW50MzJfdCBwcm9wZXJ0eUNvdW50T3V0cHV0IHsgMCB9OwotICAgIFhyUmVzdWx0
IHJlc3VsdCA9IHhyRW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVzKDAsICZwcm9wZXJ0eUNvdW50
T3V0cHV0LCBudWxscHRyKTsKLSAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVy
YXRlQXBpTGF5ZXJQcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKLQotICAgIGlmICghcHJvcGVy
dHlDb3VudE91dHB1dCkgewotICAgICAgICBMT0coWFIsICJ4ckVudW1lcmF0ZUFwaUxheWVyUHJv
cGVydGllcygpOiBubyBwcm9wZXJ0aWVzXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFZlY3RvcjxYckFwaUxheWVyUHJvcGVydGllcz4gcHJvcGVydGllcyhwcm9wZXJ0eUNvdW50
T3V0cHV0LAotICAgICAgICBbXSB7Ci0gICAgICAgICAgICBYckFwaUxheWVyUHJvcGVydGllcyBv
YmplY3Q7Ci0gICAgICAgICAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoWHJBcGlM
YXllclByb3BlcnRpZXMpKTsKLSAgICAgICAgICAgIG9iamVjdC50eXBlID0gWFJfVFlQRV9BUElf
TEFZRVJfUFJPUEVSVElFUzsKLSAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgIH0o
KSk7Ci0gICAgcmVzdWx0ID0geHJFbnVtZXJhdGVBcGlMYXllclByb3BlcnRpZXMocHJvcGVydHlD
b3VudE91dHB1dCwgJnByb3BlcnR5Q291bnRPdXRwdXQsIHByb3BlcnRpZXMuZGF0YSgpKTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUuZGlzcGF0Y2goW3RoaXMsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gc3lz
dGVtUHJvcGVydGllcyA9IGNyZWF0ZVN0cnVjdHVyZTxYclN5c3RlbVByb3BlcnRpZXMsIFhSX1RZ
UEVfU1lTVEVNX1BST1BFUlRJRVM+KCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0geHJHZXRTeXN0
ZW1Qcm9wZXJ0aWVzKG1faW5zdGFuY2UsIG1fc3lzdGVtSWQsICZzeXN0ZW1Qcm9wZXJ0aWVzKTsK
KyAgICAgICAgaWYgKFhSX1NVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICAgICAgbV9zdXBwb3J0
c09yaWVudGF0aW9uVHJhY2tpbmcgPSBzeXN0ZW1Qcm9wZXJ0aWVzLnRyYWNraW5nUHJvcGVydGll
cy5vcmllbnRhdGlvblRyYWNraW5nID09IFhSX1RSVUU7CisjaWYgIUxPR19ESVNBQkxFRAorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBMT0coWFIsICJ4ckdldFN5c3RlbVByb3BlcnRpZXMoKTog
ZXJyb3IgJXNcbiIsIHJlc3VsdFRvU3RyaW5nKHJlc3VsdCwgbV9pbnN0YW5jZSkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIExPRyhYUiwgIkZvdW5kIFhSU3lzdGVtICVsdTogXCIlc1wiLCB2ZW5k
b3IgSUQgJWRcbiIsIHN5c3RlbVByb3BlcnRpZXMuc3lzdGVtSWQsIHN5c3RlbVByb3BlcnRpZXMu
c3lzdGVtTmFtZSwgc3lzdGVtUHJvcGVydGllcy52ZW5kb3JJZCk7CisjZW5kaWYKIAotICAgIFJF
VFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJhdGVBcGlMYXllclByb3BlcnRpZXMoKSIs
IG1faW5zdGFuY2UpOwotICAgIExPRyhYUiwgInhyRW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVz
KCk6ICV6dSBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0aWVzLnNpemUoKSk7Ci19CisgICAgICAgIGNv
bGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoKTsKKyAgICAgICAgY29sbGVjdENvbmZpZ3VyYXRp
b25WaWV3cygpOwogCi1zdGF0aWMgYm9vbCBpc0V4dGVuc2lvblN1cHBvcnRlZChjb25zdCBjaGFy
KiBleHRlbnNpb25OYW1lLCBWZWN0b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiYgaW5zdGFuY2VF
eHRlbnNpb25Qcm9wZXJ0aWVzKQotewotICAgIGF1dG8gcG9zaXRpb24gPSBpbnN0YW5jZUV4dGVu
c2lvblByb3BlcnRpZXMuZmluZE1hdGNoaW5nKFtleHRlbnNpb25OYW1lXShhdXRvJiBwcm9wZXJ0
eSkgewotICAgICAgICByZXR1cm4gIXN0cmNtcChwcm9wZXJ0eS5leHRlbnNpb25OYW1lLCBleHRl
bnNpb25OYW1lKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgfSk7Ci0gICAgcmV0dXJuIHBvc2l0aW9uICE9IG5vdEZvdW5kOwogfQogCi1ib29sIElu
c3RhbmNlOjpJbXBsOjpjaGVja0luc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcygpIGNvbnN0CitX
ZWJDb3JlOjpJbnRTaXplIE9wZW5YUkRldmljZTo6cmVjb21tZW5kZWRSZXNvbHV0aW9uKFNlc3Np
b25Nb2RlIG1vZGUpCiB7Ci0gICAgQVNTRVJUKCZSdW5Mb29wOjpjdXJyZW50KCkgPT0gJm1fd29y
a1F1ZXVlLT5ydW5Mb29wKCkpOwotICAgIHVpbnQzMl90IHByb3BlcnR5Q291bnRPdXRwdXQgeyAw
IH07Ci0gICAgWHJSZXN1bHQgcmVzdWx0ID0geHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblBy
b3BlcnRpZXMobnVsbHB0ciwgMCwgJnByb3BlcnR5Q291bnRPdXRwdXQsIG51bGxwdHIpOwotICAg
IFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblBy
b3BlcnRpZXMiLCBtX2luc3RhbmNlLCBmYWxzZSk7Ci0KLSAgICBpZiAoIXByb3BlcnR5Q291bnRP
dXRwdXQpIHsKLSAgICAgICAgTE9HKFhSLCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblBy
b3BlcnRpZXMoKTogbm8gcHJvcGVydGllc1xuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiBwcm9wZXJ0aWVzKHByb3Bl
cnR5Q291bnRPdXRwdXQsCi0gICAgICAgIFtdIHsKLSAgICAgICAgICAgIFhyRXh0ZW5zaW9uUHJv
cGVydGllcyBvYmplY3Q7Ci0gICAgICAgICAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXpl
b2YoWHJFeHRlbnNpb25Qcm9wZXJ0aWVzKSk7Ci0gICAgICAgICAgICBvYmplY3QudHlwZSA9IFhS
X1RZUEVfRVhURU5TSU9OX1BST1BFUlRJRVM7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgICAgICB9KCkpOwotCi0gICAgdWludDMyX3QgcHJvcGVydHlDb3VudFdyaXR0ZW4geyAwIH07
Ci0gICAgcmVzdWx0ID0geHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMobnVs
bHB0ciwgcHJvcGVydHlDb3VudE91dHB1dCwgJnByb3BlcnR5Q291bnRXcml0dGVuLCBwcm9wZXJ0
aWVzLmRhdGEoKSk7Ci0gICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVudW1lcmF0ZUlu
c3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcyIsIG1faW5zdGFuY2UsIGZhbHNlKTsKLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgTE9HKFhSLCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3Bl
cnRpZXMoKTogJXp1IGV4dGVuc2lvbiBwcm9wZXJ0aWVzXG4iLCBwcm9wZXJ0aWVzLnNpemUoKSk7
Ci0gICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IHByb3BlcnRpZXMpCi0gICAgICAgIExPRyhYUiwg
IiAgZXh0ZW5zaW9uICclcycsIHZlcnNpb24gJXVcbiIsIHByb3BlcnR5LmV4dGVuc2lvbk5hbWUs
IHByb3BlcnR5LmV4dGVuc2lvblZlcnNpb24pOwotI2VuZGlmCi0gICAgaWYgKCFpc0V4dGVuc2lv
blN1cHBvcnRlZChYUl9NTkRfSEVBRExFU1NfRVhURU5TSU9OX05BTUUsIHByb3BlcnRpZXMpKSB7
Ci0gICAgICAgIExPRyhYUiwgIlJlcXVpcmVkIGV4dGVuc2lvbiAlcyBub3Qgc3VwcG9ydGVkIiwg
WFJfTU5EX0hFQURMRVNTX0VYVEVOU0lPTl9OQU1FKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8gY29uZmlnVHlwZSA9IHRvWHJWaWV3
Q29uZmlndXJhdGlvblR5cGUobW9kZSk7CisgICAgYXV0byB2aWV3c0l0ZXJhdG9yID0gbV9jb25m
aWd1cmF0aW9uVmlld3MuZmluZChjb25maWdUeXBlKTsKKyAgICBpZiAodmlld3NJdGVyYXRvciAh
PSBtX2NvbmZpZ3VyYXRpb25WaWV3cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nh
c3Q8aW50Pih2aWV3c0l0ZXJhdG9yLT52YWx1ZVswXS5yZWNvbW1lbmRlZEltYWdlUmVjdFdpZHRo
KSwgc3RhdGljX2Nhc3Q8aW50Pih2aWV3c0l0ZXJhdG9yLT52YWx1ZVswXS5yZWNvbW1lbmRlZElt
YWdlUmVjdEhlaWdodCkgfTsKKyAgICByZXR1cm4gRGV2aWNlOjpyZWNvbW1lbmRlZFJlc29sdXRp
b24obW9kZSk7CiB9CiAKLUluc3RhbmNlOjpJbXBsOjpJbXBsKCkKLSAgICA6IG1fd29ya1F1ZXVl
KFdvcmtRdWV1ZTo6Y3JlYXRlKCJPcGVuWFIgcXVldWUiKSkKK3ZvaWQgT3BlblhSRGV2aWNlOjpp
bml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUgbW9kZSkKIHsKLSAgICBt
X3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXNdKCkgewotICAgICAgICBMT0coWFIsICJPcGVuWFI6
IGluaXRpYWxpemluZ1xuIik7Ci0KLSAgICAgICAgZW51bWVyYXRlQXBpTGF5ZXJQcm9wZXJ0aWVz
KCk7CisgICAgbV9xdWV1ZS5kaXNwYXRjaChbdGhpcywgbW9kZV0oKSB7CisgICAgICAgIEFTU0VS
VChtX2luc3RhbmNlICE9IFhSX05VTExfSEFORExFKTsKKyAgICAgICAgQVNTRVJUKG1fc2Vzc2lv
biA9PSBYUl9OVUxMX0hBTkRMRSk7CiAKLSAgICAgICAgaWYgKCFjaGVja0luc3RhbmNlRXh0ZW5z
aW9uUHJvcGVydGllcygpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2N1cnJlbnRW
aWV3Q29uZmlndXJhdGlvblR5cGUgPSB0b1hyVmlld0NvbmZpZ3VyYXRpb25UeXBlKG1vZGUpOwor
ICAgICAgICBBU1NFUlQobV9jb25maWd1cmF0aW9uVmlld3MuY29udGFpbnMobV9jdXJyZW50Vmll
d0NvbmZpZ3VyYXRpb25UeXBlKSk7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNfYXBw
bGljYXRpb25OYW1lID0gIldlYlhSIChXZWJLaXQpIjsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHNfYXBwbGljYXRpb25WZXJzaW9uID0gMTsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBz
ZXNzaW9uLgorICAgICAgICBhdXRvIHNlc3Npb25DcmVhdGVJbmZvID0gY3JlYXRlU3RydWN0dXJl
PFhyU2Vzc2lvbkNyZWF0ZUluZm8sIFhSX1RZUEVfU0VTU0lPTl9DUkVBVEVfSU5GTz4oKTsKKyAg
ICAgICAgc2Vzc2lvbkNyZWF0ZUluZm8uc3lzdGVtSWQgPSBtX3N5c3RlbUlkOwogCi0gICAgICAg
IGNvbnN0IGNoYXIqIGNvbnN0IGVuYWJsZWRFeHRlbnNpb25zW10gPSB7Ci0gICAgICAgICAgICBY
Ul9NTkRfSEVBRExFU1NfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIH07CisgICAgICAgIGF1dG8g
cmVzdWx0ID0geHJDcmVhdGVTZXNzaW9uKG1faW5zdGFuY2UsICZzZXNzaW9uQ3JlYXRlSW5mbywg
Jm1fc2Vzc2lvbik7CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbnVtZXJh
dGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMiLCBtX2luc3RhbmNlKTsKIAotICAgICAgICBh
dXRvIGNyZWF0ZUluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJJbnN0YW5jZUNyZWF0ZUluZm8sIFhS
X1RZUEVfSU5TVEFOQ0VfQ1JFQVRFX0lORk8+KCk7Ci0gICAgICAgIGNyZWF0ZUluZm8uY3JlYXRl
RmxhZ3MgPSAwOwotICAgICAgICBzdGQ6Om1lbWNweShjcmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5m
by5hcHBsaWNhdGlvbk5hbWUsIHNfYXBwbGljYXRpb25OYW1lLCBYUl9NQVhfQVBQTElDQVRJT05f
TkFNRV9TSVpFKTsKLSAgICAgICAgY3JlYXRlSW5mby5hcHBsaWNhdGlvbkluZm8uYXBpVmVyc2lv
biA9IFhSX0NVUlJFTlRfQVBJX1ZFUlNJT047Ci0gICAgICAgIGNyZWF0ZUluZm8uYXBwbGljYXRp
b25JbmZvLmFwcGxpY2F0aW9uVmVyc2lvbiA9IHNfYXBwbGljYXRpb25WZXJzaW9uOwotICAgICAg
ICBjcmVhdGVJbmZvLmVuYWJsZWRBcGlMYXllckNvdW50ID0gMDsKLSAgICAgICAgY3JlYXRlSW5m
by5lbmFibGVkRXh0ZW5zaW9uQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGVuYWJsZWRFeHRlbnNp
b25zKTsKLSAgICAgICAgY3JlYXRlSW5mby5lbmFibGVkRXh0ZW5zaW9uTmFtZXMgPSBlbmFibGVk
RXh0ZW5zaW9uczsKLQotICAgICAgICBYckluc3RhbmNlIGluc3RhbmNlOwotICAgICAgICBYclJl
c3VsdCByZXN1bHQgPSB4ckNyZWF0ZUluc3RhbmNlKCZjcmVhdGVJbmZvLCAmaW5zdGFuY2UpOwot
ICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyQ3JlYXRlSW5zdGFuY2UoKSIsIG1f
aW5zdGFuY2UpOwotICAgICAgICBtX2luc3RhbmNlID0gaW5zdGFuY2U7Ci0gICAgICAgIExPRyhY
UiwgInhyQ3JlYXRlSW5zdGFuY2UoKTogdXNpbmcgaW5zdGFuY2UgJXBcbiIsIG1faW5zdGFuY2Up
OworICAgICAgICAvLyBDcmVhdGUgdGhlIGRlZmF1bHQgcmVmZXJlbmNlIHNwYWNlcworICAgICAg
ICBtX2xvY2FsU3BhY2UgPSBjcmVhdGVSZWZlcmVuY2VTcGFjZShYUl9SRUZFUkVOQ0VfU1BBQ0Vf
VFlQRV9MT0NBTCk7CisgICAgICAgIG1fdmlld1NwYWNlID0gY3JlYXRlUmVmZXJlbmNlU3BhY2Uo
WFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfVklFVyk7CiAgICAgfSk7CiB9CiAKLUluc3RhbmNlOjpJ
bXBsOjp+SW1wbCgpCit2b2lkIE9wZW5YUkRldmljZTo6c2h1dERvd25UcmFja2luZ0FuZFJlbmRl
cmluZygpCiB7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzXSB7Ci0gICAgICAgIGlm
IChtX2luc3RhbmNlICE9IFhSX05VTExfSEFORExFKQotICAgICAgICAgICAgeHJEZXN0cm95SW5z
dGFuY2UobV9pbnN0YW5jZSk7Ci0gICAgfSk7Ci19CisgICAgbV9xdWV1ZS5kaXNwYXRjaChbdGhp
c10oKSB7CisgICAgICAgIGlmIChtX3Nlc3Npb24gPT0gWFJfTlVMTF9IQU5ETEUpCisgICAgICAg
ICAgICByZXR1cm47CiAKLUluc3RhbmNlJiBJbnN0YW5jZTo6c2luZ2xldG9uKCkKLXsKLSAgICBz
dGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEluc3RhbmNlPiBzX2luc3RhbmNlOwotICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBzX29uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKHNfb25jZUZs
YWcsCi0gICAgICAgIFsmXSB7Ci0gICAgICAgICAgICBzX2luc3RhbmNlLmNvbnN0cnVjdCgpOwot
ICAgICAgICB9KTsKLSAgICByZXR1cm4gc19pbnN0YW5jZS5nZXQoKTsKKyAgICAgICAgLy8geHJS
ZXF1ZXN0RXhpdFNlc3Npb24oKSB3aWxsIHRyYW5zaXRpb24gdGhlIHNlc3Npb24gdG8gU1RPUFBF
RCBzdGF0ZS4KKyAgICAgICAgLy8gSWYgdGhlIHNlc3Npb24gd2FzIG5vdCBydW5uaW5nIHdlIGhh
dmUgdG8gcmVzZXQgdGhlIHNlc3Npb24gb3Vyc2VsdmVzLgorICAgICAgICBpZiAoWFJfRkFJTEVE
KHhyUmVxdWVzdEV4aXRTZXNzaW9uKG1fc2Vzc2lvbikpKSB7CisgICAgICAgICAgICByZXNldFNl
c3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9w
ZW5YUiBuZWVkcyB0byB3YWl0IGZvciB0aGUgWFJfU0VTU0lPTl9TVEFURV9TVE9QUElORyBzdGF0
ZSB0byBwcm9wZXJseSBlbmQgdGhlIHNlc3Npb24uCisgICAgICAgIHdhaXRVbnRpbFN0b3BwaW5n
KCk7CisgICAgfSk7CiB9CiAKLUluc3RhbmNlOjpJbnN0YW5jZSgpCi0gICAgOiBtX2ltcGwobWFr
ZVVuaXF1ZVJlZjxJbXBsPigpKQordm9pZCBPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVSZWZlcmVu
Y2VTcGFjZShQbGF0Zm9ybVhSOjpSZWZlcmVuY2VTcGFjZVR5cGUgc3BhY2VUeXBlKQogeworICAg
IGlmICgoc3BhY2VUeXBlID09IFJlZmVyZW5jZVNwYWNlVHlwZTo6TG9jYWxGbG9vciB8fCBzcGFj
ZVR5cGUgPT0gUmVmZXJlbmNlU3BhY2VUeXBlOjpCb3VuZGVkRmxvb3IpICYmIG1fc3RhZ2VTcGFj
ZSA9PSBYUl9OVUxMX0hBTkRMRSkKKyAgICAgICAgbV9zdGFnZVNwYWNlID0gY3JlYXRlUmVmZXJl
bmNlU3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfU1RBR0UpOwogfQogCi12b2lkIEluc3Rh
bmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmljZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBEZXZpY2VMaXN0JiBkZXZpY2VzKT4mJiBjYWxsYmFjaykKK3ZvaWQgT3BlblhSRGV2aWNl
OjpyZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1lQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKLSAgICBt
X2ltcGwtPnF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gY2FsbGJhY2tPbkV4aXQgPSBtYWtlU2NvcGVF
eGl0KFsmXSgpIHsKKyAgICBtX3F1ZXVlLmRpc3BhdGNoKFt0aGlzLCBjYWxsYmFjayA9IFdURk1v
dmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICBwb2xsRXZlbnRzKCk7CisgICAgICAg
IGlmICghaXNTZXNzaW9uUmVhZHkobV9zZXNzaW9uU3RhdGUpKSB7CiAgICAgICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIC8vIERldmljZSBub3QgcmVhZHkgb3Igc3RvcHBpbmcuIFJlcG9ydCBm
cmFtZURhdGEgd2l0aCBpbnZhbGlkIHRyYWNraW5nLgogICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHsgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYgKG1faW1w
bC0+eHJJbnN0YW5jZSgpID09IFhSX05VTExfSEFORExFKSB7Ci0gICAgICAgICAgICBMT0coWFIs
ICIlcyBVbmFibGUgdG8gZW51bWVyYXRlIFhSIGRldmljZXMuIE5vIFhySW5zdGFuY2UgcHJlc2Vu
dFxuIiwgX19GVU5DVElPTl9fKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGF1dG8gc3lzdGVtR2V0SW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYclN5c3RlbUdldElu
Zm8sIFhSX1RZUEVfU1lTVEVNX0dFVF9JTkZPPigpOwotICAgICAgICBzeXN0ZW1HZXRJbmZvLmZv
cm1GYWN0b3IgPSBYUl9GT1JNX0ZBQ1RPUl9IRUFEX01PVU5URURfRElTUExBWTsKKyAgICAgICAg
YXV0byBmcmFtZVN0YXRlID0gY3JlYXRlU3RydWN0dXJlPFhyRnJhbWVTdGF0ZSwgWFJfVFlQRV9G
UkFNRV9TVEFURT4oKTsKKyAgICAgICAgYXV0byBmcmFtZVdhaXRJbmZvID0gY3JlYXRlU3RydWN0
dXJlPFhyRnJhbWVXYWl0SW5mbywgWFJfVFlQRV9GUkFNRV9XQUlUX0lORk8+KCk7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0geHJXYWl0RnJhbWUobV9zZXNzaW9uLCAmZnJhbWVXYWl0SW5mbywgJmZy
YW1lU3RhdGUpOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyV2FpdEZyYW1l
IiwgbV9pbnN0YW5jZSk7CisgICAgICAgIFhyVGltZSBwcmVkaWN0ZWRUaW1lID0gZnJhbWVTdGF0
ZS5wcmVkaWN0ZWREaXNwbGF5VGltZTsKKworICAgICAgICBhdXRvIGZyYW1lQmVnaW5JbmZvID0g
Y3JlYXRlU3RydWN0dXJlPFhyRnJhbWVCZWdpbkluZm8sIFhSX1RZUEVfRlJBTUVfQkVHSU5fSU5G
Tz4oKTsKKyAgICAgICAgcmVzdWx0ID0geHJCZWdpbkZyYW1lKG1fc2Vzc2lvbiwgJmZyYW1lQmVn
aW5JbmZvKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckJlZ2luRnJhbWUi
LCBtX2luc3RhbmNlKTsKKworICAgICAgICBEZXZpY2U6OkZyYW1lRGF0YSBmcmFtZURhdGE7Cisg
ICAgICAgIGZyYW1lRGF0YS5wcmVkaWN0ZWREaXNwbGF5VGltZSA9IGZyYW1lU3RhdGUucHJlZGlj
dGVkRGlzcGxheVRpbWU7CisKKworICAgICAgICBBU1NFUlQobV9jb25maWd1cmF0aW9uVmlld3Mu
Y29udGFpbnMobV9jdXJyZW50Vmlld0NvbmZpZ3VyYXRpb25UeXBlKSk7CisgICAgICAgIGNvbnN0
IGF1dG8mIGNvbmZpZ3VyYXRpb25WaWV3ID0gbV9jb25maWd1cmF0aW9uVmlld3MuZ2V0KG1fY3Vy
cmVudFZpZXdDb25maWd1cmF0aW9uVHlwZSk7CisKKyAgICAgICAgdWludDMyX3Qgdmlld0NvdW50
ID0gY29uZmlndXJhdGlvblZpZXcuc2l6ZSgpOworICAgICAgICBWZWN0b3I8WHJWaWV3PiB2aWV3
cyh2aWV3Q291bnQsIFtdIHsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdHJ1Y3R1cmU8WHJW
aWV3LCBYUl9UWVBFX1ZJRVc+KCk7CisgICAgICAgIH0oKSk7CisKKworICAgICAgICBpZiAoaXNT
ZXNzaW9uQWN0aXZlKG1fc2Vzc2lvblN0YXRlKSkgeworICAgICAgICAgICAgLy8gUXVlcnkgaGVh
ZCBsb2NhdGlvbgorICAgICAgICAgICAgYXV0byBsb2NhdGlvbiA9IGNyZWF0ZVN0cnVjdHVyZTxY
clNwYWNlTG9jYXRpb24sIFhSX1RZUEVfU1BBQ0VfTE9DQVRJT04+KCk7CisgICAgICAgICAgICB4
ckxvY2F0ZVNwYWNlKG1fdmlld1NwYWNlLCBtX2xvY2FsU3BhY2UsIGZyYW1lU3RhdGUucHJlZGlj
dGVkRGlzcGxheVRpbWUsICZsb2NhdGlvbik7CisgICAgICAgICAgICBmcmFtZURhdGEuaXNUcmFj
a2luZ1ZhbGlkID0gbG9jYXRpb24ubG9jYXRpb25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09S
SUVOVEFUSU9OX1ZBTElEX0JJVDsKKyAgICAgICAgICAgIGZyYW1lRGF0YS5pc1Bvc2l0aW9uVmFs
aWQgPSBsb2NhdGlvbi5sb2NhdGlvbkZsYWdzICYgWFJfU1BBQ0VfTE9DQVRJT05fUE9TSVRJT05f
VkFMSURfQklUOworICAgICAgICAgICAgZnJhbWVEYXRhLmlzUG9zaXRpb25FbXVsYXRlZCA9IGxv
Y2F0aW9uLmxvY2F0aW9uRmxhZ3MgJiBYUl9TUEFDRV9MT0NBVElPTl9QT1NJVElPTl9UUkFDS0VE
X0JJVDsKKworICAgICAgICAgICAgaWYgKGZyYW1lRGF0YS5pc1RyYWNraW5nVmFsaWQpCisgICAg
ICAgICAgICAgICAgZnJhbWVEYXRhLm9yaWdpbiA9IFhyUG9zZWZUb1Bvc2UobG9jYXRpb24ucG9z
ZSk7CisgICAgICAgICAgICAKIAotICAgICAgICBYclN5c3RlbUlkIHN5c3RlbUlkOwotICAgICAg
ICBYclJlc3VsdCByZXN1bHQgPSB4ckdldFN5c3RlbShtX2ltcGwtPnhySW5zdGFuY2UoKSwgJnN5
c3RlbUdldEluZm8sICZzeXN0ZW1JZCk7Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0
LCAieHJHZXRTeXN0ZW0iLCBtX2ltcGwtPnhySW5zdGFuY2UoKSk7CisgICAgICAgICAgICBhdXRv
IHZpZXdMb2NhdGVJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyVmlld0xvY2F0ZUluZm8sIFhSX1RZ
UEVfVklFV19MT0NBVEVfSU5GTz4oKTsKKyAgICAgICAgICAgIHZpZXdMb2NhdGVJbmZvLmRpc3Bs
YXlUaW1lID0gcHJlZGljdGVkVGltZTsKKyAgICAgICAgICAgIHZpZXdMb2NhdGVJbmZvLnNwYWNl
ID0gbV9sb2NhbFNwYWNlOworCisgICAgICAgICAgICBhdXRvIHZpZXdTdGF0ZSA9IGNyZWF0ZVN0
cnVjdHVyZTxYclZpZXdTdGF0ZSwgWFJfVFlQRV9WSUVXX1NUQVRFPigpOworICAgICAgICAgICAg
dWludDMyX3Qgdmlld0NvdW50T3V0cHV0OworICAgICAgICAgICAgcmVzdWx0ID0geHJMb2NhdGVW
aWV3cyhtX3Nlc3Npb24sICZ2aWV3TG9jYXRlSW5mbywgJnZpZXdTdGF0ZSwgdmlld0NvdW50LCAm
dmlld0NvdW50T3V0cHV0LCB2aWV3cy5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCFYUl9GQUlM
RUQocmVzdWx0KSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdmlldyA6IHZpZXdzKQor
ICAgICAgICAgICAgICAgICAgICBmcmFtZURhdGEudmlld3MuYXBwZW5kKHhyVmlld1RvUG9zZSh2
aWV3KSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgY2FsbGJhY2tPbkV4aXQucmVsZWFzZSgp
OworICAgICAgICAgICAgLy8gUXVlcnkgZmxvb3IgdHJhbnNmb3JtCisgICAgICAgICAgICBpZiAo
bV9zdGFnZVNwYWNlICE9IFhSX05VTExfSEFORExFKSB7CisgICAgICAgICAgICAgICAgYXV0byBm
bG9vckxvY2F0aW9uID0gY3JlYXRlU3RydWN0dXJlPFhyU3BhY2VMb2NhdGlvbiwgWFJfVFlQRV9T
UEFDRV9MT0NBVElPTj4oKTsKKyAgICAgICAgICAgICAgICB4ckxvY2F0ZVNwYWNlKG1fc3RhZ2VT
cGFjZSwgbV9sb2NhbFNwYWNlLCBmcmFtZVN0YXRlLnByZWRpY3RlZERpc3BsYXlUaW1lLCAmZmxv
b3JMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgZnJhbWVEYXRhLmZsb29yVHJhbnNmb3JtID0g
eyBYclBvc2VmVG9Qb3NlKGZsb29yTG9jYXRpb24ucG9zZSkgfTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIHN5c3RlbUlkXSgpIG11dGFibGUgewotICAgICAgICAgICAgbV9pbW1l
cnNpdmVYUkRldmljZXMgPSBEZXZpY2VMaXN0Ojpmcm9tKG1ha2VVbmlxdWVSZWY8T3BlblhSRGV2
aWNlPihzeXN0ZW1JZCwgbV9pbXBsLT54ckluc3RhbmNlKCksIG1faW1wbC0+cXVldWUoKSwgW3Ro
aXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayht
X2ltbWVyc2l2ZVhSRGV2aWNlcyk7Ci0gICAgICAgICAgICB9KSk7CisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW2ZyYW1lRGF0YSA9IFdURk1vdmUoZnJhbWVEYXRhKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUo
ZnJhbWVEYXRhKSk7CiAgICAgICAgIH0pOworCisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFhyQ29t
cG9zaXRpb25MYXllckJhc2VIZWFkZXIqPiBsYXllcnM7CisKKyAgICAgICAgYXV0byBmcmFtZUVu
ZEluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJGcmFtZUVuZEluZm8sIFhSX1RZUEVfRlJBTUVfRU5E
X0lORk8+KCk7CisgICAgICAgIGZyYW1lRW5kSW5mby5kaXNwbGF5VGltZSA9IHByZWRpY3RlZFRp
bWU7CisgICAgICAgIGZyYW1lRW5kSW5mby5lbnZpcm9ubWVudEJsZW5kTW9kZSA9IFhSX0VOVklS
T05NRU5UX0JMRU5EX01PREVfT1BBUVVFOworICAgICAgICBmcmFtZUVuZEluZm8ubGF5ZXJDb3Vu
dCA9IGxheWVycy5zaXplKCk7CisgICAgICAgIHJlc3VsdCA9IHhyRW5kRnJhbWUobV9zZXNzaW9u
LCAmZnJhbWVFbmRJbmZvKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckVu
ZEZyYW1lIiwgbV9pbnN0YW5jZSk7CiAgICAgfSk7CiB9CiAKLU9wZW5YUkRldmljZTo6T3BlblhS
RGV2aWNlKFhyU3lzdGVtSWQgaWQsIFhySW5zdGFuY2UgaW5zdGFuY2UsIFdvcmtRdWV1ZSYgcXVl
dWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLSAgICA6IG1fc3lzdGVt
SWQoaWQpCi0gICAgLCBtX2luc3RhbmNlKGluc3RhbmNlKQotICAgICwgbV9xdWV1ZShxdWV1ZSkK
K1ZlY3RvcjxEZXZpY2U6OlZpZXdEYXRhPiBPcGVuWFJEZXZpY2U6OnZpZXdzKFNlc3Npb25Nb2Rl
IG1vZGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX3F1ZXVl
LmRpc3BhdGNoKFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUg
ewotICAgICAgICBhdXRvIHN5c3RlbVByb3BlcnRpZXMgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTeXN0
ZW1Qcm9wZXJ0aWVzLCBYUl9UWVBFX1NZU1RFTV9QUk9QRVJUSUVTPigpOwotICAgICAgICBhdXRv
IHJlc3VsdCA9IHhyR2V0U3lzdGVtUHJvcGVydGllcyhtX2luc3RhbmNlLCBtX3N5c3RlbUlkLCAm
c3lzdGVtUHJvcGVydGllcyk7Ci0gICAgICAgIGlmIChYUl9TVUNDRUVERUQocmVzdWx0KSkKLSAg
ICAgICAgICAgIG1fc3VwcG9ydHNPcmllbnRhdGlvblRyYWNraW5nID0gc3lzdGVtUHJvcGVydGll
cy50cmFja2luZ1Byb3BlcnRpZXMub3JpZW50YXRpb25UcmFja2luZyA9PSBYUl9UUlVFOwotI2lm
ICFMT0dfRElTQUJMRUQKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTE9HKFhSLCAieHJHZXRT
eXN0ZW1Qcm9wZXJ0aWVzKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1f
aW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBMT0coWFIsICJGb3VuZCBYUlN5c3Rl
bSAlbHU6IFwiJXNcIiwgdmVuZG9yIElEICVkXG4iLCBzeXN0ZW1Qcm9wZXJ0aWVzLnN5c3RlbUlk
LCBzeXN0ZW1Qcm9wZXJ0aWVzLnN5c3RlbU5hbWUsIHN5c3RlbVByb3BlcnRpZXMudmVuZG9ySWQp
OwotI2VuZGlmCi0KLSAgICAgICAgY29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcygpOwotICAg
ICAgICBjb2xsZWN0Q29uZmlndXJhdGlvblZpZXdzKCk7CisgICAgVmVjdG9yPERldmljZTo6Vmll
d0RhdGE+IHZpZXdzOworICAgIGF1dG8gY29uZmlndXJhdGlvblR5cGUgPSB0b1hyVmlld0NvbmZp
Z3VyYXRpb25UeXBlKG1vZGUpOwogCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGTW92ZShj
YWxsYmFjaykpOwotICAgIH0pOworICAgIGlmIChjb25maWd1cmF0aW9uVHlwZSA9PSBYUl9WSUVX
X0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk8pCisgICAgICAgIHZpZXdzLmFwcGVuZCh7
IC5hY3RpdmUgPSB0cnVlLCAuZXllID0gRXllOjpOb25lIH0pOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQoY29uZmlndXJhdGlvblR5cGUgPT0gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVf
UFJJTUFSWV9TVEVSRU8pOworICAgICAgICB2aWV3cy5hcHBlbmQoeyAuYWN0aXZlID0gdHJ1ZSwg
RXllOjpMZWZ0IH0pOworICAgICAgICB2aWV3cy5hcHBlbmQoeyAuYWN0aXZlID0gdHJ1ZSwgRXll
OjpSaWdodCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHZpZXdzOwogfQogCi1EZXZpY2U6Okxpc3RP
ZkVuYWJsZWRGZWF0dXJlcyBPcGVuWFJEZXZpY2U6OmVudW1lcmF0ZVJlZmVyZW5jZVNwYWNlcyhY
clNlc3Npb24mIHNlc3Npb24pIGNvbnN0CitEZXZpY2U6Okxpc3RPZkVuYWJsZWRGZWF0dXJlcyBP
cGVuWFJEZXZpY2U6OmVudW1lcmF0ZVJlZmVyZW5jZVNwYWNlcyhYclNlc3Npb24gc2Vzc2lvbikg
Y29uc3QKIHsKICAgICB1aW50MzJfdCByZWZlcmVuY2VTcGFjZXNDb3VudDsKICAgICBhdXRvIHJl
c3VsdCA9IHhyRW51bWVyYXRlUmVmZXJlbmNlU3BhY2VzKHNlc3Npb24sIDAsICZyZWZlcmVuY2VT
cGFjZXNDb3VudCwgbnVsbHB0cik7CkBAIC0yOTksMjggKzI1OSw2IEBAIERldmljZTo6TGlzdE9m
RW5hYmxlZEZlYXR1cmVzIE9wZW5YUkRldmljZTo6ZW51bWVyYXRlUmVmZXJlbmNlU3BhY2VzKFhy
U2Vzc2lvbiYKICAgICByZXR1cm4gZW5hYmxlZEZlYXR1cmVzOwogfQogCi1YclNwYWNlIE9wZW5Y
UkRldmljZTo6Y3JlYXRlUmVmZXJlbmNlU3BhY2UoWHJSZWZlcmVuY2VTcGFjZVR5cGUgdHlwZSkK
LXsKLSAgICBBU1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5ydW5Mb29wKCkp
OwotICAgIEFTU0VSVChtX3Nlc3Npb24gIT0gWFJfTlVMTF9IQU5ETEUpOwotICAgIEFTU0VSVCht
X2luc3RhbmNlICE9IFhSX05VTExfSEFORExFKTsKLQotICAgIFhyUG9zZWYgaWRlbnRpdHlQb3Nl
IHsKLSAgICAgICAgLm9yaWVudGF0aW9uID0geyAueCA9IDAsIC55ID0gMCwgLnogPSAwLCAudyA9
IDEuMCB9LAotICAgICAgICAucG9zaXRpb24gPSB7IC54ID0gMCwgLnkgPSAwLCAueiA9IDAgfQot
ICAgIH07Ci0KLSAgICBhdXRvIHNwYWNlQ3JlYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYclJl
ZmVyZW5jZVNwYWNlQ3JlYXRlSW5mbywgWFJfVFlQRV9SRUZFUkVOQ0VfU1BBQ0VfQ1JFQVRFX0lO
Rk8+KCk7Ci0gICAgc3BhY2VDcmVhdGVJbmZvLnJlZmVyZW5jZVNwYWNlVHlwZSA9IHR5cGU7Ci0g
ICAgc3BhY2VDcmVhdGVJbmZvLnBvc2VJblJlZmVyZW5jZVNwYWNlID0gaWRlbnRpdHlQb3NlOwot
Ci0gICAgWHJTcGFjZSBzcGFjZTsKLSAgICBhdXRvIHJlc3VsdCA9IHhyQ3JlYXRlUmVmZXJlbmNl
U3BhY2UobV9zZXNzaW9uLCAmc3BhY2VDcmVhdGVJbmZvLCAmc3BhY2UpOwotICAgIFJFVFVSTl9J
Rl9GQUlMRUQocmVzdWx0LCAieHJDcmVhdGVSZWZlcmVuY2VTcGFjZSIsIG1faW5zdGFuY2UsIFhS
X05VTExfSEFORExFKTsKLQotICAgIHJldHVybiBzcGFjZTsKLX0KLQogdm9pZCBPcGVuWFJEZXZp
Y2U6OmNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoKQogewogICAgIEFTU0VSVCgmUnVuTG9v
cDo6Y3VycmVudCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7CkBAIC0zOTAsMTEzICszMjgsMjYg
QEAgdm9pZCBPcGVuWFJEZXZpY2U6OmNvbGxlY3RDb25maWd1cmF0aW9uVmlld3MoKQogICAgIH0K
IH0KIAotWHJWaWV3Q29uZmlndXJhdGlvblR5cGUgdG9YclZpZXdDb25maWd1cmF0aW9uVHlwZShT
ZXNzaW9uTW9kZSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgU2Vzc2lv
bk1vZGU6OkltbWVyc2l2ZVZyOgotICAgICAgICByZXR1cm4gWFJfVklFV19DT05GSUdVUkFUSU9O
X1RZUEVfUFJJTUFSWV9TVEVSRU87Ci0gICAgY2FzZSBTZXNzaW9uTW9kZTo6SW5saW5lOgotICAg
IGNhc2UgU2Vzc2lvbk1vZGU6OkltbWVyc2l2ZUFyOgotICAgICAgICByZXR1cm4gWFJfVklFV19D
T05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9NT05POwotICAgIH07Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllf
TU9OTzsKLX0KLQotc3RhdGljIGJvb2wgaXNTZXNzaW9uQWN0aXZlKFhyU2Vzc2lvblN0YXRlIHN0
YXRlKQotewotICAgIHJldHVybiBzdGF0ZSA9PSBYUl9TRVNTSU9OX1NUQVRFX1ZJU0lCTEUgfHwg
c3RhdGUgPT0gWFJfU0VTU0lPTl9TVEFURV9GT0NVU0VEOwotfQotCi1zdGF0aWMgYm9vbCBpc1Nl
c3Npb25SZWFkeShYclNlc3Npb25TdGF0ZSBzdGF0ZSkKLXsKLSAgICByZXR1cm4gc3RhdGUgPj0g
WFJfU0VTU0lPTl9TVEFURV9SRUFEWSAgJiYgc3RhdGUgPCBYUl9TRVNTSU9OX1NUQVRFX1NUT1BQ
SU5HOwotfQotCi1XZWJDb3JlOjpJbnRTaXplIE9wZW5YUkRldmljZTo6cmVjb21tZW5kZWRSZXNv
bHV0aW9uKFNlc3Npb25Nb2RlIG1vZGUpCi17Ci0gICAgYXV0byBjb25maWdUeXBlID0gdG9YclZp
ZXdDb25maWd1cmF0aW9uVHlwZShtb2RlKTsKLSAgICBhdXRvIHZpZXdzSXRlcmF0b3IgPSBtX2Nv
bmZpZ3VyYXRpb25WaWV3cy5maW5kKGNvbmZpZ1R5cGUpOwotICAgIGlmICh2aWV3c0l0ZXJhdG9y
ICE9IG1fY29uZmlndXJhdGlvblZpZXdzLmVuZCgpKQotICAgICAgICByZXR1cm4geyBzdGF0aWNf
Y2FzdDxpbnQ+KHZpZXdzSXRlcmF0b3ItPnZhbHVlWzBdLnJlY29tbWVuZGVkSW1hZ2VSZWN0V2lk
dGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHZpZXdzSXRlcmF0b3ItPnZhbHVlWzBdLnJlY29tbWVuZGVk
SW1hZ2VSZWN0SGVpZ2h0KSB9OwotICAgIHJldHVybiBEZXZpY2U6OnJlY29tbWVuZGVkUmVzb2x1
dGlvbihtb2RlKTsKLX0KLQotdm9pZCBPcGVuWFJEZXZpY2U6OmluaXRpYWxpemVUcmFja2luZ0Fu
ZFJlbmRlcmluZyhTZXNzaW9uTW9kZSBtb2RlKQotewotICAgIG1fcXVldWUuZGlzcGF0Y2goW3Ro
aXMsIG1vZGVdKCkgewotICAgICAgICBBU1NFUlQobV9pbnN0YW5jZSAhPSBYUl9OVUxMX0hBTkRM
RSk7Ci0gICAgICAgIEFTU0VSVChtX3Nlc3Npb24gPT0gWFJfTlVMTF9IQU5ETEUpOwotCi0gICAg
ICAgIG1fY3VycmVudFZpZXdDb25maWd1cmF0aW9uVHlwZSA9IHRvWHJWaWV3Q29uZmlndXJhdGlv
blR5cGUobW9kZSk7Ci0gICAgICAgIEFTU0VSVChtX2NvbmZpZ3VyYXRpb25WaWV3cy5jb250YWlu
cyhtX2N1cnJlbnRWaWV3Q29uZmlndXJhdGlvblR5cGUpKTsKLQotICAgICAgICAvLyBDcmVhdGUg
dGhlIHNlc3Npb24uCi0gICAgICAgIGF1dG8gc2Vzc2lvbkNyZWF0ZUluZm8gPSBjcmVhdGVTdHJ1
Y3R1cmU8WHJTZXNzaW9uQ3JlYXRlSW5mbywgWFJfVFlQRV9TRVNTSU9OX0NSRUFURV9JTkZPPigp
OwotICAgICAgICBzZXNzaW9uQ3JlYXRlSW5mby5zeXN0ZW1JZCA9IG1fc3lzdGVtSWQ7Ci0gICAg
ICAgIGF1dG8gcmVzdWx0ID0geHJDcmVhdGVTZXNzaW9uKG1faW5zdGFuY2UsICZzZXNzaW9uQ3Jl
YXRlSW5mbywgJm1fc2Vzc2lvbik7Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAi
eHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMiLCBtX2luc3RhbmNlKTsKLQot
ICAgICAgICBtX2xvY2FsU3BhY2UgPSBjcmVhdGVSZWZlcmVuY2VTcGFjZShYUl9SRUZFUkVOQ0Vf
U1BBQ0VfVFlQRV9MT0NBTCk7Ci0gICAgICAgIG1fdmlld1NwYWNlID0gY3JlYXRlUmVmZXJlbmNl
U3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfVklFVyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
T3BlblhSRGV2aWNlOjpyZXNldFNlc3Npb24oKQotewotICAgIEFTU0VSVCgmUnVuTG9vcDo6Y3Vy
cmVudCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7Ci0gICAgaWYgKG1fc2Vzc2lvbiAhPSBYUl9O
VUxMX0hBTkRMRSkgewotICAgICAgICB4ckRlc3Ryb3lTZXNzaW9uKG1fc2Vzc2lvbik7Ci0gICAg
ICAgIG1fc2Vzc2lvbiA9IFhSX05VTExfSEFORExFOwotICAgIH0KLSAgICBtX3Nlc3Npb25TdGF0
ZSA9IFhSX1NFU1NJT05fU1RBVEVfVU5LTk9XTjsKLX0KLQotdm9pZCBPcGVuWFJEZXZpY2U6Omhh
bmRsZVNlc3Npb25TdGF0ZUNoYW5nZSgpCitYclNwYWNlIE9wZW5YUkRldmljZTo6Y3JlYXRlUmVm
ZXJlbmNlU3BhY2UoWHJSZWZlcmVuY2VTcGFjZVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoJlJ1
bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5ydW5Mb29wKCkpOwotICAgIGlmIChtX3Nlc3Np
b25TdGF0ZSA9PSBYUl9TRVNTSU9OX1NUQVRFX1NUT1BQSU5HKSB7Ci0gICAgICAgIC8vIFRoZSBh
cHBsaWNhdGlvbiBzaG91bGQgZXhpdCB0aGUgcmVuZGVyIGxvb3AgYW5kIGNhbGwgeHJFbmRTZXNz
aW9uCi0gICAgICAgIGVuZFNlc3Npb24oKTsKLSAgICB9IGVsc2UgaWYgKG1fc2Vzc2lvblN0YXRl
ID09IFhSX1NFU1NJT05fU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9u
IGlzIHJlYWR5IHRvIGNhbGwgeHJCZWdpblNlc3Npb24uCi0gICAgICAgIGJlZ2luU2Vzc2lvbigp
OwotICAgIH0KLX0KLQotdm9pZCBPcGVuWFJEZXZpY2U6OnNodXREb3duVHJhY2tpbmdBbmRSZW5k
ZXJpbmcoKQotewotICAgIG1fcXVldWUuZGlzcGF0Y2goW3RoaXNdKCkgewotICAgICAgICBpZiAo
bV9zZXNzaW9uID09IFhSX05VTExfSEFORExFKQotICAgICAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVChtX3Nlc3Npb24gIT0gWFJfTlVMTF9IQU5ETEUpOworICAgIEFTU0VSVChtX2luc3RhbmNl
ICE9IFhSX05VTExfSEFORExFKTsKIAotICAgICAgICAvLyB4clJlcXVlc3RFeGl0U2Vzc2lvbigp
IHdpbGwgdHJhbnNpdGlvbiB0aGUgc2Vzc2lvbiB0byBTVE9QUEVEIHN0YXRlLgotICAgICAgICAv
LyBJZiB0aGUgc2Vzc2lvbiB3YXMgbm90IHJ1bm5pbmcgd2UgaGF2ZSB0byByZXNldCB0aGUgc2Vz
c2lvbiBvdXJzZWx2ZXMuCi0gICAgICAgIGlmIChYUl9GQUlMRUQoeHJSZXF1ZXN0RXhpdFNlc3Np
b24obV9zZXNzaW9uKSkpIHsKLSAgICAgICAgICAgIHJlc2V0U2Vzc2lvbigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9CisgICAgWHJQb3NlZiBpZGVudGl0eVBvc2UgeworICAgICAg
ICAub3JpZW50YXRpb24gPSB7IC54ID0gMCwgLnkgPSAwLCAueiA9IDAsIC53ID0gMS4wIH0sCisg
ICAgICAgIC5wb3NpdGlvbiA9IHsgLnggPSAwLCAueSA9IDAsIC56ID0gMCB9CisgICAgfTsKIAot
ICAgICAgICAvLyBPcGVuWFIgbmVlZHMgdG8gd2FpdCBmb3IgdGhlIFhSX1NFU1NJT05fU1RBVEVf
U1RPUFBJTkcgc3RhdGUgdG8gcHJvcGVybHkgZW5kIHRoZSBzZXNzaW9uLgotICAgICAgICB3YWl0
VW50aWxTdG9wcGluZygpOwotICAgIH0pOwotfQorICAgIGF1dG8gc3BhY2VDcmVhdGVJbmZvID0g
Y3JlYXRlU3RydWN0dXJlPFhyUmVmZXJlbmNlU3BhY2VDcmVhdGVJbmZvLCBYUl9UWVBFX1JFRkVS
RU5DRV9TUEFDRV9DUkVBVEVfSU5GTz4oKTsKKyAgICBzcGFjZUNyZWF0ZUluZm8ucmVmZXJlbmNl
U3BhY2VUeXBlID0gdHlwZTsKKyAgICBzcGFjZUNyZWF0ZUluZm8ucG9zZUluUmVmZXJlbmNlU3Bh
Y2UgPSBpZGVudGl0eVBvc2U7CiAKLXZvaWQgT3BlblhSRGV2aWNlOjppbml0aWFsaXplUmVmZXJl
bmNlU3BhY2UoUGxhdGZvcm1YUjo6UmVmZXJlbmNlU3BhY2VUeXBlIHNwYWNlVHlwZSkKLXsKLSAg
ICBpZiAoKHNwYWNlVHlwZSA9PSBSZWZlcmVuY2VTcGFjZVR5cGU6OkxvY2FsRmxvb3IgfHwgc3Bh
Y2VUeXBlID09IFJlZmVyZW5jZVNwYWNlVHlwZTo6Qm91bmRlZEZsb29yKSAmJiBtX3N0YWdlU3Bh
Y2UgPT0gWFJfTlVMTF9IQU5ETEUpCi0gICAgICAgIG1fc3RhZ2VTcGFjZSA9IGNyZWF0ZVJlZmVy
ZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9TUEFDRV9UWVBFX1NUQUdFKTsKLX0KKyAgICBYclNwYWNl
IHNwYWNlOworICAgIGF1dG8gcmVzdWx0ID0geHJDcmVhdGVSZWZlcmVuY2VTcGFjZShtX3Nlc3Np
b24sICZzcGFjZUNyZWF0ZUluZm8sICZzcGFjZSk7CisgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1
bHQsICJ4ckNyZWF0ZVJlZmVyZW5jZVNwYWNlIiwgbV9pbnN0YW5jZSwgWFJfTlVMTF9IQU5ETEUp
OwogCi12b2lkIE9wZW5YUkRldmljZTo6d2FpdFVudGlsU3RvcHBpbmcoKQotewotICAgIEFTU0VS
VCgmUnVuTG9vcDo6Y3VycmVudCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7Ci0gICAgcG9sbEV2
ZW50cygpOwotICAgIGlmIChtX3Nlc3Npb25TdGF0ZSA+PSBYUl9TRVNTSU9OX1NUQVRFX1NUT1BQ
SU5HKQotICAgICAgICByZXR1cm47Ci0gICAgbV9xdWV1ZS5kaXNwYXRjaChbdGhpc10oKSB7Ci0g
ICAgICAgIHdhaXRVbnRpbFN0b3BwaW5nKCk7Ci0gICAgfSk7CisgICAgcmV0dXJuIHNwYWNlOwog
fQogCiB2b2lkIE9wZW5YUkRldmljZTo6cG9sbEV2ZW50cygpCkBAIC01NTcsMTE1ICs0MDgsMzgg
QEAgdm9pZCBPcGVuWFJEZXZpY2U6OmVuZFNlc3Npb24oKQogICAgIH0pOwogfQogCi1zdGF0aWMg
RGV2aWNlOjpGcmFtZURhdGE6OlBvc2UgWHJQb3NlZlRvUG9zZShYclBvc2VmIHBvc2UpCit2b2lk
IE9wZW5YUkRldmljZTo6cmVzZXRTZXNzaW9uKCkKIHsKLSAgICBEZXZpY2U6OkZyYW1lRGF0YTo6
UG9zZSByZXN1bHQ7Ci0gICAgcmVzdWx0Lm9yaWVudGF0aW9uID0geyBwb3NlLm9yaWVudGF0aW9u
LngsIHBvc2Uub3JpZW50YXRpb24ueSwgcG9zZS5vcmllbnRhdGlvbi56LCBwb3NlLm9yaWVudGF0
aW9uLncgfTsKLSAgICByZXN1bHQucG9zaXRpb24gPSB7IHBvc2UucG9zaXRpb24ueCwgcG9zZS5w
b3NpdGlvbi55LCBwb3NlLnBvc2l0aW9uLnogfTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEFT
U0VSVCgmUnVuTG9vcDo6Y3VycmVudCgpID09ICZtX3F1ZXVlLnJ1bkxvb3AoKSk7CisgICAgaWYg
KG1fc2Vzc2lvbiAhPSBYUl9OVUxMX0hBTkRMRSkgeworICAgICAgICB4ckRlc3Ryb3lTZXNzaW9u
KG1fc2Vzc2lvbik7CisgICAgICAgIG1fc2Vzc2lvbiA9IFhSX05VTExfSEFORExFOworICAgIH0K
KyAgICBtX3Nlc3Npb25TdGF0ZSA9IFhSX1NFU1NJT05fU1RBVEVfVU5LTk9XTjsKIH0KIAotc3Rh
dGljIERldmljZTo6RnJhbWVEYXRhOjpWaWV3IHhyVmlld1RvUG9zZShYclZpZXcgdmlldykKK3Zv
aWQgT3BlblhSRGV2aWNlOjpoYW5kbGVTZXNzaW9uU3RhdGVDaGFuZ2UoKQogewotICAgIERldmlj
ZTo6RnJhbWVEYXRhOjpWaWV3IHBvc2U7Ci0gICAgcG9zZS5wcm9qZWN0aW9uID0gRGV2aWNlOjpG
cmFtZURhdGE6OkZvdiB7IHZpZXcuZm92LmFuZ2xlVXAsIHZpZXcuZm92LmFuZ2xlRG93biwgdmll
dy5mb3YuYW5nbGVMZWZ0LCB2aWV3LmZvdi5hbmdsZVJpZ2h0IH07Ci0gICAgcG9zZS5vZmZzZXQg
PSBYclBvc2VmVG9Qb3NlKHZpZXcucG9zZSk7Ci0gICAgcmV0dXJuIHBvc2U7CisgICAgQVNTRVJU
KCZSdW5Mb29wOjpjdXJyZW50KCkgPT0gJm1fcXVldWUucnVuTG9vcCgpKTsKKyAgICBpZiAobV9z
ZXNzaW9uU3RhdGUgPT0gWFJfU0VTU0lPTl9TVEFURV9TVE9QUElORykgeworICAgICAgICAvLyBU
aGUgYXBwbGljYXRpb24gc2hvdWxkIGV4aXQgdGhlIHJlbmRlciBsb29wIGFuZCBjYWxsIHhyRW5k
U2Vzc2lvbgorICAgICAgICBlbmRTZXNzaW9uKCk7CisgICAgfSBlbHNlIGlmIChtX3Nlc3Npb25T
dGF0ZSA9PSBYUl9TRVNTSU9OX1NUQVRFX1JFQURZKSB7CisgICAgICAgIC8vIFRoZSBhcHBsaWNh
dGlvbiBpcyByZWFkeSB0byBjYWxsIHhyQmVnaW5TZXNzaW9uLgorICAgICAgICBiZWdpblNlc3Np
b24oKTsKKyAgICB9CiB9CiAKLXZvaWQgT3BlblhSRGV2aWNlOjpyZXF1ZXN0RnJhbWUoUmVxdWVz
dEZyYW1lQ2FsbGJhY2smJiBjYWxsYmFjaykKLXsKLSAgICBtX3F1ZXVlLmRpc3BhdGNoKFt0aGlz
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBwb2xs
RXZlbnRzKCk7Ci0gICAgICAgIGlmICghaXNTZXNzaW9uUmVhZHkobV9zZXNzaW9uU3RhdGUpKSB7
Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIC8vIERldmljZSBub3QgcmVhZHkgb3Ig
c3RvcHBpbmcuIFJlcG9ydCBmcmFtZURhdGEgd2l0aCBpbnZhbGlkIHRyYWNraW5nLgotICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHsgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZnJhbWVTdGF0ZSA9IGNyZWF0ZVN0cnVj
dHVyZTxYckZyYW1lU3RhdGUsIFhSX1RZUEVfRlJBTUVfU1RBVEU+KCk7Ci0gICAgICAgIGF1dG8g
ZnJhbWVXYWl0SW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckZyYW1lV2FpdEluZm8sIFhSX1RZUEVf
RlJBTUVfV0FJVF9JTkZPPigpOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHhyV2FpdEZyYW1lKG1f
c2Vzc2lvbiwgJmZyYW1lV2FpdEluZm8sICZmcmFtZVN0YXRlKTsKLSAgICAgICAgUkVUVVJOX0lG
X0ZBSUxFRChyZXN1bHQsICJ4cldhaXRGcmFtZSIsIG1faW5zdGFuY2UpOwotICAgICAgICBYclRp
bWUgcHJlZGljdGVkVGltZSA9IGZyYW1lU3RhdGUucHJlZGljdGVkRGlzcGxheVRpbWU7Ci0KLSAg
ICAgICAgYXV0byBmcmFtZUJlZ2luSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckZyYW1lQmVnaW5J
bmZvLCBYUl9UWVBFX0ZSQU1FX0JFR0lOX0lORk8+KCk7Ci0gICAgICAgIHJlc3VsdCA9IHhyQmVn
aW5GcmFtZShtX3Nlc3Npb24sICZmcmFtZUJlZ2luSW5mbyk7Ci0gICAgICAgIFJFVFVSTl9JRl9G
QUlMRUQocmVzdWx0LCAieHJCZWdpbkZyYW1lIiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAgRGV2
aWNlOjpGcmFtZURhdGEgZnJhbWVEYXRhOwotICAgICAgICBmcmFtZURhdGEucHJlZGljdGVkRGlz
cGxheVRpbWUgPSBmcmFtZVN0YXRlLnByZWRpY3RlZERpc3BsYXlUaW1lOwotCi0gICAgICAgIGlm
IChpc1Nlc3Npb25BY3RpdmUobV9zZXNzaW9uU3RhdGUpKSB7Ci0gICAgICAgICAgICAvLyBRdWVy
eSBoZWFkIGxvY2F0aW9uCi0gICAgICAgICAgICBhdXRvIGxvY2F0aW9uID0gY3JlYXRlU3RydWN0
dXJlPFhyU3BhY2VMb2NhdGlvbiwgWFJfVFlQRV9TUEFDRV9MT0NBVElPTj4oKTsKLSAgICAgICAg
ICAgIHhyTG9jYXRlU3BhY2UobV92aWV3U3BhY2UsIG1fbG9jYWxTcGFjZSwgZnJhbWVTdGF0ZS5w
cmVkaWN0ZWREaXNwbGF5VGltZSwgJmxvY2F0aW9uKTsKLSAgICAgICAgICAgIGZyYW1lRGF0YS5p
c1RyYWNraW5nVmFsaWQgPSBsb2NhdGlvbi5sb2NhdGlvbkZsYWdzICYgWFJfU1BBQ0VfTE9DQVRJ
T05fT1JJRU5UQVRJT05fVkFMSURfQklUOwotICAgICAgICAgICAgZnJhbWVEYXRhLmlzUG9zaXRp
b25WYWxpZCA9IGxvY2F0aW9uLmxvY2F0aW9uRmxhZ3MgJiBYUl9TUEFDRV9MT0NBVElPTl9QT1NJ
VElPTl9WQUxJRF9CSVQ7Ci0gICAgICAgICAgICBmcmFtZURhdGEuaXNQb3NpdGlvbkVtdWxhdGVk
ID0gbG9jYXRpb24ubG9jYXRpb25GbGFncyAmIFhSX1NQQUNFX0xPQ0FUSU9OX1BPU0lUSU9OX1RS
QUNLRURfQklUOwotCi0gICAgICAgICAgICBpZiAoZnJhbWVEYXRhLmlzVHJhY2tpbmdWYWxpZCkK
LSAgICAgICAgICAgICAgICBmcmFtZURhdGEub3JpZ2luID0gWHJQb3NlZlRvUG9zZShsb2NhdGlv
bi5wb3NlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fY29uZmlndXJhdGlv
blZpZXdzLmNvbnRhaW5zKG1fY3VycmVudFZpZXdDb25maWd1cmF0aW9uVHlwZSkpOwotICAgICAg
ICAgICAgY29uc3QgYXV0byYgY29uZmlndXJhdGlvblZpZXcgPSBtX2NvbmZpZ3VyYXRpb25WaWV3
cy5nZXQobV9jdXJyZW50Vmlld0NvbmZpZ3VyYXRpb25UeXBlKTsKLQotICAgICAgICAgICAgYXV0
byB2aWV3TG9jYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYclZpZXdMb2NhdGVJbmZvLCBYUl9U
WVBFX1ZJRVdfTE9DQVRFX0lORk8+KCk7Ci0gICAgICAgICAgICB2aWV3TG9jYXRlSW5mby5kaXNw
bGF5VGltZSA9IHByZWRpY3RlZFRpbWU7Ci0gICAgICAgICAgICB2aWV3TG9jYXRlSW5mby5zcGFj
ZSA9IG1fbG9jYWxTcGFjZTsKIAotICAgICAgICAgICAgdWludDMyX3Qgdmlld0NvdW50ID0gY29u
ZmlndXJhdGlvblZpZXcuc2l6ZSgpOwotICAgICAgICAgICAgVmVjdG9yPFhyVmlldz4gdmlld3Mo
dmlld0NvdW50LCBbXSB7Ci0gICAgICAgICAgICAgICAgWHJWaWV3IG9iamVjdDsKLSAgICAgICAg
ICAgICAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoWHJWaWV3KSk7Ci0gICAgICAg
ICAgICAgICAgb2JqZWN0LnR5cGUgPSBYUl9UWVBFX1ZJRVc7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG9iamVjdDsKLSAgICAgICAgICAgIH0oKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gdmlld1N0
YXRlID0gY3JlYXRlU3RydWN0dXJlPFhyVmlld1N0YXRlLCBYUl9UWVBFX1ZJRVdfU1RBVEU+KCk7
Ci0gICAgICAgICAgICB1aW50MzJfdCB2aWV3Q291bnRPdXRwdXQ7Ci0gICAgICAgICAgICByZXN1
bHQgPSB4ckxvY2F0ZVZpZXdzKG1fc2Vzc2lvbiwgJnZpZXdMb2NhdGVJbmZvLCAmdmlld1N0YXRl
LCB2aWV3Q291bnQsICZ2aWV3Q291bnRPdXRwdXQsIHZpZXdzLmRhdGEoKSk7Ci0gICAgICAgICAg
ICBpZiAoIVhSX0ZBSUxFRChyZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiB2
aWV3IDogdmlld3MpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1lRGF0YS52aWV3cy5hcHBlbmQo
eHJWaWV3VG9Qb3NlKHZpZXcpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUXVl
cnkgZmxvb3IgdHJhbnNmb3JtCi0gICAgICAgICAgICBpZiAobV9zdGFnZVNwYWNlICE9IFhSX05V
TExfSEFORExFKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBmbG9vckxvY2F0aW9uID0gY3JlYXRl
U3RydWN0dXJlPFhyU3BhY2VMb2NhdGlvbiwgWFJfVFlQRV9TUEFDRV9MT0NBVElPTj4oKTsKLSAg
ICAgICAgICAgICAgICB4ckxvY2F0ZVNwYWNlKG1fc3RhZ2VTcGFjZSwgbV9sb2NhbFNwYWNlLCBm
cmFtZVN0YXRlLnByZWRpY3RlZERpc3BsYXlUaW1lLCAmZmxvb3JMb2NhdGlvbik7Ci0gICAgICAg
ICAgICAgICAgZnJhbWVEYXRhLmZsb29yVHJhbnNmb3JtID0geyBYclBvc2VmVG9Qb3NlKGZsb29y
TG9jYXRpb24ucG9zZSkgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW2ZyYW1lRGF0YSA9IFdURk1vdmUoZnJhbWVEYXRhKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoZnJhbWVEYXRhKSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGF1dG8gZnJhbWVFbmRJ
bmZvID0gY3JlYXRlU3RydWN0dXJlPFhyRnJhbWVFbmRJbmZvLCBYUl9UWVBFX0ZSQU1FX0VORF9J
TkZPPigpOwotICAgICAgICBmcmFtZUVuZEluZm8uZGlzcGxheVRpbWUgPSBwcmVkaWN0ZWRUaW1l
OwotICAgICAgICBmcmFtZUVuZEluZm8uZW52aXJvbm1lbnRCbGVuZE1vZGUgPSBYUl9FTlZJUk9O
TUVOVF9CTEVORF9NT0RFX09QQVFVRTsKLSAgICAgICAgZnJhbWVFbmRJbmZvLmxheWVyQ291bnQg
PSAwOwotICAgICAgICByZXN1bHQgPSB4ckVuZEZyYW1lKG1fc2Vzc2lvbiwgJmZyYW1lRW5kSW5m
byk7Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJFbmRGcmFtZSIsIG1faW5z
dGFuY2UpOwotICAgIH0pOwotfQotCi1WZWN0b3I8RGV2aWNlOjpWaWV3RGF0YT4gT3BlblhSRGV2
aWNlOjp2aWV3cyhTZXNzaW9uTW9kZSBtb2RlKSBjb25zdAordm9pZCBPcGVuWFJEZXZpY2U6Ondh
aXRVbnRpbFN0b3BwaW5nKCkKIHsKLSAgICBWZWN0b3I8RGV2aWNlOjpWaWV3RGF0YT4gdmlld3M7
Ci0gICAgYXV0byBjb25maWd1cmF0aW9uVHlwZSA9IHRvWHJWaWV3Q29uZmlndXJhdGlvblR5cGUo
bW9kZSk7Ci0KLSAgICBpZiAoY29uZmlndXJhdGlvblR5cGUgPT0gWFJfVklFV19DT05GSUdVUkFU
SU9OX1RZUEVfUFJJTUFSWV9NT05PKQotICAgICAgICB2aWV3cy5hcHBlbmQoeyAuYWN0aXZlID0g
dHJ1ZSwgLmV5ZSA9IEV5ZTo6Tm9uZSB9KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGNv
bmZpZ3VyYXRpb25UeXBlID09IFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfU1RF
UkVPKTsKLSAgICAgICAgdmlld3MuYXBwZW5kKHsgLmFjdGl2ZSA9IHRydWUsIEV5ZTo6TGVmdCB9
KTsKLSAgICAgICAgdmlld3MuYXBwZW5kKHsgLmFjdGl2ZSA9IHRydWUsIEV5ZTo6UmlnaHQgfSk7
Ci0gICAgfQotICAgIHJldHVybiB2aWV3czsKKyAgICBBU1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQo
KSA9PSAmbV9xdWV1ZS5ydW5Mb29wKCkpOworICAgIHBvbGxFdmVudHMoKTsKKyAgICBpZiAobV9z
ZXNzaW9uU3RhdGUgPj0gWFJfU0VTU0lPTl9TVEFURV9TVE9QUElORykKKyAgICAgICAgcmV0dXJu
OworICAgIG1fcXVldWUuZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAgICB3YWl0VW50aWxTdG9w
cGluZygpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuaApp
bmRleCAwMmQxOTRlNjI3MWViYTZiMmE4NDQ4NzAyNzk1YTYwOWVhMjkwNzNkLi43NmNhNTljZmJl
Y2VlYmNkYjBiZmUzMDI5YjRmY2Y5MTAzOTMwNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhST3BlblhSLmgKQEAgLTIwLDE1ICsyMCwx
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisK
KyNpbmNsdWRlICJPcGVuWFJVdGlscy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtWFIuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLSNpbmNsdWRlIDxvcGVueHIvb3BlbnhyLmg+CiAjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgUGxhdGZvcm1YUiB7CiAKK2NsYXNz
IE9wZW5YUkV4dGVuc2lvbnM7CisKIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5
L09wZW5YUi9zcGVjcy8xLjAvaHRtbC94cnNwZWMuaHRtbCNzeXN0ZW0KIC8vIEEgc3lzdGVtIHJl
cHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZGV2aWNlcyBpbiB0aGUgcnVudGltZSwg
b2Z0ZW4gbWFkZSB1cCBvZiBzZXZlcmFsIGluZGl2aWR1YWwKIC8vIGhhcmR3YXJlIGNvbXBvbmVu
dHMgd29ya2luZyB0b2dldGhlciB0byBlbmFibGUgWFIgZXhwZXJpZW5jZXMuCkBAIC00Myw0NiAr
NDUsNDEgQEAgbmFtZXNwYWNlIFBsYXRmb3JtWFIgewogLy8gdGhlIFhSU3lzdGVtIGlzIGJhc2lj
YWxseSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBXZWJYUiBBUEkgYXZhaWxhYmxlIHZpYSB0aGUg
TmF2aWdhdG9yIG9iamVjdC4KIGNsYXNzIE9wZW5YUkRldmljZSBmaW5hbCA6IHB1YmxpYyBEZXZp
Y2UgewogcHVibGljOgotICAgIE9wZW5YUkRldmljZShYclN5c3RlbUlkLCBYckluc3RhbmNlLCBX
b3JrUXVldWUmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIFhyU3lzdGVtSWQg
eHJTeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVtSWQ7IH0KKyAgICBPcGVuWFJEZXZp
Y2UoWHJJbnN0YW5jZSwgWHJTeXN0ZW1JZCwgV29ya1F1ZXVlJiwgY29uc3QgT3BlblhSRXh0ZW5z
aW9ucyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKCk7Ci0gICAgdm9pZCBjb2xsZWN0Q29uZmln
dXJhdGlvblZpZXdzKCk7Ci0KLSAgICBMaXN0T2ZFbmFibGVkRmVhdHVyZXMgZW51bWVyYXRlUmVm
ZXJlbmNlU3BhY2VzKFhyU2Vzc2lvbiYpIGNvbnN0OwotICAgIFhyU3BhY2UgY3JlYXRlUmVmZXJl
bmNlU3BhY2UoWHJSZWZlcmVuY2VTcGFjZVR5cGUpOwotCisgICAgLy8gUGxhdGZvcm1YUjo6RGV2
aWNlCiAgICAgV2ViQ29yZTo6SW50U2l6ZSByZWNvbW1lbmRlZFJlc29sdXRpb24oU2Vzc2lvbk1v
ZGUpIGZpbmFsOwotCiAgICAgdm9pZCBpbml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vz
c2lvbk1vZGUpIGZpbmFsOwogICAgIHZvaWQgc2h1dERvd25UcmFja2luZ0FuZFJlbmRlcmluZygp
IGZpbmFsOwogICAgIHZvaWQgaW5pdGlhbGl6ZVJlZmVyZW5jZVNwYWNlKFBsYXRmb3JtWFI6OlJl
ZmVyZW5jZVNwYWNlVHlwZSkgZmluYWw7CiAgICAgYm9vbCBzdXBwb3J0c1Nlc3Npb25TaHV0ZG93
bk5vdGlmaWNhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHdh
aXRVbnRpbFN0b3BwaW5nKCk7CisgICAgdm9pZCByZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1lQ2Fs
bGJhY2smJikgZmluYWw7CisgICAgVmVjdG9yPFZpZXdEYXRhPiB2aWV3cyhTZXNzaW9uTW9kZSkg
Y29uc3QgZmluYWw7CiAKKyAgICAvLyBDdXN0b20gbWV0aG9kcworICAgIExpc3RPZkVuYWJsZWRG
ZWF0dXJlcyBlbnVtZXJhdGVSZWZlcmVuY2VTcGFjZXMoWHJTZXNzaW9uKSBjb25zdDsKKyAgICB2
b2lkIGNvbGxlY3RTdXBwb3J0ZWRTZXNzaW9uTW9kZXMoKTsKKyAgICB2b2lkIGNvbGxlY3RDb25m
aWd1cmF0aW9uVmlld3MoKTsKKyAgICBYclNwYWNlIGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhyUmVm
ZXJlbmNlU3BhY2VUeXBlKTsKICAgICB2b2lkIHBvbGxFdmVudHMoKTsKICAgICBYclJlc3VsdCBi
ZWdpblNlc3Npb24oKTsKICAgICB2b2lkIGVuZFNlc3Npb24oKTsKICAgICB2b2lkIHJlc2V0U2Vz
c2lvbigpOwogICAgIHZvaWQgaGFuZGxlU2Vzc2lvblN0YXRlQ2hhbmdlKCk7CisgICAgdm9pZCB3
YWl0VW50aWxTdG9wcGluZygpOwogCi0gICAgdm9pZCByZXF1ZXN0RnJhbWUoUmVxdWVzdEZyYW1l
Q2FsbGJhY2smJikgZmluYWw7Ci0KLSAgICBWZWN0b3I8Vmlld0RhdGE+IHZpZXdzKFNlc3Npb25N
b2RlKSBjb25zdCBmaW5hbDsKKyAgICBYckluc3RhbmNlIG1faW5zdGFuY2U7CisgICAgWHJTeXN0
ZW1JZCBtX3N5c3RlbUlkOworICAgIFdvcmtRdWV1ZSYgbV9xdWV1ZTsKKyAgICBjb25zdCBPcGVu
WFJFeHRlbnNpb25zJiBtX2V4dGVuc2lvbnM7CisgICAgWHJTZXNzaW9uIG1fc2Vzc2lvbiB7IFhS
X05VTExfSEFORExFIH07CisgICAgWHJTZXNzaW9uU3RhdGUgbV9zZXNzaW9uU3RhdGUgeyBYUl9T
RVNTSU9OX1NUQVRFX1VOS05PV04gfTsKIAogICAgIHVzaW5nIFZpZXdDb25maWd1cmF0aW9uUHJv
cGVydGllc01hcCA9IEhhc2hNYXA8WHJWaWV3Q29uZmlndXJhdGlvblR5cGUsIFhyVmlld0NvbmZp
Z3VyYXRpb25Qcm9wZXJ0aWVzLCBJbnRIYXNoPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlPiwgV1RG
OjpTdHJvbmdFbnVtSGFzaFRyYWl0czxYclZpZXdDb25maWd1cmF0aW9uVHlwZT4+OwogICAgIFZp
ZXdDb25maWd1cmF0aW9uUHJvcGVydGllc01hcCBtX3ZpZXdDb25maWd1cmF0aW9uUHJvcGVydGll
czsKICAgICB1c2luZyBWaWV3Q29uZmlndXJhdGlvblZpZXdzTWFwID0gSGFzaE1hcDxYclZpZXdD
b25maWd1cmF0aW9uVHlwZSwgVmVjdG9yPFhyVmlld0NvbmZpZ3VyYXRpb25WaWV3PiwgSW50SGFz
aDxYclZpZXdDb25maWd1cmF0aW9uVHlwZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8WHJW
aWV3Q29uZmlndXJhdGlvblR5cGU+PjsKICAgICBWaWV3Q29uZmlndXJhdGlvblZpZXdzTWFwIG1f
Y29uZmlndXJhdGlvblZpZXdzOwotCi0gICAgWHJTeXN0ZW1JZCBtX3N5c3RlbUlkOwotICAgIFhy
SW5zdGFuY2UgbV9pbnN0YW5jZTsKLSAgICBYclNlc3Npb24gbV9zZXNzaW9uIHsgWFJfTlVMTF9I
QU5ETEUgfTsKLSAgICBYclNlc3Npb25TdGF0ZSBtX3Nlc3Npb25TdGF0ZSB7IFhSX1NFU1NJT05f
U1RBVEVfVU5LTk9XTiB9OwotCi0gICAgV29ya1F1ZXVlJiBtX3F1ZXVlOwotCiAgICAgWHJWaWV3
Q29uZmlndXJhdGlvblR5cGUgbV9jdXJyZW50Vmlld0NvbmZpZ3VyYXRpb25UeXBlOwogICAgIFhy
U3BhY2UgbV9sb2NhbFNwYWNlIHsgWFJfTlVMTF9IQU5ETEUgfTsKICAgICBYclNwYWNlIG1fdmll
d1NwYWNlIHsgWFJfTlVMTF9IQU5ETEUgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421201</attachid>
            <date>2021-02-22 09:28:47 -0800</date>
            <delta_ts>2021-02-24 05:13:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222263-20210222182845.patch</filename>
            <type>text/plain</type>
            <size>54994</size>
            <attacher name="Imanol Fernandez">ifernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg0NDU1OGNjNTgzNTkx
Mzk5YmY2YWFmOGNhMGE2MzBhNWM4NDVjNy4uMDM1ZGRlNWM3YzY2MmUwNjEzMDhhZWYxNjZlMDI5
OTRmMDA3Y2I3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTAyLTIyICBJbWFu
b2wgRmVybmFuZGV6ICA8aWZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9y
IE9wZW5YUiBwbGF0Zm9ybSBjb2RlIGludG8gZGlmZmVyZW50IGNsYXNzZXMgYW5kIGZpbGVzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMjYzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3BlblhSIHBs
YXRmb3JtIGNvZGUgaXMgZ29pbmcgdG8gZ3JvdyB3aXRoIGdyYXBoaWNzLCBleHRlbnNpb25zLCBz
d2FwY2hhaW5zLCBjb250cm9sbGVycyBhbmQgbW9yZS4KKyAgICAgICAgVGhpcyBwYXRjaCBzcGxp
dHMgdGhlIGNvZGUgaW50byBkaWZmZXJlbnQgZmlsZXMgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxl
IGFuZCBtYWludGFuYWJsZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHBs
YXRmb3JtL3hyL29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChQ
bGF0Zm9ybVhSOjpPcGVuWFJFeHRlbnNpb25zOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1Y
Ujo6T3BlblhSRXh0ZW5zaW9uczo6T3BlblhSRXh0ZW5zaW9ucyk6CisgICAgICAgIChQbGF0Zm9y
bVhSOjpPcGVuWFJFeHRlbnNpb25zOjppc0V4dGVuc2lvblN1cHBvcnRlZCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkluc3RhbmNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChQbGF0Zm9ybVhSOjpJbnN0YW5jZTo6SW1wbDo6eHJJbnN0YW5jZSBjb25zdCk6CisgICAg
ICAgIChQbGF0Zm9ybVhSOjpJbnN0YW5jZTo6SW1wbDo6cXVldWUgY29uc3QpOgorICAgICAgICAo
UGxhdGZvcm1YUjo6SW5zdGFuY2U6OkltcGw6OmV4dGVuc2lvbnMpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6SW5zdGFuY2U6OkltcGw6OkltcGwpOgorICAgICAgICAoUGxhdGZvcm1YUjo6SW5zdGFu
Y2U6OkltcGw6On5JbXBsKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Okluc3RhbmNlOjpzaW5nbGV0
b24pOgorICAgICAgICAoUGxhdGZvcm1YUjo6SW5zdGFuY2U6Okluc3RhbmNlKToKKyAgICAgICAg
KFBsYXRmb3JtWFI6Okluc3RhbmNlOjplbnVtZXJhdGVJbW1lcnNpdmVYUkRldmljZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJVdGlscy5oOiBBZGRlZC4KKyAgICAgICAg
KFBsYXRmb3JtWFI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpyZXN1
bHRUb1N0cmluZyk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpYclBvc2VmVG9Qb3NlKToKKyAgICAg
ICAgKFBsYXRmb3JtWFI6OnhyVmlld1RvUG9zZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjp0b1hy
Vmlld0NvbmZpZ3VyYXRpb25UeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxh
dGZvcm1YUk9wZW5YUi5jcHA6CisgICAgICAgIChQbGF0Zm9ybVhSOjppc1Nlc3Npb25BY3RpdmUp
OgorICAgICAgICAoUGxhdGZvcm1YUjo6aXNTZXNzaW9uUmVhZHkpOgorICAgICAgICAoUGxhdGZv
cm1YUjo6T3BlblhSRGV2aWNlOjpPcGVuWFJEZXZpY2UpOgorICAgICAgICAoUGxhdGZvcm1YUjo6
T3BlblhSRGV2aWNlOjpyZWNvbW1lbmRlZFJlc29sdXRpb24pOgorICAgICAgICAoUGxhdGZvcm1Y
Ujo6T3BlblhSRGV2aWNlOjppbml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcpOgorICAgICAg
ICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpzaHV0RG93blRyYWNraW5nQW5kUmVuZGVyaW5n
KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUkRldmljZTo6aW5pdGlhbGl6ZVJlZmVyZW5j
ZVNwYWNlKToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUkRldmljZTo6cmVxdWVzdEZyYW1l
KToKKyAgICAgICAgKFBsYXRmb3JtWFI6Ok9wZW5YUkRldmljZTo6dmlld3MgY29uc3QpOgorICAg
ICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjplbnVtZXJhdGVSZWZlcmVuY2VTcGFjZXMg
Y29uc3QpOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhSRGV2aWNlOjpjcmVhdGVSZWZlcmVu
Y2VTcGFjZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OnJlc2V0U2Vzc2lv
bik6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OmhhbmRsZVNlc3Npb25TdGF0
ZUNoYW5nZSk6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJEZXZpY2U6OndhaXRVbnRpbFN0
b3BwaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5o
OgorCiAyMDIxLTAyLTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBIYW5kbGUgUGFnZTo6ZGlkRmluaXNoTG9hZGluZ0ltYWdlRm9yRWxlbWVu
dCBhc3luY2hyb25vdXNseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA4YTg2MTcyOTg4NzIwY2Y4OTRiNmEx
MzhjNWZiNDY0MDYwMGQ2ZTI1Li42MDg1OTIzMjk4MTY1M2U0ZjUzZjEwMzcwNmM3OTJmMDkwNDJj
YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjE2Niw2ICsyMTY2LDggQEAgcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAog
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKIHBsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCitwbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5zdGFu
Y2UuY3BwIEBuby11bmlmeQorcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lvbnMuY3Bw
IEBuby11bmlmeQogcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3BwIEBuby11
bmlmeQogcGx1Z2lucy9ET01NaW1lVHlwZS5jcHAKIHBsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBkZDY0NGMyNmJiN2Q3Y2VkNjBlNzUwMWE1NzhlYWY0YjU0NDFjMmQ2Li5hMzBkOGIz
NDA1MjNkNWEzZmQxNDVmZGNmYTYzMmVlMTNjMWIzYTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTMsNiArMzkzLDEwIEBA
CiAJCTExNUNGQTg2MjA4QjkwNjYwMDFFNjk5MSAvKiBGbG9hdGluZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExNUNGQTg0MjA4QjkwNjYw
MDFFNjk5MSAvKiBGbG9hdGluZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxMTVDRkE5NzIwOEI5NTJCMDAxRTY5OTEgLyogTGF5b3V0
Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTVD
RkE5NTIwOEI5NTJCMDAxRTY5OTEgLyogTGF5b3V0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTE2M0Y4MjQyNEU1RDVBRTAwMEFCOTYwIC8q
IFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE2M0Y4MjEyNEU1RDU5QjAwMEFCOTYwIC8qIFJl
bmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTExOEIwNjhCMjVFNDFFNTMwMDcwQkU0QiAvKiBP
cGVuWFJFeHRlbnNpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDExOEIwNjg2MjVFNDFFNTEwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25zLmNw
cCAqLzsgfTsKKwkJMTE4QjA2OEMyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOEIwNjg4
MjVFNDFFNTIwMDcwQkU0QiAvKiBPcGVuWFJFeHRlbnNpb25zLmggKi87IH07CisJCTExOEIwNjhE
MjVFNDFFNTMwMDcwQkU0QiAvKiBPcGVuWFJJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMThCMDY4OTI1RTQxRTUyMDA3MEJFNEIgLyog
T3BlblhSSW5zdGFuY2UuY3BwICovOyB9OworCQkxMThCMDY4RTI1RTQxRTUzMDA3MEJFNEIgLyog
T3BlblhSVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDExOEIwNjhBMjVFNDFFNTMwMDcwQkU0QiAvKiBPcGVuWFJVdGlscy5oICovOyB9OwogCQkx
MTkzNDA3OTFGRThCOTIzMDA5MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJUYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5MzQwNzcxRkU4Qjky
MzAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyVGFibGUuaCAqLzsgfTsKIAkJMTE5MzQwOEEx
RkVCMzU1RDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyUnVieS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5MzQwODgxRkVCMzU1RDAwOTM1RjFF
IC8qIFJlbmRlclRyZWVCdWlsZGVyUnVieS5oICovOyB9OwogCQkxMTkzNDA5NzFGRUQ3MTU1MDA5
MzVGMUUgLyogUmVuZGVyVHJlZUJ1aWxkZXJGb3JtQ29udHJvbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDExOTM0MDk1MUZFRDcxNTUwMDkzNUYxRSAv
KiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oICovOyB9OwpAQCAtNjMyNiw2ICs2MzMw
LDEwIEBACiAJCTExNUNGQTk2MjA4Qjk1MkIwMDFFNjk5MSAvKiBMYXlvdXRCb3guY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGF5b3V0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTE2M0Y4MjEyNEU1RDU5QjAwMEFCOTYwIC8qIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93
ZWRTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE2M0Y4MjMyNEU1RDU5QjAwMEFC
OTYwIC8qIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxMThCMDY4NjI1RTQxRTUxMDA3MEJFNEIgLyogT3BlblhSRXh0
ZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuWFJF
eHRlbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTE4QjA2ODgyNUU0
MUU1MjAwNzBCRTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3BlblhSRXh0ZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxMThCMDY4OTI1RTQxRTUyMDA3MEJFNEIgLyogT3BlblhSSW5zdGFuY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BlblhSSW5zdGFuY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxMThCMDY4QTI1RTQxRTUzMDA3MEJFNEIgLyogT3Bl
blhSVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BlblhSVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTE5MzQwNzYxRkU4QjkyMzAwOTM1RjFF
IC8qIFJlbmRlclRyZWVCdWlsZGVyVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
VHJlZUJ1aWxkZXJUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExOTM0
MDc3MUZFOEI5MjMwMDkzNUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlclRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTE5MzQwODcxRkVCMzU1RDAwOTM1RjFFIC8qIFJlbmRlclRyZWVCdWlsZGVyUnVieS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlclJ1YnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg5MjcsNiArMjg5MzUsMTAgQEAKIAkJRTFFRThCNkQy
NDEyQjJBNzAwRTc5NEQ2IC8qIG9wZW54ciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMTE4QjA2ODYyNUU0MUU1MTAwNzBCRTRCIC8qIE9wZW5YUkV4dGVu
c2lvbnMuY3BwICovLAorCQkJCTExOEIwNjg4MjVFNDFFNTIwMDcwQkU0QiAvKiBPcGVuWFJFeHRl
bnNpb25zLmggKi8sCisJCQkJMTE4QjA2ODkyNUU0MUU1MjAwNzBCRTRCIC8qIE9wZW5YUkluc3Rh
bmNlLmNwcCAqLywKKwkJCQkxMThCMDY4QTI1RTQxRTUzMDA3MEJFNEIgLyogT3BlblhSVXRpbHMu
aCAqLywKIAkJCQlFMUMxQTM5QjI0ODAwODA2MDBFMEFGNjYgLyogUGxhdGZvcm1YUk9wZW5YUi5j
cHAgKi8sCiAJCQkJRTFDMUEzOUMyNDgwMDgwNzAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIu
aCAqLywKIAkJCSk7CkBAIC0zNDA2MCw2ICszNDA3Miw4IEBACiAJCQkJQjJEM0RBNjUwRDAwNkNE
NjAwRUY2RjNBIC8qIE9wZW5UeXBlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRDNEQTY1MEQw
MDZDRDYwMEVGNkYyNyAvKiBPcGVuVHlwZU1hdGhEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkQzRUE2NTBEMDA2Q0Q2MDBFRjZGMjggLyogT3BlblR5cGVUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMTE4QjA2OEMyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTExOEIwNjhFMjVFNDFFNTMwMDcwQkU0QiAvKiBPcGVuWFJVdGlscy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzEyMDczNDAyMTZERkIwMDAwQzc4MzI5IC8qIE9wdGlvbmFs
RWZmZWN0VGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREU3RkM0NTE4MTkwNEIxMDAyQkJC
NzcgLyogT3JkZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4NEY1MTYxRUFGMDVB
ODAwRjE4QkYwIC8qIE9yaWVudGF0aW9uTm90aWZpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzYy
MzMsNiArMzYyNDcsOCBAQAogCQkJCTFBNTY5RDE4MEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX3J1
bnRpbWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUQxQTBEN0UyQjgyMDA3QzM5ODMgLyog
b2JqY191dGlsaXR5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2OTgyNjAxMTM0NjM2QTAwODk0
MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMTE4QjA2OEIy
NUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUkV4dGVuc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMTE4QjA2OEQyNUU0MUU1MzAwNzBCRTRCIC8qIE9wZW5YUkluc3RhbmNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNFQTI4NDY2MjE0MUU4NDkwMEU0MDdFOCAvKiBQbGF0Zm9ybUV2ZW50RmFj
dG9yeUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFBMTJERjQ5MTc0M0RGODMwMDREQUZERiAv
KiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFD
MUEzOUQyNDgwMDgwODAwRTBBRjY2IC8qIFBsYXRmb3JtWFJPcGVuWFIuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
RXh0ZW5zaW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhS
RXh0ZW5zaW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmIzMWE3ZDNmM2Q2YTAzOTQ3OWE0NGIxMmFiMzM2
YjMyZjhhOTkxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hy
L29wZW54ci9PcGVuWFJFeHRlbnNpb25zLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJPcGVuWFJFeHRlbnNpb25zLmgiCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIp
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgUGxhdGZvcm1YUiB7CisK
K3N0ZDo6dW5pcXVlX3B0cjxPcGVuWFJFeHRlbnNpb25zPiBPcGVuWFJFeHRlbnNpb25zOjpjcmVh
dGUoKQoreworICAgIHVpbnQzMl90IGV4dGVuc2lvbkNvdW50IHsgMCB9OworICAgIFhyUmVzdWx0
IHJlc3VsdCA9IHhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKG51bGxwdHIs
IDAsICZleHRlbnNpb25Db3VudCwgbnVsbHB0cik7CisKKyAgICBpZiAoWFJfRkFJTEVEKHJlc3Vs
dCkgfHwgIWV4dGVuc2lvbkNvdW50KSB7CisgICAgICAgIExPRyhYUiwgInhyRW51bWVyYXRlSW5z
dGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCk6IG5vIGV4dGVuc2lvbnNcbiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVz
PiBleHRlbnNpb25zKGV4dGVuc2lvbkNvdW50LCBbXSB7CisgICAgICAgIHJldHVybiBjcmVhdGVT
dHJ1Y3R1cmU8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzLCBYUl9UWVBFX0VYVEVOU0lPTl9QUk9QRVJU
SUVTPigpOworICAgIH0oKSk7CisKKyAgICByZXN1bHQgPSB4ckVudW1lcmF0ZUluc3RhbmNlRXh0
ZW5zaW9uUHJvcGVydGllcyhudWxscHRyLCBleHRlbnNpb25Db3VudCwgJmV4dGVuc2lvbkNvdW50
LCBleHRlbnNpb25zLmRhdGEoKSk7CisgICAgaWYgKFhSX0ZBSUxFRChyZXN1bHQpKSB7CisgICAg
ICAgIExPRyhYUiwgInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCkgZmFp
bGVkOiAlZFxuIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8T3BlblhSRXh0ZW5zaW9ucz4oV1RGTW92ZShleHRlbnNpb25z
KSk7Cit9CisKK09wZW5YUkV4dGVuc2lvbnM6Ok9wZW5YUkV4dGVuc2lvbnMoVmVjdG9yPFhyRXh0
ZW5zaW9uUHJvcGVydGllcz4mJiBleHRlbnNpb25zKQorICAgIDogbV9leHRlbnNpb25zKFdURk1v
dmUoZXh0ZW5zaW9ucykpCit7Cit9CisKK2Jvb2wgT3BlblhSRXh0ZW5zaW9uczo6aXNFeHRlbnNp
b25TdXBwb3J0ZWQoY29uc3QgY2hhciogbmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIHBvc2l0aW9u
ID0gbV9leHRlbnNpb25zLmZpbmRNYXRjaGluZyhbbmFtZV0oYXV0byYgcHJvcGVydHkpIHsKKyAg
ICAgICAgcmV0dXJuICFzdHJjbXAocHJvcGVydHkuZXh0ZW5zaW9uTmFtZSwgbmFtZSk7CisgICAg
fSk7CisgICAgcmV0dXJuIHBvc2l0aW9uICE9IG5vdEZvdW5kOworfQorCit9IC8vIG5hbWVzcGFj
ZSBQbGF0Zm9ybVhSCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSRXh0ZW5z
aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkV4dGVuc2lv
bnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40ZTRjYTM4YTgyNWI3NzViYjJmODI4NmMyZTZhNzI2OGYxM2IzM2Uw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09w
ZW5YUkV4dGVuc2lvbnMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQlhSKSAmJiBVU0Uo
T1BFTlhSKQorCisjaW5jbHVkZSAiT3BlblhSVXRpbHMuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFBsYXRmb3Jt
WFIgeworCitjbGFzcyBPcGVuWFJFeHRlbnNpb25zIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGVuWFJFeHRlbnNpb25zKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE9wZW5YUkV4dGVuc2lvbnM+IGNy
ZWF0ZSgpOworICAgIE9wZW5YUkV4dGVuc2lvbnMoVmVjdG9yPFhyRXh0ZW5zaW9uUHJvcGVydGll
cz4mJik7CisKKyAgICBib29sIGlzRXh0ZW5zaW9uU3VwcG9ydGVkKGNvbnN0IGNoYXIqKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8WHJFeHRlbnNpb25Qcm9wZXJ0aWVzPiBtX2V4dGVu
c2lvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBQbGF0Zm9ybVhSCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS94ci9vcGVueHIvT3BlblhSSW5zdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL09wZW5YUkluc3RhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDZjOWI1NWQyYzhj
YzVmMWFjOGI0ZWFkZDA1MmMxN2QzMzc2MzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUkluc3RhbmNlLmNwcApAQCAtMCwwICsxLDE0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCWFIpICYmIFVTRShPUEVOWFIpCisKKyNpbmNsdWRlICJP
cGVuWFJFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1YUk9wZW5YUi5oIgorCisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgUGxhdGZvcm1YUiB7CisKK3N0cnVjdCBJbnN0YW5jZTo6SW1wbCB7CisgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgSW1wbCgpOworICAgIH5JbXBsKCk7CisKKyAg
ICBYckluc3RhbmNlIHhySW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9Cisg
ICAgV29ya1F1ZXVlJiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya1F1ZXVlOyB9CisgICAg
T3BlblhSRXh0ZW5zaW9ucyogZXh0ZW5zaW9ucygpIHsgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQo
KTsgfQorCitwcml2YXRlOgorICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhSX05VTExfSEFO
RExFIH07CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE9wZW5YUkV4dGVuc2lvbnM+IG1fZXh0ZW5zaW9uczsKK307CisKK0luc3RhbmNlOjpJbXBs
OjpJbXBsKCkKKyAgICA6IG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJPcGVuWFIgcXVl
dWUiKSkKK3sKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAgICBM
T0coWFIsICJPcGVuWFI6IGluaXRpYWxpemluZ1xuIik7CisKKyAgICAgICAgbV9leHRlbnNpb25z
ID0gT3BlblhSRXh0ZW5zaW9uczo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghbV9leHRlbnNpb25z
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghbV9leHRlbnNpb25zLT5pc0V4
dGVuc2lvblN1cHBvcnRlZChYUl9NTkRfSEVBRExFU1NfRVhURU5TSU9OX05BTUUpKSB7CisgICAg
ICAgICAgICBMT0coWFIsICJSZXF1aXJlZCBleHRlbnNpb24gJXMgbm90IHN1cHBvcnRlZCIsIFhS
X01ORF9IRUFETEVTU19FWFRFTlNJT05fTkFNRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogc19hcHBsaWNhdGlvbk5hbWUgPSAi
V2ViWFIgKFdlYktpdCkiOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qgc19hcHBsaWNh
dGlvblZlcnNpb24gPSAxOworCisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGVuYWJsZWRFeHRl
bnNpb25zW10gPSB7CisgICAgICAgICAgICBYUl9NTkRfSEVBRExFU1NfRVhURU5TSU9OX05BTUUK
KyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNyZWF0ZUluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8
WHJJbnN0YW5jZUNyZWF0ZUluZm8sIFhSX1RZUEVfSU5TVEFOQ0VfQ1JFQVRFX0lORk8+KCk7Cisg
ICAgICAgIGNyZWF0ZUluZm8uY3JlYXRlRmxhZ3MgPSAwOworICAgICAgICBzdGQ6Om1lbWNweShj
cmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcHBsaWNhdGlvbk5hbWUsIHNfYXBwbGljYXRpb25O
YW1lLCBYUl9NQVhfQVBQTElDQVRJT05fTkFNRV9TSVpFKTsKKyAgICAgICAgY3JlYXRlSW5mby5h
cHBsaWNhdGlvbkluZm8uYXBpVmVyc2lvbiA9IFhSX0NVUlJFTlRfQVBJX1ZFUlNJT047CisgICAg
ICAgIGNyZWF0ZUluZm8uYXBwbGljYXRpb25JbmZvLmFwcGxpY2F0aW9uVmVyc2lvbiA9IHNfYXBw
bGljYXRpb25WZXJzaW9uOworICAgICAgICBjcmVhdGVJbmZvLmVuYWJsZWRBcGlMYXllckNvdW50
ID0gMDsKKyAgICAgICAgY3JlYXRlSW5mby5lbmFibGVkRXh0ZW5zaW9uQ291bnQgPSBXVEZfQVJS
QVlfTEVOR1RIKGVuYWJsZWRFeHRlbnNpb25zKTsKKyAgICAgICAgY3JlYXRlSW5mby5lbmFibGVk
RXh0ZW5zaW9uTmFtZXMgPSBlbmFibGVkRXh0ZW5zaW9uczsKKworICAgICAgICBYclJlc3VsdCBy
ZXN1bHQgPSB4ckNyZWF0ZUluc3RhbmNlKCZjcmVhdGVJbmZvLCAmbV9pbnN0YW5jZSk7CisgICAg
ICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJDcmVhdGVJbnN0YW5jZSgpIiwgbV9pbnN0
YW5jZSk7CisgICAgICAgIGlmIChtX2luc3RhbmNlID09IFhSX05VTExfSEFORExFKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIExPRyhYUiwgInhyQ3JlYXRlSW5zdGFuY2UoKTogdXNp
bmcgaW5zdGFuY2UgJXBcbiIsIG1faW5zdGFuY2UpOworICAgIH0pOworfQorCitJbnN0YW5jZTo6
SW1wbDo6fkltcGwoKQoreworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpc10geworICAg
ICAgICBpZiAobV9pbnN0YW5jZSAhPSBYUl9OVUxMX0hBTkRMRSkKKyAgICAgICAgICAgIHhyRGVz
dHJveUluc3RhbmNlKG1faW5zdGFuY2UpOworICAgIH0pOworfQorCitJbnN0YW5jZSYgSW5zdGFu
Y2U6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxJbnN0YW5j
ZT4gc19pbnN0YW5jZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19vbmNlRmxhZzsKKyAg
ICBzdGQ6OmNhbGxfb25jZShzX29uY2VGbGFnLAorICAgICAgICBbJl0geworICAgICAgICAgICAg
c19pbnN0YW5jZS5jb25zdHJ1Y3QoKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHNfaW5zdGFu
Y2UuZ2V0KCk7Cit9CisKK0luc3RhbmNlOjpJbnN0YW5jZSgpCisgICAgOiBtX2ltcGwobWFrZVVu
aXF1ZVJlZjxJbXBsPigpKQoreworfQorCit2b2lkIEluc3RhbmNlOjplbnVtZXJhdGVJbW1lcnNp
dmVYUkRldmljZXMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBEZXZpY2VMaXN0JiBkZXZp
Y2VzKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX2ltcGwtPnF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8g
Y2FsbGJhY2tPbkV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSgpIHsKKyAgICAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2soeyB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKworICAgICAgICBpZiAobV9pbXBsLT54ckluc3RhbmNlKCkgPT0gWFJfTlVMTF9IQU5ETEUg
fHwgIW1faW1wbC0+ZXh0ZW5zaW9ucygpKSB7CisgICAgICAgICAgICBMT0coWFIsICIlcyBVbmFi
bGUgdG8gZW51bWVyYXRlIFhSIGRldmljZXMuIE5vIFhySW5zdGFuY2UgcHJlc2VudFxuIiwgX19G
VU5DVElPTl9fKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gc3lzdGVtR2V0SW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYclN5c3RlbUdldEluZm8sIFhSX1RZ
UEVfU1lTVEVNX0dFVF9JTkZPPigpOworICAgICAgICBzeXN0ZW1HZXRJbmZvLmZvcm1GYWN0b3Ig
PSBYUl9GT1JNX0ZBQ1RPUl9IRUFEX01PVU5URURfRElTUExBWTsKKworICAgICAgICBYclN5c3Rl
bUlkIHN5c3RlbUlkOworICAgICAgICBYclJlc3VsdCByZXN1bHQgPSB4ckdldFN5c3RlbShtX2lt
cGwtPnhySW5zdGFuY2UoKSwgJnN5c3RlbUdldEluZm8sICZzeXN0ZW1JZCk7CisgICAgICAgIFJF
VFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJHZXRTeXN0ZW0iLCBtX2ltcGwtPnhySW5zdGFuY2Uo
KSk7CisKKyAgICAgICAgY2FsbGJhY2tPbkV4aXQucmVsZWFzZSgpOworCisgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHN5c3RlbUlk
XSgpIG11dGFibGUgeworICAgICAgICAgICAgbV9pbW1lcnNpdmVYUkRldmljZXMgPSBEZXZpY2VM
aXN0Ojpmcm9tKG1ha2VVbmlxdWVSZWY8T3BlblhSRGV2aWNlPihtX2ltcGwtPnhySW5zdGFuY2Uo
KSwgc3lzdGVtSWQsIG1faW1wbC0+cXVldWUoKSwgKm1faW1wbC0+ZXh0ZW5zaW9ucygpLCBbdGhp
cywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKG1f
aW1tZXJzaXZlWFJEZXZpY2VzKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgUGxhdGZvcm1YUgorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQlhSKSAmJiBVU0UoT1BFTlhSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL09wZW5YUlV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWFhNTZiZmUwODk0OGRiNzVjZDI5MTA3
OGM1NmNiOTQ5MmFiODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0veHIvb3BlbnhyL09wZW5YUlV0aWxzLmgKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJY
UikgJiYgVVNFKE9QRU5YUikKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVhSLmgiCisjaW5jbHVkZSA8b3BlbnhyL29wZW54ci5oPgorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
WHJTdHJ1Y3R1cmVUeXBlIFN0cnVjdHVyZVR5cGU+CitUIGNyZWF0ZVN0cnVjdHVyZSgpCit7Cisg
ICAgVCBvYmplY3Q7CisgICAgc3RkOjptZW1zZXQoJm9iamVjdCwgMCwgc2l6ZW9mKFQpKTsKKyAg
ICBvYmplY3QudHlwZSA9IFN0cnVjdHVyZVR5cGU7CisgICAgb2JqZWN0Lm5leHQgPSBudWxscHRy
OworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK2lubGluZSBTdHJpbmcgcmVzdWx0VG9TdHJpbmco
WHJSZXN1bHQgdmFsdWUsIFhySW5zdGFuY2UgaW5zdGFuY2UpCit7CisgICAgY2hhciBidWZmZXJb
WFJfTUFYX1JFU1VMVF9TVFJJTkdfU0laRV07CisgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJSZXN1
bHRUb1N0cmluZyhpbnN0YW5jZSwgdmFsdWUsIGJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdCA9PSBY
Ul9TVUNDRVNTKQorICAgICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlcik7CisgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIjx1bmtub3duICIsIGludCh2YWx1ZSksICI+Iik7Cit9CisKKyNkZWZpbmUgUkVU
VVJOX0lGX0ZBSUxFRChyZXN1bHQsIGNhbGwsIGluc3RhbmNlLCAuLi4pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoWFJfRkFJTEVEKHJlc3VsdCkp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgTE9HKFhSLCAiJXMgJXM6ICVzXG4iLCBfX2Z1bmNfXywg
Y2FsbCwgcmVzdWx0VG9TdHJpbmcocmVzdWx0LCBpbnN0YW5jZSkudXRmOCgpLmRhdGEoKSk7IFwK
KyAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKK2lubGlu
ZSBEZXZpY2U6OkZyYW1lRGF0YTo6UG9zZSBYclBvc2VmVG9Qb3NlKFhyUG9zZWYgcG9zZSkKK3sK
KyAgICBEZXZpY2U6OkZyYW1lRGF0YTo6UG9zZSByZXN1bHQ7CisgICAgcmVzdWx0Lm9yaWVudGF0
aW9uID0geyBwb3NlLm9yaWVudGF0aW9uLngsIHBvc2Uub3JpZW50YXRpb24ueSwgcG9zZS5vcmll
bnRhdGlvbi56LCBwb3NlLm9yaWVudGF0aW9uLncgfTsKKyAgICByZXN1bHQucG9zaXRpb24gPSB7
IHBvc2UucG9zaXRpb24ueCwgcG9zZS5wb3NpdGlvbi55LCBwb3NlLnBvc2l0aW9uLnogfTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgRGV2aWNlOjpGcmFtZURhdGE6OlZpZXcgeHJW
aWV3VG9Qb3NlKFhyVmlldyB2aWV3KQoreworICAgIERldmljZTo6RnJhbWVEYXRhOjpWaWV3IHBv
c2U7CisgICAgcG9zZS5wcm9qZWN0aW9uID0gRGV2aWNlOjpGcmFtZURhdGE6OkZvdiB7IHZpZXcu
Zm92LmFuZ2xlVXAsIC12aWV3LmZvdi5hbmdsZURvd24sIC12aWV3LmZvdi5hbmdsZUxlZnQsIHZp
ZXcuZm92LmFuZ2xlUmlnaHQgfTsKKyAgICBwb3NlLm9mZnNldCA9IFhyUG9zZWZUb1Bvc2Uodmll
dy5wb3NlKTsKKyAgICByZXR1cm4gcG9zZTsKK30KKworaW5saW5lIFhyVmlld0NvbmZpZ3VyYXRp
b25UeXBlIHRvWHJWaWV3Q29uZmlndXJhdGlvblR5cGUoU2Vzc2lvbk1vZGUgbW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcjoKKyAg
ICAgICAgcmV0dXJuIFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfU1RFUkVPOwor
ICAgIGNhc2UgU2Vzc2lvbk1vZGU6OklubGluZToKKyAgICBjYXNlIFNlc3Npb25Nb2RlOjpJbW1l
cnNpdmVBcjoKKyAgICAgICAgcmV0dXJuIFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1B
UllfTU9OTzsKKyAgICB9OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBY
Ul9WSUVXX0NPTkZJR1VSQVRJT05fVFlQRV9QUklNQVJZX01PTk87Cit9CisKK30gLy8gbmFtZXNw
YWNlIFBsYXRmb3JtWFIKKworI2VuZGlmIC8vIEVOQUJMRShXRUJYUikgJiYgVVNFKE9QRU5YUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
T3BlblhSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9QbGF0Zm9ybVhS
T3BlblhSLmNwcAppbmRleCBiOTRlODcxZjU3Yjg5N2M3ZTQ4NDlhNDdmNGE2NGMzMzMwZDZkMTc2
Li41YWFmMTg3MTM3ODFiZDIzYzdlMmM1MGU0ZDZkMmExNjQ2ZDM1YTk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5YUi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIuY3Bw
CkBAIC0yMiwyNDUgKzIyLDIwNSBAQAogCiAjaWYgRU5BQkxFKFdFQlhSKSAmJiBVU0UoT1BFTlhS
KQogCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPG9wZW54ci9vcGVueHJfcGxhdGZv
cm0uaD4KKyNpbmNsdWRlICJPcGVuWFJFeHRlbnNpb25zLmgiCisKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
U2NvcGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgWHJT
dHJ1Y3R1cmVUeXBlIFN0cnVjdHVyZVR5cGU+Ci1UIGNyZWF0ZVN0cnVjdHVyZSgpCisKK3N0YXRp
YyBib29sIGlzU2Vzc2lvbkFjdGl2ZShYclNlc3Npb25TdGF0ZSBzdGF0ZSkKIHsKLSAgICBUIG9i
amVjdDsKLSAgICBzdGQ6Om1lbXNldCgmb2JqZWN0LCAwLCBzaXplb2YoVCkpOwotICAgIG9iamVj
dC50eXBlID0gU3RydWN0dXJlVHlwZTsKLSAgICBvYmplY3QubmV4dCA9IG51bGxwdHI7Ci0gICAg
cmV0dXJuIG9iamVjdDsKKyAgICByZXR1cm4gc3RhdGUgPT0gWFJfU0VTU0lPTl9TVEFURV9WSVNJ
QkxFIHx8IHN0YXRlID09IFhSX1NFU1NJT05fU1RBVEVfRk9DVVNFRDsKIH0KIAotU3RyaW5nIHJl
c3VsdFRvU3RyaW5nKFhyUmVzdWx0IHZhbHVlLCBYckluc3RhbmNlIGluc3RhbmNlKQorc3RhdGlj
IGJvb2wgaXNTZXNzaW9uUmVhZHkoWHJTZXNzaW9uU3RhdGUgc3RhdGUpCiB7Ci0gICAgY2hhciBi
dWZmZXJbWFJfTUFYX1JFU1VMVF9TVFJJTkdfU0laRV07Ci0gICAgWHJSZXN1bHQgcmVzdWx0ID0g
eHJSZXN1bHRUb1N0cmluZyhpbnN0YW5jZSwgdmFsdWUsIGJ1ZmZlcik7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBYUl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlcik7Ci0gICAgcmV0
dXJuIG1ha2VTdHJpbmcoIjx1bmtub3duICIsIGludCh2YWx1ZSksICI+Iik7CisgICAgcmV0dXJu
IHN0YXRlID49IFhSX1NFU1NJT05fU1RBVEVfUkVBRFkgICYmIHN0YXRlIDwgWFJfU0VTU0lPTl9T
VEFURV9TVE9QUElORzsKIH0KIAotI2RlZmluZSBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgY2Fs
bCwgaW5zdGFuY2UsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGlmIChYUl9GQUlMRUQocmVzdWx0KSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBM
T0coWFIsICIlcyAlczogJXNcbiIsIF9fZnVuY19fLCBjYWxsLCByZXN1bHRUb1N0cmluZyhyZXN1
bHQsIGluc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdT
X187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RydWN0IEluc3RhbmNlOjpJbXBsIHsKLSAgICBX
VEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0KLSAgICBJbXBsKCk7Ci0gICAgfkltcGwo
KTsKLQotICAgIFhySW5zdGFuY2UgeHJJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFu
Y2U7IH0KLSAgICBXb3JrUXVldWUmIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV93b3JrUXVldWU7
IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGVudW1lcmF0ZUFwaUxheWVyUHJvcGVydGllcygpIGNv
bnN0OwotICAgIGJvb2wgY2hlY2tJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSBjb25zdDsK
LQotICAgIFhySW5zdGFuY2UgbV9pbnN0YW5jZSB7IFhSX05VTExfSEFORExFIH07Ci0gICAgUmVm
PFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci19OwotCi12b2lkIEluc3RhbmNlOjpJbXBsOjplbnVt
ZXJhdGVBcGlMYXllclByb3BlcnRpZXMoKSBjb25zdAorT3BlblhSRGV2aWNlOjpPcGVuWFJEZXZp
Y2UoWHJJbnN0YW5jZSBpbnN0YW5jZSwgWHJTeXN0ZW1JZCBzeXN0ZW0sIFdvcmtRdWV1ZSYgcXVl
dWUsIGNvbnN0IE9wZW5YUkV4dGVuc2lvbnMmIGV4dGVuc2lvbnMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFjaykKKyAgICA6IG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAgLCBt
X3N5c3RlbUlkKHN5c3RlbSkKKyAgICAsIG1fcXVldWUocXVldWUpCisgICAgLCBtX2V4dGVuc2lv
bnMoZXh0ZW5zaW9ucykKIHsKLSAgICBBU1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV93
b3JrUXVldWUtPnJ1bkxvb3AoKSk7Ci0gICAgdWludDMyX3QgcHJvcGVydHlDb3VudE91dHB1dCB7
IDAgfTsKLSAgICBYclJlc3VsdCByZXN1bHQgPSB4ckVudW1lcmF0ZUFwaUxheWVyUHJvcGVydGll
cygwLCAmcHJvcGVydHlDb3VudE91dHB1dCwgbnVsbHB0cik7Ci0gICAgUkVUVVJOX0lGX0ZBSUxF
RChyZXN1bHQsICJ4ckVudW1lcmF0ZUFwaUxheWVyUHJvcGVydGllcygpIiwgbV9pbnN0YW5jZSk7
Ci0KLSAgICBpZiAoIXByb3BlcnR5Q291bnRPdXRwdXQpIHsKLSAgICAgICAgTE9HKFhSLCAieHJF
bnVtZXJhdGVBcGlMYXllclByb3BlcnRpZXMoKTogbm8gcHJvcGVydGllc1xuIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8WHJBcGlMYXllclByb3BlcnRpZXM+IHByb3Bl
cnRpZXMocHJvcGVydHlDb3VudE91dHB1dCwKLSAgICAgICAgW10gewotICAgICAgICAgICAgWHJB
cGlMYXllclByb3BlcnRpZXMgb2JqZWN0OwotICAgICAgICAgICAgc3RkOjptZW1zZXQoJm9iamVj
dCwgMCwgc2l6ZW9mKFhyQXBpTGF5ZXJQcm9wZXJ0aWVzKSk7Ci0gICAgICAgICAgICBvYmplY3Qu
dHlwZSA9IFhSX1RZUEVfQVBJX0xBWUVSX1BST1BFUlRJRVM7Ci0gICAgICAgICAgICByZXR1cm4g
b2JqZWN0OwotICAgICAgICB9KCkpOwotICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlQXBpTGF5ZXJQ
cm9wZXJ0aWVzKHByb3BlcnR5Q291bnRPdXRwdXQsICZwcm9wZXJ0eUNvdW50T3V0cHV0LCBwcm9w
ZXJ0aWVzLmRhdGEoKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3F1ZXVl
LmRpc3BhdGNoKFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUg
eworICAgICAgICBhdXRvIHN5c3RlbVByb3BlcnRpZXMgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJTeXN0
ZW1Qcm9wZXJ0aWVzLCBYUl9UWVBFX1NZU1RFTV9QUk9QRVJUSUVTPigpOworICAgICAgICBhdXRv
IHJlc3VsdCA9IHhyR2V0U3lzdGVtUHJvcGVydGllcyhtX2luc3RhbmNlLCBtX3N5c3RlbUlkLCAm
c3lzdGVtUHJvcGVydGllcyk7CisgICAgICAgIGlmIChYUl9TVUNDRUVERUQocmVzdWx0KSkKKyAg
ICAgICAgICAgIG1fc3VwcG9ydHNPcmllbnRhdGlvblRyYWNraW5nID0gc3lzdGVtUHJvcGVydGll
cy50cmFja2luZ1Byb3BlcnRpZXMub3JpZW50YXRpb25UcmFja2luZyA9PSBYUl9UUlVFOworI2lm
ICFMT0dfRElTQUJMRUQKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTE9HKFhSLCAieHJHZXRT
eXN0ZW1Qcm9wZXJ0aWVzKCk6IGVycm9yICVzXG4iLCByZXN1bHRUb1N0cmluZyhyZXN1bHQsIG1f
aW5zdGFuY2UpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBMT0coWFIsICJGb3VuZCBYUlN5c3Rl
bSAlbHU6IFwiJXNcIiwgdmVuZG9yIElEICVkXG4iLCBzeXN0ZW1Qcm9wZXJ0aWVzLnN5c3RlbUlk
LCBzeXN0ZW1Qcm9wZXJ0aWVzLnN5c3RlbU5hbWUsIHN5c3RlbVByb3BlcnRpZXMudmVuZG9ySWQp
OworI2VuZGlmCiAKLSAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlQXBp
TGF5ZXJQcm9wZXJ0aWVzKCkiLCBtX2luc3RhbmNlKTsKLSAgICBMT0coWFIsICJ4ckVudW1lcmF0
ZUFwaUxheWVyUHJvcGVydGllcygpOiAlenUgcHJvcGVydGllc1xuIiwgcHJvcGVydGllcy5zaXpl
KCkpOwotfQorICAgICAgICBjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKCk7CisgICAgICAg
IGNvbGxlY3RDb25maWd1cmF0aW9uVmlld3MoKTsKIAotc3RhdGljIGJvb2wgaXNFeHRlbnNpb25T
dXBwb3J0ZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uTmFtZSwgVmVjdG9yPFhyRXh0ZW5zaW9uUHJv
cGVydGllcz4mIGluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcykKLXsKLSAgICBhdXRvIHBvc2l0
aW9uID0gaW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzLmZpbmRNYXRjaGluZyhbZXh0ZW5zaW9u
TmFtZV0oYXV0byYgcHJvcGVydHkpIHsKLSAgICAgICAgcmV0dXJuICFzdHJjbXAocHJvcGVydHku
ZXh0ZW5zaW9uTmFtZSwgZXh0ZW5zaW9uTmFtZSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
V1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwotICAgIHJldHVybiBwb3NpdGlvbiAhPSBub3RG
b3VuZDsKIH0KIAotYm9vbCBJbnN0YW5jZTo6SW1wbDo6Y2hlY2tJbnN0YW5jZUV4dGVuc2lvblBy
b3BlcnRpZXMoKSBjb25zdAorV2ViQ29yZTo6SW50U2l6ZSBPcGVuWFJEZXZpY2U6OnJlY29tbWVu
ZGVkUmVzb2x1dGlvbihTZXNzaW9uTW9kZSBtb2RlKQogewotICAgIEFTU0VSVCgmUnVuTG9vcDo6
Y3VycmVudCgpID09ICZtX3dvcmtRdWV1ZS0+cnVuTG9vcCgpKTsKLSAgICB1aW50MzJfdCBwcm9w
ZXJ0eUNvdW50T3V0cHV0IHsgMCB9OwotICAgIFhyUmVzdWx0IHJlc3VsdCA9IHhyRW51bWVyYXRl
SW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKG51bGxwdHIsIDAsICZwcm9wZXJ0eUNvdW50T3V0
cHV0LCBudWxscHRyKTsKLSAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRl
SW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzIiwgbV9pbnN0YW5jZSwgZmFsc2UpOwotCi0gICAg
aWYgKCFwcm9wZXJ0eUNvdW50T3V0cHV0KSB7Ci0gICAgICAgIExPRyhYUiwgInhyRW51bWVyYXRl
SW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCk6IG5vIHByb3BlcnRpZXNcbiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVmVjdG9yPFhyRXh0ZW5zaW9uUHJvcGVydGll
cz4gcHJvcGVydGllcyhwcm9wZXJ0eUNvdW50T3V0cHV0LAotICAgICAgICBbXSB7Ci0gICAgICAg
ICAgICBYckV4dGVuc2lvblByb3BlcnRpZXMgb2JqZWN0OwotICAgICAgICAgICAgc3RkOjptZW1z
ZXQoJm9iamVjdCwgMCwgc2l6ZW9mKFhyRXh0ZW5zaW9uUHJvcGVydGllcykpOwotICAgICAgICAg
ICAgb2JqZWN0LnR5cGUgPSBYUl9UWVBFX0VYVEVOU0lPTl9QUk9QRVJUSUVTOwotICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgfSgpKTsKLQotICAgIHVpbnQzMl90IHByb3BlcnR5
Q291bnRXcml0dGVuIHsgMCB9OwotICAgIHJlc3VsdCA9IHhyRW51bWVyYXRlSW5zdGFuY2VFeHRl
bnNpb25Qcm9wZXJ0aWVzKG51bGxwdHIsIHByb3BlcnR5Q291bnRPdXRwdXQsICZwcm9wZXJ0eUNv
dW50V3JpdHRlbiwgcHJvcGVydGllcy5kYXRhKCkpOwotICAgIFJFVFVSTl9JRl9GQUlMRUQocmVz
dWx0LCAieHJFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMiLCBtX2luc3RhbmNl
LCBmYWxzZSk7Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIExPRyhYUiwgInhyRW51bWVyYXRlSW5z
dGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKCk6ICV6dSBleHRlbnNpb24gcHJvcGVydGllc1xuIiwg
cHJvcGVydGllcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBwcm9wZXJ0aWVz
KQotICAgICAgICBMT0coWFIsICIgIGV4dGVuc2lvbiAnJXMnLCB2ZXJzaW9uICV1XG4iLCBwcm9w
ZXJ0eS5leHRlbnNpb25OYW1lLCBwcm9wZXJ0eS5leHRlbnNpb25WZXJzaW9uKTsKLSNlbmRpZgot
ICAgIGlmICghaXNFeHRlbnNpb25TdXBwb3J0ZWQoWFJfTU5EX0hFQURMRVNTX0VYVEVOU0lPTl9O
QU1FLCBwcm9wZXJ0aWVzKSkgewotICAgICAgICBMT0coWFIsICJSZXF1aXJlZCBleHRlbnNpb24g
JXMgbm90IHN1cHBvcnRlZCIsIFhSX01ORF9IRUFETEVTU19FWFRFTlNJT05fTkFNRSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvIGNv
bmZpZ1R5cGUgPSB0b1hyVmlld0NvbmZpZ3VyYXRpb25UeXBlKG1vZGUpOworICAgIGF1dG8gdmll
d3NJdGVyYXRvciA9IG1fY29uZmlndXJhdGlvblZpZXdzLmZpbmQoY29uZmlnVHlwZSk7CisgICAg
aWYgKHZpZXdzSXRlcmF0b3IgIT0gbV9jb25maWd1cmF0aW9uVmlld3MuZW5kKCkpCisgICAgICAg
IHJldHVybiB7IHN0YXRpY19jYXN0PGludD4odmlld3NJdGVyYXRvci0+dmFsdWVbMF0ucmVjb21t
ZW5kZWRJbWFnZVJlY3RXaWR0aCksIHN0YXRpY19jYXN0PGludD4odmlld3NJdGVyYXRvci0+dmFs
dWVbMF0ucmVjb21tZW5kZWRJbWFnZVJlY3RIZWlnaHQpIH07CisgICAgcmV0dXJuIERldmljZTo6
cmVjb21tZW5kZWRSZXNvbHV0aW9uKG1vZGUpOwogfQogCi1JbnN0YW5jZTo6SW1wbDo6SW1wbCgp
Ci0gICAgOiBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiT3BlblhSIHF1ZXVlIikpCit2
b2lkIE9wZW5YUkRldmljZTo6aW5pdGlhbGl6ZVRyYWNraW5nQW5kUmVuZGVyaW5nKFNlc3Npb25N
b2RlIG1vZGUpCiB7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzXSgpIHsKLSAgICAg
ICAgTE9HKFhSLCAiT3BlblhSOiBpbml0aWFsaXppbmdcbiIpOwotCi0gICAgICAgIGVudW1lcmF0
ZUFwaUxheWVyUHJvcGVydGllcygpOworICAgIG1fcXVldWUuZGlzcGF0Y2goW3RoaXMsIG1vZGVd
KCkgeworICAgICAgICBBU1NFUlQobV9pbnN0YW5jZSAhPSBYUl9OVUxMX0hBTkRMRSk7CisgICAg
ICAgIEFTU0VSVChtX3Nlc3Npb24gPT0gWFJfTlVMTF9IQU5ETEUpOwogCi0gICAgICAgIGlmICgh
Y2hlY2tJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMoKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9jdXJyZW50Vmlld0NvbmZpZ3VyYXRpb25UeXBlID0gdG9YclZpZXdDb25maWd1
cmF0aW9uVHlwZShtb2RlKTsKKyAgICAgICAgQVNTRVJUKG1fY29uZmlndXJhdGlvblZpZXdzLmNv
bnRhaW5zKG1fY3VycmVudFZpZXdDb25maWd1cmF0aW9uVHlwZSkpOwogCi0gICAgICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzX2FwcGxpY2F0aW9uTmFtZSA9ICJXZWJYUiAoV2ViS2l0KSI7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzX2FwcGxpY2F0aW9uVmVyc2lvbiA9IDE7CisgICAg
ICAgIC8vIENyZWF0ZSB0aGUgc2Vzc2lvbi4KKyAgICAgICAgYXV0byBzZXNzaW9uQ3JlYXRlSW5m
byA9IGNyZWF0ZVN0cnVjdHVyZTxYclNlc3Npb25DcmVhdGVJbmZvLCBYUl9UWVBFX1NFU1NJT05f
Q1JFQVRFX0lORk8+KCk7CisgICAgICAgIHNlc3Npb25DcmVhdGVJbmZvLnN5c3RlbUlkID0gbV9z
eXN0ZW1JZDsKIAotICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBlbmFibGVkRXh0ZW5zaW9uc1td
ID0gewotICAgICAgICAgICAgWFJfTU5EX0hFQURMRVNTX0VYVEVOU0lPTl9OQU1FLAotICAgICAg
ICB9OworICAgICAgICBhdXRvIHJlc3VsdCA9IHhyQ3JlYXRlU2Vzc2lvbihtX2luc3RhbmNlLCAm
c2Vzc2lvbkNyZWF0ZUluZm8sICZtX3Nlc3Npb24pOworICAgICAgICBSRVRVUk5fSUZfRkFJTEVE
KHJlc3VsdCwgInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVzIiwgbV9pbnN0
YW5jZSk7CiAKLSAgICAgICAgYXV0byBjcmVhdGVJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhySW5z
dGFuY2VDcmVhdGVJbmZvLCBYUl9UWVBFX0lOU1RBTkNFX0NSRUFURV9JTkZPPigpOwotICAgICAg
ICBjcmVhdGVJbmZvLmNyZWF0ZUZsYWdzID0gMDsKLSAgICAgICAgc3RkOjptZW1jcHkoY3JlYXRl
SW5mby5hcHBsaWNhdGlvbkluZm8uYXBwbGljYXRpb25OYW1lLCBzX2FwcGxpY2F0aW9uTmFtZSwg
WFJfTUFYX0FQUExJQ0FUSU9OX05BTUVfU0laRSk7Ci0gICAgICAgIGNyZWF0ZUluZm8uYXBwbGlj
YXRpb25JbmZvLmFwaVZlcnNpb24gPSBYUl9DVVJSRU5UX0FQSV9WRVJTSU9OOwotICAgICAgICBj
cmVhdGVJbmZvLmFwcGxpY2F0aW9uSW5mby5hcHBsaWNhdGlvblZlcnNpb24gPSBzX2FwcGxpY2F0
aW9uVmVyc2lvbjsKLSAgICAgICAgY3JlYXRlSW5mby5lbmFibGVkQXBpTGF5ZXJDb3VudCA9IDA7
Ci0gICAgICAgIGNyZWF0ZUluZm8uZW5hYmxlZEV4dGVuc2lvbkNvdW50ID0gV1RGX0FSUkFZX0xF
TkdUSChlbmFibGVkRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGNyZWF0ZUluZm8uZW5hYmxlZEV4dGVu
c2lvbk5hbWVzID0gZW5hYmxlZEV4dGVuc2lvbnM7Ci0KLSAgICAgICAgWHJJbnN0YW5jZSBpbnN0
YW5jZTsKLSAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJDcmVhdGVJbnN0YW5jZSgmY3JlYXRl
SW5mbywgJmluc3RhbmNlKTsKLSAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChyZXN1bHQsICJ4ckNy
ZWF0ZUluc3RhbmNlKCkiLCBtX2luc3RhbmNlKTsKLSAgICAgICAgbV9pbnN0YW5jZSA9IGluc3Rh
bmNlOwotICAgICAgICBMT0coWFIsICJ4ckNyZWF0ZUluc3RhbmNlKCk6IHVzaW5nIGluc3RhbmNl
ICVwXG4iLCBtX2luc3RhbmNlKTsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IHJlZmVy
ZW5jZSBzcGFjZXMKKyAgICAgICAgbV9sb2NhbFNwYWNlID0gY3JlYXRlUmVmZXJlbmNlU3BhY2Uo
WFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfTE9DQUwpOworICAgICAgICBtX3ZpZXdTcGFjZSA9IGNy
ZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9TUEFDRV9UWVBFX1ZJRVcpOwogICAgIH0p
OwogfQogCi1JbnN0YW5jZTo6SW1wbDo6fkltcGwoKQordm9pZCBPcGVuWFJEZXZpY2U6OnNodXRE
b3duVHJhY2tpbmdBbmRSZW5kZXJpbmcoKQogewotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChb
dGhpc10gewotICAgICAgICBpZiAobV9pbnN0YW5jZSAhPSBYUl9OVUxMX0hBTkRMRSkKLSAgICAg
ICAgICAgIHhyRGVzdHJveUluc3RhbmNlKG1faW5zdGFuY2UpOwotICAgIH0pOwotfQorICAgIG1f
cXVldWUuZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAgICBpZiAobV9zZXNzaW9uID09IFhSX05V
TExfSEFORExFKQorICAgICAgICAgICAgcmV0dXJuOwogCi1JbnN0YW5jZSYgSW5zdGFuY2U6OnNp
bmdsZXRvbigpCi17Ci0gICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxJbnN0YW5jZT4gc19p
bnN0YW5jZTsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgc19vbmNlRmxhZzsKLSAgICBzdGQ6
OmNhbGxfb25jZShzX29uY2VGbGFnLAotICAgICAgICBbJl0gewotICAgICAgICAgICAgc19pbnN0
YW5jZS5jb25zdHJ1Y3QoKTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHNfaW5zdGFuY2UuZ2V0
KCk7CisgICAgICAgIC8vIHhyUmVxdWVzdEV4aXRTZXNzaW9uKCkgd2lsbCB0cmFuc2l0aW9uIHRo
ZSBzZXNzaW9uIHRvIFNUT1BQRUQgc3RhdGUuCisgICAgICAgIC8vIElmIHRoZSBzZXNzaW9uIHdh
cyBub3QgcnVubmluZyB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBzZXNzaW9uIG91cnNlbHZlcy4KKyAg
ICAgICAgaWYgKFhSX0ZBSUxFRCh4clJlcXVlc3RFeGl0U2Vzc2lvbihtX3Nlc3Npb24pKSkgewor
ICAgICAgICAgICAgcmVzZXRTZXNzaW9uKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBPcGVuWFIgbmVlZHMgdG8gd2FpdCBmb3IgdGhlIFhSX1NFU1NJT05f
U1RBVEVfU1RPUFBJTkcgc3RhdGUgdG8gcHJvcGVybHkgZW5kIHRoZSBzZXNzaW9uLgorICAgICAg
ICB3YWl0VW50aWxTdG9wcGluZygpOworICAgIH0pOwogfQogCi1JbnN0YW5jZTo6SW5zdGFuY2Uo
KQotICAgIDogbV9pbXBsKG1ha2VVbmlxdWVSZWY8SW1wbD4oKSkKK3ZvaWQgT3BlblhSRGV2aWNl
Ojppbml0aWFsaXplUmVmZXJlbmNlU3BhY2UoUGxhdGZvcm1YUjo6UmVmZXJlbmNlU3BhY2VUeXBl
IHNwYWNlVHlwZSkKIHsKKyAgICBpZiAoKHNwYWNlVHlwZSA9PSBSZWZlcmVuY2VTcGFjZVR5cGU6
OkxvY2FsRmxvb3IgfHwgc3BhY2VUeXBlID09IFJlZmVyZW5jZVNwYWNlVHlwZTo6Qm91bmRlZEZs
b29yKSAmJiBtX3N0YWdlU3BhY2UgPT0gWFJfTlVMTF9IQU5ETEUpCisgICAgICAgIG1fc3RhZ2VT
cGFjZSA9IGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9TUEFDRV9UWVBFX1NUQUdF
KTsKIH0KIAotdm9pZCBJbnN0YW5jZTo6ZW51bWVyYXRlSW1tZXJzaXZlWFJEZXZpY2VzKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRGV2aWNlTGlzdCYgZGV2aWNlcyk+JiYgY2FsbGJhY2sp
Cit2b2lkIE9wZW5YUkRldmljZTo6cmVxdWVzdEZyYW1lKFJlcXVlc3RGcmFtZUNhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7Ci0gICAgbV9pbXBsLT5xdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgewotICAgICAgICBhdXRvIGNhbGxiYWNr
T25FeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0oKSB7CisgICAgbV9xdWV1ZS5kaXNwYXRjaChbdGhp
cywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgcG9s
bEV2ZW50cygpOworICAgICAgICBpZiAoIWlzU2Vzc2lvblJlYWR5KG1fc2Vzc2lvblN0YXRlKSkg
ewogICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAvLyBEZXZpY2Ugbm90IHJlYWR5IG9y
IHN0b3BwaW5nLiBSZXBvcnQgZnJhbWVEYXRhIHdpdGggaW52YWxpZCB0cmFja2luZy4KICAgICAg
ICAgICAgICAgICBjYWxsYmFjayh7IH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIGlmIChtX2ltcGwtPnhySW5zdGFuY2UoKSA9PSBYUl9OVUxMX0hBTkRMRSkgewot
ICAgICAgICAgICAgTE9HKFhSLCAiJXMgVW5hYmxlIHRvIGVudW1lcmF0ZSBYUiBkZXZpY2VzLiBO
byBYckluc3RhbmNlIHByZXNlbnRcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHN5c3RlbUdldEluZm8gPSBjcmVhdGVTdHJ1
Y3R1cmU8WHJTeXN0ZW1HZXRJbmZvLCBYUl9UWVBFX1NZU1RFTV9HRVRfSU5GTz4oKTsKLSAgICAg
ICAgc3lzdGVtR2V0SW5mby5mb3JtRmFjdG9yID0gWFJfRk9STV9GQUNUT1JfSEVBRF9NT1VOVEVE
X0RJU1BMQVk7CisgICAgICAgIGF1dG8gZnJhbWVTdGF0ZSA9IGNyZWF0ZVN0cnVjdHVyZTxYckZy
YW1lU3RhdGUsIFhSX1RZUEVfRlJBTUVfU1RBVEU+KCk7CisgICAgICAgIGF1dG8gZnJhbWVXYWl0
SW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckZyYW1lV2FpdEluZm8sIFhSX1RZUEVfRlJBTUVfV0FJ
VF9JTkZPPigpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHhyV2FpdEZyYW1lKG1fc2Vzc2lvbiwg
JmZyYW1lV2FpdEluZm8sICZmcmFtZVN0YXRlKTsKKyAgICAgICAgUkVUVVJOX0lGX0ZBSUxFRChy
ZXN1bHQsICJ4cldhaXRGcmFtZSIsIG1faW5zdGFuY2UpOworICAgICAgICBYclRpbWUgcHJlZGlj
dGVkVGltZSA9IGZyYW1lU3RhdGUucHJlZGljdGVkRGlzcGxheVRpbWU7CisKKyAgICAgICAgYXV0
byBmcmFtZUJlZ2luSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckZyYW1lQmVnaW5JbmZvLCBYUl9U
WVBFX0ZSQU1FX0JFR0lOX0lORk8+KCk7CisgICAgICAgIHJlc3VsdCA9IHhyQmVnaW5GcmFtZSht
X3Nlc3Npb24sICZmcmFtZUJlZ2luSW5mbyk7CisgICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVz
dWx0LCAieHJCZWdpbkZyYW1lIiwgbV9pbnN0YW5jZSk7CisKKyAgICAgICAgRGV2aWNlOjpGcmFt
ZURhdGEgZnJhbWVEYXRhOworICAgICAgICBmcmFtZURhdGEucHJlZGljdGVkRGlzcGxheVRpbWUg
PSBmcmFtZVN0YXRlLnByZWRpY3RlZERpc3BsYXlUaW1lOworCisKKyAgICAgICAgQVNTRVJUKG1f
Y29uZmlndXJhdGlvblZpZXdzLmNvbnRhaW5zKG1fY3VycmVudFZpZXdDb25maWd1cmF0aW9uVHlw
ZSkpOworICAgICAgICBjb25zdCBhdXRvJiBjb25maWd1cmF0aW9uVmlldyA9IG1fY29uZmlndXJh
dGlvblZpZXdzLmdldChtX2N1cnJlbnRWaWV3Q29uZmlndXJhdGlvblR5cGUpOworCisgICAgICAg
IHVpbnQzMl90IHZpZXdDb3VudCA9IGNvbmZpZ3VyYXRpb25WaWV3LnNpemUoKTsKKyAgICAgICAg
VmVjdG9yPFhyVmlldz4gdmlld3Modmlld0NvdW50LCBbXSB7CisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlU3RydWN0dXJlPFhyVmlldywgWFJfVFlQRV9WSUVXPigpOworICAgICAgICB9KCkpOwor
CisKKyAgICAgICAgaWYgKGlzU2Vzc2lvbkFjdGl2ZShtX3Nlc3Npb25TdGF0ZSkpIHsKKyAgICAg
ICAgICAgIC8vIFF1ZXJ5IGhlYWQgbG9jYXRpb24KKyAgICAgICAgICAgIGF1dG8gbG9jYXRpb24g
PSBjcmVhdGVTdHJ1Y3R1cmU8WHJTcGFjZUxvY2F0aW9uLCBYUl9UWVBFX1NQQUNFX0xPQ0FUSU9O
PigpOworICAgICAgICAgICAgeHJMb2NhdGVTcGFjZShtX3ZpZXdTcGFjZSwgbV9sb2NhbFNwYWNl
LCBmcmFtZVN0YXRlLnByZWRpY3RlZERpc3BsYXlUaW1lLCAmbG9jYXRpb24pOworICAgICAgICAg
ICAgZnJhbWVEYXRhLmlzVHJhY2tpbmdWYWxpZCA9IGxvY2F0aW9uLmxvY2F0aW9uRmxhZ3MgJiBY
Ul9TUEFDRV9MT0NBVElPTl9PUklFTlRBVElPTl9WQUxJRF9CSVQ7CisgICAgICAgICAgICBmcmFt
ZURhdGEuaXNQb3NpdGlvblZhbGlkID0gbG9jYXRpb24ubG9jYXRpb25GbGFncyAmIFhSX1NQQUNF
X0xPQ0FUSU9OX1BPU0lUSU9OX1ZBTElEX0JJVDsKKyAgICAgICAgICAgIGZyYW1lRGF0YS5pc1Bv
c2l0aW9uRW11bGF0ZWQgPSBsb2NhdGlvbi5sb2NhdGlvbkZsYWdzICYgWFJfU1BBQ0VfTE9DQVRJ
T05fUE9TSVRJT05fVFJBQ0tFRF9CSVQ7CisKKyAgICAgICAgICAgIGlmIChmcmFtZURhdGEuaXNU
cmFja2luZ1ZhbGlkKQorICAgICAgICAgICAgICAgIGZyYW1lRGF0YS5vcmlnaW4gPSBYclBvc2Vm
VG9Qb3NlKGxvY2F0aW9uLnBvc2UpOworICAgICAgICAgICAgCiAKLSAgICAgICAgWHJTeXN0ZW1J
ZCBzeXN0ZW1JZDsKLSAgICAgICAgWHJSZXN1bHQgcmVzdWx0ID0geHJHZXRTeXN0ZW0obV9pbXBs
LT54ckluc3RhbmNlKCksICZzeXN0ZW1HZXRJbmZvLCAmc3lzdGVtSWQpOwotICAgICAgICBSRVRV
Uk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyR2V0U3lzdGVtIiwgbV9pbXBsLT54ckluc3RhbmNlKCkp
OworICAgICAgICAgICAgYXV0byB2aWV3TG9jYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYclZp
ZXdMb2NhdGVJbmZvLCBYUl9UWVBFX1ZJRVdfTE9DQVRFX0lORk8+KCk7CisgICAgICAgICAgICB2
aWV3TG9jYXRlSW5mby5kaXNwbGF5VGltZSA9IHByZWRpY3RlZFRpbWU7CisgICAgICAgICAgICB2
aWV3TG9jYXRlSW5mby5zcGFjZSA9IG1fbG9jYWxTcGFjZTsKKworICAgICAgICAgICAgYXV0byB2
aWV3U3RhdGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJWaWV3U3RhdGUsIFhSX1RZUEVfVklFV19TVEFU
RT4oKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHZpZXdDb3VudE91dHB1dDsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHhyTG9jYXRlVmlld3MobV9zZXNzaW9uLCAmdmlld0xvY2F0ZUluZm8sICZ2aWV3
U3RhdGUsIHZpZXdDb3VudCwgJnZpZXdDb3VudE91dHB1dCwgdmlld3MuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGlmICghWFJfRkFJTEVEKHJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIHZpZXcgOiB2aWV3cykKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVEYXRhLnZpZXdzLmFw
cGVuZCh4clZpZXdUb1Bvc2UodmlldykpOworICAgICAgICAgICAgfQogCi0gICAgICAgIGNhbGxi
YWNrT25FeGl0LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIC8vIFF1ZXJ5IGZsb29yIHRyYW5zZm9y
bQorICAgICAgICAgICAgaWYgKG1fc3RhZ2VTcGFjZSAhPSBYUl9OVUxMX0hBTkRMRSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gZmxvb3JMb2NhdGlvbiA9IGNyZWF0ZVN0cnVjdHVyZTxYclNwYWNl
TG9jYXRpb24sIFhSX1RZUEVfU1BBQ0VfTE9DQVRJT04+KCk7CisgICAgICAgICAgICAgICAgeHJM
b2NhdGVTcGFjZShtX3N0YWdlU3BhY2UsIG1fbG9jYWxTcGFjZSwgZnJhbWVTdGF0ZS5wcmVkaWN0
ZWREaXNwbGF5VGltZSwgJmZsb29yTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGZyYW1lRGF0
YS5mbG9vclRyYW5zZm9ybSA9IHsgWHJQb3NlZlRvUG9zZShmbG9vckxvY2F0aW9uLnBvc2UpIH07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0
aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzeXN0ZW1JZF0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIG1faW1tZXJzaXZlWFJEZXZpY2VzID0gRGV2aWNlTGlzdDo6ZnJvbShtYWtl
VW5pcXVlUmVmPE9wZW5YUkRldmljZT4oc3lzdGVtSWQsIG1faW1wbC0+eHJJbnN0YW5jZSgpLCBt
X2ltcGwtPnF1ZXVlKCksIFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11
dGFibGUgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAg
ICAgICAgICAgY2FsbGJhY2sobV9pbW1lcnNpdmVYUkRldmljZXMpOwotICAgICAgICAgICAgfSkp
OworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtmcmFtZURhdGEgPSBXVEZNb3ZlKGZyYW1lRGF0
YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKGZyYW1lRGF0YSkpOwogICAgICAgICB9KTsKKworCisgICAgICAg
IFZlY3Rvcjxjb25zdCBYckNvbXBvc2l0aW9uTGF5ZXJCYXNlSGVhZGVyKj4gbGF5ZXJzOworCisg
ICAgICAgIGF1dG8gZnJhbWVFbmRJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyRnJhbWVFbmRJbmZv
LCBYUl9UWVBFX0ZSQU1FX0VORF9JTkZPPigpOworICAgICAgICBmcmFtZUVuZEluZm8uZGlzcGxh
eVRpbWUgPSBwcmVkaWN0ZWRUaW1lOworICAgICAgICBmcmFtZUVuZEluZm8uZW52aXJvbm1lbnRC
bGVuZE1vZGUgPSBYUl9FTlZJUk9OTUVOVF9CTEVORF9NT0RFX09QQVFVRTsKKyAgICAgICAgZnJh
bWVFbmRJbmZvLmxheWVyQ291bnQgPSBsYXllcnMuc2l6ZSgpOworICAgICAgICByZXN1bHQgPSB4
ckVuZEZyYW1lKG1fc2Vzc2lvbiwgJmZyYW1lRW5kSW5mbyk7CisgICAgICAgIFJFVFVSTl9JRl9G
QUlMRUQocmVzdWx0LCAieHJFbmRGcmFtZSIsIG1faW5zdGFuY2UpOwogICAgIH0pOwogfQogCi1P
cGVuWFJEZXZpY2U6Ok9wZW5YUkRldmljZShYclN5c3RlbUlkIGlkLCBYckluc3RhbmNlIGluc3Rh
bmNlLCBXb3JrUXVldWUmIHF1ZXVlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2spCi0gICAgOiBtX3N5c3RlbUlkKGlkKQotICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKLSAg
ICAsIG1fcXVldWUocXVldWUpCitWZWN0b3I8RGV2aWNlOjpWaWV3RGF0YT4gT3BlblhSRGV2aWNl
Ojp2aWV3cyhTZXNzaW9uTW9kZSBtb2RlKSBjb25zdAogewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgbV9xdWV1ZS5kaXNwYXRjaChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBzeXN0ZW1Qcm9wZXJ0aWVzID0gY3Jl
YXRlU3RydWN0dXJlPFhyU3lzdGVtUHJvcGVydGllcywgWFJfVFlQRV9TWVNURU1fUFJPUEVSVElF
Uz4oKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSB4ckdldFN5c3RlbVByb3BlcnRpZXMobV9pbnN0
YW5jZSwgbV9zeXN0ZW1JZCwgJnN5c3RlbVByb3BlcnRpZXMpOwotICAgICAgICBpZiAoWFJfU1VD
Q0VFREVEKHJlc3VsdCkpCi0gICAgICAgICAgICBtX3N1cHBvcnRzT3JpZW50YXRpb25UcmFja2lu
ZyA9IHN5c3RlbVByb3BlcnRpZXMudHJhY2tpbmdQcm9wZXJ0aWVzLm9yaWVudGF0aW9uVHJhY2tp
bmcgPT0gWFJfVFJVRTsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIExPRyhYUiwgInhyR2V0U3lzdGVtUHJvcGVydGllcygpOiBlcnJvciAlc1xuIiwgcmVzdWx0
VG9TdHJpbmcocmVzdWx0LCBtX2luc3RhbmNlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgTE9H
KFhSLCAiRm91bmQgWFJTeXN0ZW0gJWx1OiBcIiVzXCIsIHZlbmRvciBJRCAlZFxuIiwgc3lzdGVt
UHJvcGVydGllcy5zeXN0ZW1JZCwgc3lzdGVtUHJvcGVydGllcy5zeXN0ZW1OYW1lLCBzeXN0ZW1Q
cm9wZXJ0aWVzLnZlbmRvcklkKTsKLSNlbmRpZgotCi0gICAgICAgIGNvbGxlY3RTdXBwb3J0ZWRT
ZXNzaW9uTW9kZXMoKTsKLSAgICAgICAgY29sbGVjdENvbmZpZ3VyYXRpb25WaWV3cygpOworICAg
IFZlY3RvcjxEZXZpY2U6OlZpZXdEYXRhPiB2aWV3czsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb25U
eXBlID0gdG9YclZpZXdDb25maWd1cmF0aW9uVHlwZShtb2RlKTsKIAotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICB9KTsKKyAgICBpZiAoY29uZmlndXJh
dGlvblR5cGUgPT0gWFJfVklFV19DT05GSUdVUkFUSU9OX1RZUEVfUFJJTUFSWV9NT05PKQorICAg
ICAgICB2aWV3cy5hcHBlbmQoeyAuYWN0aXZlID0gdHJ1ZSwgLmV5ZSA9IEV5ZTo6Tm9uZSB9KTsK
KyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNvbmZpZ3VyYXRpb25UeXBlID09IFhSX1ZJRVdf
Q09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfU1RFUkVPKTsKKyAgICAgICAgdmlld3MuYXBwZW5k
KHsgLmFjdGl2ZSA9IHRydWUsIEV5ZTo6TGVmdCB9KTsKKyAgICAgICAgdmlld3MuYXBwZW5kKHsg
LmFjdGl2ZSA9IHRydWUsIEV5ZTo6UmlnaHQgfSk7CisgICAgfQorICAgIHJldHVybiB2aWV3czsK
IH0KIAotRGV2aWNlOjpMaXN0T2ZFbmFibGVkRmVhdHVyZXMgT3BlblhSRGV2aWNlOjplbnVtZXJh
dGVSZWZlcmVuY2VTcGFjZXMoWHJTZXNzaW9uJiBzZXNzaW9uKSBjb25zdAorRGV2aWNlOjpMaXN0
T2ZFbmFibGVkRmVhdHVyZXMgT3BlblhSRGV2aWNlOjplbnVtZXJhdGVSZWZlcmVuY2VTcGFjZXMo
WHJTZXNzaW9uIHNlc3Npb24pIGNvbnN0CiB7CiAgICAgdWludDMyX3QgcmVmZXJlbmNlU3BhY2Vz
Q291bnQ7CiAgICAgYXV0byByZXN1bHQgPSB4ckVudW1lcmF0ZVJlZmVyZW5jZVNwYWNlcyhzZXNz
aW9uLCAwLCAmcmVmZXJlbmNlU3BhY2VzQ291bnQsIG51bGxwdHIpOwpAQCAtMjk5LDI4ICsyNTks
NiBAQCBEZXZpY2U6Okxpc3RPZkVuYWJsZWRGZWF0dXJlcyBPcGVuWFJEZXZpY2U6OmVudW1lcmF0
ZVJlZmVyZW5jZVNwYWNlcyhYclNlc3Npb24mCiAgICAgcmV0dXJuIGVuYWJsZWRGZWF0dXJlczsK
IH0KIAotWHJTcGFjZSBPcGVuWFJEZXZpY2U6OmNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhyUmVmZXJl
bmNlU3BhY2VUeXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKCZSdW5Mb29wOjpjdXJyZW50KCkgPT0g
Jm1fcXVldWUucnVuTG9vcCgpKTsKLSAgICBBU1NFUlQobV9zZXNzaW9uICE9IFhSX05VTExfSEFO
RExFKTsKLSAgICBBU1NFUlQobV9pbnN0YW5jZSAhPSBYUl9OVUxMX0hBTkRMRSk7Ci0KLSAgICBY
clBvc2VmIGlkZW50aXR5UG9zZSB7Ci0gICAgICAgIC5vcmllbnRhdGlvbiA9IHsgLnggPSAwLCAu
eSA9IDAsIC56ID0gMCwgLncgPSAxLjAgfSwKLSAgICAgICAgLnBvc2l0aW9uID0geyAueCA9IDAs
IC55ID0gMCwgLnogPSAwIH0KLSAgICB9OwotCi0gICAgYXV0byBzcGFjZUNyZWF0ZUluZm8gPSBj
cmVhdGVTdHJ1Y3R1cmU8WHJSZWZlcmVuY2VTcGFjZUNyZWF0ZUluZm8sIFhSX1RZUEVfUkVGRVJF
TkNFX1NQQUNFX0NSRUFURV9JTkZPPigpOwotICAgIHNwYWNlQ3JlYXRlSW5mby5yZWZlcmVuY2VT
cGFjZVR5cGUgPSB0eXBlOwotICAgIHNwYWNlQ3JlYXRlSW5mby5wb3NlSW5SZWZlcmVuY2VTcGFj
ZSA9IGlkZW50aXR5UG9zZTsKLQotICAgIFhyU3BhY2Ugc3BhY2U7Ci0gICAgYXV0byByZXN1bHQg
PSB4ckNyZWF0ZVJlZmVyZW5jZVNwYWNlKG1fc2Vzc2lvbiwgJnNwYWNlQ3JlYXRlSW5mbywgJnNw
YWNlKTsKLSAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyQ3JlYXRlUmVmZXJlbmNlU3Bh
Y2UiLCBtX2luc3RhbmNlLCBYUl9OVUxMX0hBTkRMRSk7Ci0KLSAgICByZXR1cm4gc3BhY2U7Ci19
Ci0KIHZvaWQgT3BlblhSRGV2aWNlOjpjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKCkKIHsK
ICAgICBBU1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5ydW5Mb29wKCkpOwpA
QCAtMzkwLDExMyArMzI4LDI2IEBAIHZvaWQgT3BlblhSRGV2aWNlOjpjb2xsZWN0Q29uZmlndXJh
dGlvblZpZXdzKCkKICAgICB9CiB9CiAKLVhyVmlld0NvbmZpZ3VyYXRpb25UeXBlIHRvWHJWaWV3
Q29uZmlndXJhdGlvblR5cGUoU2Vzc2lvbk1vZGUgbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVWcjoKLSAgICAgICAgcmV0dXJuIFhS
X1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfU1RFUkVPOwotICAgIGNhc2UgU2Vzc2lv
bk1vZGU6OklubGluZToKLSAgICBjYXNlIFNlc3Npb25Nb2RlOjpJbW1lcnNpdmVBcjoKLSAgICAg
ICAgcmV0dXJuIFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfTU9OTzsKLSAgICB9
OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBYUl9WSUVXX0NPTkZJR1VS
QVRJT05fVFlQRV9QUklNQVJZX01PTk87Ci19Ci0KLXN0YXRpYyBib29sIGlzU2Vzc2lvbkFjdGl2
ZShYclNlc3Npb25TdGF0ZSBzdGF0ZSkKLXsKLSAgICByZXR1cm4gc3RhdGUgPT0gWFJfU0VTU0lP
Tl9TVEFURV9WSVNJQkxFIHx8IHN0YXRlID09IFhSX1NFU1NJT05fU1RBVEVfRk9DVVNFRDsKLX0K
LQotc3RhdGljIGJvb2wgaXNTZXNzaW9uUmVhZHkoWHJTZXNzaW9uU3RhdGUgc3RhdGUpCi17Ci0g
ICAgcmV0dXJuIHN0YXRlID49IFhSX1NFU1NJT05fU1RBVEVfUkVBRFkgICYmIHN0YXRlIDwgWFJf
U0VTU0lPTl9TVEFURV9TVE9QUElORzsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBPcGVuWFJEZXZp
Y2U6OnJlY29tbWVuZGVkUmVzb2x1dGlvbihTZXNzaW9uTW9kZSBtb2RlKQotewotICAgIGF1dG8g
Y29uZmlnVHlwZSA9IHRvWHJWaWV3Q29uZmlndXJhdGlvblR5cGUobW9kZSk7Ci0gICAgYXV0byB2
aWV3c0l0ZXJhdG9yID0gbV9jb25maWd1cmF0aW9uVmlld3MuZmluZChjb25maWdUeXBlKTsKLSAg
ICBpZiAodmlld3NJdGVyYXRvciAhPSBtX2NvbmZpZ3VyYXRpb25WaWV3cy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8aW50Pih2aWV3c0l0ZXJhdG9yLT52YWx1ZVswXS5yZWNv
bW1lbmRlZEltYWdlUmVjdFdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50Pih2aWV3c0l0ZXJhdG9yLT52
YWx1ZVswXS5yZWNvbW1lbmRlZEltYWdlUmVjdEhlaWdodCkgfTsKLSAgICByZXR1cm4gRGV2aWNl
OjpyZWNvbW1lbmRlZFJlc29sdXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgT3BlblhSRGV2aWNlOjpp
bml0aWFsaXplVHJhY2tpbmdBbmRSZW5kZXJpbmcoU2Vzc2lvbk1vZGUgbW9kZSkKLXsKLSAgICBt
X3F1ZXVlLmRpc3BhdGNoKFt0aGlzLCBtb2RlXSgpIHsKLSAgICAgICAgQVNTRVJUKG1faW5zdGFu
Y2UgIT0gWFJfTlVMTF9IQU5ETEUpOwotICAgICAgICBBU1NFUlQobV9zZXNzaW9uID09IFhSX05V
TExfSEFORExFKTsKLQotICAgICAgICBtX2N1cnJlbnRWaWV3Q29uZmlndXJhdGlvblR5cGUgPSB0
b1hyVmlld0NvbmZpZ3VyYXRpb25UeXBlKG1vZGUpOwotICAgICAgICBBU1NFUlQobV9jb25maWd1
cmF0aW9uVmlld3MuY29udGFpbnMobV9jdXJyZW50Vmlld0NvbmZpZ3VyYXRpb25UeXBlKSk7Ci0K
LSAgICAgICAgLy8gQ3JlYXRlIHRoZSBzZXNzaW9uLgotICAgICAgICBhdXRvIHNlc3Npb25DcmVh
dGVJbmZvID0gY3JlYXRlU3RydWN0dXJlPFhyU2Vzc2lvbkNyZWF0ZUluZm8sIFhSX1RZUEVfU0VT
U0lPTl9DUkVBVEVfSU5GTz4oKTsKLSAgICAgICAgc2Vzc2lvbkNyZWF0ZUluZm8uc3lzdGVtSWQg
PSBtX3N5c3RlbUlkOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHhyQ3JlYXRlU2Vzc2lvbihtX2lu
c3RhbmNlLCAmc2Vzc2lvbkNyZWF0ZUluZm8sICZtX3Nlc3Npb24pOwotICAgICAgICBSRVRVUk5f
SUZfRkFJTEVEKHJlc3VsdCwgInhyRW51bWVyYXRlSW5zdGFuY2VFeHRlbnNpb25Qcm9wZXJ0aWVz
IiwgbV9pbnN0YW5jZSk7Ci0KLSAgICAgICAgbV9sb2NhbFNwYWNlID0gY3JlYXRlUmVmZXJlbmNl
U3BhY2UoWFJfUkVGRVJFTkNFX1NQQUNFX1RZUEVfTE9DQUwpOwotICAgICAgICBtX3ZpZXdTcGFj
ZSA9IGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhSX1JFRkVSRU5DRV9TUEFDRV9UWVBFX1ZJRVcpOwot
ICAgIH0pOwotfQotCi12b2lkIE9wZW5YUkRldmljZTo6cmVzZXRTZXNzaW9uKCkKLXsKLSAgICBB
U1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5ydW5Mb29wKCkpOwotICAgIGlm
IChtX3Nlc3Npb24gIT0gWFJfTlVMTF9IQU5ETEUpIHsKLSAgICAgICAgeHJEZXN0cm95U2Vzc2lv
bihtX3Nlc3Npb24pOwotICAgICAgICBtX3Nlc3Npb24gPSBYUl9OVUxMX0hBTkRMRTsKLSAgICB9
Ci0gICAgbV9zZXNzaW9uU3RhdGUgPSBYUl9TRVNTSU9OX1NUQVRFX1VOS05PV047Ci19Ci0KLXZv
aWQgT3BlblhSRGV2aWNlOjpoYW5kbGVTZXNzaW9uU3RhdGVDaGFuZ2UoKQorWHJTcGFjZSBPcGVu
WFJEZXZpY2U6OmNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhyUmVmZXJlbmNlU3BhY2VUeXBlIHR5cGUp
CiB7CiAgICAgQVNTRVJUKCZSdW5Mb29wOjpjdXJyZW50KCkgPT0gJm1fcXVldWUucnVuTG9vcCgp
KTsKLSAgICBpZiAobV9zZXNzaW9uU3RhdGUgPT0gWFJfU0VTU0lPTl9TVEFURV9TVE9QUElORykg
ewotICAgICAgICAvLyBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGV4aXQgdGhlIHJlbmRlciBsb29w
IGFuZCBjYWxsIHhyRW5kU2Vzc2lvbgotICAgICAgICBlbmRTZXNzaW9uKCk7Ci0gICAgfSBlbHNl
IGlmIChtX3Nlc3Npb25TdGF0ZSA9PSBYUl9TRVNTSU9OX1NUQVRFX1JFQURZKSB7Ci0gICAgICAg
IC8vIFRoZSBhcHBsaWNhdGlvbiBpcyByZWFkeSB0byBjYWxsIHhyQmVnaW5TZXNzaW9uLgotICAg
ICAgICBiZWdpblNlc3Npb24oKTsKLSAgICB9Ci19Ci0KLXZvaWQgT3BlblhSRGV2aWNlOjpzaHV0
RG93blRyYWNraW5nQW5kUmVuZGVyaW5nKCkKLXsKLSAgICBtX3F1ZXVlLmRpc3BhdGNoKFt0aGlz
XSgpIHsKLSAgICAgICAgaWYgKG1fc2Vzc2lvbiA9PSBYUl9OVUxMX0hBTkRMRSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9zZXNzaW9uICE9IFhSX05VTExfSEFORExFKTsKKyAg
ICBBU1NFUlQobV9pbnN0YW5jZSAhPSBYUl9OVUxMX0hBTkRMRSk7CiAKLSAgICAgICAgLy8geHJS
ZXF1ZXN0RXhpdFNlc3Npb24oKSB3aWxsIHRyYW5zaXRpb24gdGhlIHNlc3Npb24gdG8gU1RPUFBF
RCBzdGF0ZS4KLSAgICAgICAgLy8gSWYgdGhlIHNlc3Npb24gd2FzIG5vdCBydW5uaW5nIHdlIGhh
dmUgdG8gcmVzZXQgdGhlIHNlc3Npb24gb3Vyc2VsdmVzLgotICAgICAgICBpZiAoWFJfRkFJTEVE
KHhyUmVxdWVzdEV4aXRTZXNzaW9uKG1fc2Vzc2lvbikpKSB7Ci0gICAgICAgICAgICByZXNldFNl
c3Npb24oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIFhyUG9zZWYgaWRl
bnRpdHlQb3NlIHsKKyAgICAgICAgLm9yaWVudGF0aW9uID0geyAueCA9IDAsIC55ID0gMCwgLnog
PSAwLCAudyA9IDEuMCB9LAorICAgICAgICAucG9zaXRpb24gPSB7IC54ID0gMCwgLnkgPSAwLCAu
eiA9IDAgfQorICAgIH07CiAKLSAgICAgICAgLy8gT3BlblhSIG5lZWRzIHRvIHdhaXQgZm9yIHRo
ZSBYUl9TRVNTSU9OX1NUQVRFX1NUT1BQSU5HIHN0YXRlIHRvIHByb3Blcmx5IGVuZCB0aGUgc2Vz
c2lvbi4KLSAgICAgICAgd2FpdFVudGlsU3RvcHBpbmcoKTsKLSAgICB9KTsKLX0KKyAgICBhdXRv
IHNwYWNlQ3JlYXRlSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYclJlZmVyZW5jZVNwYWNlQ3JlYXRl
SW5mbywgWFJfVFlQRV9SRUZFUkVOQ0VfU1BBQ0VfQ1JFQVRFX0lORk8+KCk7CisgICAgc3BhY2VD
cmVhdGVJbmZvLnJlZmVyZW5jZVNwYWNlVHlwZSA9IHR5cGU7CisgICAgc3BhY2VDcmVhdGVJbmZv
LnBvc2VJblJlZmVyZW5jZVNwYWNlID0gaWRlbnRpdHlQb3NlOwogCi12b2lkIE9wZW5YUkRldmlj
ZTo6aW5pdGlhbGl6ZVJlZmVyZW5jZVNwYWNlKFBsYXRmb3JtWFI6OlJlZmVyZW5jZVNwYWNlVHlw
ZSBzcGFjZVR5cGUpCi17Ci0gICAgaWYgKChzcGFjZVR5cGUgPT0gUmVmZXJlbmNlU3BhY2VUeXBl
OjpMb2NhbEZsb29yIHx8IHNwYWNlVHlwZSA9PSBSZWZlcmVuY2VTcGFjZVR5cGU6OkJvdW5kZWRG
bG9vcikgJiYgbV9zdGFnZVNwYWNlID09IFhSX05VTExfSEFORExFKQotICAgICAgICBtX3N0YWdl
U3BhY2UgPSBjcmVhdGVSZWZlcmVuY2VTcGFjZShYUl9SRUZFUkVOQ0VfU1BBQ0VfVFlQRV9TVEFH
RSk7Ci19CisgICAgWHJTcGFjZSBzcGFjZTsKKyAgICBhdXRvIHJlc3VsdCA9IHhyQ3JlYXRlUmVm
ZXJlbmNlU3BhY2UobV9zZXNzaW9uLCAmc3BhY2VDcmVhdGVJbmZvLCAmc3BhY2UpOworICAgIFJF
VFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJDcmVhdGVSZWZlcmVuY2VTcGFjZSIsIG1faW5zdGFu
Y2UsIFhSX05VTExfSEFORExFKTsKIAotdm9pZCBPcGVuWFJEZXZpY2U6OndhaXRVbnRpbFN0b3Bw
aW5nKCkKLXsKLSAgICBBU1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5ydW5M
b29wKCkpOwotICAgIHBvbGxFdmVudHMoKTsKLSAgICBpZiAobV9zZXNzaW9uU3RhdGUgPj0gWFJf
U0VTU0lPTl9TVEFURV9TVE9QUElORykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcXVldWUuZGlz
cGF0Y2goW3RoaXNdKCkgewotICAgICAgICB3YWl0VW50aWxTdG9wcGluZygpOwotICAgIH0pOwor
ICAgIHJldHVybiBzcGFjZTsKIH0KIAogdm9pZCBPcGVuWFJEZXZpY2U6OnBvbGxFdmVudHMoKQpA
QCAtNTU3LDExNSArNDA4LDM4IEBAIHZvaWQgT3BlblhSRGV2aWNlOjplbmRTZXNzaW9uKCkKICAg
ICB9KTsKIH0KIAotc3RhdGljIERldmljZTo6RnJhbWVEYXRhOjpQb3NlIFhyUG9zZWZUb1Bvc2Uo
WHJQb3NlZiBwb3NlKQordm9pZCBPcGVuWFJEZXZpY2U6OnJlc2V0U2Vzc2lvbigpCiB7Ci0gICAg
RGV2aWNlOjpGcmFtZURhdGE6OlBvc2UgcmVzdWx0OwotICAgIHJlc3VsdC5vcmllbnRhdGlvbiA9
IHsgcG9zZS5vcmllbnRhdGlvbi54LCBwb3NlLm9yaWVudGF0aW9uLnksIHBvc2Uub3JpZW50YXRp
b24ueiwgcG9zZS5vcmllbnRhdGlvbi53IH07Ci0gICAgcmVzdWx0LnBvc2l0aW9uID0geyBwb3Nl
LnBvc2l0aW9uLngsIHBvc2UucG9zaXRpb24ueSwgcG9zZS5wb3NpdGlvbi56IH07Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBBU1NFUlQoJlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSAmbV9xdWV1ZS5y
dW5Mb29wKCkpOworICAgIGlmIChtX3Nlc3Npb24gIT0gWFJfTlVMTF9IQU5ETEUpIHsKKyAgICAg
ICAgeHJEZXN0cm95U2Vzc2lvbihtX3Nlc3Npb24pOworICAgICAgICBtX3Nlc3Npb24gPSBYUl9O
VUxMX0hBTkRMRTsKKyAgICB9CisgICAgbV9zZXNzaW9uU3RhdGUgPSBYUl9TRVNTSU9OX1NUQVRF
X1VOS05PV047CiB9CiAKLXN0YXRpYyBEZXZpY2U6OkZyYW1lRGF0YTo6VmlldyB4clZpZXdUb1Bv
c2UoWHJWaWV3IHZpZXcpCit2b2lkIE9wZW5YUkRldmljZTo6aGFuZGxlU2Vzc2lvblN0YXRlQ2hh
bmdlKCkKIHsKLSAgICBEZXZpY2U6OkZyYW1lRGF0YTo6VmlldyBwb3NlOwotICAgIHBvc2UucHJv
amVjdGlvbiA9IERldmljZTo6RnJhbWVEYXRhOjpGb3YgeyB2aWV3LmZvdi5hbmdsZVVwLCB2aWV3
LmZvdi5hbmdsZURvd24sIHZpZXcuZm92LmFuZ2xlTGVmdCwgdmlldy5mb3YuYW5nbGVSaWdodCB9
OwotICAgIHBvc2Uub2Zmc2V0ID0gWHJQb3NlZlRvUG9zZSh2aWV3LnBvc2UpOwotICAgIHJldHVy
biBwb3NlOworICAgIEFTU0VSVCgmUnVuTG9vcDo6Y3VycmVudCgpID09ICZtX3F1ZXVlLnJ1bkxv
b3AoKSk7CisgICAgaWYgKG1fc2Vzc2lvblN0YXRlID09IFhSX1NFU1NJT05fU1RBVEVfU1RPUFBJ
TkcpIHsKKyAgICAgICAgLy8gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBleGl0IHRoZSByZW5kZXIg
bG9vcCBhbmQgY2FsbCB4ckVuZFNlc3Npb24KKyAgICAgICAgZW5kU2Vzc2lvbigpOworICAgIH0g
ZWxzZSBpZiAobV9zZXNzaW9uU3RhdGUgPT0gWFJfU0VTU0lPTl9TVEFURV9SRUFEWSkgeworICAg
ICAgICAvLyBUaGUgYXBwbGljYXRpb24gaXMgcmVhZHkgdG8gY2FsbCB4ckJlZ2luU2Vzc2lvbi4K
KyAgICAgICAgYmVnaW5TZXNzaW9uKCk7CisgICAgfQogfQogCi12b2lkIE9wZW5YUkRldmljZTo6
cmVxdWVzdEZyYW1lKFJlcXVlc3RGcmFtZUNhbGxiYWNrJiYgY2FsbGJhY2spCi17Ci0gICAgbV9x
dWV1ZS5kaXNwYXRjaChbdGhpcywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgcG9sbEV2ZW50cygpOwotICAgICAgICBpZiAoIWlzU2Vzc2lvblJlYWR5
KG1fc2Vzc2lvblN0YXRlKSkgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAvLyBE
ZXZpY2Ugbm90IHJlYWR5IG9yIHN0b3BwaW5nLiBSZXBvcnQgZnJhbWVEYXRhIHdpdGggaW52YWxp
ZCB0cmFja2luZy4KLSAgICAgICAgICAgICAgICBjYWxsYmFjayh7IH0pOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGZyYW1l
U3RhdGUgPSBjcmVhdGVTdHJ1Y3R1cmU8WHJGcmFtZVN0YXRlLCBYUl9UWVBFX0ZSQU1FX1NUQVRF
PigpOwotICAgICAgICBhdXRvIGZyYW1lV2FpdEluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJGcmFt
ZVdhaXRJbmZvLCBYUl9UWVBFX0ZSQU1FX1dBSVRfSU5GTz4oKTsKLSAgICAgICAgYXV0byByZXN1
bHQgPSB4cldhaXRGcmFtZShtX3Nlc3Npb24sICZmcmFtZVdhaXRJbmZvLCAmZnJhbWVTdGF0ZSk7
Ci0gICAgICAgIFJFVFVSTl9JRl9GQUlMRUQocmVzdWx0LCAieHJXYWl0RnJhbWUiLCBtX2luc3Rh
bmNlKTsKLSAgICAgICAgWHJUaW1lIHByZWRpY3RlZFRpbWUgPSBmcmFtZVN0YXRlLnByZWRpY3Rl
ZERpc3BsYXlUaW1lOwotCi0gICAgICAgIGF1dG8gZnJhbWVCZWdpbkluZm8gPSBjcmVhdGVTdHJ1
Y3R1cmU8WHJGcmFtZUJlZ2luSW5mbywgWFJfVFlQRV9GUkFNRV9CRUdJTl9JTkZPPigpOwotICAg
ICAgICByZXN1bHQgPSB4ckJlZ2luRnJhbWUobV9zZXNzaW9uLCAmZnJhbWVCZWdpbkluZm8pOwot
ICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwgInhyQmVnaW5GcmFtZSIsIG1faW5zdGFu
Y2UpOwotCi0gICAgICAgIERldmljZTo6RnJhbWVEYXRhIGZyYW1lRGF0YTsKLSAgICAgICAgZnJh
bWVEYXRhLnByZWRpY3RlZERpc3BsYXlUaW1lID0gZnJhbWVTdGF0ZS5wcmVkaWN0ZWREaXNwbGF5
VGltZTsKLQotICAgICAgICBpZiAoaXNTZXNzaW9uQWN0aXZlKG1fc2Vzc2lvblN0YXRlKSkgewot
ICAgICAgICAgICAgLy8gUXVlcnkgaGVhZCBsb2NhdGlvbgotICAgICAgICAgICAgYXV0byBsb2Nh
dGlvbiA9IGNyZWF0ZVN0cnVjdHVyZTxYclNwYWNlTG9jYXRpb24sIFhSX1RZUEVfU1BBQ0VfTE9D
QVRJT04+KCk7Ci0gICAgICAgICAgICB4ckxvY2F0ZVNwYWNlKG1fdmlld1NwYWNlLCBtX2xvY2Fs
U3BhY2UsIGZyYW1lU3RhdGUucHJlZGljdGVkRGlzcGxheVRpbWUsICZsb2NhdGlvbik7Ci0gICAg
ICAgICAgICBmcmFtZURhdGEuaXNUcmFja2luZ1ZhbGlkID0gbG9jYXRpb24ubG9jYXRpb25GbGFn
cyAmIFhSX1NQQUNFX0xPQ0FUSU9OX09SSUVOVEFUSU9OX1ZBTElEX0JJVDsKLSAgICAgICAgICAg
IGZyYW1lRGF0YS5pc1Bvc2l0aW9uVmFsaWQgPSBsb2NhdGlvbi5sb2NhdGlvbkZsYWdzICYgWFJf
U1BBQ0VfTE9DQVRJT05fUE9TSVRJT05fVkFMSURfQklUOwotICAgICAgICAgICAgZnJhbWVEYXRh
LmlzUG9zaXRpb25FbXVsYXRlZCA9IGxvY2F0aW9uLmxvY2F0aW9uRmxhZ3MgJiBYUl9TUEFDRV9M
T0NBVElPTl9QT1NJVElPTl9UUkFDS0VEX0JJVDsKLQotICAgICAgICAgICAgaWYgKGZyYW1lRGF0
YS5pc1RyYWNraW5nVmFsaWQpCi0gICAgICAgICAgICAgICAgZnJhbWVEYXRhLm9yaWdpbiA9IFhy
UG9zZWZUb1Bvc2UobG9jYXRpb24ucG9zZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFT
U0VSVChtX2NvbmZpZ3VyYXRpb25WaWV3cy5jb250YWlucyhtX2N1cnJlbnRWaWV3Q29uZmlndXJh
dGlvblR5cGUpKTsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbmZpZ3VyYXRpb25WaWV3ID0g
bV9jb25maWd1cmF0aW9uVmlld3MuZ2V0KG1fY3VycmVudFZpZXdDb25maWd1cmF0aW9uVHlwZSk7
Ci0KLSAgICAgICAgICAgIGF1dG8gdmlld0xvY2F0ZUluZm8gPSBjcmVhdGVTdHJ1Y3R1cmU8WHJW
aWV3TG9jYXRlSW5mbywgWFJfVFlQRV9WSUVXX0xPQ0FURV9JTkZPPigpOwotICAgICAgICAgICAg
dmlld0xvY2F0ZUluZm8uZGlzcGxheVRpbWUgPSBwcmVkaWN0ZWRUaW1lOwotICAgICAgICAgICAg
dmlld0xvY2F0ZUluZm8uc3BhY2UgPSBtX2xvY2FsU3BhY2U7CiAKLSAgICAgICAgICAgIHVpbnQz
Ml90IHZpZXdDb3VudCA9IGNvbmZpZ3VyYXRpb25WaWV3LnNpemUoKTsKLSAgICAgICAgICAgIFZl
Y3RvcjxYclZpZXc+IHZpZXdzKHZpZXdDb3VudCwgW10gewotICAgICAgICAgICAgICAgIFhyVmll
dyBvYmplY3Q7Ci0gICAgICAgICAgICAgICAgc3RkOjptZW1zZXQoJm9iamVjdCwgMCwgc2l6ZW9m
KFhyVmlldykpOwotICAgICAgICAgICAgICAgIG9iamVjdC50eXBlID0gWFJfVFlQRV9WSUVXOwot
ICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgICAgICB9KCkpOwotCi0gICAg
ICAgICAgICBhdXRvIHZpZXdTdGF0ZSA9IGNyZWF0ZVN0cnVjdHVyZTxYclZpZXdTdGF0ZSwgWFJf
VFlQRV9WSUVXX1NUQVRFPigpOwotICAgICAgICAgICAgdWludDMyX3Qgdmlld0NvdW50T3V0cHV0
OwotICAgICAgICAgICAgcmVzdWx0ID0geHJMb2NhdGVWaWV3cyhtX3Nlc3Npb24sICZ2aWV3TG9j
YXRlSW5mbywgJnZpZXdTdGF0ZSwgdmlld0NvdW50LCAmdmlld0NvdW50T3V0cHV0LCB2aWV3cy5k
YXRhKCkpOwotICAgICAgICAgICAgaWYgKCFYUl9GQUlMRUQocmVzdWx0KSkgewotICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgdmlldyA6IHZpZXdzKQotICAgICAgICAgICAgICAgICAgICBmcmFt
ZURhdGEudmlld3MuYXBwZW5kKHhyVmlld1RvUG9zZSh2aWV3KSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFF1ZXJ5IGZsb29yIHRyYW5zZm9ybQotICAgICAgICAgICAgaWYgKG1f
c3RhZ2VTcGFjZSAhPSBYUl9OVUxMX0hBTkRMRSkgewotICAgICAgICAgICAgICAgIGF1dG8gZmxv
b3JMb2NhdGlvbiA9IGNyZWF0ZVN0cnVjdHVyZTxYclNwYWNlTG9jYXRpb24sIFhSX1RZUEVfU1BB
Q0VfTE9DQVRJT04+KCk7Ci0gICAgICAgICAgICAgICAgeHJMb2NhdGVTcGFjZShtX3N0YWdlU3Bh
Y2UsIG1fbG9jYWxTcGFjZSwgZnJhbWVTdGF0ZS5wcmVkaWN0ZWREaXNwbGF5VGltZSwgJmZsb29y
TG9jYXRpb24pOwotICAgICAgICAgICAgICAgIGZyYW1lRGF0YS5mbG9vclRyYW5zZm9ybSA9IHsg
WHJQb3NlZlRvUG9zZShmbG9vckxvY2F0aW9uLnBvc2UpIH07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtmcmFtZURhdGEgPSBXVEZNb3ZlKGZy
YW1lRGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKGZyYW1lRGF0YSkpOwotICAgICAgICB9KTsKLQotICAg
ICAgICBhdXRvIGZyYW1lRW5kSW5mbyA9IGNyZWF0ZVN0cnVjdHVyZTxYckZyYW1lRW5kSW5mbywg
WFJfVFlQRV9GUkFNRV9FTkRfSU5GTz4oKTsKLSAgICAgICAgZnJhbWVFbmRJbmZvLmRpc3BsYXlU
aW1lID0gcHJlZGljdGVkVGltZTsKLSAgICAgICAgZnJhbWVFbmRJbmZvLmVudmlyb25tZW50Qmxl
bmRNb2RlID0gWFJfRU5WSVJPTk1FTlRfQkxFTkRfTU9ERV9PUEFRVUU7Ci0gICAgICAgIGZyYW1l
RW5kSW5mby5sYXllckNvdW50ID0gMDsKLSAgICAgICAgcmVzdWx0ID0geHJFbmRGcmFtZShtX3Nl
c3Npb24sICZmcmFtZUVuZEluZm8pOwotICAgICAgICBSRVRVUk5fSUZfRkFJTEVEKHJlc3VsdCwg
InhyRW5kRnJhbWUiLCBtX2luc3RhbmNlKTsKLSAgICB9KTsKLX0KLQotVmVjdG9yPERldmljZTo6
Vmlld0RhdGE+IE9wZW5YUkRldmljZTo6dmlld3MoU2Vzc2lvbk1vZGUgbW9kZSkgY29uc3QKK3Zv
aWQgT3BlblhSRGV2aWNlOjp3YWl0VW50aWxTdG9wcGluZygpCiB7Ci0gICAgVmVjdG9yPERldmlj
ZTo6Vmlld0RhdGE+IHZpZXdzOwotICAgIGF1dG8gY29uZmlndXJhdGlvblR5cGUgPSB0b1hyVmll
d0NvbmZpZ3VyYXRpb25UeXBlKG1vZGUpOwotCi0gICAgaWYgKGNvbmZpZ3VyYXRpb25UeXBlID09
IFhSX1ZJRVdfQ09ORklHVVJBVElPTl9UWVBFX1BSSU1BUllfTU9OTykKLSAgICAgICAgdmlld3Mu
YXBwZW5kKHsgLmFjdGl2ZSA9IHRydWUsIC5leWUgPSBFeWU6Ok5vbmUgfSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEFTU0VSVChjb25maWd1cmF0aW9uVHlwZSA9PSBYUl9WSUVXX0NPTkZJR1VSQVRJ
T05fVFlQRV9QUklNQVJZX1NURVJFTyk7Ci0gICAgICAgIHZpZXdzLmFwcGVuZCh7IC5hY3RpdmUg
PSB0cnVlLCBFeWU6OkxlZnQgfSk7Ci0gICAgICAgIHZpZXdzLmFwcGVuZCh7IC5hY3RpdmUgPSB0
cnVlLCBFeWU6OlJpZ2h0IH0pOwotICAgIH0KLSAgICByZXR1cm4gdmlld3M7CisgICAgQVNTRVJU
KCZSdW5Mb29wOjpjdXJyZW50KCkgPT0gJm1fcXVldWUucnVuTG9vcCgpKTsKKyAgICBwb2xsRXZl
bnRzKCk7CisgICAgaWYgKG1fc2Vzc2lvblN0YXRlID49IFhSX1NFU1NJT05fU1RBVEVfU1RPUFBJ
TkcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3F1ZXVlLmRpc3BhdGNoKFt0aGlzXSgpIHsKKyAg
ICAgICAgd2FpdFVudGlsU3RvcHBpbmcoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
UGxhdGZvcm1YUgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3Blbnhy
L1BsYXRmb3JtWFJPcGVuWFIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9Q
bGF0Zm9ybVhST3BlblhSLmgKaW5kZXggMDJkMTk0ZTYyNzFlYmE2YjJhODQ0ODcwMjc5NWE2MDll
YTI5MDczZC4uNzZjYTU5Y2ZiZWNlZWJjZGIwYmZlMzAyOWI0ZmNmOTEwMzkzMDQyMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL1BsYXRmb3JtWFJPcGVuWFIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvUGxhdGZvcm1YUk9wZW5Y
Ui5oCkBAIC0yMCwxNSArMjAsMTcgQEAKICNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKFdFQlhS
KSAmJiBVU0UoT1BFTlhSKQorCisjaW5jbHVkZSAiT3BlblhSVXRpbHMuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVhSLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi0jaW5jbHVkZSA8b3Bl
bnhyL29wZW54ci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFBs
YXRmb3JtWFIgewogCitjbGFzcyBPcGVuWFJFeHRlbnNpb25zOworCiAvLyBodHRwczovL3d3dy5r
aHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuWFIvc3BlY3MvMS4wL2h0bWwveHJzcGVjLmh0bWwjc3lz
dGVtCiAvLyBBIHN5c3RlbSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiByZWxhdGVkIGRldmlj
ZXMgaW4gdGhlIHJ1bnRpbWUsIG9mdGVuIG1hZGUgdXAgb2Ygc2V2ZXJhbCBpbmRpdmlkdWFsCiAv
LyBoYXJkd2FyZSBjb21wb25lbnRzIHdvcmtpbmcgdG9nZXRoZXIgdG8gZW5hYmxlIFhSIGV4cGVy
aWVuY2VzLgpAQCAtNDMsNDYgKzQ1LDQxIEBAIG5hbWVzcGFjZSBQbGF0Zm9ybVhSIHsKIC8vIHRo
ZSBYUlN5c3RlbSBpcyBiYXNpY2FsbHkgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgV2ViWFIgQVBJ
IGF2YWlsYWJsZSB2aWEgdGhlIE5hdmlnYXRvciBvYmplY3QuCiBjbGFzcyBPcGVuWFJEZXZpY2Ug
ZmluYWwgOiBwdWJsaWMgRGV2aWNlIHsKIHB1YmxpYzoKLSAgICBPcGVuWFJEZXZpY2UoWHJTeXN0
ZW1JZCwgWHJJbnN0YW5jZSwgV29ya1F1ZXVlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKLSAgICBYclN5c3RlbUlkIHhyU3lzdGVtSWQoKSBjb25zdCB7IHJldHVybiBtX3N5c3RlbUlk
OyB9CisgICAgT3BlblhSRGV2aWNlKFhySW5zdGFuY2UsIFhyU3lzdGVtSWQsIFdvcmtRdWV1ZSYs
IGNvbnN0IE9wZW5YUkV4dGVuc2lvbnMmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
CiBwcml2YXRlOgotICAgIHZvaWQgY29sbGVjdFN1cHBvcnRlZFNlc3Npb25Nb2RlcygpOwotICAg
IHZvaWQgY29sbGVjdENvbmZpZ3VyYXRpb25WaWV3cygpOwotCi0gICAgTGlzdE9mRW5hYmxlZEZl
YXR1cmVzIGVudW1lcmF0ZVJlZmVyZW5jZVNwYWNlcyhYclNlc3Npb24mKSBjb25zdDsKLSAgICBY
clNwYWNlIGNyZWF0ZVJlZmVyZW5jZVNwYWNlKFhyUmVmZXJlbmNlU3BhY2VUeXBlKTsKLQorICAg
IC8vIFBsYXRmb3JtWFI6OkRldmljZQogICAgIFdlYkNvcmU6OkludFNpemUgcmVjb21tZW5kZWRS
ZXNvbHV0aW9uKFNlc3Npb25Nb2RlKSBmaW5hbDsKLQogICAgIHZvaWQgaW5pdGlhbGl6ZVRyYWNr
aW5nQW5kUmVuZGVyaW5nKFNlc3Npb25Nb2RlKSBmaW5hbDsKICAgICB2b2lkIHNodXREb3duVHJh
Y2tpbmdBbmRSZW5kZXJpbmcoKSBmaW5hbDsKICAgICB2b2lkIGluaXRpYWxpemVSZWZlcmVuY2VT
cGFjZShQbGF0Zm9ybVhSOjpSZWZlcmVuY2VTcGFjZVR5cGUpIGZpbmFsOwogICAgIGJvb2wgc3Vw
cG9ydHNTZXNzaW9uU2h1dGRvd25Ob3RpZmljYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdm9pZCB3YWl0VW50aWxTdG9wcGluZygpOworICAgIHZvaWQgcmVxdWVzdEZy
YW1lKFJlcXVlc3RGcmFtZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIFZlY3RvcjxWaWV3RGF0YT4g
dmlld3MoU2Vzc2lvbk1vZGUpIGNvbnN0IGZpbmFsOwogCisgICAgLy8gQ3VzdG9tIG1ldGhvZHMK
KyAgICBMaXN0T2ZFbmFibGVkRmVhdHVyZXMgZW51bWVyYXRlUmVmZXJlbmNlU3BhY2VzKFhyU2Vz
c2lvbikgY29uc3Q7CisgICAgdm9pZCBjb2xsZWN0U3VwcG9ydGVkU2Vzc2lvbk1vZGVzKCk7Cisg
ICAgdm9pZCBjb2xsZWN0Q29uZmlndXJhdGlvblZpZXdzKCk7CisgICAgWHJTcGFjZSBjcmVhdGVS
ZWZlcmVuY2VTcGFjZShYclJlZmVyZW5jZVNwYWNlVHlwZSk7CiAgICAgdm9pZCBwb2xsRXZlbnRz
KCk7CiAgICAgWHJSZXN1bHQgYmVnaW5TZXNzaW9uKCk7CiAgICAgdm9pZCBlbmRTZXNzaW9uKCk7
CiAgICAgdm9pZCByZXNldFNlc3Npb24oKTsKICAgICB2b2lkIGhhbmRsZVNlc3Npb25TdGF0ZUNo
YW5nZSgpOworICAgIHZvaWQgd2FpdFVudGlsU3RvcHBpbmcoKTsKIAotICAgIHZvaWQgcmVxdWVz
dEZyYW1lKFJlcXVlc3RGcmFtZUNhbGxiYWNrJiYpIGZpbmFsOwotCi0gICAgVmVjdG9yPFZpZXdE
YXRhPiB2aWV3cyhTZXNzaW9uTW9kZSkgY29uc3QgZmluYWw7CisgICAgWHJJbnN0YW5jZSBtX2lu
c3RhbmNlOworICAgIFhyU3lzdGVtSWQgbV9zeXN0ZW1JZDsKKyAgICBXb3JrUXVldWUmIG1fcXVl
dWU7CisgICAgY29uc3QgT3BlblhSRXh0ZW5zaW9ucyYgbV9leHRlbnNpb25zOworICAgIFhyU2Vz
c2lvbiBtX3Nlc3Npb24geyBYUl9OVUxMX0hBTkRMRSB9OworICAgIFhyU2Vzc2lvblN0YXRlIG1f
c2Vzc2lvblN0YXRlIHsgWFJfU0VTU0lPTl9TVEFURV9VTktOT1dOIH07CiAKICAgICB1c2luZyBW
aWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXNNYXAgPSBIYXNoTWFwPFhyVmlld0NvbmZpZ3VyYXRp
b25UeXBlLCBYclZpZXdDb25maWd1cmF0aW9uUHJvcGVydGllcywgSW50SGFzaDxYclZpZXdDb25m
aWd1cmF0aW9uVHlwZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8WHJWaWV3Q29uZmlndXJh
dGlvblR5cGU+PjsKICAgICBWaWV3Q29uZmlndXJhdGlvblByb3BlcnRpZXNNYXAgbV92aWV3Q29u
ZmlndXJhdGlvblByb3BlcnRpZXM7CiAgICAgdXNpbmcgVmlld0NvbmZpZ3VyYXRpb25WaWV3c01h
cCA9IEhhc2hNYXA8WHJWaWV3Q29uZmlndXJhdGlvblR5cGUsIFZlY3RvcjxYclZpZXdDb25maWd1
cmF0aW9uVmlldz4sIEludEhhc2g8WHJWaWV3Q29uZmlndXJhdGlvblR5cGU+LCBXVEY6OlN0cm9u
Z0VudW1IYXNoVHJhaXRzPFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlPj47CiAgICAgVmlld0NvbmZp
Z3VyYXRpb25WaWV3c01hcCBtX2NvbmZpZ3VyYXRpb25WaWV3czsKLQotICAgIFhyU3lzdGVtSWQg
bV9zeXN0ZW1JZDsKLSAgICBYckluc3RhbmNlIG1faW5zdGFuY2U7Ci0gICAgWHJTZXNzaW9uIG1f
c2Vzc2lvbiB7IFhSX05VTExfSEFORExFIH07Ci0gICAgWHJTZXNzaW9uU3RhdGUgbV9zZXNzaW9u
U3RhdGUgeyBYUl9TRVNTSU9OX1NUQVRFX1VOS05PV04gfTsKLQotICAgIFdvcmtRdWV1ZSYgbV9x
dWV1ZTsKLQogICAgIFhyVmlld0NvbmZpZ3VyYXRpb25UeXBlIG1fY3VycmVudFZpZXdDb25maWd1
cmF0aW9uVHlwZTsKICAgICBYclNwYWNlIG1fbG9jYWxTcGFjZSB7IFhSX05VTExfSEFORExFIH07
CiAgICAgWHJTcGFjZSBtX3ZpZXdTcGFjZSB7IFhSX05VTExfSEFORExFIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>