<?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>200852</bug_id>
          
          <creation_ts>2019-08-16 21:56:30 -0700</creation_ts>
          <short_desc>[WebGPU] Implement GPUErrors for and relax GPUBuffer validation rules</short_desc>
          <delta_ts>2019-08-27 17:01:14 -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>WebGPU</component>
          <version>Other</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>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Fan">justin_fan</reporter>
          <assigned_to name="Justin Fan">justin_fan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1562405</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-16 21:56:30 -0700</bug_when>
    <thetext>I misunderstood UsageValidationRules.md; resource usages need to be checked at pass encoding time to e.g. ensure that a GPUBuffer is not bound as both a STORAGE and VERTEX buffer within a single render pass. Across separate passes, such a GPUBuffer can be used as either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562406</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-16 21:56:53 -0700</bug_when>
    <thetext>Necessary to make compute demos easier to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562407</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-16 21:57:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/54419993&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565559</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 15:46:38 -0700</bug_when>
    <thetext>This patch requires a couple follow up patches:

1) GPURender/ComputePipeline classes should follow the hierarchy used here. GPUErrorScopes exist for the sake of the WebGPU API, not the internal classes, and are reported at the top level, so the &quot;WebGPU&quot; object should own the reference. Also makes implementing the rest of &quot;GPUObjectBase&quot; easier to match the spec.

2) The same relaxation of usage rules validation should be applied to GPUTexture creation.

3) GPUProgrammablePassEncoder.setBindGroup, GPURenderPassEncoder.setVertexBuffers, and GPURenderPassEncoder.setIndexBuffer need to enforce the validation rules outlined by https://github.com/gpuweb/gpuweb/blob/master/design/UsageValidationRules.md (and soon in the spec).

Will link bugs after they&apos;re created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565561</commentid>
    <comment_count>4</comment_count>
      <attachid>377394</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 15:55:53 -0700</bug_when>
    <thetext>Created attachment 377394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565563</commentid>
    <comment_count>5</comment_count>
      <attachid>377394</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-08-27 16:06:17 -0700</bug_when>
    <thetext>Comment on attachment 377394
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/GPUBuffer.h:99
&gt; +    void registerMappingCallback(MappingCallback&amp;&amp;, bool, GPUErrorScopes&amp;);
&gt; +    void unmap(GPUErrorScopes*);
&gt; +    void destroy(GPUErrorScopes*);

Why isn&apos;t the GPUErrorScope attached to the buffer itself? Or do different map and unmap calls have different scopes?

Also, why are these pointers? I see it is because destroy can be called with a nullptr from the destructor, but maybe we should have a default error scope that always exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565569</commentid>
    <comment_count>6</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 16:20:05 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #5)
&gt; Comment on attachment 377394 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=377394&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/GPUBuffer.h:99
&gt; &gt; +    void registerMappingCallback(MappingCallback&amp;&amp;, bool, GPUErrorScopes&amp;);
&gt; &gt; +    void unmap(GPUErrorScopes*);
&gt; &gt; +    void destroy(GPUErrorScopes*);
&gt; 
&gt; Why isn&apos;t the GPUErrorScope attached to the buffer itself? Or do different
&gt; map and unmap calls have different scopes?
&gt; 
&gt; Also, why are these pointers? I see it is because destroy can be called with
&gt; a nullptr from the destructor, but maybe we should have a default error
&gt; scope that always exists.

GPUErrorScopes is owned by the WebGPUBuffer via GPUObjectBase. Both WebGPUBuffer and GPUBuffer methods need access to it, but I chose to do this over having both classes Ref it.

My reasoning was influenced by the second point: the destructor should call the same cleanup functions, but shouldn&apos;t &quot;throw exceptions&quot; that would expose GC timing to JavaScript, so it isn&apos;t necessary for GPUBuffer to own a ref to GPUErrorScopes, since all errors that can happen at this layer happen because a WebGPUBuffer method was called first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565570</commentid>
    <comment_count>7</comment_count>
      <attachid>377400</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 16:22:57 -0700</bug_when>
    <thetext>Created attachment 377400
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565571</commentid>
    <comment_count>8</comment_count>
      <attachid>377400</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 16:39:47 -0700</bug_when>
    <thetext>Comment on attachment 377400
Patch for landing

Clearing flags on attachment: 377400

Committed r249183: &lt;https://trac.webkit.org/changeset/249183&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565572</commentid>
    <comment_count>9</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 16:39:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565588</commentid>
    <comment_count>10</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-08-27 17:01:14 -0700</bug_when>
    <thetext>Follow up bugs:

1) https://bugs.webkit.org/show_bug.cgi?id=201207
2) https://bugs.webkit.org/show_bug.cgi?id=201205
3) https://bugs.webkit.org/show_bug.cgi?id=201208, https://bugs.webkit.org/show_bug.cgi?id=201209, https://bugs.webkit.org/show_bug.cgi?id=201210</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377394</attachid>
            <date>2019-08-27 15:55:53 -0700</date>
            <delta_ts>2019-08-27 16:22:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200852-20190827155552.patch</filename>
            <type>text/plain</type>
            <size>24499</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ1NzFiYzRkNmJkZGVm
