<?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>196758</bug_id>
          
          <creation_ts>2019-04-09 19:00:32 -0700</creation_ts>
          <short_desc>[Web GPU] Indexed drawing and GPUCommandEncoder crash prevention</short_desc>
          <delta_ts>2019-04-10 13:49:32 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Fan">justin_fan</reporter>
          <assigned_to name="Justin Fan">justin_fan</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1525852</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-09 19:00:32 -0700</bug_when>
    <thetext>[Web GPU] Indexed drawing and GPUCommandEncoder crash prevention</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525856</commentid>
    <comment_count>1</comment_count>
      <attachid>367096</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-09 19:15:24 -0700</bug_when>
    <thetext>Created attachment 367096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526042</commentid>
    <comment_count>2</comment_count>
      <attachid>367096</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-04-10 11:49:33 -0700</bug_when>
    <thetext>Comment on attachment 367096
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +

Please give a summary of what you did.

&gt; Source/WebCore/Modules/webgpu/WebGPUCommandEncoder.cpp:171
&gt; +    if (!m_commandBuffer || m_commandBuffer-&gt;isEncodingPass()) {
&gt;          LOG(WebGPU, &quot;WebGPUCommandEncoder::finish(): Invalid operation!&quot;);

I wonder if we should give a better error message for this case.

e.g. &quot;Unable to finish encoder because it&apos;s still encoding&quot; or something.

Also, can you write a test for this case?

&gt; Source/WebCore/Modules/webgpu/WebGPURenderPassEncoder.cpp:130
&gt; +    for (auto&amp; buffer : buffers) {

Why can&apos;t this be const?

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:98
&gt; +    if (isEncodingPass() || !src-&gt;isTransferSource() || !dst-&gt;isTransferDestination()) {

Again, it would be nice to have a more clear message here, as well as tests.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:254
&gt; +    if (offset &gt;= buffer.byteLength() || offset % 4) {
&gt; +        LOG(WebGPU, &quot;GPURenderPassEncoder::setIndexBuffer(): Invalid offset!&quot;);
&gt; +        return;
&gt; +    }

Another case where we should have separate messages and tests.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:528
&gt; +

Nit: blank line

&gt; LayoutTests/webgpu/draw-indexed-triangles.html:51
&gt; +        // float4 xyzw, float g
&gt; +        -1, 1, 0, 1, 1,
&gt; +        -1, -1, 0, 1, 1,
&gt; +        1, 1, 0, 1, 1,
&gt; +        1, -1, 0, 1, 1
&gt; +    ]);

You could put a few non-green values in there to enhance the test (or do it in a separate test). e.g.

1, 1, 0, 1, 0

&gt; LayoutTests/webgpu/draw-indexed-triangles.html:59
&gt; +const indexBufferOffset = 2048;
&gt; +const indexOffset = -9001;

Can you write some comments explaining what you&apos;re trying to test here?

&gt; LayoutTests/webgpu/draw-indexed-triangles.html:65
&gt; +    const indexArray = new Uint32Array([0, 1, 2, 1, 2, 3]);
&gt; +    indexArray.forEach((value, index) =&gt; {
&gt; +        indexArray[index] = value - indexOffset;
&gt; +    });

I guess this works, but seems a bit scary - changing values from inside an iterator. It might be better as something like:

const indexArray = new Uint32Array([0, 1, 2, 1, 2, 3].map(v =&gt; { v - indexOffset; }));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526080</commentid>
    <comment_count>3</comment_count>
      <attachid>367150</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-10 13:09:42 -0700</bug_when>
    <thetext>Created attachment 367150
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526103</commentid>
    <comment_count>4</comment_count>
      <attachid>367150</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-10 13:48:44 -0700</bug_when>
    <thetext>Comment on attachment 367150
Patch for landing

Clearing flags on attachment: 367150

Committed r244147: &lt;https://trac.webkit.org/changeset/244147&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526104</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-10 13:48:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526107</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-10 13:49:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/49788715&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367096</attachid>
            <date>2019-04-09 19:15:24 -0700</date>
            <delta_ts>2019-04-10 13:09:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196758-20190409191523.patch</filename>
            <type>text/plain</type>
            <size>28484</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThhZDRlNjBlMTZhMjU5
ZjIwZTI4YjM1N2FjMzU2MGNiOWFmYmI5YS4uMjEyZTkzZTg1NGQ5Yjg2ODYzYTg1NWEyZWE1YWE0
ZGIxNDdjYzQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE5LTA0LTA5ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEluZGV4
ZWQgZHJhd2luZyBhbmQgR1BVQ29tbWFuZEVuY29kZXIgY3Jhc2ggcHJldmVudGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NzU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViZ3B1L2Ry
YXctaW5kZXhlZC10cmlhbmdsZXMuaHRtbAorCisKKyAgICAgICAgUHJldmVudCBhY3RpdmUgR1BV
Q29tbWFuZEVuY29kZXJzIGZyb20gYmVpbmcgc3VibWl0dGVkIG9yIGVuY29kaW5nIGJsaXQgY29t
bWFuZHM6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEVuY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BVQ29tbWFuZEVuY29kZXI6OmZpbmlzaCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9UZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9C
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVU
b1RleHR1cmUpOgorCisgICAgICAgIEltcGxlbWVudCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0
SW5kZXhCdWZmZXIgYW5kIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnMp
OiBSZW1vdmUgdW5uZWNlc3NhcnkgbW92ZSBvcGVyYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXdJbmRleGVkKTogQWRkZWQuCisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5pZGw6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVy
Ojppc0luZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVSW5w
dXRTdGF0ZURlc2NyaXB0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
UmVuZGVyUGFzc0VuY29kZXIuaDogQ2FjaGUgdGhlIGluZGV4IGJ1ZmZlciwgYXMgTWV0YWwgZG9l
cyBub3Qgc2V0IHRoZSBpbmRleCBidWZmZXIgc2VwYXJhdGUgZnJvbSB0aGUgZHJhdyBjYWxsLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQaXBlbGluZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGlwZWxpbmU6OmluZGV4Rm9ybWF0IGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJN
ZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRJbmRl
eEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVy
dGV4QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjptdGxQcmltaXRpdmVUeXBlRm9yR1BVUHJp
bWl0aXZlVG9wb2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6
OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6bXRsSW5kZXhUeXBlRm9yR1BVSW5kZXhGb3JtYXQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5k
ZXhlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJpbWl0aXZlVHlwZUZvckdQVVByaW1p
dGl2ZVRvcG9sb2d5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJl
bmRlclBpcGVsaW5lOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGlw
ZWxpbmU6OkdQVVJlbmRlclBpcGVsaW5lKToKKwogMjAxOS0wNC0wOSAgSnVzdGluIEZhbiAgPGp1
c3Rpbl9mYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgR1BVXSBHUFVSZW5kZXJQYXNzRW5j
b2RlciB1cGRhdGVzOiBzZXRCbGVuZENvbG9yLCBzZXRWaWV3cG9ydCwgc2V0U2Npc3NvclJlY3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1hbmRF
bmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1hbmRF
bmNvZGVyLmNwcAppbmRleCBjMTEzYTk4OTRlM2Q1MDIyNmE1OTdhMDRjNjMxMmE5MjI3ZjA1ZGY4
Li4wNzRiZDA5Zjc5YThiYmVhOTU1ZDBiNzY2Mjc0N2RlYzlhYzFmOWFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kRW5jb2Rlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEVuY29kZXIuY3Bw
CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBXZWJHUFVDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1
cmVUb1RleHR1cmUoY29uc3QgV2ViR1BVVGV4dHVyZUNvcHlWaWV3JiBzcmMKICAgICAKIFJlZjxX
ZWJHUFVDb21tYW5kQnVmZmVyPiBXZWJHUFVDb21tYW5kRW5jb2Rlcjo6ZmluaXNoKCkKIHsKLSAg
ICBpZiAoIW1fY29tbWFuZEJ1ZmZlcikgeworICAgIGlmICghbV9jb21tYW5kQnVmZmVyIHx8IG1f
Y29tbWFuZEJ1ZmZlci0+aXNFbmNvZGluZ1Bhc3MoKSkgewogICAgICAgICBMT0coV2ViR1BVLCAi
V2ViR1BVQ29tbWFuZEVuY29kZXI6OmZpbmlzaCgpOiBJbnZhbGlkIG9wZXJhdGlvbiEiKTsKICAg
ICAgICAgcmV0dXJuIFdlYkdQVUNvbW1hbmRCdWZmZXI6OmNyZWF0ZShudWxscHRyKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQ
YXNzRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5k
ZXJQYXNzRW5jb2Rlci5jcHAKaW5kZXggMzA1OTFmNjY0ZTE3NzA1MmQ2YWY3MDBmNTc0NjRmZTY3
YjUwY2JiZC4uMGJmN2EwZDQwZmZhZmM0YWI0NDJiMWI0MzU5ODZhZTJlMjRjOWU0MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBh
c3NFbmNvZGVyLmNwcApAQCAtOTIsNyArOTIsMjEgQEAgdm9pZCBXZWJHUFVSZW5kZXJQYXNzRW5j
b2Rlcjo6c2V0U2Npc3NvclJlY3QodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2kK
ICAgICBtX3Bhc3NFbmNvZGVyLT5zZXRTY2lzc29yUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
IH0KIAotdm9pZCBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVycyh1bnNp
Z25lZCBzdGFydFNsb3QsIFZlY3RvcjxSZWZQdHI8V2ViR1BVQnVmZmVyPj4mJiBidWZmZXJzLCBW
ZWN0b3I8dWludDY0X3Q+JiYgb2Zmc2V0cykKK3ZvaWQgV2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6
OnNldEluZGV4QnVmZmVyKFdlYkdQVUJ1ZmZlciYgYnVmZmVyLCB1aW50NjRfdCBvZmZzZXQpCit7
CisgICAgaWYgKCFtX3Bhc3NFbmNvZGVyKSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5k
ZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIoKTogSW52YWxpZCBvcGVyYXRpb24hIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFidWZmZXIuYnVmZmVyKCkgfHwgIWJ1ZmZl
ci5idWZmZXIoKS0+aXNJbmRleCgpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQ
YXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIoKTogSW52YWxpZCBHUFVCdWZmZXIhIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Bhc3NFbmNvZGVyLT5zZXRJbmRleEJ1ZmZlcigq
YnVmZmVyLmJ1ZmZlcigpLCBvZmZzZXQpOworfQorCit2b2lkIFdlYkdQVVJlbmRlclBhc3NFbmNv
ZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIHN0YXJ0U2xvdCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxXZWJHUFVCdWZmZXI+PiYgYnVmZmVycywgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgb2Zm
c2V0cykKIHsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rp
b25OYW1lID0gIkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKCkiOwpAQCAt
MTEzLDcgKzEyNyw3IEBAIHZvaWQgV2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1
ZmZlcnModW5zaWduZWQgc3RhcnRTbG90LCBWZWN0b3I8UmVmUHRyCiAgICAgVmVjdG9yPFJlZjxH
UFVCdWZmZXI+PiBncHVCdWZmZXJzOwogICAgIGdwdUJ1ZmZlcnMucmVzZXJ2ZUNhcGFjaXR5KGJ1
ZmZlcnMuc2l6ZSgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgYnVmZmVyIDogYnVmZmVycykg
eworICAgIGZvciAoYXV0byYgYnVmZmVyIDogYnVmZmVycykgewogICAgICAgICBpZiAoIWJ1ZmZl
ciB8fCAhYnVmZmVyLT5idWZmZXIoKSkgewogICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJ
bnZhbGlkIG9yIGRlc3Ryb3llZCBidWZmZXIgaW4gbGlzdCEiLCBmdW5jdGlvbk5hbWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI3LDcgKzE0MSw3IEBAIHZvaWQgV2ViR1BVUmVuZGVyUGFz
c0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQgc3RhcnRTbG90LCBWZWN0b3I8UmVm
UHRyCiAgICAgICAgIGdwdUJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VSZWYoKmJ1ZmZlci0+
YnVmZmVyKCkpKTsKICAgICB9CiAKLSAgICBtX3Bhc3NFbmNvZGVyLT5zZXRWZXJ0ZXhCdWZmZXJz
KHN0YXJ0U2xvdCwgV1RGTW92ZShncHVCdWZmZXJzKSwgV1RGTW92ZShvZmZzZXRzKSk7CisgICAg
bV9wYXNzRW5jb2Rlci0+c2V0VmVydGV4QnVmZmVycyhzdGFydFNsb3QsIGdwdUJ1ZmZlcnMsIG9m
ZnNldHMpOwogfQogCiB2b2lkIFdlYkdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3KHVuc2lnbmVk
IHZlcnRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdFZlcnRl
eCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSkKQEAgLTE0MCw2ICsxNTQsMTYgQEAgdm9pZCBXZWJH
UFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhdyh1bnNpZ25lZCB2ZXJ0ZXhDb3VudCwgdW5zaWduZWQg
aW5zdGFuY2VDb3VudCwKICAgICBtX3Bhc3NFbmNvZGVyLT5kcmF3KHZlcnRleENvdW50LCBpbnN0
YW5jZUNvdW50LCBmaXJzdFZlcnRleCwgZmlyc3RJbnN0YW5jZSk7CiB9CiAKK3ZvaWQgV2ViR1BV
UmVuZGVyUGFzc0VuY29kZXI6OmRyYXdJbmRleGVkKHVuc2lnbmVkIGluZGV4Q291bnQsIHVuc2ln
bmVkIGluc3RhbmNlQ291bnQsIHVuc2lnbmVkIGZpcnN0SW5kZXgsIGludCBiYXNlVmVydGV4LCB1
bnNpZ25lZCBmaXJzdEluc3RhbmNlKQoreworICAgIGlmICghbV9wYXNzRW5jb2RlcikgeworICAg
ICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcoKTogSW52YWxpZCBv
cGVyYXRpb24hIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IEFkZCBX
ZWIgR1BVIHZhbGlkYXRpb24uCisgICAgbV9wYXNzRW5jb2Rlci0+ZHJhd0luZGV4ZWQoaW5kZXhD
b3VudCwgaW5zdGFuY2VDb3VudCwgZmlyc3RJbmRleCwgYmFzZVZlcnRleCwgZmlyc3RJbnN0YW5j
ZSk7Cit9CisKIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKiBXZWJHUFVSZW5kZXJQYXNzRW5j
b2Rlcjo6cGFzc0VuY29kZXIoKQogewogICAgIHJldHVybiBtX3Bhc3NFbmNvZGVyLmdldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFz
c0VuY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBh
c3NFbmNvZGVyLmgKaW5kZXggNjYyMjQwZmU1NzBkYThhZTE5NGI3Y2EyMjY2MjM4NTUyMzZhMGQ5
NC4uZjhjMDJhYmE3OGFlYzhhZTJhZjE2N2IyNTBjNTkxZGQxOTQ4MzE5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
ci5oCkBAIC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCbGVuZENvbG9yKGNv
bnN0IEdQVUNvbG9yJik7CiAgICAgdm9pZCBzZXRWaWV3cG9ydChmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBtaW5EZXB0aCwgZmxvYXQgbWF4RGVwdGgp
OwogICAgIHZvaWQgc2V0U2Npc3NvclJlY3QodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0gICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXJzKHVu
c2lnbmVkLCBWZWN0b3I8UmVmUHRyPFdlYkdQVUJ1ZmZlcj4+JiYsIFZlY3Rvcjx1aW50NjRfdD4m
Jik7CisgICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihXZWJHUFVCdWZmZXImLCB1aW50NjRfdCBvZmZz
ZXQpOworICAgIHZvaWQgc2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBzdGFydFNsb3QsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8V2ViR1BVQnVmZmVyPj4mLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBv
ZmZzZXRzKTsKICAgICB2b2lkIGRyYXcodW5zaWduZWQgdmVydGV4Q291bnQsIHVuc2lnbmVkIGlu
c3RhbmNlQ291bnQsIHVuc2lnbmVkIGZpcnN0VmVydGV4LCB1bnNpZ25lZCBmaXJzdEluc3RhbmNl
KTsKKyAgICB2b2lkIGRyYXdJbmRleGVkKHVuc2lnbmVkIGluZGV4Q291bnQsIHVuc2lnbmVkIGlu
c3RhbmNlQ291bnQsIHVuc2lnbmVkIGZpcnN0SW5kZXgsIGludCBiYXNlVmVydGV4LCB1bnNpZ25l
ZCBmaXJzdEluc3RhbmNlKTsKIAogcHJpdmF0ZToKICAgICBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rl
cihSZWZQdHI8R1BVUmVuZGVyUGFzc0VuY29kZXI+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaWRsCmluZGV4
IGE2ZTgxOWEzNzM2Zjg0YjE4ZDgwM2RkOWMxNzlmOWRjOGFlODI4MzEuLjJiODU1OTFiZWIzYmFj
NjNjYjliN2U1NTMzMGQwOTg4N2IyMzM0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5pZGwKQEAgLTI0LDYg
KzI0LDcgQEAKICAqLwogLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxvYi9t
YXN0ZXIvZGVzaWduL3NrZXRjaC53ZWJpZGwKIAordHlwZWRlZiBsb25nIGkzMjsKIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyB1MzI7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CiAKQEAg
LTQyLDE1ICs0MywxMyBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CiAgICAgLy8g
V2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiBPdGhlcndpc2UsIGFuIGVy
cm9yIHdpbGwgYmUgZ2VuZXJhdGVkLgogICAgIHZvaWQgc2V0U2Npc3NvclJlY3QodTMyIHgsIHUz
MiB5LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpOwogCisgICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihX
ZWJHUFVCdWZmZXIgYnVmZmVyLCB1NjQgb2Zmc2V0KTsKICAgICB2b2lkIHNldFZlcnRleEJ1ZmZl
cnModTMyIHN0YXJ0U2xvdCwgc2VxdWVuY2U8V2ViR1BVQnVmZmVyPiBidWZmZXJzLCBzZXF1ZW5j
ZTx1NjQ+IG9mZnNldHMpOwogCiAgICAgdm9pZCBkcmF3KHUzMiB2ZXJ0ZXhDb3VudCwgdTMyIGlu
c3RhbmNlQ291bnQsIHUzMiBmaXJzdFZlcnRleCwgdTMyIGZpcnN0SW5zdGFuY2UpOwotCi0vKiBO
b3QgWWV0IEltcGxlbWVudGVkCi0gICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihXZWJHUFVCdWZmZXIg
YnVmZmVyLCB1NjQgb2Zmc2V0KTsKLQogICAgIHZvaWQgZHJhd0luZGV4ZWQodTMyIGluZGV4Q291
bnQsIHUzMiBpbnN0YW5jZUNvdW50LCB1MzIgZmlyc3RJbmRleCwgaTMyIGJhc2VWZXJ0ZXgsIHUz
MiBmaXJzdEluc3RhbmNlKTsKIAotICAgIC8vIFRPRE8gYWRkIG1pc3NpbmcgY29tbWFuZHMKKy8q
IE5vdCBZZXQgSW1wbGVtZW50ZWQKKyAgICB2b2lkIHNldFN0ZW5jaWxSZWZlcmVuY2UodTMyIHJl
ZmVyZW5jZSk7CiAqLwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HUFVCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVCdWZmZXIuaAppbmRleCAxODlkOGQ0MDBkNTQyMjU3Y2E5NDg1MjNhMDVkY2JlNzBi
ZGNjMWY3Li41NWRiZWE5NmNkZGM1N2YzMmRkNGQwZDZhYzU2NzQ4MDNmYmFkNDcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCkBAIC03
NCw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBieXRlTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlTGVuZ3RoOyB9CiAgICAgYm9vbCBpc1RyYW5zZmVyU291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV91c2FnZS5jb250YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlRyYW5zZmVy
U291cmNlKTsgfQogICAgIGJvb2wgaXNUcmFuc2ZlckRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV91c2FnZS5jb250YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlRyYW5zZmVyRGVzdGlu
YXRpb24pOyB9CisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QgeyByZXR1cm4gbV91c2FnZS5jb250
YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OkluZGV4KTsgfQogICAgIGJvb2wgaXNWZXJ0ZXgo
KSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6
VmVydGV4KTsgfQogICAgIGJvb2wgaXNVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV91c2FnZS5j
b250YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlVuaWZvcm0pOyB9CiAgICAgYm9vbCBpc1N0
b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpG
bGFnczo6U3RvcmFnZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HUFVJbnB1dFN0YXRlRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUlucHV0U3RhdGVEZXNjcmlwdG9yLmgKaW5kZXggMDUwMjMz
NmUxMDZhNmMwMjdiMzc3ZWI4YzY3OGJkOTNkNmE1ZWNiMy4uMDJhNjUzOGNlNzU1ZmE0MTQzZDlk
NzU4ZTlmNTg5OGM5ODBkYWVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVUlucHV0U3RhdGVEZXNjcmlwdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUlucHV0U3RhdGVEZXNjcmlwdG9yLmgKQEAgLTM5
LDcgKzM5LDcgQEAgZW51bSBjbGFzcyBHUFVJbmRleEZvcm1hdCB7CiB9OwogCiBzdHJ1Y3QgR1BV
SW5wdXRTdGF0ZURlc2NyaXB0b3IgewotICAgIEdQVUluZGV4Rm9ybWF0IGluZGV4Rm9ybWF0Owor
ICAgIE9wdGlvbmFsPEdQVUluZGV4Rm9ybWF0PiBpbmRleEZvcm1hdDsKIAogICAgIFZlY3RvcjxH
UFVWZXJ0ZXhBdHRyaWJ1dGVEZXNjcmlwdG9yPiBhdHRyaWJ1dGVzOwogICAgIFZlY3RvcjxHUFVW
ZXJ0ZXhJbnB1dERlc2NyaXB0b3I+IGlucHV0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKaW5kZXgg
YmRjNjUwY2I4NTU2YTZiMmIzZTNhYTgxZDkxZWJlMzE3MDgzMjc0OC4uNDFlM2M0YjliN2NkMGM5
NzJhNGRlMjYyYWUzMmYyNDY0YmQxOGIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKQEAgLTU2
LDggKzU2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJsZW5kQ29sb3IoY29uc3QgR1BVQ29s
b3ImKTsKICAgICB2b2lkIHNldFZpZXdwb3J0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIGZsb2F0IG1pbkRlcHRoLCBmbG9hdCBtYXhEZXB0aCk7CiAgICAgdm9p
ZCBzZXRTY2lzc29yUmVjdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KTsKLSAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQsIFZl
Y3RvcjxSZWY8R1BVQnVmZmVyPj4mJiwgVmVjdG9yPHVpbnQ2NF90PiYmKTsKKyAgICB2b2lkIHNl
dEluZGV4QnVmZmVyKEdQVUJ1ZmZlciYsIHVpbnQ2NF90IG9mZnNldCk7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+
JiwgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgb2Zmc2V0cyk7CiAgICAgdm9pZCBkcmF3KHVuc2ln
bmVkIHZlcnRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdFZl
cnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSk7CisgICAgdm9pZCBkcmF3SW5kZXhlZCh1bnNp
Z25lZCBpbmRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdElu
ZGV4LCBpbnQgYmFzZVZlcnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSk7CiAKIHByaXZhdGU6
CiAgICAgR1BVUmVuZGVyUGFzc0VuY29kZXIoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYsIFBsYXRm
b3JtUmVuZGVyUGFzc0VuY29kZXJTbWFydFB0ciYmKTsKQEAgLTcwLDYgKzcyLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHVzZVJlc291cmNlKGNvbnN0IE1UTFJlc291cmNlICosIHVuc2lnbmVkIHVz
YWdlKSBmaW5hbDsKICAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcihjb25zdCBNVExCdWZmZXIgKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbmRleCkgZmluYWw7CiAgICAgdm9pZCBzZXRGcmFn
bWVudEJ1ZmZlcihjb25zdCBNVExCdWZmZXIgKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBp
bmRleCkgZmluYWw7CisKKyAgICBSZWZQdHI8R1BVQnVmZmVyPiBtX2luZGV4QnVmZmVyOworICAg
IHVpbnQ2NF90IG1faW5kZXhCdWZmZXJPZmZzZXQ7CiAjZW5kaWYgLy8gVVNFKE1FVEFMKQogCiAg
ICAgUGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlclNtYXJ0UHRyIG1fcGxhdGZvcm1SZW5kZXJQYXNz
RW5jb2RlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9HUFVSZW5kZXJQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVVJlbmRlclBpcGVsaW5lLmgKaW5kZXggOTZkODFjZGI0ZmRhNzlhMTRlNjhmMjk5NDVi
NzA1YTE3M2NlODYzMS4uNmUxNjUzMmE5NWQ1ZmQ5YjhkMjMzNjI0MGVjMmMxODgwYzY5MmU5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRl
clBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVJlbmRlclBpcGVsaW5lLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQog
CiAjaW5jbHVkZSAiR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNTMsMTUgKzU0LDE3IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmUqIHBsYXRmb3JtUmVu
ZGVyUGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtUmVuZGVyUGlwZWxpbmUuZ2V0
KCk7IH0KICAgICBHUFVQcmltaXRpdmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJpbWl0aXZlVG9wb2xvZ3k7IH0KKyAgICBPcHRpb25hbDxHUFVJbmRleEZv
cm1hdD4gaW5kZXhGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4Rm9ybWF0OyB9CiAKIHBy
aXZhdGU6CiAjaWYgVVNFKE1FVEFMKQotICAgIEdQVVJlbmRlclBpcGVsaW5lKFJldGFpblB0cjxN
VExEZXB0aFN0ZW5jaWxTdGF0ZT4mJiwgUGxhdGZvcm1SZW5kZXJQaXBlbGluZVNtYXJ0UHRyJiYs
IEdQVVByaW1pdGl2ZVRvcG9sb2d5KTsKKyAgICBHUFVSZW5kZXJQaXBlbGluZShSZXRhaW5QdHI8
TVRMRGVwdGhTdGVuY2lsU3RhdGU+JiYsIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmVTbWFydFB0ciYm
LCBHUFVQcmltaXRpdmVUb3BvbG9neSwgT3B0aW9uYWw8R1BVSW5kZXhGb3JtYXQ+KTsKIAogICAg
IFJldGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gbV9kZXB0aFN0ZW5jaWxTdGF0ZTsKICNl
bmRpZiAvLyBVU0UoTUVUQUwpCiAgICAgUGxhdGZvcm1SZW5kZXJQaXBlbGluZVNtYXJ0UHRyIG1f
cGxhdGZvcm1SZW5kZXJQaXBlbGluZTsKICAgICBHUFVQcmltaXRpdmVUb3BvbG9neSBtX3ByaW1p
dGl2ZVRvcG9sb2d5OworICAgIE9wdGlvbmFsPEdQVUluZGV4Rm9ybWF0PiBtX2luZGV4Rm9ybWF0
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21tYW5kQnVm
ZmVyTWV0YWwubW0KaW5kZXggZGEyMWQyNGVjNzIzNjlhM2IxODU1M2IwOTJlMDBiOWYwMDA3Mjk1
YS4uN2ViZDViZjI2ODRkZDk5Y2E2MDNkNjg0YzUxODZjYjBjNjg0MTg1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZm
ZXJNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVQ29tbWFuZEJ1ZmZlck1ldGFsLm1tCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgR1BVQ29t
bWFuZEJ1ZmZlcjo6ZW5kQmxpdEVuY29kaW5nKCkKIAogdm9pZCBHUFVDb21tYW5kQnVmZmVyOjpj
b3B5QnVmZmVyVG9CdWZmZXIoUmVmPEdQVUJ1ZmZlcj4mJiBzcmMsIHVpbnQ2NF90IHNyY09mZnNl
dCwgUmVmPEdQVUJ1ZmZlcj4mJiBkc3QsIHVpbnQ2NF90IGRzdE9mZnNldCwgdWludDY0X3Qgc2l6
ZSkKIHsKLSAgICBpZiAoIXNyYy0+aXNUcmFuc2ZlclNvdXJjZSgpIHx8ICFkc3QtPmlzVHJhbnNm
ZXJEZXN0aW5hdGlvbigpKSB7CisgICAgaWYgKGlzRW5jb2RpbmdQYXNzKCkgfHwgIXNyYy0+aXNU
cmFuc2ZlclNvdXJjZSgpIHx8ICFkc3QtPmlzVHJhbnNmZXJEZXN0aW5hdGlvbigpKSB7CiAgICAg
ICAgIExPRyhXZWJHUFUsICJHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoKTog
SW52YWxpZCBvcGVyYXRpb24hIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzIsNyAr
MTMyLDcgQEAgdm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoUmVmPEdQ
VUJ1ZmZlcj4mJiBzcmMsIHVpbnQ2NF90IHNyY09mZnMKIAogdm9pZCBHUFVDb21tYW5kQnVmZmVy
Ojpjb3B5QnVmZmVyVG9UZXh0dXJlKEdQVUJ1ZmZlckNvcHlWaWV3JiYgc3JjQnVmZmVyLCBHUFVU
ZXh0dXJlQ29weVZpZXcmJiBkc3RUZXh0dXJlLCBjb25zdCBHUFVFeHRlbnQzRCYgc2l6ZSkKIHsK
LSAgICBpZiAoIXNyY0J1ZmZlci5idWZmZXItPmlzVHJhbnNmZXJTb3VyY2UoKSB8fCAhZHN0VGV4
dHVyZS50ZXh0dXJlLT5pc1RyYW5zZmVyRGVzdGluYXRpb24oKSkgeworICAgIGlmIChpc0VuY29k
aW5nUGFzcygpIHx8ICFzcmNCdWZmZXIuYnVmZmVyLT5pc1RyYW5zZmVyU291cmNlKCkgfHwgIWRz
dFRleHR1cmUudGV4dHVyZS0+aXNUcmFuc2ZlckRlc3RpbmF0aW9uKCkpIHsKICAgICAgICAgTE9H
KFdlYkdQVSwgIkdQVUNvbWFuZEJ1ZmZlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSgpOiBJbnZhbGlk
IG9wZXJhdGlvbiEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MCw3ICsxNzAsNyBA
QCB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb1RleHR1cmUoR1BVQnVmZmVyQ29w
eVZpZXcmJiBzcmNCdWZmZXIsIEdQVVRleAogCiB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlU
ZXh0dXJlVG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3JiYgc3JjVGV4dHVyZSwgR1BVQnVmZmVy
Q29weVZpZXcmJiBkc3RCdWZmZXIsIGNvbnN0IEdQVUV4dGVudDNEJiBzaXplKQogewotICAgIGlm
ICghc3JjVGV4dHVyZS50ZXh0dXJlLT5pc1RyYW5zZmVyU291cmNlKCkgfHwgIWRzdEJ1ZmZlci5i
dWZmZXItPmlzVHJhbnNmZXJEZXN0aW5hdGlvbigpKSB7CisgICAgaWYgKGlzRW5jb2RpbmdQYXNz
KCkgfHwgIXNyY1RleHR1cmUudGV4dHVyZS0+aXNUcmFuc2ZlclNvdXJjZSgpIHx8ICFkc3RCdWZm
ZXIuYnVmZmVyLT5pc1RyYW5zZmVyRGVzdGluYXRpb24oKSkgewogICAgICAgICBMT0coV2ViR1BV
LCAiR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb0J1ZmZlcigpOiBJbnZhbGlkIG9wZXJh
dGlvbiEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lk
IEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3
JiYgc3JjVGV4dHVyZSwgR1BVQgogCiB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJl
VG9UZXh0dXJlKEdQVVRleHR1cmVDb3B5VmlldyYmIHNyYywgR1BVVGV4dHVyZUNvcHlWaWV3JiYg
ZHN0LCBjb25zdCBHUFVFeHRlbnQzRCYgc2l6ZSkKIHsKLSAgICBpZiAoIXNyYy50ZXh0dXJlLT5p
c1RyYW5zZmVyU291cmNlKCkgfHwgIWRzdC50ZXh0dXJlLT5pc1RyYW5zZmVyRGVzdGluYXRpb24o
KSkgeworICAgIGlmIChpc0VuY29kaW5nUGFzcygpIHx8ICFzcmMudGV4dHVyZS0+aXNUcmFuc2Zl
clNvdXJjZSgpIHx8ICFkc3QudGV4dHVyZS0+aXNUcmFuc2ZlckRlc3RpbmF0aW9uKCkpIHsKICAg
ICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9UZXh0dXJl
KCk6IEludmFsaWQgb3BlcmF0aW9uISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRl
clBhc3NFbmNvZGVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQppbmRleCBhNjgyMWQwNTJhODg2
ZjAxZWJmN2QwZjdkYWIwNjNkZTllZjgwMWY2Li40YzFkNjA5YmVjMmY5NDFmMWYxYjFlNzkyNDQ0
NmNhZWE1ODljOTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRh
bC5tbQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CiAjaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlv
bnMuaD4KKyNpbXBvcnQgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTI0MSw3ICsyNDIsMjMgQEAgdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6
c2V0U2Npc3NvclJlY3QodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2lkdGgKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEdQVVJlbmRlclBhc3NFbmNv
ZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGluZGV4LCBWZWN0b3I8UmVmPEdQVUJ1ZmZl
cj4+JiYgYnVmZmVycywgVmVjdG9yPHVpbnQ2NF90PiYmIG9mZnNldHMpCit2b2lkIEdQVVJlbmRl
clBhc3NFbmNvZGVyOjpzZXRJbmRleEJ1ZmZlcihHUFVCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qg
b2Zmc2V0KQoreworICAgIGlmICghbV9wbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyKSB7CisgICAg
ICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIoKTog
SW52YWxpZCBvcGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmIChvZmZzZXQgPj0gYnVmZmVyLmJ5dGVMZW5ndGgoKSB8fCBvZmZzZXQg
JSA0KSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5k
ZXhCdWZmZXIoKTogSW52YWxpZCBvZmZzZXQhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgQVNTRVJUKGJ1ZmZlci5wbGF0Zm9ybUJ1ZmZlcigpKTsKKyAgICAvLyBCdWZmZXIgbXVzdCBi
ZSBjYWNoZWQgdG8gcHJvdmlkZSBpdCB0byBNZXRhbCB2aWEgZHJhd0luZGV4ZWRQcmltaXRpdmVz
LgorICAgIG1faW5kZXhCdWZmZXIgPSBtYWtlUmVmUHRyKGJ1ZmZlcik7CisgICAgbV9pbmRleEJ1
ZmZlck9mZnNldCA9IG9mZnNldDsKK30KKwordm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0
VmVydGV4QnVmZmVycyh1bnNpZ25lZCBpbmRleCwgY29uc3QgVmVjdG9yPFJlZjxHUFVCdWZmZXI+
PiYgYnVmZmVycywgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgb2Zmc2V0cykKIHsKICAgICBpZiAo
IW1fcGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlcikgewogICAgICAgICBMT0coV2ViR1BVLCAiR1BV
UmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnMoKTogSW52YWxpZCBvcGVyYXRpb246
IEVuY29kaW5nIGlzIGVuZGVkISIpOwpAQCAtMjU0LDYgKzI3MSw3IEBAIHZvaWQgR1BVUmVuZGVy
UGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQgaW5kZXgsIFZlY3RvcjxSZWY8
R1BVQnVmZmVyCiAKICAgICBhdXRvIG10bEJ1ZmZlcnMgPSBidWZmZXJzLm1hcChbdGhpc10gKGF1
dG8mIGJ1ZmZlcikgewogICAgICAgICBjb21tYW5kQnVmZmVyKCkudXNlQnVmZmVyKGJ1ZmZlci5j
b3B5UmVmKCkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpKTsKICAg
ICAgICAgcmV0dXJuIGJ1ZmZlci0+cGxhdGZvcm1CdWZmZXIoKTsKICAgICB9KTsKIApAQCAtMjY0
LDcgKzI4Miw3IEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnMo
dW5zaWduZWQgaW5kZXgsIFZlY3RvcjxSZWY8R1BVQnVmZmVyCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIH0KIAotc3RhdGljIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZUZv
ckdQVVByaW1pdGl2ZVRvcG9sb2d5KEdQVVByaW1pdGl2ZVRvcG9sb2d5IHR5cGUpCitzdGF0aWMg
TVRMUHJpbWl0aXZlVHlwZSBtdGxQcmltaXRpdmVUeXBlRm9yR1BVUHJpbWl0aXZlVG9wb2xvZ3ko
R1BVUHJpbWl0aXZlVG9wb2xvZ3kgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBj
YXNlIEdQVVByaW1pdGl2ZVRvcG9sb2d5OjpQb2ludExpc3Q6CkBAIC0yODgsNyArMzA2LDYgQEAg
dm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhdyh1bnNpZ25lZCB2ZXJ0ZXhDb3VudCwgdW5z
aWduZWQgaW5zdGFuY2VDb3VudCwgdW4KICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVVJlbmRlclBh
c3NFbmNvZGVyOjpkcmF3KCk6IEludmFsaWQgb3BlcmF0aW9uOiBFbmNvZGluZyBpcyBlbmRlZCEi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIGlmICghbV9waXBlbGluZSkgewogICAg
ICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcoKTogTm8gdmFsaWQg
R1BVUmVuZGVyUGlwZWxpbmUgZm91bmQhIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI5Niw3ICsz
MTMsNyBAQCB2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3KHVuc2lnbmVkIHZlcnRleENv
dW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bgogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogICAgIFttX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIgCi0gICAgICAgIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGVGb3JHUFVQcmltaXRpdmVUb3BvbG9neShtX3BpcGVs
aW5lLT5wcmltaXRpdmVUb3BvbG9neSgpKQorICAgICAgICBkcmF3UHJpbWl0aXZlczptdGxQcmlt
aXRpdmVUeXBlRm9yR1BVUHJpbWl0aXZlVG9wb2xvZ3kobV9waXBlbGluZS0+cHJpbWl0aXZlVG9w
b2xvZ3koKSkKICAgICAgICAgdmVydGV4U3RhcnQ6Zmlyc3RWZXJ0ZXgKICAgICAgICAgdmVydGV4
Q291bnQ6dmVydGV4Q291bnQKICAgICAgICAgaW5zdGFuY2VDb3VudDppbnN0YW5jZUNvdW50CkBA
IC0zMDQsNiArMzIxLDYzIEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcodW5zaWdu
ZWQgdmVydGV4Q291bnQsIHVuc2lnbmVkIGluc3RhbmNlQ291bnQsIHVuCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIH0KIAorc3RhdGljIE1UTEluZGV4VHlwZSBtdGxJbmRleFR5cGVG
b3JHUFVJbmRleEZvcm1hdChHUFVJbmRleEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChm
b3JtYXQpIHsKKyAgICBjYXNlIEdQVUluZGV4Rm9ybWF0OjpVaW50MTY6CisgICAgICAgIHJldHVy
biBNVExJbmRleFR5cGVVSW50MTY7CisgICAgY2FzZSBHUFVJbmRleEZvcm1hdDo6VWludDMyOgor
ICAgICAgICByZXR1cm4gTVRMSW5kZXhUeXBlVUludDMyOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhl
ZCh1bnNpZ25lZCBpbmRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBm
aXJzdEluZGV4LCBpbnQgYmFzZVZlcnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSkKK3sKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lID0gIkdQ
VVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZCgpIjsKKyNlbmRpZgorICAgIGlmICghbV9w
bGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyKSB7CisgICAgICAgIExPRyhXZWJHUFUsICIlczogSW52
YWxpZCBvcGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIsIGZ1bmN0aW9uTmFtZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX3BpcGVsaW5lKSB7CisgICAgICAgIExPRyhX
ZWJHUFUsICIlczogTm8gdmFsaWQgR1BVUmVuZGVyUGlwZWxpbmUgZm91bmQhIiwgZnVuY3Rpb25O
YW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fcGlwZWxpbmUtPmluZGV4
Rm9ybWF0KCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBHUFVJbmRleEZvcm1hdCBz
cGVjaWZpZWQhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIW1faW5kZXhCdWZmZXIgfHwgIW1faW5kZXhCdWZmZXItPnBsYXRmb3JtQnVmZmVyKCkpIHsK
KyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyB2YWxpZCBpbmRleCBidWZmZXIgc2V0ISIsIGZ1
bmN0aW9uTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4Qnl0
ZVNpemUgPSAobV9waXBlbGluZS0+aW5kZXhGb3JtYXQoKSA9PSBHUFVJbmRleEZvcm1hdDo6VWlu
dDE2KSA/IHNpemVvZih1aW50MTZfdCkgOiBzaXplb2YodWludDMyX3QpOworICAgIHVpbnQ2NF90
IGZpcnN0SW5kZXhPZmZzZXQgPSBmaXJzdEluZGV4ICogaW5kZXhCeXRlU2l6ZTsKKyAgICBhdXRv
IHRvdGFsT2Zmc2V0ID0gY2hlY2tlZFN1bTx1aW50NjRfdD4oZmlyc3RJbmRleE9mZnNldCwgbV9p
bmRleEJ1ZmZlck9mZnNldCk7CisgICAgaWYgKHRvdGFsT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSB8
fCB0b3RhbE9mZnNldCA+PSBtX2luZGV4QnVmZmVyLT5ieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAg
TE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIGZpcnN0SW5kZXghIiwgZnVuY3Rpb25OYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbW1hbmRCdWZmZXIoKS51c2VCdWZmZXIobWFr
ZVJlZigqbV9pbmRleEJ1ZmZlcikpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIFttX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIKKyAgICAgICAgZHJhd0luZGV4ZWRQ
cmltaXRpdmVzOm10bFByaW1pdGl2ZVR5cGVGb3JHUFVQcmltaXRpdmVUb3BvbG9neShtX3BpcGVs
aW5lLT5wcmltaXRpdmVUb3BvbG9neSgpKQorICAgICAgICBpbmRleENvdW50OmluZGV4Q291bnQK
KyAgICAgICAgaW5kZXhUeXBlOm10bEluZGV4VHlwZUZvckdQVUluZGV4Rm9ybWF0KCptX3BpcGVs
aW5lLT5pbmRleEZvcm1hdCgpKQorICAgICAgICBpbmRleEJ1ZmZlcjptX2luZGV4QnVmZmVyLT5w
bGF0Zm9ybUJ1ZmZlcigpCisgICAgICAgIGluZGV4QnVmZmVyT2Zmc2V0OnRvdGFsT2Zmc2V0LnVu
c2FmZUdldCgpCisgICAgICAgIGluc3RhbmNlQ291bnQ6aW5zdGFuY2VDb3VudAorICAgICAgICBi
YXNlVmVydGV4OmJhc2VWZXJ0ZXgKKyAgICAgICAgYmFzZUluc3RhbmNlOmZpcnN0SW5zdGFuY2Vd
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKICNpZiBVU0UoTUVUQUwpCiAK
IHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnVzZVJlc291cmNlKGNvbnN0IE1UTFJlc291cmNl
ICpyZXNvdXJjZSwgdW5zaWduZWQgdXNhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGlu
ZU1ldGFsLm1tCmluZGV4IGZiZTI0NjA3OTg0NmVhMjY1NGE4OWRhNzNkMWJkYmExMWMyMGU2ZjEu
LmZmZTBjZTJhNWJlODU3ZmI4MjA2ZjhhNzE1MDc1NmNmNjZkOTcwMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGlu
ZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCkBAIC01MTcsMTMgKzUxNywxNSBAQCBSZWZQdHI8
R1BVUmVuZGVyUGlwZWxpbmU+IEdQVVJlbmRlclBpcGVsaW5lOjp0cnlDcmVhdGUoY29uc3QgR1BV
RGV2aWNlJiBkZXZpY2UsCiAgICAgaWYgKCFwaXBlbGluZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBpcGVsaW5lKFdURk1vdmUo
ZGVwdGhTdGVuY2lsKSwgV1RGTW92ZShwaXBlbGluZSksIGRlc2NyaXB0b3IucHJpbWl0aXZlVG9w
b2xvZ3kpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBpcGVsaW5lKFdURk1v
dmUoZGVwdGhTdGVuY2lsKSwgV1RGTW92ZShwaXBlbGluZSksIGRlc2NyaXB0b3IucHJpbWl0aXZl
VG9wb2xvZ3ksIGRlc2NyaXB0b3IuaW5wdXRTdGF0ZS5pbmRleEZvcm1hdCkpOwogfQogCi1HUFVS
ZW5kZXJQaXBlbGluZTo6R1BVUmVuZGVyUGlwZWxpbmUoUmV0YWluUHRyPE1UTERlcHRoU3RlbmNp
bFN0YXRlPiYmIGRlcHRoU3RlbmNpbCwgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+
JiYgcGlwZWxpbmUsIEdQVVByaW1pdGl2ZVRvcG9sb2d5IHRvcG9sb2d5KQorR1BVUmVuZGVyUGlw
ZWxpbmU6OkdQVVJlbmRlclBpcGVsaW5lKFJldGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4m
JiBkZXB0aFN0ZW5jaWwsIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiYmIHBpcGVs
aW5lLCBHUFVQcmltaXRpdmVUb3BvbG9neSB0b3BvbG9neSwgT3B0aW9uYWw8R1BVSW5kZXhGb3Jt
YXQ+IGZvcm1hdCkKICAgICA6IG1fZGVwdGhTdGVuY2lsU3RhdGUoV1RGTW92ZShkZXB0aFN0ZW5j
aWwpKQogICAgICwgbV9wbGF0Zm9ybVJlbmRlclBpcGVsaW5lKFdURk1vdmUocGlwZWxpbmUpKQog
ICAgICwgbV9wcmltaXRpdmVUb3BvbG9neSh0b3BvbG9neSkKKyAgICAsIG1faW5kZXhGb3JtYXQo
Zm9ybWF0KQorCiB7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxODBkZDhmMzNjNjdjZTNkZDk0MTYyYzBmMzE3MGYy
ODRjYzY4MWM3Li43MDExODRjYzZjNTYwMzZhMjBjZWY5M2Q2MzU3OGQ4ZDVkMTcyMzc5IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDQtMDkgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFw
cGxlLmNvbT4KKworICAgICAgICBbV2ViIEdQVV0gSW5kZXhlZCBkcmF3aW5nIGFuZCBHUFVDb21t
YW5kRW5jb2RlciBjcmFzaCBwcmV2ZW50aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY3NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgZHJhdy1pbmRleGVkLXRyaWFuZ2xlcyB0byB0ZXN0IGRy
YXdpbmcgYSBncmVlbiBzcXVhcmUgdXNpbmcgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldEluZGV4
QnVmZmVyIGFuZCBkcmF3SW5kZXhlZC4KKworICAgICAgICAqIHdlYmdwdS9kcmF3LWluZGV4ZWQt
dHJpYW5nbGVzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS9kcmF3LWlu
ZGV4ZWQtdHJpYW5nbGVzLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA0LTA5ICBKdXN0aW4gRmFuICA8
anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYiBHUFVdIEdQVVJlbmRlclBhc3NF
bmNvZGVyIHVwZGF0ZXM6IHNldEJsZW5kQ29sb3IsIHNldFZpZXdwb3J0LCBzZXRTY2lzc29yUmVj
dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlhbmdsZXMt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS9kcmF3LWluZGV4ZWQtdHJpYW5nbGVz
LWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg2ZjEzZTgxMjAzOTdhNWNjNjMzNmM5ZTJhNDg1
ZTc3OGJhOTkzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9kcmF3LWlu
ZGV4ZWQtdHJpYW5nbGVzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+SFRNTCBSZWZlcmVuY2UgRmls
ZTwvdGl0bGU+Cis8cD5QYXNzIGlmIHNxdWFyZSBjYW52YXMgYmVsb3cgaXMgY29tcGxldGVseSBn
cmVlbi48L3A+Cis8Y2FudmFzIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Citjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJjYW52YXMiKTsK
K2NvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKKworY29udGV4dC5maWxs
U3R5bGUgPSAncmdiKDAsIDI1NSwgMCknOworY29udGV4dC5maWxsUmVjdCgwLCAwLCBjYW52YXMu
d2lkdGgsIGNhbnZhcy5oZWlnaHQpOworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlhbmds
ZXMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS9kcmF3LWluZGV4ZWQtdHJpYW5nbGVzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGRkODkxNzZiOTU0MTk5ZGYxM2YwZGQ4NTcyMGE0YWVhMzYxMzdiOAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS9kcmF3LWluZGV4ZWQtdHJpYW5nbGVz
Lmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorPHRpdGxlPldlYkdQVSBIZWxsbyBUcmlhbmdsZXM8L3RpdGxlPgorPG1ldGEgbmFt
ZT0iYXNzZXJ0IiBjb250ZW50PSJXZWJHUFUgY29ycmVjdGx5IHJlbmRlcnMgYSBncmVlbiBjYW52
YXMuIj4KKzxsaW5rIHJlbD0ibWF0Y2giIGhyZWY9ImRyYXctaW5kZXhlZC10cmlhbmdsZXMtZXhw
ZWN0ZWQuaHRtbCI+Cis8cD5QYXNzIGlmIHNxdWFyZSBjYW52YXMgYmVsb3cgaXMgY29tcGxldGVs
eSBncmVlbi48L3A+Cis8Y2FudmFzIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4K
KzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisKK2NvbnN0IHNoYWRlckNvZGUgPSBgCisjaW5jbHVkZSA8bWV0YWxfc3RkbGliPgorICAgIAor
dXNpbmcgbmFtZXNwYWNlIG1ldGFsOworCitzdHJ1Y3QgVmVydGV4SW4KK3sKKyAgICBmbG9hdDQg
cG9zaXRpb24gW1thdHRyaWJ1dGUoMCldXTsKKyAgICBmbG9hdCBncmVlbiBbW2F0dHJpYnV0ZSgx
KV1dOworfTsKKworc3RydWN0IFZlcnRleE91dAoreworICAgIGZsb2F0NCBwb3NpdGlvbiBbW3Bv
c2l0aW9uXV07CisgICAgZmxvYXQ0IGNvbG9yOworfTsKKwordmVydGV4IFZlcnRleE91dCB2ZXJ0
ZXhfbWFpbihWZXJ0ZXhJbiB2ZXJ0ZXhJbiBbW3N0YWdlX2luXV0pCit7CisgICAgVmVydGV4T3V0
IHZPdXQ7CisgICAgdk91dC5wb3NpdGlvbiA9IHZlcnRleEluLnBvc2l0aW9uOworICAgIHZPdXQu
Y29sb3IgPSBmbG9hdDQoMCwgdmVydGV4SW4uZ3JlZW4sIDAsIDEpOworICAgIHJldHVybiB2T3V0
OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRfbWFpbihWZXJ0ZXhPdXQgdiBbW3N0YWdl
X2luXV0pCit7CisgICAgcmV0dXJuIHYuY29sb3I7Cit9CitgCisKK2Z1bmN0aW9uIGNyZWF0ZVZl
cnRleEJ1ZmZlcihkZXZpY2UpIHsKKyAgICBjb25zdCB2ZXJ0ZXhBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkoWworICAgICAgICAvLyBmbG9hdDQgeHl6dywgZmxvYXQgZworICAgICAgICAtMSwgMSwg
MCwgMSwgMSwKKyAgICAgICAgLTEsIC0xLCAwLCAxLCAxLAorICAgICAgICAxLCAxLCAwLCAxLCAx
LAorICAgICAgICAxLCAtMSwgMCwgMSwgMQorICAgIF0pOworICAgIGNvbnN0IGJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiB2ZXJ0ZXhBcnJheS5ieXRlTGVuZ3RoLCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIH0pOwor
ICAgIGJ1ZmZlci5zZXRTdWJEYXRhKDAsIHZlcnRleEFycmF5LmJ1ZmZlcik7CisKKyAgICByZXR1
cm4gYnVmZmVyOworfQorCitjb25zdCBpbmRleEJ1ZmZlck9mZnNldCA9IDIwNDg7Citjb25zdCBp
bmRleE9mZnNldCA9IC05MDAxOworCitmdW5jdGlvbiBjcmVhdGVJbmRleEJ1ZmZlcihkZXZpY2Up
IHsKKyAgICBjb25zdCBpbmRleEFycmF5ID0gbmV3IFVpbnQzMkFycmF5KFswLCAxLCAyLCAxLCAy
LCAzXSk7CisgICAgaW5kZXhBcnJheS5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHsKKyAgICAg
ICAgaW5kZXhBcnJheVtpbmRleF0gPSB2YWx1ZSAtIGluZGV4T2Zmc2V0OworICAgIH0pOworICAg
IGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXplOiBpbmRleEFycmF5LmJ5
dGVMZW5ndGggKyBpbmRleEJ1ZmZlck9mZnNldCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLklOREVY
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIH0pOworICAgIGJ1ZmZlci5zZXRTdWJEYXRh
KGluZGV4QnVmZmVyT2Zmc2V0LCBpbmRleEFycmF5LmJ1ZmZlcik7CisKKyAgICByZXR1cm4gYnVm
ZmVyOworfQorCitmdW5jdGlvbiBjcmVhdGVJbnB1dFN0YXRlRGVzY3JpcHRvcigpIHsKKyAgICBy
ZXR1cm4geworICAgICAgICBpbmRleEZvcm1hdDogInVpbnQzMiIsCisgICAgICAgIGF0dHJpYnV0
ZXM6IFt7CisgICAgICAgICAgICBzaGFkZXJMb2NhdGlvbjogMCwKKyAgICAgICAgICAgIGlucHV0
U2xvdDogMCwKKyAgICAgICAgICAgIG9mZnNldDogMCwKKyAgICAgICAgICAgIGZvcm1hdDogImZs
b2F0NCIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgc2hhZGVyTG9jYXRpb246IDEsCisgICAg
ICAgICAgICBpbnB1dFNsb3Q6IDAsCisgICAgICAgICAgICBvZmZzZXQ6IDQgKiA0LAorICAgICAg
ICAgICAgZm9ybWF0OiAiZmxvYXQiCisgICAgICAgIH1dLAorICAgICAgICBpbnB1dHM6IFt7Cisg
ICAgICAgICAgICBpbnB1dFNsb3Q6IDAsCisgICAgICAgICAgICBzdHJpZGU6IDQgKiA1LAorICAg
ICAgICAgICAgc3RlcE1vZGU6ICJ2ZXJ0ZXgiCisgICAgICAgIH1dCisgICAgfTsKK30KKworYXN5
bmMgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRCYXNpY0Rl
dmljZSgpOworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImNhbnZh
cyIpOworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNyZWF0ZUJhc2ljU3dhcENoYWluKGNhbnZhcywg
ZGV2aWNlKTsKKyAgICAvLyBGSVhNRTogUmVwbGFjZSB3aXRoIG5vbi1NU0wgc2hhZGVycy4KKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHsgY29kZTog
c2hhZGVyQ29kZSB9KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBjcmVhdGVWZXJ0ZXhCdWZm
ZXIoZGV2aWNlKTsKKyAgICBjb25zdCBpbmRleEJ1ZmZlciA9IGNyZWF0ZUluZGV4QnVmZmVyKGRl
dmljZSk7CisgICAgY29uc3QgcGlwZWxpbmUgPSBjcmVhdGVCYXNpY1BpcGVsaW5lKHNoYWRlck1v
ZHVsZSwgZGV2aWNlLCBudWxsLCBudWxsLCBjcmVhdGVJbnB1dFN0YXRlRGVzY3JpcHRvcigpLCBu
dWxsLCAidHJpYW5nbGUtbGlzdCIpOworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7CisgICAgY29uc3QgcGFzc0VuY29kZXIgPSBiZWdpbkJh
c2ljUmVuZGVyUGFzcyhzd2FwQ2hhaW4sIGNvbW1hbmRFbmNvZGVyKTsKKworICAgIHBhc3NFbmNv
ZGVyLnNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLCBpbmRleEJ1ZmZlck9mZnNldCk7CisgICAg
cGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAg
ICBwYXNzRW5jb2Rlci5zZXRQaXBlbGluZShwaXBlbGluZSk7CisgICAgcGFzc0VuY29kZXIuZHJh
d0luZGV4ZWQoNiwgMSwgMCwgaW5kZXhPZmZzZXQsIDApOworICAgIHBhc3NFbmNvZGVyLmVuZFBh
c3MoKTsKKworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEVuY29kZXIuZmlu
aXNoKCldKTsKKyAgICB2ZXJ0ZXhCdWZmZXIuZGVzdHJveSgpOworCisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKwordGVzdCgp
OworPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367150</attachid>
            <date>2019-04-10 13:09:42 -0700</date>
            <delta_ts>2019-04-10 13:48:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-196758-20190410130941.patch</filename>
            <type>text/plain</type>
            <size>28912</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZThhZDRlNjBlMTZhMjU5
ZjIwZTI4YjM1N2FjMzU2MGNiOWFmYmI5YS4uNGFlM2NlMWU1ZWFiZDU4OTM3NjZlMWUwYTQxOGE3
OTRlODdjYmRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE5LTA0LTA5ICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIEluZGV4
ZWQgZHJhd2luZyBhbmQgR1BVQ29tbWFuZEVuY29kZXIgY3Jhc2ggcHJldmVudGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NzU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIFRlc3Q6IHdlYmdwdS9kcmF3
LWluZGV4ZWQtdHJpYW5nbGVzLmh0bWwKKworICAgICAgICBJbXBsZW1lbnQgR1BVUmVuZGVyUGFz
c0VuY29kZXI6OnNldEluZGV4QnVmZmVyIGFuZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhd0lu
ZGV4ZWQgdG8gZW5hYmxlIGluZGV4ZWQgZHJhd2luZy4KKyAgICAgICAgRGlzYWJsZSBHUFVDb21t
YW5kRW5jb2RlcnMgd2l0aCBhY3RpdmUgcGFzcyBlbmNvZGVycyBmcm9tIGJlaW5nIHN1Ym1pdHRl
ZCBvciBlbmNvZGluZyBibGl0cy4gCisKKyAgICAgICAgUHJldmVudCBhY3RpdmUgR1BVQ29tbWFu
ZEVuY29kZXJzIGZyb20gYmVpbmcgc3VibWl0dGVkIG9yIGVuY29kaW5nIGJsaXQgY29tbWFuZHM6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEVuY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR1BVQ29tbWFuZEVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb1RleHR1
cmUpOgorCisgICAgICAgIEltcGxlbWVudCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhC
dWZmZXIgYW5kIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZDoKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnMpOiBSZW1v
dmUgdW5uZWNlc3NhcnkgbW92ZSBvcGVyYXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2ViR1BV
UmVuZGVyUGFzc0VuY29kZXI6OmRyYXdJbmRleGVkKTogQWRkZWQuCisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5pZGw6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjppc0lu
ZGV4IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVSW5wdXRTdGF0
ZURlc2NyaXB0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUmVuZGVy
UGFzc0VuY29kZXIuaDogQ2FjaGUgdGhlIGluZGV4IGJ1ZmZlciwgYXMgTWV0YWwgZG9lcyBub3Qg
c2V0IHRoZSBpbmRleCBidWZmZXIgc2VwYXJhdGUgZnJvbSB0aGUgZHJhdyBjYWxsLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQaXBlbGluZS5oOgorICAgICAgICAo
V2ViQ29yZTo6R1BVUmVuZGVyUGlwZWxpbmU6OmluZGV4Rm9ybWF0IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRJbmRleEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVm
ZmVycyk6CisgICAgICAgIChXZWJDb3JlOjptdGxQcmltaXRpdmVUeXBlRm9yR1BVUHJpbWl0aXZl
VG9wb2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6bXRsSW5kZXhUeXBlRm9yR1BVSW5kZXhGb3JtYXQpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJpbWl0aXZlVHlwZUZvckdQVVByaW1pdGl2ZVRv
cG9sb2d5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBp
cGVsaW5lOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGlwZWxpbmU6
OkdQVVJlbmRlclBpcGVsaW5lKToKKwogMjAxOS0wNC0wOSAgSnVzdGluIEZhbiAgPGp1c3Rpbl9m
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgR1BVXSBHUFVSZW5kZXJQYXNzRW5jb2RlciB1
cGRhdGVzOiBzZXRCbGVuZENvbG9yLCBzZXRWaWV3cG9ydCwgc2V0U2Npc3NvclJlY3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1hbmRFbmNvZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1hbmRFbmNvZGVy
LmNwcAppbmRleCBjMTEzYTk4OTRlM2Q1MDIyNmE1OTdhMDRjNjMxMmE5MjI3ZjA1ZGY4Li4wNzRi
ZDA5Zjc5YThiYmVhOTU1ZDBiNzY2Mjc0N2RlYzlhYzFmOWFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kRW5jb2Rlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVQ29tbWFuZEVuY29kZXIuY3BwCkBAIC0x
NjcsNyArMTY3LDcgQEAgdm9pZCBXZWJHUFVDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmVUb1Rl
eHR1cmUoY29uc3QgV2ViR1BVVGV4dHVyZUNvcHlWaWV3JiBzcmMKICAgICAKIFJlZjxXZWJHUFVD
b21tYW5kQnVmZmVyPiBXZWJHUFVDb21tYW5kRW5jb2Rlcjo6ZmluaXNoKCkKIHsKLSAgICBpZiAo
IW1fY29tbWFuZEJ1ZmZlcikgeworICAgIGlmICghbV9jb21tYW5kQnVmZmVyIHx8IG1fY29tbWFu
ZEJ1ZmZlci0+aXNFbmNvZGluZ1Bhc3MoKSkgewogICAgICAgICBMT0coV2ViR1BVLCAiV2ViR1BV
Q29tbWFuZEVuY29kZXI6OmZpbmlzaCgpOiBJbnZhbGlkIG9wZXJhdGlvbiEiKTsKICAgICAgICAg
cmV0dXJuIFdlYkdQVUNvbW1hbmRCdWZmZXI6OmNyZWF0ZShudWxscHRyKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5j
b2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNz
RW5jb2Rlci5jcHAKaW5kZXggMzA1OTFmNjY0ZTE3NzA1MmQ2YWY3MDBmNTc0NjRmZTY3YjUwY2Ji
ZC4uMGJmN2EwZDQwZmZhZmM0YWI0NDJiMWI0MzU5ODZhZTJlMjRjOWU0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNv
ZGVyLmNwcApAQCAtOTIsNyArOTIsMjEgQEAgdm9pZCBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6
c2V0U2Npc3NvclJlY3QodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2kKICAgICBt
X3Bhc3NFbmNvZGVyLT5zZXRTY2lzc29yUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAot
dm9pZCBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBz
dGFydFNsb3QsIFZlY3RvcjxSZWZQdHI8V2ViR1BVQnVmZmVyPj4mJiBidWZmZXJzLCBWZWN0b3I8
dWludDY0X3Q+JiYgb2Zmc2V0cykKK3ZvaWQgV2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldElu
ZGV4QnVmZmVyKFdlYkdQVUJ1ZmZlciYgYnVmZmVyLCB1aW50NjRfdCBvZmZzZXQpCit7CisgICAg
aWYgKCFtX3Bhc3NFbmNvZGVyKSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNz
RW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIoKTogSW52YWxpZCBvcGVyYXRpb24hIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFidWZmZXIuYnVmZmVyKCkgfHwgIWJ1ZmZlci5idWZm
ZXIoKS0+aXNJbmRleCgpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5j
b2Rlcjo6c2V0SW5kZXhCdWZmZXIoKTogSW52YWxpZCBHUFVCdWZmZXIhIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX3Bhc3NFbmNvZGVyLT5zZXRJbmRleEJ1ZmZlcigqYnVmZmVy
LmJ1ZmZlcigpLCBvZmZzZXQpOworfQorCit2b2lkIFdlYkdQVVJlbmRlclBhc3NFbmNvZGVyOjpz
ZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIHN0YXJ0U2xvdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxX
ZWJHUFVCdWZmZXI+PiYgYnVmZmVycywgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgb2Zmc2V0cykK
IHsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1l
ID0gIkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKCkiOwpAQCAtMTEzLDcg
KzEyNyw3IEBAIHZvaWQgV2ViR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnMo
dW5zaWduZWQgc3RhcnRTbG90LCBWZWN0b3I8UmVmUHRyCiAgICAgVmVjdG9yPFJlZjxHUFVCdWZm
ZXI+PiBncHVCdWZmZXJzOwogICAgIGdwdUJ1ZmZlcnMucmVzZXJ2ZUNhcGFjaXR5KGJ1ZmZlcnMu
c2l6ZSgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgYnVmZmVyIDogYnVmZmVycykgeworICAg
IGZvciAoYXV0byYgYnVmZmVyIDogYnVmZmVycykgewogICAgICAgICBpZiAoIWJ1ZmZlciB8fCAh
YnVmZmVyLT5idWZmZXIoKSkgewogICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlk
IG9yIGRlc3Ryb3llZCBidWZmZXIgaW4gbGlzdCEiLCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTI3LDcgKzE0MSw3IEBAIHZvaWQgV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXI6OnNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQgc3RhcnRTbG90LCBWZWN0b3I8UmVmUHRyCiAg
ICAgICAgIGdwdUJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VSZWYoKmJ1ZmZlci0+YnVmZmVy
KCkpKTsKICAgICB9CiAKLSAgICBtX3Bhc3NFbmNvZGVyLT5zZXRWZXJ0ZXhCdWZmZXJzKHN0YXJ0
U2xvdCwgV1RGTW92ZShncHVCdWZmZXJzKSwgV1RGTW92ZShvZmZzZXRzKSk7CisgICAgbV9wYXNz
RW5jb2Rlci0+c2V0VmVydGV4QnVmZmVycyhzdGFydFNsb3QsIGdwdUJ1ZmZlcnMsIG9mZnNldHMp
OwogfQogCiB2b2lkIFdlYkdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3KHVuc2lnbmVkIHZlcnRl
eENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdFZlcnRleCwgdW5z
aWduZWQgZmlyc3RJbnN0YW5jZSkKQEAgLTE0MCw2ICsxNTQsMTYgQEAgdm9pZCBXZWJHUFVSZW5k
ZXJQYXNzRW5jb2Rlcjo6ZHJhdyh1bnNpZ25lZCB2ZXJ0ZXhDb3VudCwgdW5zaWduZWQgaW5zdGFu
Y2VDb3VudCwKICAgICBtX3Bhc3NFbmNvZGVyLT5kcmF3KHZlcnRleENvdW50LCBpbnN0YW5jZUNv
dW50LCBmaXJzdFZlcnRleCwgZmlyc3RJbnN0YW5jZSk7CiB9CiAKK3ZvaWQgV2ViR1BVUmVuZGVy
UGFzc0VuY29kZXI6OmRyYXdJbmRleGVkKHVuc2lnbmVkIGluZGV4Q291bnQsIHVuc2lnbmVkIGlu
c3RhbmNlQ291bnQsIHVuc2lnbmVkIGZpcnN0SW5kZXgsIGludCBiYXNlVmVydGV4LCB1bnNpZ25l
ZCBmaXJzdEluc3RhbmNlKQoreworICAgIGlmICghbV9wYXNzRW5jb2RlcikgeworICAgICAgICBM
T0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcoKTogSW52YWxpZCBvcGVyYXRp
b24hIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IEFkZCBXZWIgR1BV
IHZhbGlkYXRpb24uCisgICAgbV9wYXNzRW5jb2Rlci0+ZHJhd0luZGV4ZWQoaW5kZXhDb3VudCwg
aW5zdGFuY2VDb3VudCwgZmlyc3RJbmRleCwgYmFzZVZlcnRleCwgZmlyc3RJbnN0YW5jZSk7Cit9
CisKIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKiBXZWJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6
cGFzc0VuY29kZXIoKQogewogICAgIHJldHVybiBtX3Bhc3NFbmNvZGVyLmdldCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNv
ZGVyLmgKaW5kZXggNjYyMjQwZmU1NzBkYThhZTE5NGI3Y2EyMjY2MjM4NTUyMzZhMGQ5NC4uZjhj
MDJhYmE3OGFlYzhhZTJhZjE2N2IyNTBjNTkxZGQxOTQ4MzE5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5oCkBA
IC00OCw4ICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRCbGVuZENvbG9yKGNvbnN0IEdQ
VUNvbG9yJik7CiAgICAgdm9pZCBzZXRWaWV3cG9ydChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBtaW5EZXB0aCwgZmxvYXQgbWF4RGVwdGgpOwogICAg
IHZvaWQgc2V0U2Npc3NvclJlY3QodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0gICAgdm9pZCBzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVk
LCBWZWN0b3I8UmVmUHRyPFdlYkdQVUJ1ZmZlcj4+JiYsIFZlY3Rvcjx1aW50NjRfdD4mJik7Cisg
ICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihXZWJHUFVCdWZmZXImLCB1aW50NjRfdCBvZmZzZXQpOwor
ICAgIHZvaWQgc2V0VmVydGV4QnVmZmVycyh1bnNpZ25lZCBzdGFydFNsb3QsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8V2ViR1BVQnVmZmVyPj4mLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBvZmZzZXRz
KTsKICAgICB2b2lkIGRyYXcodW5zaWduZWQgdmVydGV4Q291bnQsIHVuc2lnbmVkIGluc3RhbmNl
Q291bnQsIHVuc2lnbmVkIGZpcnN0VmVydGV4LCB1bnNpZ25lZCBmaXJzdEluc3RhbmNlKTsKKyAg
ICB2b2lkIGRyYXdJbmRleGVkKHVuc2lnbmVkIGluZGV4Q291bnQsIHVuc2lnbmVkIGluc3RhbmNl
Q291bnQsIHVuc2lnbmVkIGZpcnN0SW5kZXgsIGludCBiYXNlVmVydGV4LCB1bnNpZ25lZCBmaXJz
dEluc3RhbmNlKTsKIAogcHJpdmF0ZToKICAgICBXZWJHUFVSZW5kZXJQYXNzRW5jb2RlcihSZWZQ
dHI8R1BVUmVuZGVyUGFzc0VuY29kZXI+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV2ViR1BVUmVuZGVyUGFzc0VuY29kZXIuaWRsCmluZGV4IGE2ZTgx
OWEzNzM2Zjg0YjE4ZDgwM2RkOWMxNzlmOWRjOGFlODI4MzEuLjJiODU1OTFiZWIzYmFjNjNjYjli
N2U1NTMzMGQwOTg4N2IyMzM0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dlYkdQVVJlbmRlclBhc3NFbmNvZGVyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XZWJHUFVSZW5kZXJQYXNzRW5jb2Rlci5pZGwKQEAgLTI0LDYgKzI0LDcg
QEAKICAqLwogLy8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxvYi9tYXN0ZXIv
ZGVzaWduL3NrZXRjaC53ZWJpZGwKIAordHlwZWRlZiBsb25nIGkzMjsKIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyB1MzI7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CiAKQEAgLTQyLDE1
ICs0MywxMyBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CiAgICAgLy8gV2lkdGgg
YW5kIGhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiBPdGhlcndpc2UsIGFuIGVycm9yIHdp
bGwgYmUgZ2VuZXJhdGVkLgogICAgIHZvaWQgc2V0U2Npc3NvclJlY3QodTMyIHgsIHUzMiB5LCB1
MzIgd2lkdGgsIHUzMiBoZWlnaHQpOwogCisgICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihXZWJHUFVC
dWZmZXIgYnVmZmVyLCB1NjQgb2Zmc2V0KTsKICAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcnModTMy
IHN0YXJ0U2xvdCwgc2VxdWVuY2U8V2ViR1BVQnVmZmVyPiBidWZmZXJzLCBzZXF1ZW5jZTx1NjQ+
IG9mZnNldHMpOwogCiAgICAgdm9pZCBkcmF3KHUzMiB2ZXJ0ZXhDb3VudCwgdTMyIGluc3RhbmNl
Q291bnQsIHUzMiBmaXJzdFZlcnRleCwgdTMyIGZpcnN0SW5zdGFuY2UpOwotCi0vKiBOb3QgWWV0
IEltcGxlbWVudGVkCi0gICAgdm9pZCBzZXRJbmRleEJ1ZmZlcihXZWJHUFVCdWZmZXIgYnVmZmVy
LCB1NjQgb2Zmc2V0KTsKLQogICAgIHZvaWQgZHJhd0luZGV4ZWQodTMyIGluZGV4Q291bnQsIHUz
MiBpbnN0YW5jZUNvdW50LCB1MzIgZmlyc3RJbmRleCwgaTMyIGJhc2VWZXJ0ZXgsIHUzMiBmaXJz
dEluc3RhbmNlKTsKIAotICAgIC8vIFRPRE8gYWRkIG1pc3NpbmcgY29tbWFuZHMKKy8qIE5vdCBZ
ZXQgSW1wbGVtZW50ZWQKKyAgICB2b2lkIHNldFN0ZW5jaWxSZWZlcmVuY2UodTMyIHJlZmVyZW5j
ZSk7CiAqLwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVCdWZmZXIuaAppbmRleCAxODlkOGQ0MDBkNTQyMjU3Y2E5NDg1MjNhMDVkY2JlNzBiZGNjMWY3
Li41NWRiZWE5NmNkZGM1N2YzMmRkNGQwZDZhYzU2NzQ4MDNmYmFkNDcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCkBAIC03NCw2ICs3
NCw3IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlTGVuZ3RoOyB9CiAgICAgYm9vbCBpc1RyYW5zZmVyU291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV91c2FnZS5jb250YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlRyYW5zZmVyU291cmNl
KTsgfQogICAgIGJvb2wgaXNUcmFuc2ZlckRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91
c2FnZS5jb250YWlucyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlRyYW5zZmVyRGVzdGluYXRpb24p
OyB9CisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QgeyByZXR1cm4gbV91c2FnZS5jb250YWlucyhH
UFVCdWZmZXJVc2FnZTo6RmxhZ3M6OkluZGV4KTsgfQogICAgIGJvb2wgaXNWZXJ0ZXgoKSBjb25z
dCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6VmVydGV4
KTsgfQogICAgIGJvb2wgaXNVbmlmb3JtKCkgY29uc3QgeyByZXR1cm4gbV91c2FnZS5jb250YWlu
cyhHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlVuaWZvcm0pOyB9CiAgICAgYm9vbCBpc1N0b3JhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6
U3RvcmFnZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9HUFVJbnB1dFN0YXRlRGVzY3JpcHRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVUlucHV0U3RhdGVEZXNjcmlwdG9yLmgKaW5kZXggMDUwMjMzNmUxMDZh
NmMwMjdiMzc3ZWI4YzY3OGJkOTNkNmE1ZWNiMy4uMDJhNjUzOGNlNzU1ZmE0MTQzZDlkNzU4ZTlm
NTg5OGM5ODBkYWVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUlucHV0U3RhdGVEZXNjcmlwdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUlucHV0U3RhdGVEZXNjcmlwdG9yLmgKQEAgLTM5LDcgKzM5
LDcgQEAgZW51bSBjbGFzcyBHUFVJbmRleEZvcm1hdCB7CiB9OwogCiBzdHJ1Y3QgR1BVSW5wdXRT
dGF0ZURlc2NyaXB0b3IgewotICAgIEdQVUluZGV4Rm9ybWF0IGluZGV4Rm9ybWF0OworICAgIE9w
dGlvbmFsPEdQVUluZGV4Rm9ybWF0PiBpbmRleEZvcm1hdDsKIAogICAgIFZlY3RvcjxHUFVWZXJ0
ZXhBdHRyaWJ1dGVEZXNjcmlwdG9yPiBhdHRyaWJ1dGVzOwogICAgIFZlY3RvcjxHUFVWZXJ0ZXhJ
bnB1dERlc2NyaXB0b3I+IGlucHV0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVSZW5kZXJQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKaW5kZXggYmRjNjUw
Y2I4NTU2YTZiMmIzZTNhYTgxZDkxZWJlMzE3MDgzMjc0OC4uNDFlM2M0YjliN2NkMGM5NzJhNGRl
MjYyYWUzMmYyNDY0YmQxOGIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBhc3NFbmNvZGVyLmgKQEAgLTU2LDggKzU2
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJsZW5kQ29sb3IoY29uc3QgR1BVQ29sb3ImKTsK
ICAgICB2b2lkIHNldFZpZXdwb3J0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQsIGZsb2F0IG1pbkRlcHRoLCBmbG9hdCBtYXhEZXB0aCk7CiAgICAgdm9pZCBzZXRT
Y2lzc29yUmVjdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KTsKLSAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQsIFZlY3RvcjxS
ZWY8R1BVQnVmZmVyPj4mJiwgVmVjdG9yPHVpbnQ2NF90PiYmKTsKKyAgICB2b2lkIHNldEluZGV4
QnVmZmVyKEdQVUJ1ZmZlciYsIHVpbnQ2NF90IG9mZnNldCk7CisgICAgdm9pZCBzZXRWZXJ0ZXhC
dWZmZXJzKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiwgY29u
c3QgVmVjdG9yPHVpbnQ2NF90PiYgb2Zmc2V0cyk7CiAgICAgdm9pZCBkcmF3KHVuc2lnbmVkIHZl
cnRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdFZlcnRleCwg
dW5zaWduZWQgZmlyc3RJbnN0YW5jZSk7CisgICAgdm9pZCBkcmF3SW5kZXhlZCh1bnNpZ25lZCBp
bmRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdEluZGV4LCBp
bnQgYmFzZVZlcnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSk7CiAKIHByaXZhdGU6CiAgICAg
R1BVUmVuZGVyUGFzc0VuY29kZXIoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYsIFBsYXRmb3JtUmVu
ZGVyUGFzc0VuY29kZXJTbWFydFB0ciYmKTsKQEAgLTcwLDYgKzcyLDkgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHVzZVJlc291cmNlKGNvbnN0IE1UTFJlc291cmNlICosIHVuc2lnbmVkIHVzYWdlKSBm
aW5hbDsKICAgICB2b2lkIHNldFZlcnRleEJ1ZmZlcihjb25zdCBNVExCdWZmZXIgKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbmRleCkgZmluYWw7CiAgICAgdm9pZCBzZXRGcmFnbWVudEJ1
ZmZlcihjb25zdCBNVExCdWZmZXIgKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBpbmRleCkg
ZmluYWw7CisKKyAgICBSZWZQdHI8R1BVQnVmZmVyPiBtX2luZGV4QnVmZmVyOworICAgIHVpbnQ2
NF90IG1faW5kZXhCdWZmZXJPZmZzZXQ7CiAjZW5kaWYgLy8gVVNFKE1FVEFMKQogCiAgICAgUGxh
dGZvcm1SZW5kZXJQYXNzRW5jb2RlclNtYXJ0UHRyIG1fcGxhdGZvcm1SZW5kZXJQYXNzRW5jb2Rl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVS
ZW5kZXJQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVJlbmRlclBpcGVsaW5lLmgKaW5kZXggOTZkODFjZGI0ZmRhNzlhMTRlNjhmMjk5NDViNzA1YTE3
M2NlODYzMS4uNmUxNjUzMmE5NWQ1ZmQ5YjhkMjMzNjI0MGVjMmMxODgwYzY5MmU5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRlclBpcGVs
aW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVJlbmRl
clBpcGVsaW5lLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5j
bHVkZSAiR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNTMsMTUgKzU0LDE3IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmUqIHBsYXRmb3JtUmVuZGVyUGlw
ZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtUmVuZGVyUGlwZWxpbmUuZ2V0KCk7IH0K
ICAgICBHUFVQcmltaXRpdmVUb3BvbG9neSBwcmltaXRpdmVUb3BvbG9neSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWl0aXZlVG9wb2xvZ3k7IH0KKyAgICBPcHRpb25hbDxHUFVJbmRleEZvcm1hdD4g
aW5kZXhGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4Rm9ybWF0OyB9CiAKIHByaXZhdGU6
CiAjaWYgVVNFKE1FVEFMKQotICAgIEdQVVJlbmRlclBpcGVsaW5lKFJldGFpblB0cjxNVExEZXB0
aFN0ZW5jaWxTdGF0ZT4mJiwgUGxhdGZvcm1SZW5kZXJQaXBlbGluZVNtYXJ0UHRyJiYsIEdQVVBy
aW1pdGl2ZVRvcG9sb2d5KTsKKyAgICBHUFVSZW5kZXJQaXBlbGluZShSZXRhaW5QdHI8TVRMRGVw
dGhTdGVuY2lsU3RhdGU+JiYsIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmVTbWFydFB0ciYmLCBHUFVQ
cmltaXRpdmVUb3BvbG9neSwgT3B0aW9uYWw8R1BVSW5kZXhGb3JtYXQ+KTsKIAogICAgIFJldGFp
blB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gbV9kZXB0aFN0ZW5jaWxTdGF0ZTsKICNlbmRpZiAv
LyBVU0UoTUVUQUwpCiAgICAgUGxhdGZvcm1SZW5kZXJQaXBlbGluZVNtYXJ0UHRyIG1fcGxhdGZv
cm1SZW5kZXJQaXBlbGluZTsKICAgICBHUFVQcmltaXRpdmVUb3BvbG9neSBtX3ByaW1pdGl2ZVRv
cG9sb2d5OworICAgIE9wdGlvbmFsPEdQVUluZGV4Rm9ybWF0PiBtX2luZGV4Rm9ybWF0OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21tYW5kQnVmZmVyTWV0
YWwubW0KaW5kZXggZGEyMWQyNGVjNzIzNjlhM2IxODU1M2IwOTJlMDBiOWYwMDA3Mjk1YS4uN2Vi
ZDViZjI2ODRkZDk5Y2E2MDNkNjg0YzUxODZjYjBjNjg0MTg1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRh
bC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
Q29tbWFuZEJ1ZmZlck1ldGFsLm1tCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgR1BVQ29tbWFuZEJ1
ZmZlcjo6ZW5kQmxpdEVuY29kaW5nKCkKIAogdm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVm
ZmVyVG9CdWZmZXIoUmVmPEdQVUJ1ZmZlcj4mJiBzcmMsIHVpbnQ2NF90IHNyY09mZnNldCwgUmVm
PEdQVUJ1ZmZlcj4mJiBkc3QsIHVpbnQ2NF90IGRzdE9mZnNldCwgdWludDY0X3Qgc2l6ZSkKIHsK
LSAgICBpZiAoIXNyYy0+aXNUcmFuc2ZlclNvdXJjZSgpIHx8ICFkc3QtPmlzVHJhbnNmZXJEZXN0
aW5hdGlvbigpKSB7CisgICAgaWYgKGlzRW5jb2RpbmdQYXNzKCkgfHwgIXNyYy0+aXNUcmFuc2Zl
clNvdXJjZSgpIHx8ICFkc3QtPmlzVHJhbnNmZXJEZXN0aW5hdGlvbigpKSB7CiAgICAgICAgIExP
RyhXZWJHUFUsICJHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoKTogSW52YWxp
ZCBvcGVyYXRpb24hIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzIsNyArMTMyLDcg
QEAgdm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoUmVmPEdQVUJ1ZmZl
cj4mJiBzcmMsIHVpbnQ2NF90IHNyY09mZnMKIAogdm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5
QnVmZmVyVG9UZXh0dXJlKEdQVUJ1ZmZlckNvcHlWaWV3JiYgc3JjQnVmZmVyLCBHUFVUZXh0dXJl
Q29weVZpZXcmJiBkc3RUZXh0dXJlLCBjb25zdCBHUFVFeHRlbnQzRCYgc2l6ZSkKIHsKLSAgICBp
ZiAoIXNyY0J1ZmZlci5idWZmZXItPmlzVHJhbnNmZXJTb3VyY2UoKSB8fCAhZHN0VGV4dHVyZS50
ZXh0dXJlLT5pc1RyYW5zZmVyRGVzdGluYXRpb24oKSkgeworICAgIGlmIChpc0VuY29kaW5nUGFz
cygpIHx8ICFzcmNCdWZmZXIuYnVmZmVyLT5pc1RyYW5zZmVyU291cmNlKCkgfHwgIWRzdFRleHR1
cmUudGV4dHVyZS0+aXNUcmFuc2ZlckRlc3RpbmF0aW9uKCkpIHsKICAgICAgICAgTE9HKFdlYkdQ
VSwgIkdQVUNvbWFuZEJ1ZmZlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZSgpOiBJbnZhbGlkIG9wZXJh
dGlvbiEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lk
IEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb1RleHR1cmUoR1BVQnVmZmVyQ29weVZpZXcm
JiBzcmNCdWZmZXIsIEdQVVRleAogCiB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJl
VG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3JiYgc3JjVGV4dHVyZSwgR1BVQnVmZmVyQ29weVZp
ZXcmJiBkc3RCdWZmZXIsIGNvbnN0IEdQVUV4dGVudDNEJiBzaXplKQogewotICAgIGlmICghc3Jj
VGV4dHVyZS50ZXh0dXJlLT5pc1RyYW5zZmVyU291cmNlKCkgfHwgIWRzdEJ1ZmZlci5idWZmZXIt
PmlzVHJhbnNmZXJEZXN0aW5hdGlvbigpKSB7CisgICAgaWYgKGlzRW5jb2RpbmdQYXNzKCkgfHwg
IXNyY1RleHR1cmUudGV4dHVyZS0+aXNUcmFuc2ZlclNvdXJjZSgpIHx8ICFkc3RCdWZmZXIuYnVm
ZmVyLT5pc1RyYW5zZmVyRGVzdGluYXRpb24oKSkgewogICAgICAgICBMT0coV2ViR1BVLCAiR1BV
Q29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb0J1ZmZlcigpOiBJbnZhbGlkIG9wZXJhdGlvbiEi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIEdQVUNv
bW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3JiYgc3Jj
VGV4dHVyZSwgR1BVQgogCiB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9UZXh0
dXJlKEdQVVRleHR1cmVDb3B5VmlldyYmIHNyYywgR1BVVGV4dHVyZUNvcHlWaWV3JiYgZHN0LCBj
b25zdCBHUFVFeHRlbnQzRCYgc2l6ZSkKIHsKLSAgICBpZiAoIXNyYy50ZXh0dXJlLT5pc1RyYW5z
ZmVyU291cmNlKCkgfHwgIWRzdC50ZXh0dXJlLT5pc1RyYW5zZmVyRGVzdGluYXRpb24oKSkgewor
ICAgIGlmIChpc0VuY29kaW5nUGFzcygpIHx8ICFzcmMudGV4dHVyZS0+aXNUcmFuc2ZlclNvdXJj
ZSgpIHx8ICFkc3QudGV4dHVyZS0+aXNUcmFuc2ZlckRlc3RpbmF0aW9uKCkpIHsKICAgICAgICAg
TE9HKFdlYkdQVSwgIkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9UZXh0dXJlKCk6IElu
dmFsaWQgb3BlcmF0aW9uISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NF
bmNvZGVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQppbmRleCBhNjgyMWQwNTJhODg2ZjAxZWJm
N2QwZjdkYWIwNjNkZTllZjgwMWY2Li40YzFkNjA5YmVjMmY5NDFmMWYxYjFlNzkyNDQ0NmNhZWE1
ODljOTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQpA
QCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1w
b3J0IDxNZXRhbC9NZXRhbC5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTI0MSw3ICsyNDIsMjMgQEAgdm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0U2Np
c3NvclJlY3QodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2lkdGgKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpz
ZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGluZGV4LCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiYg
YnVmZmVycywgVmVjdG9yPHVpbnQ2NF90PiYmIG9mZnNldHMpCit2b2lkIEdQVVJlbmRlclBhc3NF
bmNvZGVyOjpzZXRJbmRleEJ1ZmZlcihHUFVCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0
KQoreworICAgIGlmICghbV9wbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyKSB7CisgICAgICAgIExP
RyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIoKTogSW52YWxp
ZCBvcGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChvZmZzZXQgPj0gYnVmZmVyLmJ5dGVMZW5ndGgoKSB8fCBvZmZzZXQgJSA0KSB7
CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZm
ZXIoKTogSW52YWxpZCBvZmZzZXQhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKGJ1ZmZlci5wbGF0Zm9ybUJ1ZmZlcigpKTsKKyAgICAvLyBCdWZmZXIgbXVzdCBiZSBjYWNo
ZWQgdG8gcHJvdmlkZSBpdCB0byBNZXRhbCB2aWEgZHJhd0luZGV4ZWRQcmltaXRpdmVzLgorICAg
IG1faW5kZXhCdWZmZXIgPSBtYWtlUmVmUHRyKGJ1ZmZlcik7CisgICAgbV9pbmRleEJ1ZmZlck9m
ZnNldCA9IG9mZnNldDsKK30KKwordm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4
QnVmZmVycyh1bnNpZ25lZCBpbmRleCwgY29uc3QgVmVjdG9yPFJlZjxHUFVCdWZmZXI+PiYgYnVm
ZmVycywgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgb2Zmc2V0cykKIHsKICAgICBpZiAoIW1fcGxh
dGZvcm1SZW5kZXJQYXNzRW5jb2RlcikgewogICAgICAgICBMT0coV2ViR1BVLCAiR1BVUmVuZGVy
UGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnMoKTogSW52YWxpZCBvcGVyYXRpb246IEVuY29k
aW5nIGlzIGVuZGVkISIpOwpAQCAtMjU0LDYgKzI3MSw3IEBAIHZvaWQgR1BVUmVuZGVyUGFzc0Vu
Y29kZXI6OnNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQgaW5kZXgsIFZlY3RvcjxSZWY8R1BVQnVm
ZmVyCiAKICAgICBhdXRvIG10bEJ1ZmZlcnMgPSBidWZmZXJzLm1hcChbdGhpc10gKGF1dG8mIGJ1
ZmZlcikgewogICAgICAgICBjb21tYW5kQnVmZmVyKCkudXNlQnVmZmVyKGJ1ZmZlci5jb3B5UmVm
KCkpOworICAgICAgICBBU1NFUlQoYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpKTsKICAgICAgICAg
cmV0dXJuIGJ1ZmZlci0+cGxhdGZvcm1CdWZmZXIoKTsKICAgICB9KTsKIApAQCAtMjY0LDcgKzI4
Miw3IEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFZlcnRleEJ1ZmZlcnModW5zaWdu
ZWQgaW5kZXgsIFZlY3RvcjxSZWY8R1BVQnVmZmVyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIH0KIAotc3RhdGljIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZUZvckdQVVBy
aW1pdGl2ZVRvcG9sb2d5KEdQVVByaW1pdGl2ZVRvcG9sb2d5IHR5cGUpCitzdGF0aWMgTVRMUHJp
bWl0aXZlVHlwZSBtdGxQcmltaXRpdmVUeXBlRm9yR1BVUHJpbWl0aXZlVG9wb2xvZ3koR1BVUHJp
bWl0aXZlVG9wb2xvZ3kgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdQ
VVByaW1pdGl2ZVRvcG9sb2d5OjpQb2ludExpc3Q6CkBAIC0yODgsNyArMzA2LDYgQEAgdm9pZCBH
UFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhdyh1bnNpZ25lZCB2ZXJ0ZXhDb3VudCwgdW5zaWduZWQg
aW5zdGFuY2VDb3VudCwgdW4KICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVVJlbmRlclBhc3NFbmNv
ZGVyOjpkcmF3KCk6IEludmFsaWQgb3BlcmF0aW9uOiBFbmNvZGluZyBpcyBlbmRlZCEiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIGlmICghbV9waXBlbGluZSkgewogICAgICAgICBM
T0coV2ViR1BVLCAiR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcoKTogTm8gdmFsaWQgR1BVUmVu
ZGVyUGlwZWxpbmUgZm91bmQhIik7CiAgICAgICAgIHJldHVybjsKQEAgLTI5Niw3ICszMTMsNyBA
QCB2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3KHVuc2lnbmVkIHZlcnRleENvdW50LCB1
bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bgogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogICAgIFttX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIgCi0gICAgICAgIGRyYXdQcmlt
aXRpdmVzOnByaW1pdGl2ZVR5cGVGb3JHUFVQcmltaXRpdmVUb3BvbG9neShtX3BpcGVsaW5lLT5w
cmltaXRpdmVUb3BvbG9neSgpKQorICAgICAgICBkcmF3UHJpbWl0aXZlczptdGxQcmltaXRpdmVU
eXBlRm9yR1BVUHJpbWl0aXZlVG9wb2xvZ3kobV9waXBlbGluZS0+cHJpbWl0aXZlVG9wb2xvZ3ko
KSkKICAgICAgICAgdmVydGV4U3RhcnQ6Zmlyc3RWZXJ0ZXgKICAgICAgICAgdmVydGV4Q291bnQ6
dmVydGV4Q291bnQKICAgICAgICAgaW5zdGFuY2VDb3VudDppbnN0YW5jZUNvdW50CkBAIC0zMDQs
NiArMzIxLDYzIEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcodW5zaWduZWQgdmVy
dGV4Q291bnQsIHVuc2lnbmVkIGluc3RhbmNlQ291bnQsIHVuCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIH0KIAorc3RhdGljIE1UTEluZGV4VHlwZSBtdGxJbmRleFR5cGVGb3JHUFVJ
bmRleEZvcm1hdChHUFVJbmRleEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIEdQVUluZGV4Rm9ybWF0OjpVaW50MTY6CisgICAgICAgIHJldHVybiBNVExJ
bmRleFR5cGVVSW50MTY7CisgICAgY2FzZSBHUFVJbmRleEZvcm1hdDo6VWludDMyOgorICAgICAg
ICByZXR1cm4gTVRMSW5kZXhUeXBlVUludDMyOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZCh1bnNp
Z25lZCBpbmRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdElu
ZGV4LCBpbnQgYmFzZVZlcnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSkKK3sKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lID0gIkdQVVJlbmRl
clBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZCgpIjsKKyNlbmRpZgorICAgIGlmICghbV9wbGF0Zm9y
bVJlbmRlclBhc3NFbmNvZGVyKSB7CisgICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBv
cGVyYXRpb246IEVuY29kaW5nIGlzIGVuZGVkISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFtX3BpcGVsaW5lKSB7CisgICAgICAgIExPRyhXZWJHUFUs
ICIlczogTm8gdmFsaWQgR1BVUmVuZGVyUGlwZWxpbmUgZm91bmQhIiwgZnVuY3Rpb25OYW1lKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fcGlwZWxpbmUtPmluZGV4Rm9ybWF0
KCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyBHUFVJbmRleEZvcm1hdCBzcGVjaWZp
ZWQhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1f
aW5kZXhCdWZmZXIgfHwgIW1faW5kZXhCdWZmZXItPnBsYXRmb3JtQnVmZmVyKCkpIHsKKyAgICAg
ICAgTE9HKFdlYkdQVSwgIiVzOiBObyB2YWxpZCBpbmRleCBidWZmZXIgc2V0ISIsIGZ1bmN0aW9u
TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4Qnl0ZVNpemUg
PSAobV9waXBlbGluZS0+aW5kZXhGb3JtYXQoKSA9PSBHUFVJbmRleEZvcm1hdDo6VWludDE2KSA/
IHNpemVvZih1aW50MTZfdCkgOiBzaXplb2YodWludDMyX3QpOworICAgIHVpbnQ2NF90IGZpcnN0
SW5kZXhPZmZzZXQgPSBmaXJzdEluZGV4ICogaW5kZXhCeXRlU2l6ZTsKKyAgICBhdXRvIHRvdGFs
T2Zmc2V0ID0gY2hlY2tlZFN1bTx1aW50NjRfdD4oZmlyc3RJbmRleE9mZnNldCwgbV9pbmRleEJ1
ZmZlck9mZnNldCk7CisgICAgaWYgKHRvdGFsT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSB8fCB0b3Rh
bE9mZnNldCA+PSBtX2luZGV4QnVmZmVyLT5ieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgTE9HKFdl
YkdQVSwgIiVzOiBJbnZhbGlkIGZpcnN0SW5kZXghIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbW1hbmRCdWZmZXIoKS51c2VCdWZmZXIobWFrZVJlZigq
bV9pbmRleEJ1ZmZlcikpOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IFttX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIKKyAgICAgICAgZHJhd0luZGV4ZWRQcmltaXRp
dmVzOm10bFByaW1pdGl2ZVR5cGVGb3JHUFVQcmltaXRpdmVUb3BvbG9neShtX3BpcGVsaW5lLT5w
cmltaXRpdmVUb3BvbG9neSgpKQorICAgICAgICBpbmRleENvdW50OmluZGV4Q291bnQKKyAgICAg
ICAgaW5kZXhUeXBlOm10bEluZGV4VHlwZUZvckdQVUluZGV4Rm9ybWF0KCptX3BpcGVsaW5lLT5p
bmRleEZvcm1hdCgpKQorICAgICAgICBpbmRleEJ1ZmZlcjptX2luZGV4QnVmZmVyLT5wbGF0Zm9y
bUJ1ZmZlcigpCisgICAgICAgIGluZGV4QnVmZmVyT2Zmc2V0OnRvdGFsT2Zmc2V0LnVuc2FmZUdl
dCgpCisgICAgICAgIGluc3RhbmNlQ291bnQ6aW5zdGFuY2VDb3VudAorICAgICAgICBiYXNlVmVy
dGV4OmJhc2VWZXJ0ZXgKKyAgICAgICAgYmFzZUluc3RhbmNlOmZpcnN0SW5zdGFuY2VdOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKICNpZiBVU0UoTUVUQUwpCiAKIHZvaWQg
R1BVUmVuZGVyUGFzc0VuY29kZXI6OnVzZVJlc291cmNlKGNvbnN0IE1UTFJlc291cmNlICpyZXNv
dXJjZSwgdW5zaWduZWQgdXNhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFs
Lm1tCmluZGV4IGZiZTI0NjA3OTg0NmVhMjY1NGE4OWRhNzNkMWJkYmExMWMyMGU2ZjEuLjBkZjFk
ZWY3MTQwZmU0NjlhYjhhNDdlZTNiYTU2ZjE4ZmMxNmEzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFs
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVS
ZW5kZXJQaXBlbGluZU1ldGFsLm1tCkBAIC01MTcsMTMgKzUxNywxNCBAQCBSZWZQdHI8R1BVUmVu
ZGVyUGlwZWxpbmU+IEdQVVJlbmRlclBpcGVsaW5lOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNl
JiBkZXZpY2UsCiAgICAgaWYgKCFwaXBlbGluZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBpcGVsaW5lKFdURk1vdmUoZGVwdGhT
dGVuY2lsKSwgV1RGTW92ZShwaXBlbGluZSksIGRlc2NyaXB0b3IucHJpbWl0aXZlVG9wb2xvZ3kp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVVJlbmRlclBpcGVsaW5lKFdURk1vdmUoZGVw
dGhTdGVuY2lsKSwgV1RGTW92ZShwaXBlbGluZSksIGRlc2NyaXB0b3IucHJpbWl0aXZlVG9wb2xv
Z3ksIGRlc2NyaXB0b3IuaW5wdXRTdGF0ZS5pbmRleEZvcm1hdCkpOwogfQogCi1HUFVSZW5kZXJQ
aXBlbGluZTo6R1BVUmVuZGVyUGlwZWxpbmUoUmV0YWluUHRyPE1UTERlcHRoU3RlbmNpbFN0YXRl
PiYmIGRlcHRoU3RlbmNpbCwgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+JiYgcGlw
ZWxpbmUsIEdQVVByaW1pdGl2ZVRvcG9sb2d5IHRvcG9sb2d5KQorR1BVUmVuZGVyUGlwZWxpbmU6
OkdQVVJlbmRlclBpcGVsaW5lKFJldGFpblB0cjxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4mJiBkZXB0
aFN0ZW5jaWwsIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiYmIHBpcGVsaW5lLCBH
UFVQcmltaXRpdmVUb3BvbG9neSB0b3BvbG9neSwgT3B0aW9uYWw8R1BVSW5kZXhGb3JtYXQ+IGZv
cm1hdCkKICAgICA6IG1fZGVwdGhTdGVuY2lsU3RhdGUoV1RGTW92ZShkZXB0aFN0ZW5jaWwpKQog
ICAgICwgbV9wbGF0Zm9ybVJlbmRlclBpcGVsaW5lKFdURk1vdmUocGlwZWxpbmUpKQogICAgICwg
bV9wcmltaXRpdmVUb3BvbG9neSh0b3BvbG9neSkKKyAgICAsIG1faW5kZXhGb3JtYXQoZm9ybWF0
KQogewogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMTgwZGQ4ZjMzYzY3Y2UzZGQ5NDE2MmMwZjMxNzBmMjg0Y2M2ODFj
Ny4uZjFjNThmMmZiNjMxNGIzYWQyYWQyNTYzNzE5YjY3NmZmOTNkMmQ3ZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDE5LTA0LTA5ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dlYiBHUFVdIEluZGV4ZWQgZHJhd2luZyBhbmQgR1BVQ29tbWFuZEVuY29k
ZXIgY3Jhc2ggcHJldmVudGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk2NzU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgor
CisgICAgICAgIEFkZCBkcmF3LWluZGV4ZWQtdHJpYW5nbGVzIHRvIHRlc3QgZHJhd2luZyBhIGdy
ZWVuIHNxdWFyZSB1c2luZyBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0SW5kZXhCdWZmZXIgYW5k
IGRyYXdJbmRleGVkLgorCisgICAgICAgICogd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlhbmdsZXMt
ZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlh
bmdsZXMuaHRtbDogQWRkZWQuCisKIDIwMTktMDQtMDkgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViIEdQVV0gR1BVUmVuZGVyUGFzc0VuY29kZXIgdXBk
YXRlczogc2V0QmxlbmRDb2xvciwgc2V0Vmlld3BvcnQsIHNldFNjaXNzb3JSZWN0CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvZHJhdy1pbmRleGVkLXRyaWFuZ2xlcy1leHBlY3RlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlhbmdsZXMtZXhwZWN0ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ODZmMTNlODEyMDM5N2E1Y2M2MzM2YzllMmE0ODVlNzc4YmE5OTMy
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlh
bmdsZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT5IVE1MIFJlZmVyZW5jZSBGaWxlPC90aXRsZT4K
KzxwPlBhc3MgaWYgc3F1YXJlIGNhbnZhcyBiZWxvdyBpcyBjb21wbGV0ZWx5IGdyZWVuLjwvcD4K
KzxjYW52YXMgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Nv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImNhbnZhcyIpOworY29uc3QgY29u
dGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOworCitjb250ZXh0LmZpbGxTdHlsZSA9ICdy
Z2IoMCwgMjU1LCAwKSc7Citjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2Fu
dmFzLmhlaWdodCk7Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJncHUvZHJhdy1pbmRleGVkLXRyaWFuZ2xlcy5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlhbmdsZXMuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZGI1ZGZjNzJmZGQ2NjI3ZDE1YjI2NTJlYWI0MzE2YTJiNjlkOTYwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ3B1L2RyYXctaW5kZXhlZC10cmlhbmdsZXMuaHRtbApAQCAt
MCwwICsxLDEyMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8
dGl0bGU+V2ViR1BVIEhlbGxvIFRyaWFuZ2xlczwvdGl0bGU+Cis8bWV0YSBuYW1lPSJhc3NlcnQi
IGNvbnRlbnQ9IldlYkdQVSBjb3JyZWN0bHkgcmVuZGVycyBhIGdyZWVuIGNhbnZhcy4iPgorPGxp
bmsgcmVsPSJtYXRjaCIgaHJlZj0iZHJhdy1pbmRleGVkLXRyaWFuZ2xlcy1leHBlY3RlZC5odG1s
Ij4KKzxwPlBhc3MgaWYgc3F1YXJlIGNhbnZhcyBiZWxvdyBpcyBjb21wbGV0ZWx5IGdyZWVuLjwv
cD4KKzxjYW52YXMgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdCBz
cmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKworY29uc3Qg
c2hhZGVyQ29kZSA9IGAKKyNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+CisgICAgCit1c2luZyBuYW1l
c3BhY2UgbWV0YWw7CisKK3N0cnVjdCBWZXJ0ZXhJbgoreworICAgIGZsb2F0NCBwb3NpdGlvbiBb
W2F0dHJpYnV0ZSgwKV1dOworICAgIGZsb2F0IGdyZWVuIFtbYXR0cmlidXRlKDEpXV07Cit9Owor
CitzdHJ1Y3QgVmVydGV4T3V0Cit7CisgICAgZmxvYXQ0IHBvc2l0aW9uIFtbcG9zaXRpb25dXTsK
KyAgICBmbG9hdDQgY29sb3I7Cit9OworCit2ZXJ0ZXggVmVydGV4T3V0IHZlcnRleF9tYWluKFZl
cnRleEluIHZlcnRleEluIFtbc3RhZ2VfaW5dXSkKK3sKKyAgICBWZXJ0ZXhPdXQgdk91dDsKKyAg
ICB2T3V0LnBvc2l0aW9uID0gdmVydGV4SW4ucG9zaXRpb247CisgICAgdk91dC5jb2xvciA9IGZs
b2F0NCgwLCB2ZXJ0ZXhJbi5ncmVlbiwgMCwgMSk7CisgICAgcmV0dXJuIHZPdXQ7Cit9CisKK2Zy
YWdtZW50IGZsb2F0NCBmcmFnbWVudF9tYWluKFZlcnRleE91dCB2IFtbc3RhZ2VfaW5dXSkKK3sK
KyAgICByZXR1cm4gdi5jb2xvcjsKK30KK2AKKworZnVuY3Rpb24gY3JlYXRlVmVydGV4QnVmZmVy
KGRldmljZSkgeworICAgIGNvbnN0IHZlcnRleEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbCisg
ICAgICAgIC8vIGZsb2F0NCB4eXp3LCBmbG9hdCBnCisgICAgICAgIC0xLCAxLCAwLCAxLCAwLAor
ICAgICAgICAtMSwgMSwgMCwgMSwgMSwKKyAgICAgICAgLTEsIC0xLCAwLCAxLCAwLAorICAgICAg
ICAtMSwgLTEsIDAsIDEsIDEsCisgICAgICAgIDEsIDEsIDAsIDEsIDAsCisgICAgICAgIDEsIDEs
IDAsIDEsIDEsCisgICAgICAgIDEsIC0xLCAwLCAxLCAwLAorICAgICAgICAxLCAtMSwgMCwgMSwg
MQorICAgIF0pOworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoeyBzaXpl
OiB2ZXJ0ZXhBcnJheS5ieXRlTGVuZ3RoLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIH0pOworICAgIGJ1ZmZlci5zZXRTdWJEYXRhKDAs
IHZlcnRleEFycmF5LmJ1ZmZlcik7CisKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitjb25zdCBp
bmRleEJ1ZmZlck9mZnNldCA9IDIwNDg7IC8vIFRlc3QgYSBidWZmZXIgb2Zmc2V0IGZvciBpbmRl
eCBhcnJheS4KK2NvbnN0IGluZGV4T2Zmc2V0ID0gLTkwMDE7IC8vIFRlc3QgYSBiYXNlIGluZGV4
IHRvIGFkZCB0byBpbmRleCBhcnJheSB2YWx1ZXMuCisKK2Z1bmN0aW9uIGNyZWF0ZUluZGV4QnVm
ZmVyKGRldmljZSkgeworICAgIGNvbnN0IG9mZnNldEFycmF5ID0gWzEsIDMsIDUsIDMsIDUsIDdd
Lm1hcCh2ID0+IHsgcmV0dXJuIHYgLSBpbmRleE9mZnNldDsgfSk7CisgICAgY29uc3QgaW5kZXhB
cnJheSA9IG5ldyBVaW50MzJBcnJheShbMSwgMywgNSwgMywgNSwgN10ubWFwKHYgPT4geyByZXR1
cm4gdiAtIGluZGV4T2Zmc2V0OyB9KSk7CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih7IHNpemU6IGluZGV4QXJyYXkuYnl0ZUxlbmd0aCArIGluZGV4QnVmZmVyT2Zmc2V0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuSU5ERVggfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9E
U1QgfSk7CisgICAgYnVmZmVyLnNldFN1YkRhdGEoaW5kZXhCdWZmZXJPZmZzZXQsIGluZGV4QXJy
YXkuYnVmZmVyKTsKKworICAgIHJldHVybiBidWZmZXI7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUlu
cHV0U3RhdGVEZXNjcmlwdG9yKCkgeworICAgIHJldHVybiB7CisgICAgICAgIGluZGV4Rm9ybWF0
OiAidWludDMyIiwKKyAgICAgICAgYXR0cmlidXRlczogW3sKKyAgICAgICAgICAgIHNoYWRlckxv
Y2F0aW9uOiAwLAorICAgICAgICAgICAgaW5wdXRTbG90OiAwLAorICAgICAgICAgICAgb2Zmc2V0
OiAwLAorICAgICAgICAgICAgZm9ybWF0OiAiZmxvYXQ0IgorICAgICAgICB9LCB7CisgICAgICAg
ICAgICBzaGFkZXJMb2NhdGlvbjogMSwKKyAgICAgICAgICAgIGlucHV0U2xvdDogMCwKKyAgICAg
ICAgICAgIG9mZnNldDogNCAqIDQsCisgICAgICAgICAgICBmb3JtYXQ6ICJmbG9hdCIKKyAgICAg
ICAgfV0sCisgICAgICAgIGlucHV0czogW3sKKyAgICAgICAgICAgIGlucHV0U2xvdDogMCwKKyAg
ICAgICAgICAgIHN0cmlkZTogNCAqIDUsCisgICAgICAgICAgICBzdGVwTW9kZTogInZlcnRleCIK
KyAgICAgICAgfV0KKyAgICB9OworfQorCithc3luYyBmdW5jdGlvbiB0ZXN0KCkgeworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGdldEJhc2ljRGV2aWNlKCk7CisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiY2FudmFzIik7CisgICAgY29uc3Qgc3dhcENoYWluID0g
Y3JlYXRlQmFzaWNTd2FwQ2hhaW4oY2FudmFzLCBkZXZpY2UpOworICAgIC8vIEZJWE1FOiBSZXBs
YWNlIHdpdGggbm9uLU1TTCBzaGFkZXJzLgorICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBzaGFkZXJDb2RlIH0pOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlciA9IGNyZWF0ZVZlcnRleEJ1ZmZlcihkZXZpY2UpOworICAgIGNvbnN0IGluZGV4
QnVmZmVyID0gY3JlYXRlSW5kZXhCdWZmZXIoZGV2aWNlKTsKKyAgICBjb25zdCBwaXBlbGluZSA9
IGNyZWF0ZUJhc2ljUGlwZWxpbmUoc2hhZGVyTW9kdWxlLCBkZXZpY2UsIG51bGwsIG51bGwsIGNy
ZWF0ZUlucHV0U3RhdGVEZXNjcmlwdG9yKCksIG51bGwsICJ0cmlhbmdsZS1saXN0Iik7CisgICAg
Y29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsKKyAg
ICBjb25zdCBwYXNzRW5jb2RlciA9IGJlZ2luQmFzaWNSZW5kZXJQYXNzKHN3YXBDaGFpbiwgY29t
bWFuZEVuY29kZXIpOworCisgICAgcGFzc0VuY29kZXIuc2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZm
ZXIsIGluZGV4QnVmZmVyT2Zmc2V0KTsKKyAgICBwYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJz
KDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHBp
cGVsaW5lKTsKKyAgICBwYXNzRW5jb2Rlci5kcmF3SW5kZXhlZCg2LCAxLCAwLCBpbmRleE9mZnNl
dCwgMCk7CisgICAgcGFzc0VuY29kZXIuZW5kUGFzcygpOworCisgICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pOworICAgIHZlcnRleEJ1ZmZlci5k
ZXN0cm95KCk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworfQorCit0ZXN0KCk7Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>