ZGI0NjQwYzYyZTY4YjA4ZTg5MjZiZWI2Yy4uNDM0ODA4ZGIwMjVlOWJiNTBjN2I2MTcyNTVjY2E3
ZWZjNjNmZjliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA4LTI3ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IEdQVUVycm9ycyBmb3IgYW5kIHJlbGF4IEdQVUJ1ZmZlciB2YWxpZGF0aW9uIHJ1bGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4NTIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggaW5jb3Jy
ZWN0IHVzYWdlIHZhbGlkYXRpb24gZHVyaW5nIEdQVUJ1ZmZlciBjcmVhdGlvbi4KKyAgICAgICAg
SW1wbGVtZW50IEdQVUVycm9yIHJlcG9ydGluZyBmb3IgR1BVQnVmZmVyIGNyZWF0aW9uIGFuZCBt
ZXRob2RzLgorCisgICAgICAgIFRlc3Q6IHdlYmdwdS9idWZmZXItZXJyb3JzLmh0bWwKKworICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHUFVCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVCdWZmZXI6
OldlYkdQVUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVCdWZmZXI6OnVubWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdQVUJ1ZmZlcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHUFVCdWZmZXI6OnJlamVjdE9yUmVnaXN0ZXJQcm9taXNlQ2FsbGJhY2spOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oOiBOb3cgaW5oZXJpdHMgZnJvbSBH
UFVPYmplY3RCYXNlLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHUFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHUFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlck1hcHBlZCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oOiBObyBsb25nZXIg
aW5oZXJpdHMgZnJvbSBHUFVPYmplY3RCYXNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVPYmplY3RCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpHUFVPYmplY3RCYXNlOjpl
cnJvclNjb3Blcyk6CisgICAgICAgIChXZWJDb3JlOjpHUFVPYmplY3RCYXNlOjpnZW5lcmF0ZUVy
cm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
QnVmZmVyTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnZhbGlkYXRlQnVm
ZmVyVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp0cnlDcmVhdGUpOiBBbGln
bm1lbnQgaXNzdWUgc2hvdWxkIGJlIGdlbmVyYWwgV2ViR1BVIHJlcXVpcmVtZW50LgorICAgICAg
ICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpHUFVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BV
QnVmZmVyOjp+R1BVQnVmZmVyKTogTXVzdCBkbyBjbGVhbnVwIHdpdGhvdXQgZ2VuZXJhdGluZyBl
cnJvcnMuCisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnJlZ2lzdGVyTWFwcGluZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6Y29weVN0YWdpbmdCdWZmZXJUb0dQ
VSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnVubWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdQVUJ1ZmZlcjo6ZGVzdHJveSk6CisKIDIwMTktMDgtMjYgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgT3B0aW1pemUgY29tcHV0YXRpb24gb2Yg
QWJzb2x1dGVDbGlwUmVjdHMgY2xpcCByZWN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHAKaW5kZXggYzIyMmUzNTU3NTkxYTY4MGQ4YjM4NjAzZDg3
NzMyNzQwZDU3MzYyZC4uYmEyNTk2M2ExMjA0N2U3YjBkMTQ1ZGM0Mjg0NzgwMGE2YTJlMWZkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuY3BwCkBA
IC0yOCwxNyArMjgsMTkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiR1BVRXJyb3JTY29wZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxXZWJHUFVC
dWZmZXI+IFdlYkdQVUJ1ZmZlcjo6Y3JlYXRlKFJlZlB0cjxHUFVCdWZmZXI+JiYgYnVmZmVyKQor
UmVmPFdlYkdQVUJ1ZmZlcj4gV2ViR1BVQnVmZmVyOjpjcmVhdGUoUmVmUHRyPEdQVUJ1ZmZlcj4m
JiBidWZmZXIsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJHUFVCdWZmZXIoV1RGTW92ZShidWZmZXIpKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViR1BVQnVmZmVyKFdURk1vdmUoYnVmZmVyKSwgZXJyb3JTY29wZXMpKTsK
IH0KIAotV2ViR1BVQnVmZmVyOjpXZWJHUFVCdWZmZXIoUmVmUHRyPEdQVUJ1ZmZlcj4mJiBidWZm
ZXIpCi0gICAgOiBtX2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCitXZWJHUFVCdWZmZXI6OldlYkdQ
VUJ1ZmZlcihSZWZQdHI8R1BVQnVmZmVyPiYmIGJ1ZmZlciwgR1BVRXJyb3JTY29wZXMmIGVycm9y
U2NvcGVzKQorICAgIDogR1BVT2JqZWN0QmFzZShtYWtlUmVmKGVycm9yU2NvcGVzKSkKKyAgICAs
IG1fYnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKIHsKIH0KIApAQCAtNTQsMzYgKzU2LDQ0IEBAIHZv
aWQgV2ViR1BVQnVmZmVyOjptYXBXcml0ZUFzeW5jKEJ1ZmZlck1hcHBpbmdQcm9taXNlJiYgcHJv
bWlzZSkKIAogdm9pZCBXZWJHUFVCdWZmZXI6OnVubWFwKCkKIHsKKyAgICBlcnJvclNjb3Blcygp
LnNldEVycm9yUHJlZml4KCJHUFVCdWZmZXIudW5tYXAoKTogIik7CisKICAgICBpZiAoIW1fYnVm
ZmVyKQotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjp1bm1hcCgpOiBJbnZhbGlkIG9w
ZXJhdGlvbiEiKTsKKyAgICAgICAgZXJyb3JTY29wZXMoKS5nZW5lcmF0ZVByZWZpeGVkRXJyb3Io
IkludmFsaWQgb3BlcmF0aW9uOiBpbnZhbGlkIEdQVUJ1ZmZlciEiKTsKICAgICBlbHNlCi0gICAg
ICAgIG1fYnVmZmVyLT51bm1hcCgpOworICAgICAgICBtX2J1ZmZlci0+dW5tYXAoJmVycm9yU2Nv
cGVzKCkpOwogfQogCiB2b2lkIFdlYkdQVUJ1ZmZlcjo6ZGVzdHJveSgpCiB7CisgICAgZXJyb3JT
Y29wZXMoKS5zZXRFcnJvclByZWZpeCgiR1BVQnVmZmVyLmRlc3Ryb3koKTogIik7CisKICAgICBp
ZiAoIW1fYnVmZmVyKQotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpkZXN0cm95KCk6
IEludmFsaWQgb3BlcmF0aW9uISIpOworICAgICAgICBlcnJvclNjb3BlcygpLmdlbmVyYXRlUHJl
Zml4ZWRFcnJvcigiSW52YWxpZCBvcGVyYXRpb24hIik7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1f
YnVmZmVyLT5kZXN0cm95KCk7CisgICAgICAgIG1fYnVmZmVyLT5kZXN0cm95KCZlcnJvclNjb3Bl
cygpKTsKICAgICAgICAgbV9idWZmZXIgPSBudWxscHRyOwogICAgIH0KIH0KIAogdm9pZCBXZWJH
UFVCdWZmZXI6OnJlamVjdE9yUmVnaXN0ZXJQcm9taXNlQ2FsbGJhY2soQnVmZmVyTWFwcGluZ1By
b21pc2UmJiBwcm9taXNlLCBib29sIGlzUmVhZCkKIHsKKyAgICBlcnJvclNjb3BlcygpLnNldEVy
cm9yUHJlZml4KG1ha2VTdHJpbmcoIkdQVUJ1ZmZlci5tYXAiLCBpc1JlYWQgPyAiUmVhZCIgOiAi
V3JpdGUiLCAiQXN5bmMoKTogIikpOworCiAgICAgaWYgKCFtX2J1ZmZlcikgewotICAgICAgICBM
T0coV2ViR1BVLCAiR1BVQnVmZmVyOjptYXAlc0FzeW5jKCk6IEludmFsaWQgb3BlcmF0aW9uISIs
IGlzUmVhZCA/ICJSZWFkIiA6ICJXcml0ZSIpOworICAgICAgICBlcnJvclNjb3BlcygpLmdlbmVy
YXRlUHJlZml4ZWRFcnJvcigiSW52YWxpZCBvcGVyYXRpb246IGludmFsaWQgR1BVQnVmZmVyISIp
OwogICAgICAgICBwcm9taXNlLnJlamVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9idWZmZXItPnJlZ2lzdGVyTWFwcGluZ0NhbGxiYWNrKFtwcm9taXNlID0gV1RGTW92ZShw
cm9taXNlKV0gKEpTQzo6QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKSBtdXRhYmxlIHsKKyAgICBt
X2J1ZmZlci0+cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2soW3Byb21pc2UgPSBXVEZNb3ZlKHByb21p
c2UpLCBwcm90ZWN0ZWRFcnJvclNjb3BlcyA9IG1ha2VSZWYoZXJyb3JTY29wZXMoKSldIChKU0M6
OkFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChhcnJheUJ1
ZmZlcikKICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZSgqYXJyYXlCdWZmZXIpOwotICAgICAg
ICBlbHNlCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJvdGVjdGVkRXJyb3JTY29wZXMt
PmdlbmVyYXRlRXJyb3IoIiIsIEdQVUVycm9yRmlsdGVyOjpPdXRPZk1lbW9yeSk7CiAgICAgICAg
ICAgICBwcm9taXNlLnJlamVjdCgpOwotICAgIH0sIGlzUmVhZCk7CisgICAgICAgIH0KKyAgICB9
LCBpc1JlYWQsIGVycm9yU2NvcGVzKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5oCmluZGV4IDU4Nzk3
MGQ5MTcxM2FjODBhOTk3NDg3ZjQ4ZWYyZjBmY2MyNTIxMGYuLmQ5OTZiNWVlZTlkOGUwMjgxZTA2
MjZkN2NlYjZjMTg1MTE2NmNlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dlYkdQVUJ1ZmZlci5oCkBAIC0yOSw4ICsyOSw4IEBACiAKICNpbmNsdWRlICJHUFVCdWZmZXIu
aCIKICNpbmNsdWRlICJHUFVCdWZmZXJVc2FnZS5oIgorI2luY2x1ZGUgIkdQVU9iamVjdEJhc2Uu
aCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTQxLDkgKzQxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgR1BVQnVmZmVyRGVz
Y3JpcHRvcjsKIAotY2xhc3MgV2ViR1BVQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViR1BV
QnVmZmVyPiB7CitjbGFzcyBXZWJHUFVCdWZmZXIgOiBwdWJsaWMgR1BVT2JqZWN0QmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJHUFVCdWZmZXI+IGNyZWF0ZShSZWZQdHI8R1BVQnVm
ZmVyPiYmKTsKKyAgICBzdGF0aWMgUmVmPFdlYkdQVUJ1ZmZlcj4gY3JlYXRlKFJlZlB0cjxHUFVC
dWZmZXI+JiYsIEdQVUVycm9yU2NvcGVzJik7CiAKICAgICBHUFVCdWZmZXIqIGJ1ZmZlcigpIHsg
cmV0dXJuIG1fYnVmZmVyLmdldCgpOyB9CiAgICAgY29uc3QgR1BVQnVmZmVyKiBidWZmZXIoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlci5nZXQoKTsgfQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkZXN0cm95KCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViR1BVQnVm
ZmVyKFJlZlB0cjxHUFVCdWZmZXI+JiYpOworICAgIGV4cGxpY2l0IFdlYkdQVUJ1ZmZlcihSZWZQ
dHI8R1BVQnVmZmVyPiYmLCBHUFVFcnJvclNjb3BlcyYpOwogCiAgICAgdm9pZCByZWplY3RPclJl
Z2lzdGVyUHJvbWlzZUNhbGxiYWNrKEJ1ZmZlck1hcHBpbmdQcm9taXNlJiYsIGJvb2wpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcAppbmRleCA4
NWZkY2EzYjJiOTRiY2RmOTExMTA2YWMwNmU2ZGQxZjAzYzViNTk5Li4wYmZjMzA2NjQxZDg3ZTlj
NzEwNmU0MDdmNjIzYjRiMWE5OGQ3OTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVURldmljZS5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgUmVmPFdlYkdQVUJ1ZmZl
cj4gV2ViR1BVRGV2aWNlOjpjcmVhdGVCdWZmZXIoY29uc3QgR1BVQnVmZmVyRGVzY3JpcHRvciYg
ZGVzY3JpcHQKICAgICBtX2Vycm9yU2NvcGVzLT5zZXRFcnJvclByZWZpeCgiR1BVRGV2aWNlLmNy
ZWF0ZUJ1ZmZlcigpOiAiKTsKIAogICAgIGF1dG8gYnVmZmVyID0gbV9kZXZpY2UtPnRyeUNyZWF0
ZUJ1ZmZlcihkZXNjcmlwdG9yLCBHUFVCdWZmZXJNYXBwZWRPcHRpb246Ok5vdE1hcHBlZCwgbV9l
cnJvclNjb3Blcyk7Ci0gICAgcmV0dXJuIFdlYkdQVUJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVm
ZmVyKSk7CisgICAgcmV0dXJuIFdlYkdQVUJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwg
bV9lcnJvclNjb3Blcyk7CiB9CiAKIFZlY3RvcjxKU0M6OkpTVmFsdWU+IFdlYkdQVURldmljZTo6
Y3JlYXRlQnVmZmVyTWFwcGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgR1BVQnVmZmVy
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgY29uc3QKQEAgLTEwNiw3ICsxMDYsNyBAQCBWZWN0b3I8
SlNDOjpKU1ZhbHVlPiBXZWJHUFVEZXZpY2U6OmNyZWF0ZUJ1ZmZlck1hcHBlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbgogICAgICAgICB3cmFwcGVkQXJyYXlCdWZmZXIgPSB0b0pTKCZzdGF0
ZSwgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLCBhcnJheUJ1ZmZlcik7CiAgICAgfQogCi0gICAgYXV0byB3ZWJCdWZmZXIgPSBXZWJH
UFVCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgIGF1dG8gd2ViQnVmZmVyID0g
V2ViR1BVQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCBtX2Vycm9yU2NvcGVzKTsKICAg
ICBhdXRvIHdyYXBwZWRXZWJCdWZmZXIgPSB0b0pTKCZzdGF0ZSwgSlNDOjpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB3ZWJCdWZmZXIpOwog
CiAgICAgcmV0dXJuIHsgd3JhcHBlZFdlYkJ1ZmZlciwgd3JhcHBlZEFycmF5QnVmZmVyIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKaW5k
ZXggMDdmNDBhZTFlYjA2OTJiZDBiZWE4Y2Y3YzY0MTc5ODRhYjg4MDM3NC4uMzI1NmI0ZTA0OTQw
MzRmY2I4OTBhMDdlN2JhZTRhYmQxY2U2NGFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaApAQCAtMjksNyArMjksNiBAQAogCiAjaW5j
bHVkZSAiRGVmZXJyYWJsZVRhc2suaCIKICNpbmNsdWRlICJHUFVCdWZmZXJVc2FnZS5oIgotI2lu
Y2x1ZGUgIkdQVU9iamVjdEJhc2UuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtNDksNiArNDgs
NyBAQCBjbGFzcyBBcnJheUJ1ZmZlcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR1BV
RGV2aWNlOworY2xhc3MgR1BVRXJyb3JTY29wZXM7CiAKIHN0cnVjdCBHUFVCdWZmZXJEZXNjcmlw
dG9yOwogCkBAIC02MSw3ICs2MSw3IEBAIHVzaW5nIFBsYXRmb3JtQnVmZmVyID0gdm9pZDsKICNl
bmRpZgogdXNpbmcgUGxhdGZvcm1CdWZmZXJTbWFydFB0ciA9IFJldGFpblB0cjxQbGF0Zm9ybUJ1
ZmZlcj47CiAKLWNsYXNzIEdQVUJ1ZmZlciA6IHB1YmxpYyBHUFVPYmplY3RCYXNlIHsKK2NsYXNz
IEdQVUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUJ1ZmZlcj4gewogcHVibGljOgogICAg
IGVudW0gY2xhc3MgU3RhdGUgewogICAgICAgICBNYXBwZWQsCkBAIC05NCw5ICs5NCw5IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgdXNpbmcgTWFwcGluZ0NhbGxiYWNrID0gV1RGOjpGdW5jdGlv
bjx2b2lkKEpTQzo6QXJyYXlCdWZmZXIqKT47Ci0gICAgdm9pZCByZWdpc3Rlck1hcHBpbmdDYWxs
YmFjayhNYXBwaW5nQ2FsbGJhY2smJiwgYm9vbCk7Ci0gICAgdm9pZCB1bm1hcCgpOwotICAgIHZv
aWQgZGVzdHJveSgpOworICAgIHZvaWQgcmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2soTWFwcGluZ0Nh
bGxiYWNrJiYsIGJvb2wsIEdQVUVycm9yU2NvcGVzJik7CisgICAgdm9pZCB1bm1hcChHUFVFcnJv
clNjb3BlcyopOworICAgIHZvaWQgZGVzdHJveShHUFVFcnJvclNjb3BlcyopOwogCiBwcml2YXRl
OgogICAgIHN0cnVjdCBQZW5kaW5nTWFwcGluZ0NhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8
UGVuZGluZ01hcHBpbmdDYWxsYmFjaz4gewpAQCAtMTExLDEzICsxMTEsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgUGVuZGluZ01hcHBpbmdDYWxsYmFjayhNYXBwaW5nQ2FsbGJhY2smJik7CiAgICAg
fTsKIAotICAgIEdQVUJ1ZmZlcihQbGF0Zm9ybUJ1ZmZlclNtYXJ0UHRyJiYsIEdQVURldmljZSYs
IHNpemVfdCwgT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4sIEdQVUJ1ZmZlck1hcHBl
ZE9wdGlvbiwgR1BVRXJyb3JTY29wZXMmKTsKKyAgICBHUFVCdWZmZXIoUGxhdGZvcm1CdWZmZXJT
bWFydFB0ciYmLCBHUFVEZXZpY2UmLCBzaXplX3QsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6
RmxhZ3M+LCBHUFVCdWZmZXJNYXBwZWRPcHRpb24pOwogICAgIHN0YXRpYyBib29sIHZhbGlkYXRl
QnVmZmVyVXNhZ2UoY29uc3QgR1BVRGV2aWNlJiwgT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpG
bGFncz4sIEdQVUVycm9yU2NvcGVzJik7CiAKICAgICBKU0M6OkFycmF5QnVmZmVyKiBzdGFnaW5n
QnVmZmVyRm9yUmVhZCgpOwogICAgIEpTQzo6QXJyYXlCdWZmZXIqIHN0YWdpbmdCdWZmZXJGb3JX
cml0ZSgpOwogICAgIHZvaWQgcnVuTWFwcGluZ0NhbGxiYWNrKCk7Ci0gICAgdm9pZCBjb3B5U3Rh
Z2luZ0J1ZmZlclRvR1BVKCk7CisgICAgdm9pZCBjb3B5U3RhZ2luZ0J1ZmZlclRvR1BVKEdQVUVy
cm9yU2NvcGVzKik7CiAKICAgICBib29sIGlzTWFwV3JpdGUoKSBjb25zdCB7IHJldHVybiBtX3Vz
YWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6TWFwV3JpdGUpOyB9CiAgICAgYm9v
bCBpc01hcFJlYWQoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVz
YWdlOjpGbGFnczo6TWFwUmVhZCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVPYmplY3RCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvR1BVT2JqZWN0QmFzZS5oCmluZGV4IDY2NTNiY2Y3YWY4Y2Y5ZDM5NjRh
ZjhkNTI1MTJmZTFiNjM2NDdhZmYuLjY1NzcwNTc4OTdkZTBiNjIyNzQxZDk2YjM0OWJiYzcxMWEz
NTFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVPYmplY3RCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVU9iamVjdEJhc2UuaApAQCAtMzMsMTYgKzMzLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEdQVU9iamVjdEJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVPYmplY3RCYXNl
PiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBnZW5lcmF0ZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgR1BVRXJyb3JGaWx0ZXIgZmlsdGVyID0gR1BVRXJyb3JGaWx0ZXI6OlZhbGlkYXRpb24pCi0g
ICAgewotICAgICAgICBtX2Vycm9yU2NvcGVzLT5nZW5lcmF0ZUVycm9yKG1lc3NhZ2UsIGZpbHRl
cik7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgR1BVT2JqZWN0QmFzZShSZWY8R1BVRXJyb3JT
Y29wZXM+JiYgcmVwb3J0ZXIpCiAgICAgICAgIDogbV9lcnJvclNjb3BlcyhXVEZNb3ZlKHJlcG9y
dGVyKSkgeyB9CiAKKyAgICBHUFVFcnJvclNjb3BlcyYgZXJyb3JTY29wZXMoKSB7IHJldHVybiBt
X2Vycm9yU2NvcGVzOyB9CisKIHByaXZhdGU6CiAgICAgUmVmPEdQVUVycm9yU2NvcGVzPiBtX2Vy
cm9yU2NvcGVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQppbmRleCBkYTcwYWU2NTQxOWNl
OTk0OGQ0ZmNjYTE3Zjg0MGNkZGYwNTI0NTFiLi5lYWRmZWJmNjIyZDJkNzY1NDVjOWEzY2JmNGQ0
ZDg1YThhMWJjODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbXBvcnQgIkdQVUJ1ZmZlckRlc2NyaXB0b3IuaCIKICNpbXBvcnQgIkdQVURldmljZS5o
IgotI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiR1BVRXJyb3JTY29wZXMuaCIKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CiAjaW1wb3J0IDxNZXRhbC9NZXRhbC5o
PgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KQEAgLTQ2LDcgKzQ2LDcgQEAg
c3RhdGljIGNvbnN0ZXhwciBhdXRvIHJlYWRPbmx5RmxhZ3MgPSBPcHRpb25TZXQ8R1BVQnVmZmVy
VXNhZ2U6OkZsYWdzPiB7IEdQVUJ1ZmYKIGJvb2wgR1BVQnVmZmVyOjp2YWxpZGF0ZUJ1ZmZlclVz
YWdlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZs
YWdzPiB1c2FnZSwgR1BVRXJyb3JTY29wZXMmIGVycm9yU2NvcGVzKQogewogICAgIGlmICghZGV2
aWNlLnBsYXRmb3JtRGV2aWNlKCkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6
dHJ5Q3JlYXRlKCk6IEludmFsaWQgR1BVRGV2aWNlISIpOworICAgICAgICBlcnJvclNjb3Blcy5n
ZW5lcmF0ZVByZWZpeGVkRXJyb3IoIkludmFsaWQgR1BVRGV2aWNlISIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC01NSwxMSArNTUsNiBAQCBib29sIEdQVUJ1ZmZlcjo6dmFs
aWRhdGVCdWZmZXJVc2FnZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgT3B0aW9uU2V0PEdQVUJ1
ZmZlcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKHVzYWdlLmNvbnRh
aW5zQW55KHJlYWRPbmx5RmxhZ3MpICYmICh1c2FnZSAmIEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6
U3RvcmFnZSkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCk6
IEJ1ZmZlciBjYW5ub3QgaGF2ZSBib3RoIFNUT1JBR0UgYW5kIGEgcmVhZC1vbmx5IHVzYWdlISIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTc2LDE2ICs3MSwxNCBAQCBSZWZQdHI8R1BVQnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0
ZShHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVQnVmZmVyRGVzY3JpcAogICAgIGlmICghdmFs
aWRhdGVCdWZmZXJVc2FnZShkZXZpY2UsIHVzYWdlLCBlcnJvclNjb3BlcykpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIGNvcHlCdWZmZXJUb0J1
ZmZlciBjYWxscyByZXF1aXJlIDQtYnl0ZSBhbGlnbm1lbnQuICJVbm1hcHBpbmciIGEgbWFwcGVk
LW9uLWNyZWF0aW9uIEdQVUJ1ZmZlcgogICAgIC8vIHRoYXQgaXMgb3RoZXJ3aXNlIHVubWFwcGFi
bGUgcmVxdWlyZXMgc3VjaCBhIGNvcHkgdG8gdXBsb2FkIGRhdGEuCiAgICAgaWYgKGlzTWFwcGVk
ID09IEdQVUJ1ZmZlck1hcHBlZE9wdGlvbjo6SXNNYXBwZWQKICAgICAgICAgJiYgIXVzYWdlLmNv
bnRhaW5zQW55KHsgR1BVQnVmZmVyVXNhZ2U6OkZsYWdzOjpNYXBXcml0ZSwgR1BVQnVmZmVyVXNh
Z2U6OkZsYWdzOjpNYXBSZWFkIH0pCiAgICAgICAgICYmIGRlc2NyaXB0b3Iuc2l6ZSAlIDQpIHsK
LSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCk6IERhdGEgbXVzdCBi
ZSBhbGlnbmVkIHRvIGEgbXVsdGlwbGUgb2YgNCBieXRlcyEiKTsKKyAgICAgICAgZXJyb3JTY29w
ZXMuZ2VuZXJhdGVQcmVmaXhlZEVycm9yKCJEYXRhIG11c3QgYmUgYWxpZ25lZCB0byBhIG11bHRp
cGxlIG9mIDQgYnl0ZXMhIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSNlbmRp
ZgogCiAgICAgLy8gRklYTUU6IE1ldGFsIGJlc3QgcHJhY3RpY2VzOiBSZWFkLW9ubHkgb25lLXRp
bWUtdXNlIGRhdGEgbGVzcyB0aGFuIDQgS0Igc2hvdWxkIG5vdCBhbGxvY2F0ZSBhIE1UTEJ1ZmZl
ciBhbmQgYmUgdXNlZCBpbiBbTVRMQ29tbWFuZEVuY29kZXIgc2V0KkJ5dGVzXSBjYWxscyBpbnN0
ZWFkLgogCkBAIC0xMDcsMTIgKzEwMCwxMSBAQCBSZWZQdHI8R1BVQnVmZmVyPiBHUFVCdWZmZXI6
OnRyeUNyZWF0ZShHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVQnVmZmVyRGVzY3JpcAogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBH
UFVCdWZmZXIoV1RGTW92ZShtdGxCdWZmZXIpLCBkZXZpY2UsIHNpemUsIHVzYWdlLCBpc01hcHBl
ZCwgZXJyb3JTY29wZXMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVCdWZmZXIoV1RG
TW92ZShtdGxCdWZmZXIpLCBkZXZpY2UsIHNpemUsIHVzYWdlLCBpc01hcHBlZCkpOwogfQogCi1H
UFVCdWZmZXI6OkdQVUJ1ZmZlcihSZXRhaW5QdHI8TVRMQnVmZmVyPiYmIGJ1ZmZlciwgR1BVRGV2
aWNlJiBkZXZpY2UsIHNpemVfdCBzaXplLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZsYWdz
PiB1c2FnZSwgR1BVQnVmZmVyTWFwcGVkT3B0aW9uIGlzTWFwcGVkLCBHUFVFcnJvclNjb3BlcyYg
ZXJyb3JTY29wZXMpCi0gICAgOiBHUFVPYmplY3RCYXNlKG1ha2VSZWYoZXJyb3JTY29wZXMpKQot
ICAgICwgbV9wbGF0Zm9ybUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCitHUFVCdWZmZXI6OkdQVUJ1
ZmZlcihSZXRhaW5QdHI8TVRMQnVmZmVyPiYmIGJ1ZmZlciwgR1BVRGV2aWNlJiBkZXZpY2UsIHNp
emVfdCBzaXplLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZsYWdzPiB1c2FnZSwgR1BVQnVm
ZmVyTWFwcGVkT3B0aW9uIGlzTWFwcGVkKQorICAgIDogbV9wbGF0Zm9ybUJ1ZmZlcihXVEZNb3Zl
KGJ1ZmZlcikpCiAgICAgLCBtX2RldmljZShtYWtlUmVmKGRldmljZSkpCiAgICAgLCBtX2J5dGVM
ZW5ndGgoc2l6ZSkKICAgICAsIG1fdXNhZ2UodXNhZ2UpCkBAIC0xMjUsNyArMTE3LDcgQEAgR1BV
QnVmZmVyOjpHUFVCdWZmZXIoUmV0YWluUHRyPE1UTEJ1ZmZlcj4mJiBidWZmZXIsIEdQVURldmlj
ZSYgZGV2aWNlLCBzaXplX3Qgc2kKIAogR1BVQnVmZmVyOjp+R1BVQnVmZmVyKCkKIHsKLSAgICBk
ZXN0cm95KCk7CisgICAgZGVzdHJveShudWxscHRyKTsKIH0KIAogYm9vbCBHUFVCdWZmZXI6Omlz
UmVhZE9ubHkoKSBjb25zdApAQCAtMTc3LDE2ICsxNjksMTYgQEAgdm9pZCBHUFVCdWZmZXI6OmNv
bW1hbmRCdWZmZXJDb21wbGV0ZWQoKQogfQogI2VuZGlmIC8vIFVTRShNRVRBTCkKIAotdm9pZCBH
UFVCdWZmZXI6OnJlZ2lzdGVyTWFwcGluZ0NhbGxiYWNrKE1hcHBpbmdDYWxsYmFjayYmIGNhbGxi
YWNrLCBib29sIGlzUmVhZCkKK3ZvaWQgR1BVQnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxsYmFj
ayhNYXBwaW5nQ2FsbGJhY2smJiBjYWxsYmFjaywgYm9vbCBpc1JlYWQsIEdQVUVycm9yU2NvcGVz
JiBlcnJvclNjb3BlcykKIHsKICAgICAvLyBSZWplY3QgaWYgcmVxdWVzdCBpcyBpbnZhbGlkLgog
ICAgIGlmIChpc1JlYWQgJiYgIWlzTWFwUmVhZGFibGUoKSkgewotICAgICAgICBMT0coV2ViR1BV
LCAiR1BVQnVmZmVyOjptYXBSZWFkQXN5bmMoKTogSW52YWxpZCBvcGVyYXRpb24hIik7CisgICAg
ICAgIGVycm9yU2NvcGVzLmdlbmVyYXRlUHJlZml4ZWRFcnJvcigiSW52YWxpZCBvcGVyYXRpb24h
Iik7CiAgICAgICAgIGNhbGxiYWNrKG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmICghaXNSZWFkICYmICFpc01hcFdyaXRlYWJsZSgpKSB7Ci0gICAgICAgIExPRyhXZWJH
UFUsICJHUFVCdWZmZXI6Om1hcFdyaXRlQXN5bmMoKTogSW52YWxpZCBvcGVyYXRpb24hIik7Cisg
ICAgICAgIGVycm9yU2NvcGVzLmdlbmVyYXRlUHJlZml4ZWRFcnJvcigiSW52YWxpZCBvcGVyYXRp
b24hIik7CiAgICAgICAgIGNhbGxiYWNrKG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMjI2LDcgKzIxOCw3IEBAIEpTQzo6QXJyYXlCdWZmZXIqIEdQVUJ1ZmZlcjo6c3RhZ2lu
Z0J1ZmZlckZvcldyaXRlKCkKICAgICByZXR1cm4gbV9zdGFnaW5nQnVmZmVyLmdldCgpOwogfQog
Ci12b2lkIEdQVUJ1ZmZlcjo6Y29weVN0YWdpbmdCdWZmZXJUb0dQVSgpCit2b2lkIEdQVUJ1ZmZl
cjo6Y29weVN0YWdpbmdCdWZmZXJUb0dQVShHUFVFcnJvclNjb3BlcyogZXJyb3JTY29wZXMpCiB7
CiAgICAgTVRMQ29tbWFuZFF1ZXVlICpxdWV1ZTsKICAgICBpZiAoIW1fZGV2aWNlLT50cnlHZXRR
dWV1ZSgpIHx8ICEocXVldWUgPSBtX2RldmljZS0+dHJ5R2V0UXVldWUoKS0+cGxhdGZvcm1RdWV1
ZSgpKSkKQEAgLTIzOSw4ICsyMzEsOCBAQCB2b2lkIEdQVUJ1ZmZlcjo6Y29weVN0YWdpbmdCdWZm
ZXJUb0dQVSgpCiAgICAgc3RhZ2luZ010bEJ1ZmZlciA9IGFkb3B0TlMoW21fZGV2aWNlLT5wbGF0
Zm9ybURldmljZSgpIG5ld0J1ZmZlcldpdGhMZW5ndGg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4o
bV9ieXRlTGVuZ3RoKSBvcHRpb25zOk1UTFJlc291cmNlQ1BVQ2FjaGVNb2RlRGVmYXVsdENhY2hl
XSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIGlmICghc3RhZ2luZ010
bEJ1ZmZlcikgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjp1bm1hcCgpOiBVbmFi
bGUgdG8gY3JlYXRlIHN0YWdpbmcgYnVmZmVyISIpOworICAgIGlmICghc3RhZ2luZ010bEJ1ZmZl
ciAmJiBlcnJvclNjb3BlcykgeworICAgICAgICBlcnJvclNjb3Blcy0+Z2VuZXJhdGVFcnJvcigi
IiwgR1BVRXJyb3JGaWx0ZXI6Ok91dE9mTWVtb3J5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjU4LDEwICsyNTAsMTAgQEAgdm9pZCBHUFVCdWZmZXI6OmNvcHlTdGFnaW5nQnVmZmVy
VG9HUFUoKQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgR1BVQnVm
ZmVyOjp1bm1hcCgpCit2b2lkIEdQVUJ1ZmZlcjo6dW5tYXAoR1BVRXJyb3JTY29wZXMqIGVycm9y
U2NvcGVzKQogewotICAgIGlmICghbV9pc01hcHBlZEZyb21DcmVhdGlvbiAmJiAhaXNNYXBwYWJs
ZSgpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnVubWFwKCk6IEludmFsaWQg
b3BlcmF0aW9uOiBidWZmZXIgaXMgbm90IG1hcHBhYmxlISIpOworICAgIGlmICghbV9pc01hcHBl
ZEZyb21DcmVhdGlvbiAmJiAhaXNNYXBwYWJsZSgpICYmIGVycm9yU2NvcGVzKSB7CisgICAgICAg
IGVycm9yU2NvcGVzLT5nZW5lcmF0ZVByZWZpeGVkRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBH
UFVCdWZmZXIgaXMgbm90IG1hcHBhYmxlISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yNzEsNyArMjYzLDcgQEAgdm9pZCBHUFVCdWZmZXI6OnVubWFwKCkKICAgICAgICAgICAgIEFT
U0VSVChtX3BsYXRmb3JtQnVmZmVyICYmIG1fcGxhdGZvcm1CdWZmZXIuZ2V0KCkuY29udGVudHMp
OwogICAgICAgICAgICAgbWVtY3B5KG1fcGxhdGZvcm1CdWZmZXIuZ2V0KCkuY29udGVudHMsIG1f
c3RhZ2luZ0J1ZmZlci0+ZGF0YSgpLCBtX2J5dGVMZW5ndGgpOwogICAgICAgICB9IGVsc2UgaWYg
KG1faXNNYXBwZWRGcm9tQ3JlYXRpb24pCi0gICAgICAgICAgICBjb3B5U3RhZ2luZ0J1ZmZlclRv
R1BVKCk7CisgICAgICAgICAgICBjb3B5U3RhZ2luZ0J1ZmZlclRvR1BVKGVycm9yU2NvcGVzKTsK
IAogICAgICAgICBtX2lzTWFwcGVkRnJvbUNyZWF0aW9uID0gZmFsc2U7CiAgICAgICAgIG1fc3Rh
Z2luZ0J1ZmZlciA9IG51bGxwdHI7CkBAIC0yODQsMTAgKzI3NiwxMCBAQCB2b2lkIEdQVUJ1ZmZl
cjo6dW5tYXAoKQogICAgIH0KIH0KIAotdm9pZCBHUFVCdWZmZXI6OmRlc3Ryb3koKQordm9pZCBH
UFVCdWZmZXI6OmRlc3Ryb3koR1BVRXJyb3JTY29wZXMqIGVycm9yU2NvcGVzKQogewogICAgIGlm
IChzdGF0ZSgpID09IFN0YXRlOjpNYXBwZWQpCi0gICAgICAgIHVubWFwKCk7CisgICAgICAgIHVu
bWFwKGVycm9yU2NvcGVzKTsKIAogICAgIG1fcGxhdGZvcm1CdWZmZXIgPSBudWxscHRyOwogfQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDI1ZDY0MWZiNmEwZTRmMmM3NjEzMjE2MGMyZmE2MTkwYTE3MmNhNDYuLjNlZGRmNGQ0
YWUyYmNmNTEzYzQzZTc5MDUwZWQ0MDM5Y2YyMmMyNzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOS0wOC0yNyAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgorCisgICAgICAg
IFtXZWJHUFVdIEltcGxlbWVudCBHUFVFcnJvcnMgZm9yIGFuZCByZWxheCBHUFVCdWZmZXIgdmFs
aWRhdGlvbiBydWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwODUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGEgdGVzdCB0byBlbnN1cmUgR1BVQnVmZmVyIGVycm9ycyBhcmUgZ2VuZXJhdGVk
IHByb3Blcmx5LgorCisgICAgICAgICogd2ViZ3B1L2J1ZmZlci1lcnJvcnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvYnVmZmVyLWVycm9ycy5odG1sOiBBZGRlZC4KKwog
MjAxOS0wOC0yNiAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgZml4IHRlc3QgZmFpbHVyZSBhZnRlciByMjAwOTcxCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLWVycm9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJncHUvYnVmZmVyLWVycm9ycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZiZmQ5MWM0
NWJhOTYyMGZmNjQ3ZjFiZTE2YTIwNTY1OWVjNzY0MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdwdS9idWZmZXItZXJyb3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBA
CisKK1BBU1MgR1BVQnVmZmVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIGJvdGggcmVhZC1vbmx5IGFu
ZCBTVE9SQUdFIHVzYWdlcy4gCitQQVNTIHVubWFwIG9uIGFscmVhZHkgdW5tYXBwZWQsIG1hcHBh
YmxlIEdQVUJ1ZmZlciBzaG91bGQgbm90IGdlbmVyYXRlIGVycm9yLiAKK1BBU1MgR1BVQnVmZmVy
IGNyZWF0ZWQgdmlhIGNyZWF0ZUJ1ZmZlck1hcHBlZCBjYW5ub3QgYmUgcmVtYXBwZWQuIAorUEFT
UyBHUFVCdWZmZXJEZXNjcmlwdG9yIHdpdGggYm90aCBNQVBfUkVBRCBhbmQgTUFQX1dSSVRFIHVz
YWdlIHNob3VsZCBmYWlsLiAKK1BBU1MgVG9vLWxhcmdlIEdQVUJ1ZmZlckRlc2NyaXB0b3Igc2l6
ZSBzaG91bGQgZmFpbCB3aXRoIG91dC1vZi1tZW1vcnkgZXJyb3IuIAorUEFTUyBtYXBSZWFkQXN5
bmMgb24gbm9uLU1BUF9SRUFEIEdQVUJ1ZmZlciBzaG91bGQgZmFpbC4gCitQQVNTIG1hcFdyaXRl
QXN5bmMgb24gbm9uLU1BUF9XUklURSBHUFVCdWZmZXIgc2hvdWxkIGZhaWwuIAorUEFTUyB1bm1h
cCBvbiBub24tbWFwcGFibGUgR1BVQnVmZmVyIHNob3VsZCBmYWlsLiAKK1BBU1MgY3JlYXRlQnVm
ZmVyTWFwcGVkOiBub24tNC1ieXRlLWFsaWduZWQgR1BVQnVmZmVyRGVzcmlwdG9yIHNpemUgc2hv
dWxkIGZhaWwuIAorUEFTUyBBbnkgbWV0aG9kIGNhbGwgb24gYW4gaW52YWxpZCBHUFVCdWZmZXIg
c2hvdWxkIGZhaWwuIAorUEFTUyBBbnkgbWV0aG9kIGNhbGwgb24gYSBkZXN0cm95ZWQgR1BVQnVm
ZmVyIHNob3VsZCBmYWlsLiAKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZl
ci1lcnJvcnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItZXJyb3JzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDUwNGRmNGY2YjE3NmE5N2EyYjFiYTgzOWUxODE4YmQxYjFiYzdlYwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9idWZmZXItZXJyb3JzLmh0bWwKQEAgLTAs
MCArMSwxNTggQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzx0aXRs
ZT5UZXN0IEdQVUJ1ZmZlciBFcnJvcnMuPC90aXRsZT4KKzxib2R5PgorPHNjcmlwdCBzcmM9Impz
L3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitsZXQgdGVzdHMgPSB7fTsK
KwordGVzdHNbIkdQVUJ1ZmZlcnMgY2FuIGJlIGNyZWF0ZWQgd2l0aCBib3RoIHJlYWQtb25seSBh
bmQgU1RPUkFHRSB1c2FnZXMuIl0gPSBhc3luYyBkZXZpY2UgPT4geworICAgIGRldmljZS5wdXNo
RXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGRldmljZS5jcmVhdGVCdWZmZXIoeworICAg
ICAgICBzaXplOiA0LAorICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BV
QnVmZmVyVXNhZ2UuSU5ERVggfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMgfCBHUFVCdWZm
ZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRQorICAgIH0pOworICAgIHJl
dHVybiBwb3BOdWxsRXJyb3IoZGV2aWNlKTsKK307CisKK3Rlc3RzWyJ1bm1hcCBvbiBhbHJlYWR5
IHVubWFwcGVkLCBtYXBwYWJsZSBHUFVCdWZmZXIgc2hvdWxkIG5vdCBnZW5lcmF0ZSBlcnJvci4i
XSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcih7CisgICAgICAgIHNpemU6IDQsCisgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5N
QVBfUkVBRCB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMgfAorICAg
ICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwKKyAgICAgICAgICAgIEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5JTkRFWCB8Cisg
ICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UKKyAgICB9KTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFs
aWRhdGlvbiIpOworICAgIGJ1ZmZlci51bm1hcCgpOworICAgIHJldHVybiBwb3BOdWxsRXJyb3Io
ZGV2aWNlKTsKK307CisKK3Rlc3RzWyJHUFVCdWZmZXIgY3JlYXRlZCB2aWEgY3JlYXRlQnVmZmVy
TWFwcGVkIGNhbm5vdCBiZSByZW1hcHBlZC4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgZGV2
aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgY29uc3QgW2J1ZmZlciwgX10g
PSBkZXZpY2UuY3JlYXRlQnVmZmVyTWFwcGVkKHsgc2l6ZTogNCwgdXNhZ2U6IDAgfSk7CisgICAg
Ly8gU2hvdWxkIG5vdCBmYWlsLgorICAgIGJ1ZmZlci51bm1hcCgpOworICAgIGF3YWl0IHBvcE51
bGxFcnJvcihkZXZpY2UpOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9u
Iik7CisgICAgLy8gU2hvdWxkIGZhaWwuCisgICAgYnVmZmVyLnVubWFwKCk7CisgICAgYXdhaXQg
cG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUo
InZhbGlkYXRpb24iKTsKKyAgICAvLyBTaG91bGQgZmFpbC4KKyAgICBidWZmZXIubWFwUmVhZEFz
eW5jKCkudGhlbigoKSA9PiB7IGFzc2VydF91bnJlYWNoZWQoKTsgfSkuY2F0Y2goZSA9PiB7fSk7
CisgICAgcmV0dXJuIHBvcFZhbGlkYXRpb25FcnJvcihkZXZpY2UpOworfTsKKwordGVzdHNbIkdQ
VUJ1ZmZlckRlc2NyaXB0b3Igd2l0aCBib3RoIE1BUF9SRUFEIGFuZCBNQVBfV1JJVEUgdXNhZ2Ug
c2hvdWxkIGZhaWwuIl0gPSBhc3luYyBkZXZpY2UgPT4geworICAgIGRldmljZS5wdXNoRXJyb3JT
Y29wZSgidmFsaWRhdGlvbiIpOworICAgIGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUg
fSk7CisgICAgcmV0dXJuIHBvcFZhbGlkYXRpb25FcnJvcihkZXZpY2UpOworfTsKKwordGVzdHNb
IlRvby1sYXJnZSBHUFVCdWZmZXJEZXNjcmlwdG9yIHNpemUgc2hvdWxkIGZhaWwgd2l0aCBvdXQt
b2YtbWVtb3J5IGVycm9yLiJdID0gYXN5bmMgZGV2aWNlID0+IHsKKyAgICBkZXZpY2UucHVzaEVy
cm9yU2NvcGUoIm91dC1vZi1tZW1vcnkiKTsKKyAgICBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6
ZTogOTk5OTk5OTk5OTksIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5OT05FIH0pOworICAgIHJldHVy
biBwb3BNZW1vcnlFcnJvcihkZXZpY2UpOworfTsKKwordGVzdHNbIm1hcFJlYWRBc3luYyBvbiBu
b24tTUFQX1JFQUQgR1BVQnVmZmVyIHNob3VsZCBmYWlsLiJdID0gYXN5bmMgZGV2aWNlID0+IHsK
KyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsKKyAgICAgICAgc2l6ZTog
NCwKKyAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8CisgICAgICAgICAg
ICBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMgfAorICAgICAgICAgICAgR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfRFNUIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8Cisg
ICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5JTkRFWCB8CisgICAgICAgICAgICBHUFVCdWZmZXJV
c2FnZS5VTklGT1JNIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UKKyAgICB9
KTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGJ1ZmZl
ci5tYXBSZWFkQXN5bmMoKS50aGVuKCgpID0+IHsgYXNzZXJ0X3VucmVhY2hlZCgpOyB9KS5jYXRj
aChlID0+IHt9KTsKKyAgICByZXR1cm4gcG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7Cit9Owor
Cit0ZXN0c1sibWFwV3JpdGVBc3luYyBvbiBub24tTUFQX1dSSVRFIEdQVUJ1ZmZlciBzaG91bGQg
ZmFpbC4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcih7CisgICAgICAgIHNpemU6IDQsCisgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRCB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMg
fAorICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwKKyAgICAgICAgICAg
IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5JTkRF
WCB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwKKyAgICAgICAgICAgIEdQ
VUJ1ZmZlclVzYWdlLlNUT1JBR0UKKyAgICB9KTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29w
ZSgidmFsaWRhdGlvbiIpOworICAgIGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCkudGhlbigoKSA9PiB7
IGFzc2VydF91bnJlYWNoZWQoKTsgfSkuY2F0Y2goZSA9PiB7fSk7CisgICAgcmV0dXJuIHBvcFZh
bGlkYXRpb25FcnJvcihkZXZpY2UpOworfTsKKwordGVzdHNbInVubWFwIG9uIG5vbi1tYXBwYWJs
ZSBHUFVCdWZmZXIgc2hvdWxkIGZhaWwuIl0gPSBhc3luYyBkZXZpY2UgPT4geworICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeworICAgICAgICBzaXplOiA0LAorICAgICAg
ICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDIHwKKyAgICAgICAgICAgIEdQVUJ1
ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5WRVJU
RVggfAorICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuSU5ERVggfAorICAgICAgICAgICAgR1BV
QnVmZmVyVXNhZ2UuVU5JRk9STSB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5TVE9SQUdF
CisgICAgfSk7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAg
ICBidWZmZXIudW5tYXAoKTsKKyAgICByZXR1cm4gcG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7
Cit9OworCit0ZXN0c1siY3JlYXRlQnVmZmVyTWFwcGVkOiBub24tNC1ieXRlLWFsaWduZWQgR1BV
QnVmZmVyRGVzcmlwdG9yIHNpemUgc2hvdWxkIGZhaWwuIl0gPSBhc3luYyBkZXZpY2UgPT4gewor
ICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGRldmljZS5jcmVh
dGVCdWZmZXJNYXBwZWQoeyBzaXplOiA1LCB1c2FnZTogMCB9KTsKKyAgICByZXR1cm4gcG9wVmFs
aWRhdGlvbkVycm9yKGRldmljZSk7Cit9OworCit0ZXN0c1siQW55IG1ldGhvZCBjYWxsIG9uIGFu
IGludmFsaWQgR1BVQnVmZmVyIHNob3VsZCBmYWlsLiJdID0gYXN5bmMgZGV2aWNlID0+IHsKKyAg
ICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHsgc2l6ZTogNCwgdXNhZ2U6IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9SRUFEIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIH0pOworICAg
IHJldHVybiBhc3NlcnRBbGxCdWZmZXJNZXRob2RzRmFpbChkZXZpY2UsIGJ1ZmZlcik7Cit9Owor
Cit0ZXN0c1siQW55IG1ldGhvZCBjYWxsIG9uIGEgZGVzdHJveWVkIEdQVUJ1ZmZlciBzaG91bGQg
ZmFpbC4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcih7IHNpemU6IDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB9KTsK
KworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGJ1ZmZlci5k
ZXN0cm95KCk7CisgICAgYXdhaXQgcG9wTnVsbEVycm9yKGRldmljZSk7CisKKyAgICByZXR1cm4g
YXNzZXJ0QWxsQnVmZmVyTWV0aG9kc0ZhaWwoZGV2aWNlLCBidWZmZXIpOworfTsKKworY29uc3Qg
YXNzZXJ0QWxsQnVmZmVyTWV0aG9kc0ZhaWwgPSBhc3luYyAoZGV2aWNlLCBidWZmZXIpID0+IHsK
KyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBidWZmZXIubWFw
UmVhZEFzeW5jKCkudGhlbigoKSA9PiB7IGFzc2VydF91bnJlYWNoZWQoKTsgfSkuY2F0Y2goZSA9
PiB7fSk7CisgICAgYXdhaXQgcG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7CisKKyAgICBkZXZp
Y2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBidWZmZXIubWFwV3JpdGVBc3lu
YygpLnRoZW4oKCkgPT4geyBhc3NlcnRfdW5yZWFjaGVkKCk7IH0pLmNhdGNoKGUgPT4ge30pOwor
ICAgIGF3YWl0IHBvcFZhbGlkYXRpb25FcnJvcihkZXZpY2UpOworCisgICAgZGV2aWNlLnB1c2hF
cnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgYnVmZmVyLnVubWFwKCk7CisgICAgYXdhaXQg
cG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUo
InZhbGlkYXRpb24iKTsKKyAgICBidWZmZXIuZGVzdHJveSgpOworICAgIHJldHVybiBwb3BWYWxp
ZGF0aW9uRXJyb3IoZGV2aWNlKTsKK307CisKK3J1blRlc3RzV2l0aERldmljZSh0ZXN0cyk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377400</attachid>
            <date>2019-08-27 16:22:57 -0700</date>
            <delta_ts>2019-08-27 16:40:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-200852-20190827162256.patch</filename>
            <type>text/plain</type>
            <size>24495</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQ1NzFiYzRkNmJkZGVm
ZGI0NjQwYzYyZTY4YjA4ZTg5MjZiZWI2Yy4uMjNjNzg3MjJlMGQ1OWEwMzNlMTNjMmFhNzNkZmY5
YTkyYjRkNmFiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA4LTI3ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYkdQVV0gSW1wbGVt
ZW50IEdQVUVycm9ycyBmb3IgYW5kIHJlbGF4IEdQVUJ1ZmZlciB2YWxpZGF0aW9uIHJ1bGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4NTIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgRml4IGluY29ycmVj
dCB1c2FnZSB2YWxpZGF0aW9uIGR1cmluZyBHUFVCdWZmZXIgY3JlYXRpb24uCisgICAgICAgIElt
cGxlbWVudCBHUFVFcnJvciByZXBvcnRpbmcgZm9yIEdQVUJ1ZmZlciBjcmVhdGlvbiBhbmQgbWV0
aG9kcy4KKworICAgICAgICBUZXN0OiB3ZWJncHUvYnVmZmVyLWVycm9ycy5odG1sCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR1BVQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQnVmZmVyOjpX
ZWJHUFVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQnVmZmVyOjp1bm1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHUFVCdWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR1BVQnVmZmVyOjpyZWplY3RPclJlZ2lzdGVyUHJvbWlzZUNhbGxiYWNrKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaDogTm93IGluaGVyaXRzIGZyb20gR1BV
T2JqZWN0QmFzZS4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVEZXZpY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR1BVRGV2aWNlOjpjcmVhdGVCdWZmZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR1BVRGV2aWNlOjpjcmVhdGVCdWZmZXJNYXBwZWQgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaDogTm8gbG9uZ2VyIGlu
aGVyaXRzIGZyb20gR1BVT2JqZWN0QmFzZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVT2JqZWN0QmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVT2JqZWN0QmFzZTo6ZXJy
b3JTY29wZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1BVT2JqZWN0QmFzZTo6Z2VuZXJhdGVFcnJv
cik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1
ZmZlck1ldGFsLm1tOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp2YWxpZGF0ZUJ1ZmZl
clVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKTogQWxpZ25t
ZW50IGlzc3VlIHNob3VsZCBiZSBnZW5lcmFsIFdlYkdQVSByZXF1aXJlbWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OkdQVUJ1ZmZlcjo6R1BVQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1
ZmZlcjo6fkdQVUJ1ZmZlcik6IE11c3QgZG8gY2xlYW51cCB3aXRob3V0IGdlbmVyYXRpbmcgZXJy
b3JzLgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmNvcHlTdGFnaW5nQnVmZmVyVG9HUFUp
OgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHUFVCdWZmZXI6OmRlc3Ryb3kpOgorCiAyMDE5LTA4LTI2ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE9wdGltaXplIGNvbXB1dGF0aW9uIG9mIEFi
c29sdXRlQ2xpcFJlY3RzIGNsaXAgcmVjdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVCdWZmZXIuY3BwCmluZGV4IGMyMjJlMzU1NzU5MWE2ODBkOGIzODYwM2Q4Nzcz
Mjc0MGQ1NzM2MmQuLmJhMjU5NjNhMTIwNDdlN2IwZDE0NWRjNDI4NDc4MDBhNmEyZTFmZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJ1ZmZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmNwcApAQCAt
MjgsMTcgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIkdQVUVycm9yU2NvcGVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8V2ViR1BVQnVm
ZmVyPiBXZWJHUFVCdWZmZXI6OmNyZWF0ZShSZWZQdHI8R1BVQnVmZmVyPiYmIGJ1ZmZlcikKK1Jl
ZjxXZWJHUFVCdWZmZXI+IFdlYkdQVUJ1ZmZlcjo6Y3JlYXRlKFJlZlB0cjxHUFVCdWZmZXI+JiYg
YnVmZmVyLCBHUFVFcnJvclNjb3BlcyYgZXJyb3JTY29wZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViR1BVQnVmZmVyKFdURk1vdmUoYnVmZmVyKSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkdQVUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciksIGVycm9yU2NvcGVzKSk7CiB9
CiAKLVdlYkdQVUJ1ZmZlcjo6V2ViR1BVQnVmZmVyKFJlZlB0cjxHUFVCdWZmZXI+JiYgYnVmZmVy
KQotICAgIDogbV9idWZmZXIoV1RGTW92ZShidWZmZXIpKQorV2ViR1BVQnVmZmVyOjpXZWJHUFVC
dWZmZXIoUmVmUHRyPEdQVUJ1ZmZlcj4mJiBidWZmZXIsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNj
b3BlcykKKyAgICA6IEdQVU9iamVjdEJhc2UobWFrZVJlZihlcnJvclNjb3BlcykpCisgICAgLCBt
X2J1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpCiB7CiB9CiAKQEAgLTU0LDM2ICs1Niw0NCBAQCB2b2lk
IFdlYkdQVUJ1ZmZlcjo6bWFwV3JpdGVBc3luYyhCdWZmZXJNYXBwaW5nUHJvbWlzZSYmIHByb21p
c2UpCiAKIHZvaWQgV2ViR1BVQnVmZmVyOjp1bm1hcCgpCiB7CisgICAgZXJyb3JTY29wZXMoKS5z
ZXRFcnJvclByZWZpeCgiR1BVQnVmZmVyLnVubWFwKCk6ICIpOworCiAgICAgaWYgKCFtX2J1ZmZl
cikKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dW5tYXAoKTogSW52YWxpZCBvcGVy
YXRpb24hIik7CisgICAgICAgIGVycm9yU2NvcGVzKCkuZ2VuZXJhdGVQcmVmaXhlZEVycm9yKCJJ
bnZhbGlkIG9wZXJhdGlvbjogaW52YWxpZCBHUFVCdWZmZXIhIik7CiAgICAgZWxzZQotICAgICAg
ICBtX2J1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgbV9idWZmZXItPnVubWFwKCZlcnJvclNjb3Bl
cygpKTsKIH0KIAogdm9pZCBXZWJHUFVCdWZmZXI6OmRlc3Ryb3koKQogeworICAgIGVycm9yU2Nv
cGVzKCkuc2V0RXJyb3JQcmVmaXgoIkdQVUJ1ZmZlci5kZXN0cm95KCk6ICIpOworCiAgICAgaWYg
KCFtX2J1ZmZlcikKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6ZGVzdHJveSgpOiBJ
bnZhbGlkIG9wZXJhdGlvbiEiKTsKKyAgICAgICAgZXJyb3JTY29wZXMoKS5nZW5lcmF0ZVByZWZp
eGVkRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uISIpOwogICAgIGVsc2UgewotICAgICAgICBtX2J1
ZmZlci0+ZGVzdHJveSgpOworICAgICAgICBtX2J1ZmZlci0+ZGVzdHJveSgmZXJyb3JTY29wZXMo
KSk7CiAgICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiB9CiAKIHZvaWQgV2ViR1BV
QnVmZmVyOjpyZWplY3RPclJlZ2lzdGVyUHJvbWlzZUNhbGxiYWNrKEJ1ZmZlck1hcHBpbmdQcm9t
aXNlJiYgcHJvbWlzZSwgYm9vbCBpc1JlYWQpCiB7CisgICAgZXJyb3JTY29wZXMoKS5zZXRFcnJv
clByZWZpeChtYWtlU3RyaW5nKCJHUFVCdWZmZXIubWFwIiwgaXNSZWFkID8gIlJlYWQiIDogIldy
aXRlIiwgIkFzeW5jKCk6ICIpKTsKKwogICAgIGlmICghbV9idWZmZXIpIHsKLSAgICAgICAgTE9H
KFdlYkdQVSwgIkdQVUJ1ZmZlcjo6bWFwJXNBc3luYygpOiBJbnZhbGlkIG9wZXJhdGlvbiEiLCBp
c1JlYWQgPyAiUmVhZCIgOiAiV3JpdGUiKTsKKyAgICAgICAgZXJyb3JTY29wZXMoKS5nZW5lcmF0
ZVByZWZpeGVkRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uOiBpbnZhbGlkIEdQVUJ1ZmZlciEiKTsK
ICAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYnVmZmVyLT5yZWdpc3Rlck1hcHBpbmdDYWxsYmFjayhbcHJvbWlzZSA9IFdURk1vdmUocHJv
bWlzZSldIChKU0M6OkFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcikgbXV0YWJsZSB7CisgICAgbV9i
dWZmZXItPnJlZ2lzdGVyTWFwcGluZ0NhbGxiYWNrKFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNl
KSwgcHJvdGVjdGVkRXJyb3JTY29wZXMgPSBtYWtlUmVmKGVycm9yU2NvcGVzKCkpXSAoSlNDOjpB
cnJheUJ1ZmZlciogYXJyYXlCdWZmZXIpIG11dGFibGUgewogICAgICAgICBpZiAoYXJyYXlCdWZm
ZXIpCiAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoKmFycmF5QnVmZmVyKTsKLSAgICAgICAg
ZWxzZQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByb3RlY3RlZEVycm9yU2NvcGVzLT5n
ZW5lcmF0ZUVycm9yKCIiLCBHUFVFcnJvckZpbHRlcjo6T3V0T2ZNZW1vcnkpOwogICAgICAgICAg
ICAgcHJvbWlzZS5yZWplY3QoKTsKLSAgICB9LCBpc1JlYWQpOworICAgICAgICB9CisgICAgfSwg
aXNSZWFkLCBlcnJvclNjb3BlcygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCdWZmZXIuaAppbmRleCA1ODc5NzBk
OTE3MTNhYzgwYTk5NzQ4N2Y0OGVmMmYwZmNjMjUyMTBmLi5kOTk2YjVlZWU5ZDhlMDI4MWUwNjI2
ZDdjZWI2YzE4NTExNjZjZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
ZWJHUFVCdWZmZXIuaApAQCAtMjksOCArMjksOCBAQAogCiAjaW5jbHVkZSAiR1BVQnVmZmVyLmgi
CiAjaW5jbHVkZSAiR1BVQnVmZmVyVXNhZ2UuaCIKKyNpbmNsdWRlICJHUFVPYmplY3RCYXNlLmgi
CiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00
MSw5ICs0MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEdQVUJ1ZmZlckRlc2Ny
aXB0b3I7CiAKLWNsYXNzIFdlYkdQVUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdQVUJ1
ZmZlcj4geworY2xhc3MgV2ViR1BVQnVmZmVyIDogcHVibGljIEdQVU9iamVjdEJhc2UgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8V2ViR1BVQnVmZmVyPiBjcmVhdGUoUmVmUHRyPEdQVUJ1ZmZl
cj4mJik7CisgICAgc3RhdGljIFJlZjxXZWJHUFVCdWZmZXI+IGNyZWF0ZShSZWZQdHI8R1BVQnVm
ZmVyPiYmLCBHUFVFcnJvclNjb3BlcyYpOwogCiAgICAgR1BVQnVmZmVyKiBidWZmZXIoKSB7IHJl
dHVybiBtX2J1ZmZlci5nZXQoKTsgfQogICAgIGNvbnN0IEdQVUJ1ZmZlciogYnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9idWZmZXIuZ2V0KCk7IH0KQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZGVzdHJveSgpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFdlYkdQVUJ1ZmZl
cihSZWZQdHI8R1BVQnVmZmVyPiYmKTsKKyAgICBleHBsaWNpdCBXZWJHUFVCdWZmZXIoUmVmUHRy
PEdQVUJ1ZmZlcj4mJiwgR1BVRXJyb3JTY29wZXMmKTsKIAogICAgIHZvaWQgcmVqZWN0T3JSZWdp
c3RlclByb21pc2VDYWxsYmFjayhCdWZmZXJNYXBwaW5nUHJvbWlzZSYmLCBib29sKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5jcHAKaW5kZXggODVm
ZGNhM2IyYjk0YmNkZjkxMTEwNmFjMDZlNmRkMWYwM2M1YjU5OS4uMGJmYzMwNjY0MWQ4N2U5Yzcx
MDZlNDA3ZjYyM2I0YjFhOThkNzkxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVRGV2aWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XZWJHUFVEZXZpY2UuY3BwCkBAIC05MSw3ICs5MSw3IEBAIFJlZjxXZWJHUFVCdWZmZXI+
IFdlYkdQVURldmljZTo6Y3JlYXRlQnVmZmVyKGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImIGRl
c2NyaXB0CiAgICAgbV9lcnJvclNjb3Blcy0+c2V0RXJyb3JQcmVmaXgoIkdQVURldmljZS5jcmVh
dGVCdWZmZXIoKTogIik7CiAKICAgICBhdXRvIGJ1ZmZlciA9IG1fZGV2aWNlLT50cnlDcmVhdGVC
dWZmZXIoZGVzY3JpcHRvciwgR1BVQnVmZmVyTWFwcGVkT3B0aW9uOjpOb3RNYXBwZWQsIG1fZXJy
b3JTY29wZXMpOwotICAgIHJldHVybiBXZWJHUFVCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZl
cikpOworICAgIHJldHVybiBXZWJHUFVCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksIG1f
ZXJyb3JTY29wZXMpOwogfQogCiBWZWN0b3I8SlNDOjpKU1ZhbHVlPiBXZWJHUFVEZXZpY2U6OmNy
ZWF0ZUJ1ZmZlck1hcHBlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEdQVUJ1ZmZlckRl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0CkBAIC0xMDYsNyArMTA2LDcgQEAgVmVjdG9yPEpT
Qzo6SlNWYWx1ZT4gV2ViR1BVRGV2aWNlOjpjcmVhdGVCdWZmZXJNYXBwZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb24KICAgICAgICAgd3JhcHBlZEFycmF5QnVmZmVyID0gdG9KUygmc3RhdGUs
IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKSwgYXJyYXlCdWZmZXIpOwogICAgIH0KIAotICAgIGF1dG8gd2ViQnVmZmVyID0gV2ViR1BV
QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKKyAgICBhdXRvIHdlYkJ1ZmZlciA9IFdl
YkdQVUJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgbV9lcnJvclNjb3Blcyk7CiAgICAg
YXV0byB3cmFwcGVkV2ViQnVmZmVyID0gdG9KUygmc3RhdGUsIEpTQzo6anNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgd2ViQnVmZmVyKTsKIAog
ICAgIHJldHVybiB7IHdyYXBwZWRXZWJCdWZmZXIsIHdyYXBwZWRBcnJheUJ1ZmZlciB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCmluZGV4
IDA3ZjQwYWUxZWIwNjkyYmQwYmVhOGNmN2M2NDE3OTg0YWI4ODAzNzQuLjMyNTZiNGUwNDk0MDM0
ZmNiODkwYTA3ZTdiYWU0YWJkMWNlNjRhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1
ZGUgIkRlZmVycmFibGVUYXNrLmgiCiAjaW5jbHVkZSAiR1BVQnVmZmVyVXNhZ2UuaCIKLSNpbmNs
dWRlICJHUFVPYmplY3RCYXNlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTQ5LDYgKzQ4LDcg
QEAgY2xhc3MgQXJyYXlCdWZmZXI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdQVURl
dmljZTsKK2NsYXNzIEdQVUVycm9yU2NvcGVzOwogCiBzdHJ1Y3QgR1BVQnVmZmVyRGVzY3JpcHRv
cjsKIApAQCAtNjEsNyArNjEsNyBAQCB1c2luZyBQbGF0Zm9ybUJ1ZmZlciA9IHZvaWQ7CiAjZW5k
aWYKIHVzaW5nIFBsYXRmb3JtQnVmZmVyU21hcnRQdHIgPSBSZXRhaW5QdHI8UGxhdGZvcm1CdWZm
ZXI+OwogCi1jbGFzcyBHUFVCdWZmZXIgOiBwdWJsaWMgR1BVT2JqZWN0QmFzZSB7CitjbGFzcyBH
UFVCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBl
bnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgTWFwcGVkLApAQCAtOTQsOSArOTQsOSBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIHVzaW5nIE1hcHBpbmdDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248
dm9pZChKU0M6OkFycmF5QnVmZmVyKik+OwotICAgIHZvaWQgcmVnaXN0ZXJNYXBwaW5nQ2FsbGJh
Y2soTWFwcGluZ0NhbGxiYWNrJiYsIGJvb2wpOwotICAgIHZvaWQgdW5tYXAoKTsKLSAgICB2b2lk
IGRlc3Ryb3koKTsKKyAgICB2b2lkIHJlZ2lzdGVyTWFwcGluZ0NhbGxiYWNrKE1hcHBpbmdDYWxs
YmFjayYmLCBib29sLCBHUFVFcnJvclNjb3BlcyYpOworICAgIHZvaWQgdW5tYXAoR1BVRXJyb3JT
Y29wZXMqKTsKKyAgICB2b2lkIGRlc3Ryb3koR1BVRXJyb3JTY29wZXMqKTsKIAogcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgUGVuZGluZ01hcHBpbmdDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
bmRpbmdNYXBwaW5nQ2FsbGJhY2s+IHsKQEAgLTExMSwxMyArMTExLDEzIEBAIHByaXZhdGU6CiAg
ICAgICAgIFBlbmRpbmdNYXBwaW5nQ2FsbGJhY2soTWFwcGluZ0NhbGxiYWNrJiYpOwogICAgIH07
CiAKLSAgICBHUFVCdWZmZXIoUGxhdGZvcm1CdWZmZXJTbWFydFB0ciYmLCBHUFVEZXZpY2UmLCBz
aXplX3QsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+LCBHUFVCdWZmZXJNYXBwZWRP
cHRpb24sIEdQVUVycm9yU2NvcGVzJik7CisgICAgR1BVQnVmZmVyKFBsYXRmb3JtQnVmZmVyU21h
cnRQdHImJiwgR1BVRGV2aWNlJiwgc2l6ZV90LCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZs
YWdzPiwgR1BVQnVmZmVyTWFwcGVkT3B0aW9uKTsKICAgICBzdGF0aWMgYm9vbCB2YWxpZGF0ZUJ1
ZmZlclVzYWdlKGNvbnN0IEdQVURldmljZSYsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6Rmxh
Z3M+LCBHUFVFcnJvclNjb3BlcyYpOwogCiAgICAgSlNDOjpBcnJheUJ1ZmZlciogc3RhZ2luZ0J1
ZmZlckZvclJlYWQoKTsKICAgICBKU0M6OkFycmF5QnVmZmVyKiBzdGFnaW5nQnVmZmVyRm9yV3Jp
dGUoKTsKICAgICB2b2lkIHJ1bk1hcHBpbmdDYWxsYmFjaygpOwotICAgIHZvaWQgY29weVN0YWdp
bmdCdWZmZXJUb0dQVSgpOworICAgIHZvaWQgY29weVN0YWdpbmdCdWZmZXJUb0dQVShHUFVFcnJv
clNjb3BlcyopOwogCiAgICAgYm9vbCBpc01hcFdyaXRlKCkgY29uc3QgeyByZXR1cm4gbV91c2Fn
ZS5jb250YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6Ok1hcFdyaXRlKTsgfQogICAgIGJvb2wg
aXNNYXBSZWFkKCkgY29uc3QgeyByZXR1cm4gbV91c2FnZS5jb250YWlucyhHUFVCdWZmZXJVc2Fn
ZTo6RmxhZ3M6Ok1hcFJlYWQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvR1BVT2JqZWN0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVU9iamVjdEJhc2UuaAppbmRleCA2NjUzYmNmN2FmOGNmOWQzOTY0YWY4
ZDUyNTEyZmUxYjYzNjQ3YWZmLi42NTc3MDU3ODk3ZGUwYjYyMjc0MWQ5NmIzNDliYmM3MTFhMzUx
Y2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
T2JqZWN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVPYmplY3RCYXNlLmgKQEAgLTMzLDE2ICszMywxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBHUFVPYmplY3RCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVT2JqZWN0QmFzZT4g
ewotcHVibGljOgotICAgIHZvaWQgZ2VuZXJhdGVFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IEdQVUVycm9yRmlsdGVyIGZpbHRlciA9IEdQVUVycm9yRmlsdGVyOjpWYWxpZGF0aW9uKQotICAg
IHsKLSAgICAgICAgbV9lcnJvclNjb3Blcy0+Z2VuZXJhdGVFcnJvcihtZXNzYWdlLCBmaWx0ZXIp
OwotICAgIH0KLQogcHJvdGVjdGVkOgogICAgIEdQVU9iamVjdEJhc2UoUmVmPEdQVUVycm9yU2Nv
cGVzPiYmIHJlcG9ydGVyKQogICAgICAgICA6IG1fZXJyb3JTY29wZXMoV1RGTW92ZShyZXBvcnRl
cikpIHsgfQogCisgICAgR1BVRXJyb3JTY29wZXMmIGVycm9yU2NvcGVzKCkgeyByZXR1cm4gbV9l
cnJvclNjb3BlczsgfQorCiBwcml2YXRlOgogICAgIFJlZjxHUFVFcnJvclNjb3Blcz4gbV9lcnJv
clNjb3BlczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0KaW5kZXggZGE3MGFlNjU0MTljZTk5
NDhkNGZjY2ExN2Y4NDBjZGRmMDUyNDUxYi4uZWFkZmViZjYyMmQyZDc2NTQ1YzlhM2NiZjRkNGQ4
NWE4YTFiYzg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaW1wb3J0ICJHUFVCdWZmZXJEZXNjcmlwdG9yLmgiCiAjaW1wb3J0ICJHUFVEZXZpY2UuaCIK
LSNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIkdQVUVycm9yU2NvcGVzLmgiCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4K
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CkBAIC00Niw3ICs0Niw3IEBAIHN0
YXRpYyBjb25zdGV4cHIgYXV0byByZWFkT25seUZsYWdzID0gT3B0aW9uU2V0PEdQVUJ1ZmZlclVz
YWdlOjpGbGFncz4geyBHUFVCdWZmCiBib29sIEdQVUJ1ZmZlcjo6dmFsaWRhdGVCdWZmZXJVc2Fn
ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFn
cz4gdXNhZ2UsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKIHsKICAgICBpZiAoIWRldmlj
ZS5wbGF0Zm9ybURldmljZSgpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnRy
eUNyZWF0ZSgpOiBJbnZhbGlkIEdQVURldmljZSEiKTsKKyAgICAgICAgZXJyb3JTY29wZXMuZ2Vu
ZXJhdGVQcmVmaXhlZEVycm9yKCJJbnZhbGlkIEdQVURldmljZSEiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtNTUsMTEgKzU1LDYgQEAgYm9vbCBHUFVCdWZmZXI6OnZhbGlk
YXRlQnVmZmVyVXNhZ2UoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIE9wdGlvblNldDxHUFVCdWZm
ZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICh1c2FnZS5jb250YWlu
c0FueShyZWFkT25seUZsYWdzKSAmJiAodXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlN0
b3JhZ2UpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnRyeUNyZWF0ZSgpOiBC
dWZmZXIgY2Fubm90IGhhdmUgYm90aCBTVE9SQUdFIGFuZCBhIHJlYWQtb25seSB1c2FnZSEiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC03NiwxNiArNzEsMTQgQEAgUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVyOjp0cnlDcmVhdGUo
R1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXAKICAgICBpZiAoIXZhbGlk
YXRlQnVmZmVyVXNhZ2UoZGV2aWNlLCB1c2FnZSwgZXJyb3JTY29wZXMpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBjb3B5QnVmZmVyVG9CdWZm
ZXIgY2FsbHMgcmVxdWlyZSA0LWJ5dGUgYWxpZ25tZW50LiAiVW5tYXBwaW5nIiBhIG1hcHBlZC1v
bi1jcmVhdGlvbiBHUFVCdWZmZXIKICAgICAvLyB0aGF0IGlzIG90aGVyd2lzZSB1bm1hcHBhYmxl
IHJlcXVpcmVzIHN1Y2ggYSBjb3B5IHRvIHVwbG9hZCBkYXRhLgogICAgIGlmIChpc01hcHBlZCA9
PSBHUFVCdWZmZXJNYXBwZWRPcHRpb246OklzTWFwcGVkCiAgICAgICAgICYmICF1c2FnZS5jb250
YWluc0FueSh7IEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6TWFwV3JpdGUsIEdQVUJ1ZmZlclVzYWdl
OjpGbGFnczo6TWFwUmVhZCB9KQogICAgICAgICAmJiBkZXNjcmlwdG9yLnNpemUgJSA0KSB7Ci0g
ICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnRyeUNyZWF0ZSgpOiBEYXRhIG11c3QgYmUg
YWxpZ25lZCB0byBhIG11bHRpcGxlIG9mIDQgYnl0ZXMhIik7CisgICAgICAgIGVycm9yU2NvcGVz
LmdlbmVyYXRlUHJlZml4ZWRFcnJvcigiRGF0YSBtdXN0IGJlIGFsaWduZWQgdG8gYSBtdWx0aXBs
ZSBvZiA0IGJ5dGVzISIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0jZW5kaWYK
IAogICAgIC8vIEZJWE1FOiBNZXRhbCBiZXN0IHByYWN0aWNlczogUmVhZC1vbmx5IG9uZS10aW1l
LXVzZSBkYXRhIGxlc3MgdGhhbiA0IEtCIHNob3VsZCBub3QgYWxsb2NhdGUgYSBNVExCdWZmZXIg
YW5kIGJlIHVzZWQgaW4gW01UTENvbW1hbmRFbmNvZGVyIHNldCpCeXRlc10gY2FsbHMgaW5zdGVh
ZC4KIApAQCAtMTA3LDEyICsxMDAsMTEgQEAgUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVyOjp0
cnlDcmVhdGUoR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXAKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BV
QnVmZmVyKFdURk1vdmUobXRsQnVmZmVyKSwgZGV2aWNlLCBzaXplLCB1c2FnZSwgaXNNYXBwZWQs
IGVycm9yU2NvcGVzKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BVQnVmZmVyKFdURk1v
dmUobXRsQnVmZmVyKSwgZGV2aWNlLCBzaXplLCB1c2FnZSwgaXNNYXBwZWQpKTsKIH0KIAotR1BV
QnVmZmVyOjpHUFVCdWZmZXIoUmV0YWluUHRyPE1UTEJ1ZmZlcj4mJiBidWZmZXIsIEdQVURldmlj
ZSYgZGV2aWNlLCBzaXplX3Qgc2l6ZSwgT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4g
dXNhZ2UsIEdQVUJ1ZmZlck1hcHBlZE9wdGlvbiBpc01hcHBlZCwgR1BVRXJyb3JTY29wZXMmIGVy
cm9yU2NvcGVzKQotICAgIDogR1BVT2JqZWN0QmFzZShtYWtlUmVmKGVycm9yU2NvcGVzKSkKLSAg
ICAsIG1fcGxhdGZvcm1CdWZmZXIoV1RGTW92ZShidWZmZXIpKQorR1BVQnVmZmVyOjpHUFVCdWZm
ZXIoUmV0YWluUHRyPE1UTEJ1ZmZlcj4mJiBidWZmZXIsIEdQVURldmljZSYgZGV2aWNlLCBzaXpl
X3Qgc2l6ZSwgT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4gdXNhZ2UsIEdQVUJ1ZmZl
ck1hcHBlZE9wdGlvbiBpc01hcHBlZCkKKyAgICA6IG1fcGxhdGZvcm1CdWZmZXIoV1RGTW92ZShi
dWZmZXIpKQogICAgICwgbV9kZXZpY2UobWFrZVJlZihkZXZpY2UpKQogICAgICwgbV9ieXRlTGVu
Z3RoKHNpemUpCiAgICAgLCBtX3VzYWdlKHVzYWdlKQpAQCAtMTI1LDcgKzExNyw3IEBAIEdQVUJ1
ZmZlcjo6R1BVQnVmZmVyKFJldGFpblB0cjxNVExCdWZmZXI+JiYgYnVmZmVyLCBHUFVEZXZpY2Um
IGRldmljZSwgc2l6ZV90IHNpCiAKIEdQVUJ1ZmZlcjo6fkdQVUJ1ZmZlcigpCiB7Ci0gICAgZGVz
dHJveSgpOworICAgIGRlc3Ryb3kobnVsbHB0cik7CiB9CiAKIGJvb2wgR1BVQnVmZmVyOjppc1Jl
YWRPbmx5KCkgY29uc3QKQEAgLTE3NywxNiArMTY5LDE2IEBAIHZvaWQgR1BVQnVmZmVyOjpjb21t
YW5kQnVmZmVyQ29tcGxldGVkKCkKIH0KICNlbmRpZiAvLyBVU0UoTUVUQUwpCiAKLXZvaWQgR1BV
QnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxsYmFjayhNYXBwaW5nQ2FsbGJhY2smJiBjYWxsYmFj
aywgYm9vbCBpc1JlYWQpCit2b2lkIEdQVUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5nQ2FsbGJhY2so
TWFwcGluZ0NhbGxiYWNrJiYgY2FsbGJhY2ssIGJvb2wgaXNSZWFkLCBHUFVFcnJvclNjb3BlcyYg
ZXJyb3JTY29wZXMpCiB7CiAgICAgLy8gUmVqZWN0IGlmIHJlcXVlc3QgaXMgaW52YWxpZC4KICAg
ICBpZiAoaXNSZWFkICYmICFpc01hcFJlYWRhYmxlKCkpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwg
IkdQVUJ1ZmZlcjo6bWFwUmVhZEFzeW5jKCk6IEludmFsaWQgb3BlcmF0aW9uISIpOworICAgICAg
ICBlcnJvclNjb3Blcy5nZW5lcmF0ZVByZWZpeGVkRXJyb3IoIkludmFsaWQgb3BlcmF0aW9uISIp
OwogICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIWlzUmVhZCAmJiAhaXNNYXBXcml0ZWFibGUoKSkgewotICAgICAgICBMT0coV2ViR1BV
LCAiR1BVQnVmZmVyOjptYXBXcml0ZUFzeW5jKCk6IEludmFsaWQgb3BlcmF0aW9uISIpOworICAg
ICAgICBlcnJvclNjb3Blcy5nZW5lcmF0ZVByZWZpeGVkRXJyb3IoIkludmFsaWQgb3BlcmF0aW9u
ISIpOwogICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTIyNiw3ICsyMTgsNyBAQCBKU0M6OkFycmF5QnVmZmVyKiBHUFVCdWZmZXI6OnN0YWdpbmdC
dWZmZXJGb3JXcml0ZSgpCiAgICAgcmV0dXJuIG1fc3RhZ2luZ0J1ZmZlci5nZXQoKTsKIH0KIAot
dm9pZCBHUFVCdWZmZXI6OmNvcHlTdGFnaW5nQnVmZmVyVG9HUFUoKQordm9pZCBHUFVCdWZmZXI6
OmNvcHlTdGFnaW5nQnVmZmVyVG9HUFUoR1BVRXJyb3JTY29wZXMqIGVycm9yU2NvcGVzKQogewog
ICAgIE1UTENvbW1hbmRRdWV1ZSAqcXVldWU7CiAgICAgaWYgKCFtX2RldmljZS0+dHJ5R2V0UXVl
dWUoKSB8fCAhKHF1ZXVlID0gbV9kZXZpY2UtPnRyeUdldFF1ZXVlKCktPnBsYXRmb3JtUXVldWUo
KSkpCkBAIC0yMzksOCArMjMxLDggQEAgdm9pZCBHUFVCdWZmZXI6OmNvcHlTdGFnaW5nQnVmZmVy
VG9HUFUoKQogICAgIHN0YWdpbmdNdGxCdWZmZXIgPSBhZG9wdE5TKFttX2RldmljZS0+cGxhdGZv
cm1EZXZpY2UoKSBuZXdCdWZmZXJXaXRoTGVuZ3RoOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG1f
Ynl0ZUxlbmd0aCkgb3B0aW9uczpNVExSZXNvdXJjZUNQVUNhY2hlTW9kZURlZmF1bHRDYWNoZV0p
OwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBpZiAoIXN0YWdpbmdNdGxC
dWZmZXIpIHsKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dW5tYXAoKTogVW5hYmxl
IHRvIGNyZWF0ZSBzdGFnaW5nIGJ1ZmZlciEiKTsKKyAgICBpZiAoIXN0YWdpbmdNdGxCdWZmZXIg
JiYgZXJyb3JTY29wZXMpIHsKKyAgICAgICAgZXJyb3JTY29wZXMtPmdlbmVyYXRlRXJyb3IoIiIs
IEdQVUVycm9yRmlsdGVyOjpPdXRPZk1lbW9yeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTI1OCwxMCArMjUwLDEwIEBAIHZvaWQgR1BVQnVmZmVyOjpjb3B5U3RhZ2luZ0J1ZmZlclRv
R1BVKCkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEdQVUJ1ZmZl
cjo6dW5tYXAoKQordm9pZCBHUFVCdWZmZXI6OnVubWFwKEdQVUVycm9yU2NvcGVzKiBlcnJvclNj
b3BlcykKIHsKLSAgICBpZiAoIW1faXNNYXBwZWRGcm9tQ3JlYXRpb24gJiYgIWlzTWFwcGFibGUo
KSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjp1bm1hcCgpOiBJbnZhbGlkIG9w
ZXJhdGlvbjogYnVmZmVyIGlzIG5vdCBtYXBwYWJsZSEiKTsKKyAgICBpZiAoIW1faXNNYXBwZWRG
cm9tQ3JlYXRpb24gJiYgIWlzTWFwcGFibGUoKSAmJiBlcnJvclNjb3BlcykgeworICAgICAgICBl
cnJvclNjb3Blcy0+Z2VuZXJhdGVQcmVmaXhlZEVycm9yKCJJbnZhbGlkIG9wZXJhdGlvbjogR1BV
QnVmZmVyIGlzIG5vdCBtYXBwYWJsZSEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjcxLDcgKzI2Myw3IEBAIHZvaWQgR1BVQnVmZmVyOjp1bm1hcCgpCiAgICAgICAgICAgICBBU1NF
UlQobV9wbGF0Zm9ybUJ1ZmZlciAmJiBtX3BsYXRmb3JtQnVmZmVyLmdldCgpLmNvbnRlbnRzKTsK
ICAgICAgICAgICAgIG1lbWNweShtX3BsYXRmb3JtQnVmZmVyLmdldCgpLmNvbnRlbnRzLCBtX3N0
YWdpbmdCdWZmZXItPmRhdGEoKSwgbV9ieXRlTGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlmICht
X2lzTWFwcGVkRnJvbUNyZWF0aW9uKQotICAgICAgICAgICAgY29weVN0YWdpbmdCdWZmZXJUb0dQ
VSgpOworICAgICAgICAgICAgY29weVN0YWdpbmdCdWZmZXJUb0dQVShlcnJvclNjb3Blcyk7CiAK
ICAgICAgICAgbV9pc01hcHBlZEZyb21DcmVhdGlvbiA9IGZhbHNlOwogICAgICAgICBtX3N0YWdp
bmdCdWZmZXIgPSBudWxscHRyOwpAQCAtMjg0LDEwICsyNzYsMTAgQEAgdm9pZCBHUFVCdWZmZXI6
OnVubWFwKCkKICAgICB9CiB9CiAKLXZvaWQgR1BVQnVmZmVyOjpkZXN0cm95KCkKK3ZvaWQgR1BV
QnVmZmVyOjpkZXN0cm95KEdQVUVycm9yU2NvcGVzKiBlcnJvclNjb3BlcykKIHsKICAgICBpZiAo
c3RhdGUoKSA9PSBTdGF0ZTo6TWFwcGVkKQotICAgICAgICB1bm1hcCgpOworICAgICAgICB1bm1h
cChlcnJvclNjb3Blcyk7CiAKICAgICBtX3BsYXRmb3JtQnVmZmVyID0gbnVsbHB0cjsKIH0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCAyNWQ2NDFmYjZhMGU0ZjJjNzYxMzIxNjBjMmZhNjE5MGExNzJjYTQ2Li41OTFhNDZkNDVl
ZTFmNzM1NjgxNjVmZGJmYWI1MTA1OGEwYjc4MDE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTktMDgtMjcgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KKworICAgICAgICBb
V2ViR1BVXSBJbXBsZW1lbnQgR1BVRXJyb3JzIGZvciBhbmQgcmVsYXggR1BVQnVmZmVyIHZhbGlk
YXRpb24gcnVsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKworICAgICAg
ICBBZGQgYSB0ZXN0IHRvIGVuc3VyZSBHUFVCdWZmZXIgZXJyb3JzIGFyZSBnZW5lcmF0ZWQgcHJv
cGVybHkuCisKKyAgICAgICAgKiB3ZWJncHUvYnVmZmVyLWVycm9ycy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHdlYmdwdS9idWZmZXItZXJyb3JzLmh0bWw6IEFkZGVkLgorCiAyMDE5
LTA4LTI2ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCBmaXggdGVzdCBmYWlsdXJlIGFmdGVyIHIyMDA5NzEKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdwdS9idWZmZXItZXJyb3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmdwdS9idWZmZXItZXJyb3JzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NmJmZDkxYzQ1YmE5
NjIwZmY2NDdmMWJlMTZhMjA1NjU5ZWM3NjQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ3B1L2J1ZmZlci1lcnJvcnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKKwor
UEFTUyBHUFVCdWZmZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggYm90aCByZWFkLW9ubHkgYW5kIFNU
T1JBR0UgdXNhZ2VzLiAKK1BBU1MgdW5tYXAgb24gYWxyZWFkeSB1bm1hcHBlZCwgbWFwcGFibGUg
R1BVQnVmZmVyIHNob3VsZCBub3QgZ2VuZXJhdGUgZXJyb3IuIAorUEFTUyBHUFVCdWZmZXIgY3Jl
YXRlZCB2aWEgY3JlYXRlQnVmZmVyTWFwcGVkIGNhbm5vdCBiZSByZW1hcHBlZC4gCitQQVNTIEdQ
VUJ1ZmZlckRlc2NyaXB0b3Igd2l0aCBib3RoIE1BUF9SRUFEIGFuZCBNQVBfV1JJVEUgdXNhZ2Ug
c2hvdWxkIGZhaWwuIAorUEFTUyBUb28tbGFyZ2UgR1BVQnVmZmVyRGVzY3JpcHRvciBzaXplIHNo
b3VsZCBmYWlsIHdpdGggb3V0LW9mLW1lbW9yeSBlcnJvci4gCitQQVNTIG1hcFJlYWRBc3luYyBv
biBub24tTUFQX1JFQUQgR1BVQnVmZmVyIHNob3VsZCBmYWlsLiAKK1BBU1MgbWFwV3JpdGVBc3lu
YyBvbiBub24tTUFQX1dSSVRFIEdQVUJ1ZmZlciBzaG91bGQgZmFpbC4gCitQQVNTIHVubWFwIG9u
IG5vbi1tYXBwYWJsZSBHUFVCdWZmZXIgc2hvdWxkIGZhaWwuIAorUEFTUyBjcmVhdGVCdWZmZXJN
YXBwZWQ6IG5vbi00LWJ5dGUtYWxpZ25lZCBHUFVCdWZmZXJEZXNyaXB0b3Igc2l6ZSBzaG91bGQg
ZmFpbC4gCitQQVNTIEFueSBtZXRob2QgY2FsbCBvbiBhbiBpbnZhbGlkIEdQVUJ1ZmZlciBzaG91
bGQgZmFpbC4gCitQQVNTIEFueSBtZXRob2QgY2FsbCBvbiBhIGRlc3Ryb3llZCBHUFVCdWZmZXIg
c2hvdWxkIGZhaWwuIAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvYnVmZmVyLWVy
cm9ycy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1lcnJvcnMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kNTA0ZGY0ZjZiMTc2YTk3YTJiMWJhODM5ZTE4MThiZDFiMWJjN2VjCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2J1ZmZlci1lcnJvcnMuaHRtbApAQCAtMCwwICsx
LDE1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPHRpdGxlPlRl
c3QgR1BVQnVmZmVyIEVycm9ycy48L3RpdGxlPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ianMvd2Vi
Z3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2xldCB0ZXN0cyA9IHt9OworCit0
ZXN0c1siR1BVQnVmZmVycyBjYW4gYmUgY3JlYXRlZCB3aXRoIGJvdGggcmVhZC1vbmx5IGFuZCBT
VE9SQUdFIHVzYWdlcy4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgZGV2aWNlLnB1c2hFcnJv
clNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7CisgICAgICAg
IHNpemU6IDQsCisgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5JTkRFWCB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQyB8IEdQVUJ1ZmZlclVz
YWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFCisgICAgfSk7CisgICAgcmV0dXJu
IHBvcE51bGxFcnJvcihkZXZpY2UpOworfTsKKwordGVzdHNbInVubWFwIG9uIGFscmVhZHkgdW5t
YXBwZWQsIG1hcHBhYmxlIEdQVUJ1ZmZlciBzaG91bGQgbm90IGdlbmVyYXRlIGVycm9yLiJdID0g
YXN5bmMgZGV2aWNlID0+IHsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHsKKyAgICAgICAgc2l6ZTogNCwKKyAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9S
RUFEIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQyB8CisgICAgICAg
ICAgICBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfAorICAgICAgICAgICAgR1BVQnVmZmVy
VXNhZ2UuVkVSVEVYIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLklOREVYIHwKKyAgICAg
ICAgICAgIEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfAorICAgICAgICAgICAgR1BVQnVmZmVyVXNh
Z2UuU1RPUkFHRQorICAgIH0pOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0
aW9uIik7CisgICAgYnVmZmVyLnVubWFwKCk7CisgICAgcmV0dXJuIHBvcE51bGxFcnJvcihkZXZp
Y2UpOworfTsKKwordGVzdHNbIkdQVUJ1ZmZlciBjcmVhdGVkIHZpYSBjcmVhdGVCdWZmZXJNYXBw
ZWQgY2Fubm90IGJlIHJlbWFwcGVkLiJdID0gYXN5bmMgZGV2aWNlID0+IHsKKyAgICBkZXZpY2Uu
cHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBjb25zdCBbYnVmZmVyLCBfXSA9IGRl
dmljZS5jcmVhdGVCdWZmZXJNYXBwZWQoeyBzaXplOiA0LCB1c2FnZTogMCB9KTsKKyAgICAvLyBT
aG91bGQgbm90IGZhaWwuCisgICAgYnVmZmVyLnVubWFwKCk7CisgICAgYXdhaXQgcG9wTnVsbEVy
cm9yKGRldmljZSk7CisKKyAgICBkZXZpY2UucHVzaEVycm9yU2NvcGUoInZhbGlkYXRpb24iKTsK
KyAgICAvLyBTaG91bGQgZmFpbC4KKyAgICBidWZmZXIudW5tYXAoKTsKKyAgICBhd2FpdCBwb3BW
YWxpZGF0aW9uRXJyb3IoZGV2aWNlKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFs
aWRhdGlvbiIpOworICAgIC8vIFNob3VsZCBmYWlsLgorICAgIGJ1ZmZlci5tYXBSZWFkQXN5bmMo
KS50aGVuKCgpID0+IHsgYXNzZXJ0X3VucmVhY2hlZCgpOyB9KS5jYXRjaChlID0+IHt9KTsKKyAg
ICByZXR1cm4gcG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7Cit9OworCit0ZXN0c1siR1BVQnVm
ZmVyRGVzY3JpcHRvciB3aXRoIGJvdGggTUFQX1JFQUQgYW5kIE1BUF9XUklURSB1c2FnZSBzaG91
bGQgZmFpbC4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3Bl
KCJ2YWxpZGF0aW9uIik7CisgICAgZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7IHNpemU6IDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB9KTsK
KyAgICByZXR1cm4gcG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7Cit9OworCit0ZXN0c1siVG9v
LWxhcmdlIEdQVUJ1ZmZlckRlc2NyaXB0b3Igc2l6ZSBzaG91bGQgZmFpbCB3aXRoIG91dC1vZi1t
ZW1vcnkgZXJyb3IuIl0gPSBhc3luYyBkZXZpY2UgPT4geworICAgIGRldmljZS5wdXNoRXJyb3JT
Y29wZSgib3V0LW9mLW1lbW9yeSIpOworICAgIGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiA5
OTk5OTk5OTk5OSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk5PTkUgfSk7CisgICAgcmV0dXJuIHBv
cE1lbW9yeUVycm9yKGRldmljZSk7Cit9OworCit0ZXN0c1sibWFwUmVhZEFzeW5jIG9uIG5vbi1N
QVBfUkVBRCBHUFVCdWZmZXIgc2hvdWxkIGZhaWwuIl0gPSBhc3luYyBkZXZpY2UgPT4geworICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeworICAgICAgICBzaXplOiA0LAor
ICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwKKyAgICAgICAgICAgIEdQ
VUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQyB8CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9EU1QgfAorICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwKKyAgICAg
ICAgICAgIEdQVUJ1ZmZlclVzYWdlLklOREVYIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdl
LlVOSUZPUk0gfAorICAgICAgICAgICAgR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRQorICAgIH0pOwor
CisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgYnVmZmVyLm1h
cFJlYWRBc3luYygpLnRoZW4oKCkgPT4geyBhc3NlcnRfdW5yZWFjaGVkKCk7IH0pLmNhdGNoKGUg
PT4ge30pOworICAgIHJldHVybiBwb3BWYWxpZGF0aW9uRXJyb3IoZGV2aWNlKTsKK307CisKK3Rl
c3RzWyJtYXBXcml0ZUFzeW5jIG9uIG5vbi1NQVBfV1JJVEUgR1BVQnVmZmVyIHNob3VsZCBmYWls
LiJdID0gYXN5bmMgZGV2aWNlID0+IHsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHsKKyAgICAgICAgc2l6ZTogNCwKKyAgICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9SRUFEIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQyB8Cisg
ICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfAorICAgICAgICAgICAgR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLklOREVYIHwK
KyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfAorICAgICAgICAgICAgR1BVQnVm
ZmVyVXNhZ2UuU1RPUkFHRQorICAgIH0pOworCisgICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2
YWxpZGF0aW9uIik7CisgICAgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKS50aGVuKCgpID0+IHsgYXNz
ZXJ0X3VucmVhY2hlZCgpOyB9KS5jYXRjaChlID0+IHt9KTsKKyAgICByZXR1cm4gcG9wVmFsaWRh
dGlvbkVycm9yKGRldmljZSk7Cit9OworCit0ZXN0c1sidW5tYXAgb24gbm9uLW1hcHBhYmxlIEdQ
VUJ1ZmZlciBzaG91bGQgZmFpbC4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAgY29uc3QgYnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7CisgICAgICAgIHNpemU6IDQsCisgICAgICAgIHVz
YWdlOiBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkMgfAorICAgICAgICAgICAgR1BVQnVmZmVy
VXNhZ2UuVFJBTlNGRVJfRFNUIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
CisgICAgICAgICAgICBHUFVCdWZmZXJVc2FnZS5JTkRFWCB8CisgICAgICAgICAgICBHUFVCdWZm
ZXJVc2FnZS5VTklGT1JNIHwKKyAgICAgICAgICAgIEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UKKyAg
ICB9KTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGJ1
ZmZlci51bm1hcCgpOworICAgIHJldHVybiBwb3BWYWxpZGF0aW9uRXJyb3IoZGV2aWNlKTsKK307
CisKK3Rlc3RzWyJjcmVhdGVCdWZmZXJNYXBwZWQ6IG5vbi00LWJ5dGUtYWxpZ25lZCBHUFVCdWZm
ZXJEZXNyaXB0b3Igc2l6ZSBzaG91bGQgZmFpbC4iXSA9IGFzeW5jIGRldmljZSA9PiB7CisgICAg
ZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgZGV2aWNlLmNyZWF0ZUJ1
ZmZlck1hcHBlZCh7IHNpemU6IDUsIHVzYWdlOiAwIH0pOworICAgIHJldHVybiBwb3BWYWxpZGF0
aW9uRXJyb3IoZGV2aWNlKTsKK307CisKK3Rlc3RzWyJBbnkgbWV0aG9kIGNhbGwgb24gYW4gaW52
YWxpZCBHUFVCdWZmZXIgc2hvdWxkIGZhaWwuIl0gPSBhc3luYyBkZXZpY2UgPT4geworICAgIGNv
bnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiA0LCB1c2FnZTogR1BVQnVm
ZmVyVXNhZ2UuTUFQX1JFQUQgfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfSk7CisgICAgcmV0
dXJuIGFzc2VydEFsbEJ1ZmZlck1ldGhvZHNGYWlsKGRldmljZSwgYnVmZmVyKTsKK307CisKK3Rl
c3RzWyJBbnkgbWV0aG9kIGNhbGwgb24gYSBkZXN0cm95ZWQgR1BVQnVmZmVyIHNob3VsZCBmYWls
LiJdID0gYXN5bmMgZGV2aWNlID0+IHsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHsgc2l6ZTogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEIH0pOworCisg
ICAgZGV2aWNlLnB1c2hFcnJvclNjb3BlKCJ2YWxpZGF0aW9uIik7CisgICAgYnVmZmVyLmRlc3Ry
b3koKTsKKyAgICBhd2FpdCBwb3BOdWxsRXJyb3IoZGV2aWNlKTsKKworICAgIHJldHVybiBhc3Nl
cnRBbGxCdWZmZXJNZXRob2RzRmFpbChkZXZpY2UsIGJ1ZmZlcik7Cit9OworCitjb25zdCBhc3Nl
cnRBbGxCdWZmZXJNZXRob2RzRmFpbCA9IGFzeW5jIChkZXZpY2UsIGJ1ZmZlcikgPT4geworICAg
IGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGJ1ZmZlci5tYXBSZWFk
QXN5bmMoKS50aGVuKCgpID0+IHsgYXNzZXJ0X3VucmVhY2hlZCgpOyB9KS5jYXRjaChlID0+IHt9
KTsKKyAgICBhd2FpdCBwb3BWYWxpZGF0aW9uRXJyb3IoZGV2aWNlKTsKKworICAgIGRldmljZS5w
dXNoRXJyb3JTY29wZSgidmFsaWRhdGlvbiIpOworICAgIGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCku
dGhlbigoKSA9PiB7IGFzc2VydF91bnJlYWNoZWQoKTsgfSkuY2F0Y2goZSA9PiB7fSk7CisgICAg
YXdhaXQgcG9wVmFsaWRhdGlvbkVycm9yKGRldmljZSk7CisKKyAgICBkZXZpY2UucHVzaEVycm9y
U2NvcGUoInZhbGlkYXRpb24iKTsKKyAgICBidWZmZXIudW5tYXAoKTsKKyAgICBhd2FpdCBwb3BW
YWxpZGF0aW9uRXJyb3IoZGV2aWNlKTsKKworICAgIGRldmljZS5wdXNoRXJyb3JTY29wZSgidmFs
aWRhdGlvbiIpOworICAgIGJ1ZmZlci5kZXN0cm95KCk7CisgICAgcmV0dXJuIHBvcFZhbGlkYXRp
b25FcnJvcihkZXZpY2UpOworfTsKKworcnVuVGVzdHNXaXRoRGV2aWNlKHRlc3RzKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="commit-queue"
          id="393154"
          type_id="3"
          status="-"
          setter="justin_fan"
    />
          </attachment>
      

    </bug>

</bugzilla>