<?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>191245</bug_id>
          
          <creation_ts>2018-11-04 23:22:11 -0800</creation_ts>
          <short_desc>Clean up text decoration drawing code</short_desc>
          <delta_ts>2018-11-05 20:37:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>190774</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1474966</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-04 23:22:11 -0800</bug_when>
    <thetext>Clean up text decoration drawing code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474968</commentid>
    <comment_count>1</comment_count>
      <attachid>353832</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-04 23:26:16 -0800</bug_when>
    <thetext>Created attachment 353832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475125</commentid>
    <comment_count>2</comment_count>
      <attachid>353875</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-05 09:35:27 -0800</bug_when>
    <thetext>Created attachment 353875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475299</commentid>
    <comment_count>3</comment_count>
      <attachid>353913</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-05 15:35:49 -0800</bug_when>
    <thetext>Created attachment 353913
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475320</commentid>
    <comment_count>4</comment_count>
      <attachid>353919</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-05 16:14:56 -0800</bug_when>
    <thetext>Created attachment 353919
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475401</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-11-05 20:32:58 -0800</bug_when>
    <thetext>Committed r237844: &lt;https://trac.webkit.org/changeset/237844&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475402</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-05 20:33:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/45831120&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353832</attachid>
            <date>2018-11-04 23:26:16 -0800</date>
            <delta_ts>2018-11-05 09:35:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191245-20181104232615.patch</filename>
            <type>text/plain</type>
            <size>41511</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3Nzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAxYjZmMDcwNWM5ZWNk
ZDFhNTY2YjA2MTdjYWQ3ZWFjNWE0ZDg3NS4uNTQyYTA1OTE5NmFkN2VhMGMxN2Q4ZDA3N2ExZDQ4
NGQ2MGJjMmNjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE4LTExLTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAg
dGV4dCBkZWNvcmF0aW9uIGRyYXdpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBzb21lIGdlbmVyYWwgY2xlYW4gdXAgb2YgdGhl
IHRleHQgZGVjb3JhdGlvbnMgY29kZS4gVGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbW9kaWZpZXMgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoKSAmIGZyaWVuZHMgdG8gYWNjZXB0IGEgRmxvYXRSZWN0IGluc3RlYWQgb2YgYSBGbG9hdFBv
aW50ICsgZmxvYXQgd2lkdGguCisgICAgICAgIFRoaXMgaXMgaGVscGZ1bCBiZWNhdXNlIGl0IGFs
bG93cyBmb3IgZWFzaWVyIGJvdW5kaW5nIGJveCBjYWxjdWxhdGlvbnMuCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyByZW1vdmVzIHNvbWUgcmVkdW5kYW50IGNvbXB1dGF0aW9ucyB0aGF0IHRoZSBz
a2lwOmluayBjb2RlcGF0aCB3YXMgcGVyZm9ybWluZy4KKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IHJlZmFjdG9ycyB0aGUgd2F2eSBkZWNvcmF0aW9uIHBhcmFtZXRlcnMgdG8gbm90IHVzZSBvdXQg
cGFyYW1zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxp
bmVCb3VuZHNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29t
cHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OnRoaWNrbmVzcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVz
Rm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50TWFy
a2VkVGV4dERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRDb21wb3NpdGlvblVuZGVybGluZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6cGFpbnRGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWlu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjp0cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3Vu
ZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6VGV4dERl
Y29yYXRpb25QYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRUZXh0RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpzZXRJbmxp
bmVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpzZXRGb250
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0
QmFzZWxpbmUpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRXYXZ5U3Ryb2tlUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjp2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKToKKyAgICAgICAgKiBzdHls
ZS9JbmxpbmVUZXh0Qm94U3R5bGUuaDoKKwogMjAxOC0xMS0wNCAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIElzc3VlIGluaXRpYWwgcGFpbnQgc29vbiBh
ZnRlciB0aGUgdmlzdWFsbHlOb25FbXB0eSBtaWxlc3RvbmUgaXMgZmlyZWQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRl
eCA1ZDY2ZmI4OTQyMGExZWEwNTcxMDhkZWQ0MzM1ZmM2ZmY0MDEwYTJlLi4wYjU3NjljZDEyZDIx
ZWI3ZWE3ZTE4OTdlOWYyZWI5MDA5ODEyMWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTEwODMsMTggKzEwODMs
MTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCiB9CiAjZW5kaWYKIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29s
IHByaW50aW5nKQogewogICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVM
aW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocG9pbnQsIHdpZHRoLCBwcmludGlu
ZywgZHVtbXlDb2xvcik7CisgICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwogfQogCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGlu
ZywgQ29sb3ImIGNvbG9yKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVC
b3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJv
b2wgcHJpbnRpbmcsIENvbG9yJiBjb2xvcikKIHsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHBv
aW50OwotICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHN0cm9rZVRoaWNrbmVzcygpLCAw
LjVmKTsKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBmbG9h
dCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKICAgICBpZiAocHJp
bnRpbmcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUod2lkdGgs
IHRoaWNrbmVzcykpOworICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXpl
KHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2Fs
ZSk7CiAgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4
IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCkBAIC0xMTA4LDEyICsxMTA4LDEyIEBAIEZsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZv
clRleHQoY29uc3QgRmxvCiAgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoc2hhZGUpOwogICAgIH0KIAotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0
cmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0
cmFuc2Zvcm0ubWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICAvLyBWaXN1YWwgb3ZlcmZs
b3cgbWlnaHQgb2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxP
dmVyZmxvd0ZvckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRl
cmxpbmUgZGVjb3JhdGlvbi4KICAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9p
bnQocm91bmRmKGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwogICAg
IGlmIChhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQogICAgICAgICBvcmlnaW4g
PSBpbnZlcnNlLnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxv
YXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCB0aGlja25lc3MpKTsKKyAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggODYxOTA1MzM5YTQxZDIyYTgzMmZlNzFhM2JlZjY5MmUy
M2NhODBiMy4uZDJiMzliM2RiNGE5YzViNDdjYzljM2ZkNjk1Y2ZlZjc1M2YzNTkyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
QEAgLTQxOCw5ICs0MTgsOSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBGbG9hdFJlY3Qgcm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNp
ZGVzKTsKIAotICAgIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0
aCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOworICAgIEZsb2F0UmVjdCBj
b21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50
aW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0
eWxlID0gU29saWRTdHJva2UpOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ry
b2tlKTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwpAQCAtNjI2LDcgKzYyNiw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogCi0gICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHdpZHRoLCBib29sIHByaW50aW5nLCBDb2xvciYpOworICAgIEZsb2F0UmVjdCBjb21wdXRlTGlu
ZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wg
cHJpbnRpbmcsIENvbG9yJik7CiAKICAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JT
dHJva2VXaWR0aChmbG9hdCkgY29uc3Q7CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0
aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCBkNDhiOTI0ZWI2
MDQzNmQ4MzFhOThlNTY5NWE5MzA4MjUzOGY0MmFlLi41MDM2ODkyNmFjZjMwZWYxNGQzMzQ3NTJi
M2ZlOWM4YzhkYWIxNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApp
bmRleCBmZTExMmRkZDA2OGFmZjQzNWU1NzdlNjMzOWYwZGViNzdjZWQ5ZWVmLi4zNzQ5MDIxZjM3
Y2JkMzEwMTI2NzBhNmM3YWMwODU0NTM1Yzk0Y2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0x
NTcwLDE1ICsxNTcwLDE1IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZs
b2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4p
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgRGFzaEFycmF5IHdpZHRo
czsKLSAgICB3aWR0aHMuYXBwZW5kKHdpZHRoKTsKKyAgICB3aWR0aHMuYXBwZW5kKHJlY3Qud2lk
dGgoKSk7CiAgICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHBvaW50
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOworICAgIGRyYXdM
aW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTE1ODcsMTMgKzE1ODcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0Zv
clRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25l
c3MoKSk7CisgICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNz
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCi0gICAgRmxv
YXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQocG9pbnQsIHdpZHRocy5sYXN0KCksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKKyAg
ICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgpLCB0aGlja25l
c3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwogICAgIGJvb2wgZmlsbENvbG9ySXNO
b3RFcXVhbFRvU3Ryb2tlQ29sb3IgPSBmaWxsQ29sb3IoKSAhPSBsb2NhbFN0cm9rZUNvbG9yOwog
ICAgIAogICAgIFZlY3RvcjxDR1JlY3QsIDQ+IGRhc2hCb3VuZHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKaW5kZXggNzM1M2QzN2FmYjFjMTU2MzI2MGMxOTBkYWJlOTEzYmNj
NDM3MTYxNS4uNmY5MWNkMGU1NWQ5NjZhMzVjZTJlNDA3NDhkNjk4ZDhkZjJkZjAxZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNTkzLDcgKzU5Myw3IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYg
aXRlbSkKIAogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7Ci0gICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50KCksIG1f
d2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKKyAgICBjb250ZXh0LmRyYXdMaW5l
c0ZvclRleHQocG9pbnQoKSwgbV90aGlja25lc3MsIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2Rv
dWJsZUxpbmVzKTsKIH0KIAogc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRl
eHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CkBAIC02MDMsNyAr
NjAzLDcgQEAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGMKICAgICBpZiAoIW1fd2lkdGhzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IHJlc3VsdChw
b2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9rZVdpZHRoKSk7CisgICAg
RmxvYXRSZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3Ro
aWNrbmVzcykpOwogICAgIHJlc3VsdC5pbmZsYXRlKDEpOyAvLyBBY2NvdW50IGZvciBwaXhlbCBz
bmFwcGluZy4gRklYTUU6IFRoaXMgaXNuJ3QgcGVyZmVjdCwgYXMgaXQgZG9lc24ndCB0YWtlIHRo
ZSBDVE0gaW50byBhY2NvdW50LgogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02MTQsNiArNjE0
LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2Nh
dGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImxvY2Fs
LWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwb2lu
dCIsIGl0ZW0ucG9pbnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aGlja25lc3MiLCBpdGVt
LnRoaWNrbmVzcygpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91Ymxl
TGluZXMoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndpZHRocygpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50aW5nKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggN2M3ZWI2ZDcyZjEwZDFmMjZkMDE4
Njc4MWIwMjJjNmQzOTIxNDAzZC4uMmI3ZDE0Y2IwNWQyMDYzNjY2MTgyMzdiNDUxYTRhNGNiMWNi
NmUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC03OTEsMjYgKzc5MSwy
NyBAQCBwcml2YXRlOgogCiBjbGFzcyBEcmF3TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJ
dGVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5j
aG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCisgICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0
PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3Is
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VXaWR0aCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24sIGxvY2Fs
QW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7CiAgICAg
fQogCiAgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9j
YXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQogICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb247
IH0KICAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9s
b2NhbEFuY2hvcjsgfQogICAgIEZsb2F0UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisgICAgZmxvYXQgdGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KICAgICBjb25zdCBEYXNoQXJyYXkmIHdpZHRocygp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzOyB9CiAgICAgYm9vbCBpc1ByaW50aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmludGluZzsgfQogICAgIGJvb2wgZG91YmxlTGluZXMoKSBjb25zdCB7IHJl
dHVybiBtX2RvdWJsZUxpbmVzOyB9CiAKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5j
aG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCisgICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKQogICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0KQogICAgICAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQogICAgICAg
ICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCiAgICAgICAgICwgbV93aWR0aHMod2lkdGhz
KQotICAgICAgICAsIG1fc3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgpCisgICAgICAgICwgbV90aGlj
a25lc3ModGhpY2tuZXNzKQogICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRpbmcpCiAgICAgICAg
ICwgbV9kb3VibGVMaW5lcyhkb3VibGVMaW5lcykKICAgICB7CkBAIC04MjMsNyArODI0LDcgQEAg
cHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKICAgICBGbG9hdFNpemUg
bV9sb2NhbEFuY2hvcjsKICAgICBEYXNoQXJyYXkgbV93aWR0aHM7Ci0gICAgZmxvYXQgbV9zdHJv
a2VXaWR0aDsKKyAgICBmbG9hdCBtX3RoaWNrbmVzczsKICAgICBib29sIG1fcHJpbnRpbmc7CiAg
ICAgYm9vbCBtX2RvdWJsZUxpbmVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcAppbmRleCA1MzA3ZjAyNWZiMjE4MDMyMjk5NThjYWY5MmI1MzlhNTJjZGM2NjIy
Li45MDM5Yjc4ZWUyYWY0ZGQ0ODlkM2FmYjZlNjc0ZTExNWFlYmMwOGJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0yMzAsOSArMjMwLDkgQEAgdm9pZCBS
ZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDIpCiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCiB7Ci0gICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZXNGb3JU
ZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHdpZHRocywgcHJp
bnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MpKSk7CisgICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZXNGb3JU
ZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChu
ZXdJdGVtKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXgg
MWI3OTQzN2FjNzAyODI2NmNmNDlkM2E0NTQxZTY5ZDc4YWM5YTFlYi4uYjY5ZDQ0ZWYyZWJkNjYz
ZTM5N2Q2YTQwNWM4ZjYwY2U4MTZmZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBvdmVycmlkZTsKICAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggN2NiYzA3OGNh
YjI3ZWEyZTIxNTQwMDdjMTRlY2M5MWJjMjI3ZDJmNi4uZjMxMTNkNjQxZWQ4YWYyOGM5ZTM1MzA3
YzlmYTg4NDY4NTViNjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcApAQCAtMTA5MCwxMSArMTA5MCw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRN
YXJrZWRUZXh0RGVjb3JhdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSCiAg
ICAgfQogCiAgICAgLy8gMi4gUGFpbnQKLSAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3Jh
dGlvblBhaW50ZXIgeyBjb250ZXh0LCBsaW5lU3R5bGUoKS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCgpLCByZW5kZXJlcigpLCBpc0ZpcnN0TGluZSgpLCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNv
cmF0aW9uU3R5bGVzIH07CisgICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29yYXRpb25QYWlu
dGVyIHsgY29udGV4dCwgbGluZVN0eWxlKCkudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgcmVu
ZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbGluZUZvbnQoKSwgbWFya2VkVGV4dC5zdHlsZS50ZXh0
RGVjb3JhdGlvblN0eWxlcyB9OwogICAgIGRlY29yYXRpb25QYWludGVyLnNldElubGluZVRleHRC
b3godGhpcyk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0Rm9udChsaW5lRm9udCgpKTsKICAg
ICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgp
KTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRCYXNlbGluZShsaW5lU3R5bGUoKS5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwo
aXNIb3Jpem9udGFsKCkpOwogICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsK
ICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFNoYWRvdygmbWFya2VkVGV4dC5zdHls
ZS50ZXh0U2hhZG93LnZhbHVlKCkpOwpAQCAtMTIwMCw3ICsxMTk4LDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBGbG9hdFAKICAgICBDb2xvciB1bmRlcmxpbmVDb2xvciA9IHVuZGVybGluZS5jb21wb3Np
dGlvblVuZGVybGluZUNvbG9yID09IENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xv
ciA/IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0
ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSA6IHJlbmRlcmVyKCkuc3R5bGUoKS5j
b2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcih1bmRlcmxpbmUuY29sb3IpOwogICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgbG9naWNhbEhlaWdo
dCgpIC0gbGluZVRoaWNrbmVzcyksIHdpZHRoLCByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRp
bmcoKSk7CisgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KGJveE9yaWdpbi54
KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25l
c3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5n
KCkpOwogfQogCiBpbnQgSW5saW5lVGV4dEJveDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwCmluZGV4IDc1NTFhOWZkNmNkNjA5MmE3ZWMwYmI2Njk3OTNhZmZhZDRlNGQ5ODMuLmQy
NmMwNDgzYzg0NTU2OGY3ZjY4ZDVhOTJiNTc1ZTNhOGIyMTYzMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKQEAg
LTk3LDkgKzk3LDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93
LCBjb25zdCBMYXlvdXQmIGxheW91dCwgUGFpbnRJbmZvJiBwYWkKICAgICBpZiAoIXN0eWxlLnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRl
clRleHQqIHRleHRSZW5kZXJlciA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpLmZp
cnN0KCk7CiAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIpIHsKLSAgICAgICAgICAgIHRleHREZWNv
cmF0aW9uUGFpbnRlci5lbXBsYWNlKHBhaW50SW5mby5jb250ZXh0KCksIHN0eWxlLnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCksICp0ZXh0UmVuZGVyZXIsIGZhbHNlKTsKLSAgICAgICAgICAgIHRl
eHREZWNvcmF0aW9uUGFpbnRlci0+c2V0Rm9udChzdHlsZS5mb250Q2FzY2FkZSgpKTsKLSAgICAg
ICAgICAgIHRleHREZWNvcmF0aW9uUGFpbnRlci0+c2V0QmFzZWxpbmUoc3R5bGUuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblBhaW50ZXIuZW1wbGFj
ZShwYWludEluZm8uY29udGV4dCgpLCBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCAq
dGV4dFJlbmRlcmVyLCBmYWxzZSwgc3R5bGUuZm9udENhc2NhZGUoKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlv
blBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHAKaW5kZXggOThlODhkYzQ4MDVkNmE1ZGE3YWE1NDIwNWRkYjE2ZTc0MTY5ODk4MC4u
OWI4NTk1YzAzZTYwZjUxMWQ0NDkwZjBiNmVlMzFhZDNlZjVmNTA3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTgxLDc1
ICs4MSwzOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTdGVwVG9EZWNvcmF0aW9uTGVuZ3RoKGZsb2F0
JiBzdGVwLCBmbG9hdCYgY29udHJvbFBvaW50RGlzdGFuYwogICogICAgICAgICAgICAgfC0tLS0t
LS0tLS0tfAogICogICAgICAgICAgICAgICAgIHN0ZXAKICAqLwotc3RhdGljIHZvaWQgc3Ryb2tl
V2F2eVRleHREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
LCBmbG9hdCBmb250U2l6ZSkKK3N0YXRpYyB2b2lkIHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgZm9u
dFNpemUpCiB7Ci0gICAgRmxvYXRQb2ludCBwMSA9IHN0YXJ0OwotICAgIEZsb2F0UG9pbnQgcDIg
PSBlbmQ7Ci0gICAgY29udGV4dC5hZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCBz
dHJva2VUaGlja25lc3MsIGNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7CisgICAgRmxvYXRQb2ludCBw
MSA9IHJlY3QubWluWE1pbllDb3JuZXIoKTsKKyAgICBGbG9hdFBvaW50IHAyID0gcmVjdC5tYXhY
TWluWUNvcm5lcigpOworICAgIGNvbnRleHQuYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKHAx
LCBwMiwgcmVjdC5oZWlnaHQoKSwgY29udGV4dC5zdHJva2VTdHlsZSgpKTsKIAogICAgIFBhdGgg
cGF0aDsKICAgICBwYXRoLm1vdmVUbyhwMSk7CiAKLSAgICBmbG9hdCBjb250cm9sUG9pbnREaXN0
YW5jZTsKLSAgICBmbG9hdCBzdGVwOwotICAgIGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKGZvbnRT
aXplLCBjb250cm9sUG9pbnREaXN0YW5jZSwgc3RlcCk7CisgICAgYXV0byB3YXZ5U3Ryb2tlUGFy
YW1ldGVycyA9IGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKGZvbnRTaXplKTsKIAotICAgIGJvb2wg
aXNWZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CisgICAgQVNTRVJUKHAxLnkoKSA9
PSBwMi55KCkpOwogCi0gICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgIEFTU0VSVChw
MS54KCkgPT0gcDIueCgpKTsKKyAgICBmbG9hdCB5QXhpcyA9IHAxLnkoKTsKKyAgICBmbG9hdCB4
MSA9IHN0ZDo6bWluKHAxLngoKSwgcDIueCgpKTsKKyAgICBmbG9hdCB4MiA9IHN0ZDo6bWF4KHAx
LngoKSwgcDIueCgpKTsKIAotICAgICAgICBmbG9hdCB4QXhpcyA9IHAxLngoKTsKLSAgICAgICAg
ZmxvYXQgeTE7Ci0gICAgICAgIGZsb2F0IHkyOworICAgIGFkanVzdFN0ZXBUb0RlY29yYXRpb25M
ZW5ndGgod2F2eVN0cm9rZVBhcmFtZXRlcnMuc3RlcCwgd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29u
dHJvbFBvaW50RGlzdGFuY2UsIHgyIC0geDEpOworICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50
MSgwLCB5QXhpcyArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2ludERpc3RhbmNlKTsK
KyAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDIoMCwgeUF4aXMgLSB3YXZ5U3Ryb2tlUGFyYW1l
dGVycy5jb250cm9sUG9pbnREaXN0YW5jZSk7CiAKLSAgICAgICAgaWYgKHAxLnkoKSA8IHAyLnko
KSkgewotICAgICAgICAgICAgeTEgPSBwMS55KCk7Ci0gICAgICAgICAgICB5MiA9IHAyLnkoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHkxID0gcDIueSgpOwotICAgICAgICAgICAg
eTIgPSBwMS55KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGp1c3RTdGVwVG9EZWNvcmF0aW9u
TGVuZ3RoKHN0ZXAsIGNvbnRyb2xQb2ludERpc3RhbmNlLCB5MiAtIHkxKTsKLSAgICAgICAgRmxv
YXRQb2ludCBjb250cm9sUG9pbnQxKHhBeGlzICsgY29udHJvbFBvaW50RGlzdGFuY2UsIDApOwot
ICAgICAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDIoeEF4aXMgLSBjb250cm9sUG9pbnREaXN0
YW5jZSwgMCk7Ci0KLSAgICAgICAgZm9yIChmbG9hdCB5ID0geTE7IHkgKyAyICogc3RlcCA8PSB5
MjspIHsKLSAgICAgICAgICAgIGNvbnRyb2xQb2ludDEuc2V0WSh5ICsgc3RlcCk7Ci0gICAgICAg
ICAgICBjb250cm9sUG9pbnQyLnNldFkoeSArIHN0ZXApOwotICAgICAgICAgICAgeSArPSAyICog
c3RlcDsKLSAgICAgICAgICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhjb250cm9sUG9pbnQxLCBj
b250cm9sUG9pbnQyLCBGbG9hdFBvaW50KHhBeGlzLCB5KSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBBU1NFUlQocDEueSgpID09IHAyLnkoKSk7Ci0KLSAgICAgICAgZmxvYXQg
eUF4aXMgPSBwMS55KCk7Ci0gICAgICAgIGZsb2F0IHgxOwotICAgICAgICBmbG9hdCB4MjsKLQot
ICAgICAgICBpZiAocDEueCgpIDwgcDIueCgpKSB7Ci0gICAgICAgICAgICB4MSA9IHAxLngoKTsK
LSAgICAgICAgICAgIHgyID0gcDIueCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
eDEgPSBwMi54KCk7Ci0gICAgICAgICAgICB4MiA9IHAxLngoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGFkanVzdFN0ZXBUb0RlY29yYXRpb25MZW5ndGgoc3RlcCwgY29udHJvbFBvaW50RGlzdGFu
Y2UsIHgyIC0geDEpOwotICAgICAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDEoMCwgeUF4aXMg
KyBjb250cm9sUG9pbnREaXN0YW5jZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50
MigwLCB5QXhpcyAtIGNvbnRyb2xQb2ludERpc3RhbmNlKTsKLQotICAgICAgICBmb3IgKGZsb2F0
IHggPSB4MTsgeCArIDIgKiBzdGVwIDw9IHgyOykgewotICAgICAgICAgICAgY29udHJvbFBvaW50
MS5zZXRYKHggKyBzdGVwKTsKLSAgICAgICAgICAgIGNvbnRyb2xQb2ludDIuc2V0WCh4ICsgc3Rl
cCk7Ci0gICAgICAgICAgICB4ICs9IDIgKiBzdGVwOwotICAgICAgICAgICAgcGF0aC5hZGRCZXpp
ZXJDdXJ2ZVRvKGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIsIEZsb2F0UG9pbnQoeCwgeUF4
aXMpKTsKLSAgICAgICAgfQorICAgIGZvciAoZmxvYXQgeCA9IHgxOyB4ICsgMiAqIHdhdnlTdHJv
a2VQYXJhbWV0ZXJzLnN0ZXAgPD0geDI7KSB7CisgICAgICAgIGNvbnRyb2xQb2ludDEuc2V0WCh4
ICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMuc3RlcCk7CisgICAgICAgIGNvbnRyb2xQb2ludDIuc2V0
WCh4ICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMuc3RlcCk7CisgICAgICAgIHggKz0gMiAqIHdhdnlT
dHJva2VQYXJhbWV0ZXJzLnN0ZXA7CisgICAgICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhjb250
cm9sUG9pbnQxLCBjb250cm9sUG9pbnQyLCBGbG9hdFBvaW50KHgsIHlBeGlzKSk7CiAgICAgfQog
CiAgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgYXV0byBzdHJva2VU
aGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOworICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKHJlY3QuaGVpZ2h0KCkpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MpOwogfQog
CiAjaWYgRU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OX1NLSVBfSU5LKQpAQCAtMjAzLDE4ICsx
NjcsNiBAQCBzdGF0aWMgRGFzaEFycmF5IHRyYW5zbGF0ZUludGVyc2VjdGlvblBvaW50c1RvU2tp
cElua0JvdW5kYXJpZXMoY29uc3QgRGFzaEFycmF5JgogICAgIAogICAgIHJldHVybiByZXN1bHQ7
CiB9Ci0KLXN0YXRpYyB2b2lkIGRyYXdTa2lwSW5rVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsT3Jp
Z2luLAotICAgIGZsb2F0IHVuZGVybGluZU9mZnNldCwgZmxvYXQgd2lkdGgsIGJvb2wgaXNQcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAg
RmxvYXRQb2ludCBhZGp1c3RlZExvY2FsT3JpZ2luID0gbG9jYWxPcmlnaW47Ci0gICAgYWRqdXN0
ZWRMb2NhbE9yaWdpbi5tb3ZlKDAsIHVuZGVybGluZU9mZnNldCk7Ci0gICAgRmxvYXRSZWN0IHVu
ZGVybGluZUJvdW5kaW5nQm94ID0gY29udGV4dC5jb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChhZGp1c3RlZExvY2FsT3JpZ2luLCB3aWR0aCwgaXNQcmludGluZyk7Ci0gICAgRGFzaEFycmF5
IGludGVyc2VjdGlvbnMgPSBmb250LmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCh0ZXh0
UnVuLCB0ZXh0T3JpZ2luLCB1bmRlcmxpbmVCb3VuZGluZ0JveCk7Ci0gICAgRGFzaEFycmF5IGEg
PSB0cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGludGVyc2Vj
dGlvbnMsIHVuZGVybGluZUJvdW5kaW5nQm94LmhlaWdodCgpLCB3aWR0aCk7Ci0gICAgQVNTRVJU
KCEoYS5zaXplKCkgJSAyKSk7Ci0gICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KGFkanVzdGVk
TG9jYWxPcmlnaW4sIGEsIGlzUHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7Ci19
CiAjZW5kaWYKIAogc3RhdGljIFN0cm9rZVN0eWxlIHRleHREZWNvcmF0aW9uU3R5bGVUb1N0cm9r
ZVN0eWxlKFRleHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlKQpAQCAtMjQ3LDExICsx
OTksMTIgQEAgYm9vbCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxlczo6b3BlcmF0b3I9PShj
b25zdCBTdHlsZXMmIG90aGVyKSBjb25zdAogICAgICAgICAmJiB1bmRlcmxpbmVTdHlsZSA9PSBv
dGhlci51bmRlcmxpbmVTdHlsZSAmJiBvdmVybGluZVN0eWxlID09IG90aGVyLm92ZXJsaW5lU3R5
bGUgJiYgbGluZXRocm91Z2hTdHlsZSA9PSBvdGhlci5saW5ldGhyb3VnaFN0eWxlOwogfQogCi1U
ZXh0RGVjb3JhdGlvblBhaW50ZXI6OlRleHREZWNvcmF0aW9uUGFpbnRlcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gZGVjb3JhdGlvbnMsIGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlcmVyLCBib29sIGlzRmlyc3RMaW5lLCBzdGQ6Om9wdGlvbmFsPFN0
eWxlcz4gc3R5bGVzKQorVGV4dERlY29yYXRpb25QYWludGVyOjpUZXh0RGVjb3JhdGlvblBhaW50
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRl
Y29yYXRpb25zLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCBpc0ZpcnN0TGluZSwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIHN0ZDo6b3B0aW9uYWw8U3R5bGVzPiBzdHlsZXMpCiAg
ICAgOiBtX2NvbnRleHQgeyBjb250ZXh0IH0KICAgICAsIG1fZGVjb3JhdGlvbnMgeyBkZWNvcmF0
aW9ucyB9CiAgICAgLCBtX3dhdnlPZmZzZXQgeyB3YXZ5T2Zmc2V0RnJvbURlY29yYXRpb24oKSB9
CiAgICAgLCBtX2lzUHJpbnRpbmcgeyByZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5nKCkgfQor
ICAgICwgbV9mb250IHsgZm9udCB9CiAgICAgLCBtX3N0eWxlcyB7IHN0eWxlcyA/ICpXVEZNb3Zl
KHN0eWxlcykgOiBzdHlsZXNGb3JSZW5kZXJlcihyZW5kZXJlciwgZGVjb3JhdGlvbnMsIGlzRmly
c3RMaW5lLCBQc2V1ZG9JZDo6Tm9uZSkgfQogICAgICwgbV9saW5lU3R5bGUgeyBpc0ZpcnN0TGlu
ZSA/IHJlbmRlcmVyLmZpcnN0TGluZVN0eWxlKCkgOiByZW5kZXJlci5zdHlsZSgpIH0KIHsKQEAg
LTI2MywzMSArMjE2LDM2IEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludFRleHRE
ZWNvcmF0aW9uKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsCiAgICAgVU5VU0VEX1BB
UkFNKHRleHRSdW4pOwogICAgIFVOVVNFRF9QQVJBTSh0ZXh0T3JpZ2luKTsKICNlbmRpZgotICAg
IEFTU0VSVChtX2ZvbnQpOworICAgIGNvbnN0IGF1dG8mIGZvbnRNZXRyaWNzID0gbV9saW5lU3R5
bGUuZm9udE1ldHJpY3MoKTsKICAgICBmbG9hdCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyA9IHRl
eHREZWNvcmF0aW9uU3Ryb2tlVGhpY2tuZXNzKG1fbGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVs
U2l6ZSgpKTsKLSAgICBtX2NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHRleHREZWNvcmF0aW9u
VGhpY2tuZXNzKTsKICAgICBGbG9hdFBvaW50IGxvY2FsT3JpZ2luID0gYm94T3JpZ2luOwogCi0g
ICAgYXV0byBwYWludERlY29yYXRpb24gPSBbJl0gKE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4g
ZGVjb3JhdGlvbiwgVGV4dERlY29yYXRpb25TdHlsZSBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9y
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kLCBpbnQgb2Zm
c2V0KSB7CisgICAgYXV0byBwYWludERlY29yYXRpb24gPSBbJl0gKFRleHREZWNvcmF0aW9uIGRl
Y29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUgc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvciwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSB7CiAgICAgICAgIG1fY29udGV4dC5zZXRTdHJva2VDb2xv
cihjb2xvcik7CiAKICAgICAgICAgYXV0byBzdHJva2VTdHlsZSA9IHRleHREZWNvcmF0aW9uU3R5
bGVUb1N0cm9rZVN0eWxlKHN0eWxlKTsKIAogICAgICAgICBpZiAoc3R5bGUgPT0gVGV4dERlY29y
YXRpb25TdHlsZTo6V2F2eSkKLSAgICAgICAgICAgIHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbiht
X2NvbnRleHQsIHN0YXJ0LCBlbmQsIHRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCBtX2xpbmVTdHls
ZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSk7CisgICAgICAgICAgICBzdHJva2VXYXZ5VGV4dERl
Y29yYXRpb24obV9jb250ZXh0LCByZWN0LCBtX2xpbmVTdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNp
emUoKSk7CiAgICAgICAgIGVsc2UgaWYgKGRlY29yYXRpb24gPT0gVGV4dERlY29yYXRpb246OlVu
ZGVybGluZSB8fCBkZWNvcmF0aW9uID09IFRleHREZWNvcmF0aW9uOjpPdmVybGluZSkgewogI2lm
IEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lOSykKICAgICAgICAgICAgIGlmICgo
bV9saW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwOjpJ
bmsgfHwgbV9saW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25T
a2lwOjpBdXRvKSAmJiBtX2lzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgIGlmICghbV9j
b250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZHJhd1NraXBJ
bmtVbmRlcmxpbmUobV9jb250ZXh0LCAqbV9mb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBsb2Nh
bE9yaWdpbiwgb2Zmc2V0LCBtX3dpZHRoLCBtX2lzUHJpbnRpbmcsIHN0eWxlID09IFRleHREZWNv
cmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUpOworICAgICAgICAgICAgICAgIGlmICgh
bV9jb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBGbG9h
dFJlY3QgdW5kZXJsaW5lQm91bmRpbmdCb3ggPSBtX2NvbnRleHQuY29tcHV0ZVVuZGVybGluZUJv
dW5kc0ZvclRleHQocmVjdCwgbV9pc1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgRGFz
aEFycmF5IGludGVyc2VjdGlvbnMgPSBtX2ZvbnQuZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhS
ZWN0KHRleHRSdW4sIHRleHRPcmlnaW4sIHVuZGVybGluZUJvdW5kaW5nQm94KTsKKyAgICAgICAg
ICAgICAgICAgICAgRGFzaEFycmF5IGJvdW5kYXJpZXMgPSB0cmFuc2xhdGVJbnRlcnNlY3Rpb25Q
b2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGludGVyc2VjdGlvbnMsIHVuZGVybGluZUJvdW5kaW5n
Qm94LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IShib3VuZGFyaWVzLnNpemUoKSAlIDIpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgdXNlIHVuZGVybGluZUJvdW5kaW5nQm94IGhlcmUgYmVjYXVzZSBkcmF3TGluZXNGb3JUZXh0
KCkgd2lsbCBydW4gY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoKSBpbnRlcm5hbGx5Lgor
ICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0
aW9uKCksIHJlY3QuaGVpZ2h0KCksIGJvdW5kYXJpZXMsIG1faXNQcmludGluZywgc3R5bGUgPT0g
VGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQg
dG8gc3VwcG9ydCB0ZXh0LWRlY29yYXRpb24tc2tpcDogbm9uZS4KICNlbmRpZgotICAgICAgICAg
ICAgICAgIG1fY29udGV4dC5kcmF3TGluZUZvclRleHQoc3RhcnQsIG1fd2lkdGgsIG1faXNQcmlu
dGluZywgc3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7
CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LmRyYXdMaW5lRm9yVGV4dChyZWN0LCBtX2lzUHJp
bnRpbmcsIHN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUp
OwogICAgICAgICAgICAgCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoZGVj
b3JhdGlvbiA9PSBUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gpOwotICAgICAgICAgICAgbV9j
b250ZXh0LmRyYXdMaW5lRm9yVGV4dChzdGFydCwgbV93aWR0aCwgbV9pc1ByaW50aW5nLCBzdHls
ZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC5kcmF3TGluZUZvclRleHQocmVjdCwgbV9pc1ByaW50aW5nLCBzdHlsZSA9
PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgfQog
ICAgIH07CiAKQEAgLTI5OCwxMCArMjU2LDEwIEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVy
OjpwYWludFRleHREZWNvcmF0aW9uKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsCiAg
ICAgaW50IGV4dHJhT2Zmc2V0ID0gMDsKICAgICBib29sIGNsaXBwaW5nID0gIWFyZUxpbmVzT3Bh
cXVlICYmIG1fc2hhZG93ICYmIG1fc2hhZG93LT5uZXh0KCk7CiAgICAgaWYgKGNsaXBwaW5nKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lk
dGgsIG1fYmFzZWxpbmUgKyAyKSk7CisgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdChsb2NhbE9y
aWdpbiwgRmxvYXRTaXplKG1fd2lkdGgsIGZvbnRNZXRyaWNzLmFzY2VudCgpICsgMikpOwogICAg
ICAgICBmb3IgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IG1fc2hhZG93OyBzaGFkb3c7IHNo
YWRvdyA9IHNoYWRvdy0+bmV4dCgpKSB7CiAgICAgICAgICAgICBpbnQgc2hhZG93RXh0ZW50ID0g
c2hhZG93LT5wYWludGluZ0V4dGVudCgpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6ZShtX3dpZHRoLCBtX2Jhc2VsaW5lICsgMikpOworICAg
ICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6ZShtX3dp
ZHRoLCBmb250TWV0cmljcy5hc2NlbnQoKSArIDIpKTsKICAgICAgICAgICAgIHNoYWRvd1JlY3Qu
aW5mbGF0ZShzaGFkb3dFeHRlbnQpOwogICAgICAgICAgICAgaW50IHNoYWRvd1ggPSBtX2lzSG9y
aXpvbnRhbCA/IHNoYWRvdy0+eCgpIDogc2hhZG93LT55KCk7CiAgICAgICAgICAgICBpbnQgc2hh
ZG93WSA9IG1faXNIb3Jpem9udGFsID8gc2hhZG93LT55KCkgOiAtc2hhZG93LT54KCk7CkBAIC0z
MTEsNyArMjY5LDcgQEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50VGV4dERlY29y
YXRpb24oY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmwKICAgICAgICAgfQogICAgICAg
ICBtX2NvbnRleHQuc2F2ZSgpOwogICAgICAgICBtX2NvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0g
ICAgICAgIGV4dHJhT2Zmc2V0ICs9IG1fYmFzZWxpbmUgKyAyOworICAgICAgICBleHRyYU9mZnNl
dCArPSBmb250TWV0cmljcy5hc2NlbnQoKSArIDI7CiAgICAgICAgIGxvY2FsT3JpZ2luLm1vdmUo
MCwgZXh0cmFPZmZzZXQpOwogICAgIH0KIApAQCAtMzM3LDIwICsyOTUsMjAgQEAgdm9pZCBUZXh0
RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50VGV4dERlY29yYXRpb24oY29uc3QgVGV4dFJ1biYgdGV4
dFJ1biwgY29uc3QgRmwKICAgICAgICAgaWYgKG1fZGVjb3JhdGlvbnMuY29udGFpbnMoVGV4dERl
Y29yYXRpb246OlVuZGVybGluZSkpIHsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSBjb21wdXRl
VW5kZXJsaW5lT2Zmc2V0KG1fbGluZVN0eWxlLnRleHRVbmRlcmxpbmVQb3NpdGlvbigpLCBtX2xp
bmVTdHlsZS5mb250TWV0cmljcygpLCBtX2lubGluZVRleHRCb3gsIHRleHREZWNvcmF0aW9uVGhp
Y2tuZXNzKTsKICAgICAgICAgICAgIGZsb2F0IHdhdnlPZmZzZXQgPSBtX3N0eWxlcy51bmRlcmxp
bmVTdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpXYXZ5ID8gbV93YXZ5T2Zmc2V0IDogMDsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgc3RhcnQgPSBsb2NhbE9yaWdpbiArIEZsb2F0U2l6ZSgw
LCBvZmZzZXQgKyB3YXZ5T2Zmc2V0KTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5kID0gbG9j
YWxPcmlnaW4gKyBGbG9hdFNpemUobV93aWR0aCwgb2Zmc2V0ICsgd2F2eU9mZnNldCk7Ci0gICAg
ICAgICAgICBwYWludERlY29yYXRpb24oVGV4dERlY29yYXRpb246OlVuZGVybGluZSwgbV9zdHls
ZXMudW5kZXJsaW5lU3R5bGUsIG1fc3R5bGVzLnVuZGVybGluZUNvbG9yLCBzdGFydCwgZW5kLCBv
ZmZzZXQpOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6
ZShtX3dpZHRoLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcykpOworICAgICAgICAgICAgcmVjdC5t
b3ZlKDAsIG9mZnNldCArIHdhdnlPZmZzZXQpOworICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9u
KFRleHREZWNvcmF0aW9uOjpVbmRlcmxpbmUsIG1fc3R5bGVzLnVuZGVybGluZVN0eWxlLCBtX3N0
eWxlcy51bmRlcmxpbmVDb2xvciwgcmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZGVj
b3JhdGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246Ok92ZXJsaW5lKSkgewogICAgICAgICAg
ICAgZmxvYXQgd2F2eU9mZnNldCA9IG1fc3R5bGVzLm92ZXJsaW5lU3R5bGUgPT0gVGV4dERlY29y
YXRpb25TdHlsZTo6V2F2eSA/IG1fd2F2eU9mZnNldCA6IDA7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IHN0YXJ0ID0gbG9jYWxPcmlnaW4gLSBGbG9hdFNpemUoMCwgd2F2eU9mZnNldCk7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IGVuZCA9IGxvY2FsT3JpZ2luICsgRmxvYXRTaXplKG1fd2lkdGgs
IC13YXZ5T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlv
bjo6T3ZlcmxpbmUsIG1fc3R5bGVzLm92ZXJsaW5lU3R5bGUsIG1fc3R5bGVzLm92ZXJsaW5lQ29s
b3IsIHN0YXJ0LCBlbmQsIDApOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QobG9jYWxPcmln
aW4sIEZsb2F0U2l6ZShtX3dpZHRoLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcykpOworICAgICAg
ICAgICAgcmVjdC5tb3ZlKDAsIC13YXZ5T2Zmc2V0KTsKKyAgICAgICAgICAgIHBhaW50RGVjb3Jh
dGlvbihUZXh0RGVjb3JhdGlvbjo6T3ZlcmxpbmUsIG1fc3R5bGVzLm92ZXJsaW5lU3R5bGUsIG1f
c3R5bGVzLm92ZXJsaW5lQ29sb3IsIHJlY3QpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2Rl
Y29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkpIHsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgc3RhcnQgPSBsb2NhbE9yaWdpbiArIEZsb2F0U2l6ZSgwLCAyICog
bV9iYXNlbGluZSAvIDMpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBlbmQgPSBsb2NhbE9yaWdp
biArIEZsb2F0U2l6ZShtX3dpZHRoLCAyICogbV9iYXNlbGluZSAvIDMpOwotICAgICAgICAgICAg
cGFpbnREZWNvcmF0aW9uKFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCwgbV9zdHlsZXMubGlu
ZXRocm91Z2hTdHlsZSwgbV9zdHlsZXMubGluZXRocm91Z2hDb2xvciwgc3RhcnQsIGVuZCwgMCk7
CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lk
dGgsIHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUoMCwg
MiAqIGZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkgLyAzKTsKKyAgICAgICAgICAgIHBhaW50RGVj
b3JhdGlvbihUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gsIG1fc3R5bGVzLmxpbmV0aHJvdWdo
U3R5bGUsIG1fc3R5bGVzLmxpbmV0aHJvdWdoQ29sb3IsIHJlY3QpOwogICAgICAgICB9CiAgICAg
fSB3aGlsZSAoc2hhZG93KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRE
ZWNvcmF0aW9uUGFpbnRlci5oCmluZGV4IDAyOTRhNDYzYzdmNGI0OWJjOTg1MTFlZmQyY2ZhMDg1
N2RkY2MzMTQuLmE2ZDE0YjJiNWY0NTYzNzgzNjAyYTJlYTc5MDA0NmVmOWM4MDFiMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmgKQEAg
LTQyLDEzICs0MiwxMSBAQCBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVGV4dERlY29yYXRpb25QYWlu
dGVyIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3R5bGVzOwotICAgIFRleHREZWNvcmF0aW9uUGFp
bnRlcihHcmFwaGljc0NvbnRleHQmLCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRlY29yYXRp
b25zLCBjb25zdCBSZW5kZXJUZXh0JiwgYm9vbCBpc0ZpcnN0TGluZSwgc3RkOjpvcHRpb25hbDxT
dHlsZXM+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBkZWNvcmF0aW9ucywgY29uc3Qg
UmVuZGVyVGV4dCYsIGJvb2wgaXNGaXJzdExpbmUsIGNvbnN0IEZvbnRDYXNjYWRlJiwgc3RkOjpv
cHRpb25hbDxTdHlsZXM+ID0gc3RkOjpudWxsb3B0KTsKICAgICAKICAgICB2b2lkIHNldElubGlu
ZVRleHRCb3goY29uc3QgSW5saW5lVGV4dEJveCogaW5saW5lVGV4dEJveCkgeyBtX2lubGluZVRl
eHRCb3ggPSBpbmxpbmVUZXh0Qm94OyB9Ci0gICAgdm9pZCBzZXRGb250KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KSB7IG1fZm9udCA9ICZmb250OyB9CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwo
Ym9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IH0KICAg
ICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQotICAgIHZv
aWQgc2V0QmFzZWxpbmUoZmxvYXQgYmFzZWxpbmUpIHsgbV9iYXNlbGluZSA9IGJhc2VsaW5lOyB9
CiAgICAgdm9pZCBzZXRUZXh0U2hhZG93KGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3cpIHsg
bV9zaGFkb3cgPSB0ZXh0U2hhZG93OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dDb2xvckZpbHRlcihj
b25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlcikgeyBtX3NoYWRvd0NvbG9yRmlsdGVy
ID0gY29sb3JGaWx0ZXI7IH0KIApAQCAtNzIsMTQgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgT3B0
aW9uU2V0PFRleHREZWNvcmF0aW9uPiBtX2RlY29yYXRpb25zOwogICAgIGZsb2F0IG1fd2F2eU9m
ZnNldDsKICAgICBmbG9hdCBtX3dpZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fYmFzZWxpbmUgeyAw
IH07CiAgICAgRmxvYXRQb2ludCBtX2JveE9yaWdpbjsKICAgICBib29sIG1faXNQcmludGluZzsK
ICAgICBib29sIG1faXNIb3Jpem9udGFsIHsgdHJ1ZSB9OwogICAgIGNvbnN0IFNoYWRvd0RhdGEq
IG1fc2hhZG93IHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIG1fc2hh
ZG93Q29sb3JGaWx0ZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgSW5saW5lVGV4dEJveCogbV9p
bmxpbmVUZXh0Qm94IHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBtX2ZvbnQg
eyBudWxscHRyIH07CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKIAogICAgIFN0eWxl
cyBtX3N0eWxlczsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9saW5lU3R5bGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAppbmRleCAxMzZmMzFhOGViYjkw
YmNjMjhkYTA3Njk4NjczMGMxN2M5ODIzMTE4Li5lYzk0ODg1NTFhOTQ2MzZmODdhMWUzMDQ2N2M0
Yzk1NTY3YjI0NjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHls
ZS5jcHAKQEAgLTg0LDE3ICs4NCwxMyBAQCBpbnQgY29tcHV0ZVVuZGVybGluZU9mZnNldChPcHRp
b25TZXQ8VGV4dFVuZGVybGluZVBvc2l0aW9uPiB1bmRlcmxpbmVQb3NpdGlvbiwgYwogICAgIHJl
dHVybiBmb250TWV0cmljcy5hc2NlbnQoKSArIGdhcDsKIH0KICAgICAKLXZvaWQgZ2V0V2F2eVN0
cm9rZVBhcmFtZXRlcnMoZmxvYXQgZm9udFNpemUsIGZsb2F0JiBjb250cm9sUG9pbnREaXN0YW5j
ZSwgZmxvYXQmIHN0ZXApCitXYXZ5U3Ryb2tlUGFyYW1ldGVycyBnZXRXYXZ5U3Ryb2tlUGFyYW1l
dGVycyhmbG9hdCBmb250U2l6ZSkKIHsKLSAgICAvLyBEaXN0YW5jZSBiZXR3ZWVuIGRlY29yYXRp
b24ncyBheGlzIGFuZCBCZXppZXIgY3VydmUncyBjb250cm9sIHBvaW50cy4KLSAgICAvLyBUaGUg
aGVpZ2h0IG9mIHRoZSBjdXJ2ZSBpcyBiYXNlZCBvbiB0aGlzIGRpc3RhbmNlLiBJbmNyZWFzZXMg
dGhlIGN1cnZlJ3MgaGVpZ2h0Ci0gICAgLy8gYXMgZm9udFNpemUgaW5jcmVhc2VzIHRvIG1ha2Ug
dGhlIGN1cnZlIGxvb2sgYmV0dGVyLgotICAgIGNvbnRyb2xQb2ludERpc3RhbmNlID0gMC4wOTM3
NSAqIGZvbnRTaXplOwotCi0gICAgLy8gSW5jcmVtZW50IHVzZWQgdG8gZm9ybSB0aGUgZGlhbW9u
ZCBzaGFwZSBiZXR3ZWVuIHN0YXJ0IHBvaW50IChwMSksIGNvbnRyb2wKLSAgICAvLyBwb2ludHMg
YW5kIGVuZCBwb2ludCAocDIpIGFsb25nIHRoZSBheGlzIG9mIHRoZSBkZWNvcmF0aW9uLiBUaGUg
Y3VydmUgZ2V0cwotICAgIC8vIHdpZGVyIGFzIGZvbnQgc2l6ZSBpbmNyZWFzZXMuCi0gICAgc3Rl
cCA9IGZvbnRTaXplIC8gNC41OworICAgIFdhdnlTdHJva2VQYXJhbWV0ZXJzIHJlc3VsdDsKKyAg
ICAvLyBNb3JlIGluZm9ybWF0aW9uIGlzIGluIHRoZSBXYXZ5U3Ryb2tlUGFyYW1ldGVycyBkZWZp
bml0aW9uLgorICAgIHJlc3VsdC5jb250cm9sUG9pbnREaXN0YW5jZSA9IGZvbnRTaXplICogMS41
IC8gMTY7CisgICAgcmVzdWx0LnN0ZXAgPSBmb250U2l6ZSAvIDQuNTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0ZW5kSW50VG9GbG9hdChpbnQmIGV4dGVu
ZE1lLCBmbG9hdCBleHRlbmRUbykKQEAgLTExMSw4ICsxMDcsNyBAQCBHbHlwaE92ZXJmbG93IHZp
c3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwg
Y29uc3QgSQogICAgICAgICByZXR1cm4gR2x5cGhPdmVyZmxvdygpOwogCiAgICAgZmxvYXQgc3Ry
b2tlVGhpY2tuZXNzID0gdGV4dERlY29yYXRpb25TdHJva2VUaGlja25lc3MobGluZVN0eWxlLmNv
bXB1dGVkRm9udFBpeGVsU2l6ZSgpKTsKLSAgICBmbG9hdCBjb250cm9sUG9pbnREaXN0YW5jZSA9
IDA7Ci0gICAgZmxvYXQgc3RlcDsKKyAgICBXYXZ5U3Ryb2tlUGFyYW1ldGVycyB3YXZ5U3Ryb2tl
UGFyYW1ldGVyczsKICAgICBmbG9hdCB3YXZ5T2Zmc2V0ID0gMDsKICAgICAgICAgCiAgICAgVGV4
dERlY29yYXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUgPSBsaW5lU3R5bGUudGV4dERlY29yYXRp
b25TdHlsZSgpOwpAQCAtMTIwLDcgKzExNSw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZs
b3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBJCiAg
ICAgR2x5cGhPdmVyZmxvdyBvdmVyZmxvd1Jlc3VsdDsKICAgICAKICAgICBpZiAoZGVjb3JhdGlv
blN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OldhdnkpIHsKLSAgICAgICAgZ2V0V2F2eVN0
cm9rZVBhcmFtZXRlcnMobGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpLCBjb250cm9s
UG9pbnREaXN0YW5jZSwgc3RlcCk7CisgICAgICAgIHdhdnlTdHJva2VQYXJhbWV0ZXJzID0gZ2V0
V2F2eVN0cm9rZVBhcmFtZXRlcnMobGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpKTsK
ICAgICAgICAgd2F2eU9mZnNldCA9IHdhdnlPZmZzZXRGcm9tRGVjb3JhdGlvbigpOwogICAgICAg
ICBvdmVyZmxvd1Jlc3VsdC5sZWZ0ID0gc3Ryb2tlVGhpY2tuZXNzOwogICAgICAgICBvdmVyZmxv
d1Jlc3VsdC5yaWdodCA9IHN0cm9rZVRoaWNrbmVzczsKQEAgLTEzMiw4ICsxMjcsOCBAQCBHbHlw
aE92ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSwgY29uc3QgSQogICAgICAgICBpbnQgdW5kZXJsaW5lT2Zmc2V0ID0gMTsKICAg
ICAgICAgdW5kZXJsaW5lT2Zmc2V0ICs9IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQobGluZVN0eWxl
LnRleHRVbmRlcmxpbmVQb3NpdGlvbigpLCBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKSwgaW5saW5l
VGV4dEJveCwgc3Ryb2tlVGhpY2tuZXNzKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9
PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpXYXZ5KSB7Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zs
b2F0KG92ZXJmbG93UmVzdWx0LmJvdHRvbSwgdW5kZXJsaW5lT2Zmc2V0ICsgd2F2eU9mZnNldCAr
IGNvbnRyb2xQb2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKLSAgICAg
ICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCAtKHVuZGVybGluZU9m
ZnNldCArIHdhdnlPZmZzZXQgLSBjb250cm9sUG9pbnREaXN0YW5jZSAtIHN0cm9rZVRoaWNrbmVz
cykpOworICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC5ib3R0b20s
IHVuZGVybGluZU9mZnNldCArIHdhdnlPZmZzZXQgKyB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250
cm9sUG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7CisgICAgICAgICAg
ICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwgLSh1bmRlcmxpbmVPZmZzZXQg
KyB3YXZ5T2Zmc2V0IC0gd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29udHJvbFBvaW50RGlzdGFuY2Ug
LSBzdHJva2VUaGlja25lc3MpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4dGVu
ZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQuYm90dG9tLCB1bmRlcmxpbmVPZmZzZXQgKyBzdHJv
a2VUaGlja25lc3MgLSBoZWlnaHQpOwogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVy
Zmxvd1Jlc3VsdC50b3AsIC11bmRlcmxpbmVPZmZzZXQpOwpAQCAtMTQxLDggKzEzNiw4IEBAIEds
eXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlLCBjb25zdCBJCiAgICAgfQogICAgIGlmIChkZWNvcmF0aW9uICYgVGV4dERl
Y29yYXRpb246Ok92ZXJsaW5lKSB7CiAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUgPT0gVGV4
dERlY29yYXRpb25TdHlsZTo6V2F2eSkgewotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChv
dmVyZmxvd1Jlc3VsdC5ib3R0b20sIC13YXZ5T2Zmc2V0ICsgY29udHJvbFBvaW50RGlzdGFuY2Ug
KyBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOwotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9h
dChvdmVyZmxvd1Jlc3VsdC50b3AsIHdhdnlPZmZzZXQgKyBjb250cm9sUG9pbnREaXN0YW5jZSAr
IHN0cm9rZVRoaWNrbmVzcyk7CisgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93
UmVzdWx0LmJvdHRvbSwgLXdhdnlPZmZzZXQgKyB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9s
UG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7CisgICAgICAgICAgICBl
eHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwgd2F2eU9mZnNldCArIHdhdnlTdHJv
a2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1
bHQuYm90dG9tLCBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOwogICAgICAgICAgICAgLy8gdG9w
IGlzIHVudG91Y2hlZApAQCAtMTUxLDggKzE0Niw4IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3Zl
cmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBJ
CiAgICAgaWYgKGRlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gpIHsKICAg
ICAgICAgZmxvYXQgYmFzZWxpbmUgPSBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2Vu
dCgpOwogICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6
OldhdnkpIHsKLSAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQuYm90
dG9tLCAyICogYmFzZWxpbmUgLyAzICsgY29udHJvbFBvaW50RGlzdGFuY2UgKyBzdHJva2VUaGlj
a25lc3MgLSBoZWlnaHQpOwotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jl
c3VsdC50b3AsIC0oMiAqIGJhc2VsaW5lIC8gMyAtIGNvbnRyb2xQb2ludERpc3RhbmNlIC0gc3Ry
b2tlVGhpY2tuZXNzKSk7CisgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVz
dWx0LmJvdHRvbSwgMiAqIGJhc2VsaW5lIC8gMyArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRy
b2xQb2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKKyAgICAgICAgICAg
IGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCAtKDIgKiBiYXNlbGluZSAvIDMg
LSB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9sUG9pbnREaXN0YW5jZSAtIHN0cm9rZVRoaWNr
bmVzcykpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChv
dmVyZmxvd1Jlc3VsdC5ib3R0b20sIDIgKiBiYXNlbGluZSAvIDMgKyBzdHJva2VUaGlja25lc3Mg
LSBoZWlnaHQpOwogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC50
b3AsIC0oMiAqIGJhc2VsaW5lIC8gMykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvSW5saW5lVGV4dEJveFN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuaAppbmRleCBjYzUzMTJhNDg3ZGE4NTE5ZGQ2ZDUwNzA0YTc2MDc3YmE5N2EzZDI2
Li45NDVmOTA1YjY1MGViMTM1MGVhMzMyMjg0MmU0ZWJiOTI2ZjFlMDZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaApAQCAtNDUsNyArNDUsMTkgQEAgaW5saW5l
IGZsb2F0IHdhdnlPZmZzZXRGcm9tRGVjb3JhdGlvbigpCiB9CiAKIEdseXBoT3ZlcmZsb3cgdmlz
dWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBj
b25zdCBJbmxpbmVUZXh0Qm94Kik7Ci12b2lkIGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKGZsb2F0
IGZvbnRTaXplLCBmbG9hdCYgY29udHJvbFBvaW50RGlzdGFuY2UsIGZsb2F0JiBzdGVwKTsKKwor
c3RydWN0IFdhdnlTdHJva2VQYXJhbWV0ZXJzIHsKKyAgICAvLyBEaXN0YW5jZSBiZXR3ZWVuIGRl
Y29yYXRpb24ncyBheGlzIGFuZCBCZXppZXIgY3VydmUncyBjb250cm9sIHBvaW50cy4KKyAgICAv
LyBUaGUgaGVpZ2h0IG9mIHRoZSBjdXJ2ZSBpcyBiYXNlZCBvbiB0aGlzIGRpc3RhbmNlLiBJbmNy
ZWFzZXMgdGhlIGN1cnZlJ3MgaGVpZ2h0CisgICAgLy8gYXMgZm9udFNpemUgaW5jcmVhc2VzIHRv
IG1ha2UgdGhlIGN1cnZlIGxvb2sgYmV0dGVyLgorICAgIGZsb2F0IGNvbnRyb2xQb2ludERpc3Rh
bmNlIHsgMCB9OworCisgICAgLy8gSW5jcmVtZW50IHVzZWQgdG8gZm9ybSB0aGUgZGlhbW9uZCBz
aGFwZSBiZXR3ZWVuIHN0YXJ0IHBvaW50IChwMSksIGNvbnRyb2wKKyAgICAvLyBwb2ludHMgYW5k
IGVuZCBwb2ludCAocDIpIGFsb25nIHRoZSBheGlzIG9mIHRoZSBkZWNvcmF0aW9uLiBUaGUgY3Vy
dmUgZ2V0cworICAgIC8vIHdpZGVyIGFzIGZvbnQgc2l6ZSBpbmNyZWFzZXMuCisgICAgZmxvYXQg
c3RlcCB7IDAgfTsKK307CitXYXZ5U3Ryb2tlUGFyYW1ldGVycyBnZXRXYXZ5U3Ryb2tlUGFyYW1l
dGVycyhmbG9hdCBmb250U2l6ZSk7CiBpbnQgY29tcHV0ZVVuZGVybGluZU9mZnNldChPcHRpb25T
ZXQ8VGV4dFVuZGVybGluZVBvc2l0aW9uPiwgY29uc3QgRm9udE1ldHJpY3MmLCBjb25zdCBJbmxp
bmVUZXh0Qm94KiwgaW50IHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKTsKICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353875</attachid>
            <date>2018-11-05 09:35:27 -0800</date>
            <delta_ts>2018-11-05 09:42:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191245-20181105093526.patch</filename>
            <type>text/plain</type>
            <size>51835</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3ODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRhY2RmNzM2YTBjOTIx
ZWNmNjY0OTk4MWNjNWJjOTQ5NjNiMTg4Ni4uMjIyODI1MjBiNjBlMjJkOTU3NzVlNTQxYjNjMDc0
ZTJiMGUzOWMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE4LTExLTA1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAg
dGV4dCBkZWNvcmF0aW9uIGRyYXdpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBzb21lIGdlbmVyYWwgY2xlYW4gdXAgb2YgdGhl
IHRleHQgZGVjb3JhdGlvbnMgY29kZS4gVGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbW9kaWZpZXMgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoKSAmIGZyaWVuZHMgdG8gYWNjZXB0IGEgRmxvYXRSZWN0IGluc3RlYWQgb2YgYSBGbG9hdFBv
aW50ICsgZmxvYXQgd2lkdGguCisgICAgICAgIFRoaXMgaXMgaGVscGZ1bCBiZWNhdXNlIGl0IGFs
bG93cyBmb3IgZWFzaWVyIGJvdW5kaW5nIGJveCBjYWxjdWxhdGlvbnMuCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyByZW1vdmVzIHNvbWUgcmVkdW5kYW50IGNvbXB1dGF0aW9ucyB0aGF0IHRoZSBz
a2lwOmluayBjb2RlcGF0aCB3YXMgcGVyZm9ybWluZy4KKyAgICAgICAgVGhpcyBwYXRjaCBhbHNv
IHJlZmFjdG9ycyB0aGUgd2F2eSBkZWNvcmF0aW9uIHBhcmFtZXRlcnMgdG8gbm90IHVzZSBvdXQg
cGFyYW1zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxp
bmVCb3VuZHNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29t
cHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OnRoaWNrbmVzcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVz
Rm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50TWFy
a2VkVGV4dERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRDb21wb3NpdGlvblVuZGVybGluZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6cGFpbnRGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWlu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjp0cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3Vu
ZGFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6VGV4dERl
Y29yYXRpb25QYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRUZXh0RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2tpcElua1Vu
ZGVybGluZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpzZXRJbmxp
bmVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpzZXRGb250
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0
QmFzZWxpbmUpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRXYXZ5U3Ryb2tlUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjp2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKToKKyAgICAgICAgKiBzdHls
ZS9JbmxpbmVUZXh0Qm94U3R5bGUuaDoKKwogMjAxOC0xMS0wNSAgVGhpYmF1bHQgU2F1bmllciAg
PHRzYXVuaWVyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl1bV2ViUlRDXSBFcnJv
ciBvdXQgd2hlbiBzaW11bGNhc3QgaXMgYWN0aXZhdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA1ZDY2ZmI4OTQy
MGExZWEwNTcxMDhkZWQ0MzM1ZmM2ZmY0MDEwYTJlLi4wYjU3NjljZDEyZDIxZWI3ZWE3ZTE4OTdl
OWYyZWI5MDA5ODEyMWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTEwODMsMTggKzEwODMsMTggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiB9CiAjZW5kaWYKIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRo
LCBib29sIHByaW50aW5nKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVy
bGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQog
ewogICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5k
QW50aWFsaWFzaW5nTW9kZUZvclRleHQocG9pbnQsIHdpZHRoLCBwcmludGluZywgZHVtbXlDb2xv
cik7CisgICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywgQ29sb3ImIGNv
bG9yKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRp
YWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IENvbG9yJiBjb2xvcikKIHsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHBvaW50OwotICAgIGZs
b2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHN0cm9rZVRoaWNrbmVzcygpLCAwLjVmKTsKKyAgICBG
bG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBmbG9hdCB0aGlja25lc3Mg
PSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKICAgICBpZiAocHJpbnRpbmcpCi0gICAg
ICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUod2lkdGgsIHRoaWNrbmVzcykp
OworICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgo
KSwgdGhpY2tuZXNzKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CiAgICAgLy8g
SnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxl
cyBhcmUgZXF1YWwuCkBAIC0xMTA4LDEyICsxMTA4LDEyIEBAIEZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3Qg
RmxvCiAgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hh
ZGUpOwogICAgIH0KIAotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFw
UG9pbnQocG9pbnQpOworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFw
UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2Nj
dXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRl
Y29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3Jh
dGlvbi4KICAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRl
dmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwogICAgIGlmIChhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQogICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZh
bHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdp
biwgRmxvYXRTaXplKHdpZHRoLCB0aGlja25lc3MpKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG9y
aWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjphcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKaW5kZXggODYxOTA1MzM5YTQxZDIyYTgzMmZlNzFhM2JlZjY5MmUyM2NhODBiMy4uZDJi
MzliM2RiNGE5YzViNDdjYzljM2ZkNjk1Y2ZlZjc1M2YzNTkyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQxOCw5ICs0
MTgsOSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKTsKIAotICAg
IEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tl
KTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2Us
IFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOworICAgIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJs
aW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRT
dHJva2UpOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwpAQCAtNjI2LDcgKzYyNiw3IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpOwogCi0gICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50
aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29s
IHByaW50aW5nLCBDb2xvciYpOworICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFu
dGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENv
bG9yJik7CiAKICAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChm
bG9hdCkgY29uc3Q7CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdp
ZHRoKGZsb2F0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCBkNDhiOTI0ZWI2MDQzNmQ4MzFhOThl
NTY5NWE5MzA4MjUzOGY0MmFlLi41MDM2ODkyNmFjZjMwZWYxNGQzMzQ3NTJiM2ZlOWM4YzhkYWIx
NzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IGY2NWVl
MjU2NTcyYjIxOGVkN2RlOWZmMThhYjYzMDZlYTNjZjc5NDcuLjNkOWM0OGRmMzU4ZDBhZDg1NTA2
NDY2MDNiNzVmMWVmNzA4YTcxMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMTAyMyw3ICsx
MDIzLDcgQEAgdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGMKICAgICAgICAgY2Fpcm9fc2V0X2FudGlh
bGlhcyhjYWlyb0NvbnRleHQsIENBSVJPX0FOVElBTElBU19ERUZBVUxUKTsKIH0KIAotdm9pZCBk
cmF3TGluZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcykKK3ZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzLCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgQ29sb3IgbW9kaWZp
ZWRDb2xvciA9IGNvbG9yOwogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5k
c0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHBsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHdpZHRo
cy5sYXN0KCksIHByaW50aW5nLCBtb2RpZmllZENvbG9yLCBzdHJva2VUaGlja25lc3MpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuaAppbmRleCBjYjc4ZGZiMWI1YWE4Mzc2MDJlYzUyYzQxNGViZGZjNDU3M2FkZDY5
Li4wODVlNjFhNWIzYzljN2M5NzIxNmIzYzdiY2Q2ZDc2OTI1OGNjODRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N1cmZhY2Uo
UGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBGCiAKIHZvaWQg
ZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwg
Y29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImKTsKIHZvaWQgZHJhd0xpbmUo
UGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBib29sKTsKLXZvaWQgZHJhd0xp
bmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKK3ZvaWQgZHJh
d0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGNvbnN0IENvbG9y
Jik7CiB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
LCBjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CiB2b2lkIGRyYXdF
bGxpcHNlKFBsYXRmb3JtQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAppbmRleCAyZjhiOTI1ODZkM2U4ZDk0ODFlMTlhMjQ5OGQ4MmY3ZGI1ZmY5
MDE2Li4xYjI3ZTc4MDNkNjgxZjRiMWQ4Yzg3NWQ1MzdkNjk0MTVjYjJiNDZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMTUsMTIgKzMxNSwxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHdpZHRoLAogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdHMsIHdpZHRoLCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewotICAgIGRyYXdMaW5l
c0ZvclRleHQob3JpZ2luLCBEYXNoQXJyYXkgeyB3aWR0aCwgMCB9LCBwcmludGluZywgZG91Ymxl
VW5kZXJsaW5lcyk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3Qu
aGVpZ2h0KCksIERhc2hBcnJheSB7IHdpZHRoLCAwIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
VW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDEyICszMjksMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hB
cnJheSYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMsIHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JU
ZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBv
aW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNv
bG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGM3N2RmYjcwNjZjMThkNTZmM2Q5Y2MxZDc5MGM5MzM1NmM0
NjQxYzYuLmQ0YjI1ZjQxZTI0N2UzZjlhZjQyMzM1NDE1MTZmMWQxMjdjODY2YzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtMjk2LDExICsyOTYsMTAgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2kKICAgICBDYWlybzo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRl
eHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZVVuZGVybGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZVVuZGVybGluZXMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0cm9rZVRoaWNr
bmVzcyk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7CisgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNv
bnRleHQsIHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5z
dHJva2VDb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCmluZGV4IDJk
NzQyODUyZWM0NGViZGVmY2RiYzU3YzkxYzVhMGVkYzczZmY4ZTQuLmYxYjAyZDM0YWIyZmYyOWFk
Y2ZiODc0M2M4OTRjMWU0NjA4YjY3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2ws
IGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1BhdGgoY29uc3Qg
UGF0aCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGZlMTEyZGRkMDY4YWZmNDM1
ZTU3N2U2MzM5ZjBkZWI3N2NlZDllZWYuLjM3NDkwMjFmMzdjYmQzMTAxMjY3MGE2YzdhYzA4NTQ1
MzVjOTRjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTE1NzAsMTUgKzE1NzAsMTUgQEAgRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICByZXR1cm4gRmxvYXRSZWN0KHJvdW5kZWRPcmlnaW4s
IHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdp
ZHRoLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBz
dHJva2VTdHlsZSkKIHsKICAgICBEYXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQo
d2lkdGgpOworICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKICAgICB3aWR0aHMuYXBw
ZW5kKDApOwotICAgIGRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0
aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJv
a2VTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU4NywxMyArMTU4NywxMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBw
cmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBs
LT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZUxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIENvbG9yIGxvY2FsU3Ry
b2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0
ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChwb2ludCwgd2lkdGhzLmxhc3Qo
KSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBj
b21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVjdChwb2lu
dCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBwcmludGluZywgbG9jYWxT
dHJva2VDb2xvcik7CiAgICAgYm9vbCBmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvciA9
IGZpbGxDb2xvcigpICE9IGxvY2FsU3Ryb2tlQ29sb3I7CiAgICAgCiAgICAgVmVjdG9yPENHUmVj
dCwgND4gZGFzaEJvdW5kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRl
eCA3MzUzZDM3YWZiMWMxNTYzMjYwYzE5MGRhYmU5MTNiY2M0MzcxNjE1Li42ZjkxY2QwZTU1ZDk2
NmEzNWNlMmU0MDc0OGQ2OThkOGRmMmRmMDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwCkBAIC01OTMsNyArNTkzLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lJiBpdGVtKQogCiB2b2lkIERyYXdMaW5l
c0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBj
b250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV93aWR0aHMsIG1fcHJpbnRpbmcsIG1f
ZG91YmxlTGluZXMpOworICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3Ro
aWNrbmVzcywgbV93aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwogfQogCiBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKQEAgLTYwMyw3ICs2MDMsNyBAQCBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgYwogICAgIGlmICghbV93aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gRmxv
YXRSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgcmVzdWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dp
ZHRocy5sYXN0KCksIG1fc3Ryb2tlV2lkdGgpKTsKKyAgICBGbG9hdFJlY3QgcmVzdWx0KHBvaW50
KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCksIG1fdGhpY2tuZXNzKSk7CiAgICAgcmVzdWx0
LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNuYXBwaW5nLiBGSVhNRTogVGhpcyBp
c24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhlIENUTSBpbnRvIGFjY291bnQuCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYxNCw2ICs2MTQsNyBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRl
bSkKICAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0
aW9uKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFu
Y2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInRoaWNrbmVzcyIsIGl0ZW0udGhpY2tuZXNzKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoIndpZHRocyIsIGl0ZW0ud2lkdGhzKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
aXMtcHJpbnRpbmciLCBpdGVtLmlzUHJpbnRpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAppbmRleCA3YzdlYjZkNzJmMTBkMWYyNmQwMTg2NzgxYjAyMmM2ZDM5MjE0MDNkLi4y
YjdkMTRjYjA1ZDIwNjM2NjYxODIzN2I0NTFhNGE0Y2IxY2I2ZTMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTc5MSwyNiArNzkxLDI3IEBAIHByaXZhdGU6CiAKIGNsYXNz
IERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0
aCkKKyAgICBzdGF0aWMgUmVmPERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVz
Rm9yVGV4dChibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgd2lkdGhzLCBwcmludGluZywgZG91
YmxlTGluZXMsIHN0cm9rZVdpZHRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKICAgICB9CiAKICAgICB2b2lkIHNldEJsb2Nr
TG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRp
b24gPSBibG9ja0xvY2F0aW9uOyB9CiAgICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsgfQogICAgIGNvbnN0IEZsb2F0U2l6
ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CiAgICAgRmxv
YXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxB
bmNob3I7IH0KKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVz
czsgfQogICAgIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzKCkgY29uc3QgeyByZXR1cm4gbV93aWR0
aHM7IH0KICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9
CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0K
IAogcHJpdmF0ZToKLSAgICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0
aCkKKyAgICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24s
IGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCiAgICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCiAgICAgICAgICwgbV9i
bG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCiAgICAgICAgICwgbV9sb2NhbEFuY2hvcihsb2Nh
bEFuY2hvcikKICAgICAgICAgLCBtX3dpZHRocyh3aWR0aHMpCi0gICAgICAgICwgbV9zdHJva2VX
aWR0aChzdHJva2VXaWR0aCkKKyAgICAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAg
ICAgICwgbV9wcmludGluZyhwcmludGluZykKICAgICAgICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJs
ZUxpbmVzKQogICAgIHsKQEAgLTgyMyw3ICs4MjQsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9p
bnQgbV9ibG9ja0xvY2F0aW9uOwogICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwogICAgIERh
c2hBcnJheSBtX3dpZHRoczsKLSAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOworICAgIGZsb2F0IG1f
dGhpY2tuZXNzOwogICAgIGJvb2wgbV9wcmludGluZzsKICAgICBib29sIG1fZG91YmxlTGluZXM7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDUzMDdm
MDI1ZmIyMTgwMzIyOTk1OGNhZjkyYjUzOWE1MmNkYzY2MjIuLjkwMzliNzhlZTJhZjRkZDQ4OWQz
YWZiNmU2NzRlMTE1YWViYzA4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKQEAgLTIzMCw5ICsyMzAsOSBAQCB2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKICAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9p
ZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50
KCksIHRvRmxvYXRTaXplKHBvaW50KSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0
cm9rZVRoaWNrbmVzcykpKTsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50
KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAxYjc5NDM3YWM3MDI4MjY2Y2Y0OWQz
YTQ1NDFlNjlkNzhhYzlhMWViLi5iNjlkNDRlZjJlYmQ2NjNlMzk3ZDZhNDA1YzhmNjBjZTgxNmZl
ZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTk3LDcgKzk3
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggNTc4NDk1ZmVhYTMw
YTk2ODQ4MjA5NGY5NjRlYjI5MDlhMmViZTMxOC4uYzZlYjIzMGFiNDJkMzMxOTY5MzMzZmU0MDlj
YTVlZjE3Y2QzYzUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTYzMSw5ICs2MzEsOSBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludAogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBv
aW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGlu
ZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzKQogewotICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBib29s
LCBDb2xvciwgZmxvYXQ+IHsKKyAgICBzdHJ1Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJy
YXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CiAgICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRl
eHQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKQEAgLTY0OSw3ICs2NDksNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IERhcwogCiAgICAgVU5VU0VEX1BBUkFNKHN0cm9rZVRoaWNrbmVzcyk7CiAgICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdMaW5lc0ZvclRleHQ+KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29s
b3IpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmgKaW5kZXggNmQ2ZmFjMzgzZTdhZjA2YzkyMTNkY2I0ZmUwODdjZDZmMzg0ZDkxOS4u
ZGJkNjcyMzE0ODRmOTE4NzIxY2MwYmZkZDg2Mzg1ZTdmZTViODlmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtNzIsNyAr
NzIsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3Qg
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UGF0aChjb25z
dCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJlci5jcHAKaW5kZXggNzZmOTBjMTEwMTNmOTJmODZh
YjAwOGExZjhiNjdlYTE0ZGI3OTE4MC4uOTcyMmJlZjZkYTAwYWM0NzJlZTYyZmI1MjdjMTg0OWJl
ODI1MDA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVU
ZXh0UmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3Jl
VGV4dFJlbmRlcmVyLmNwcApAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBkb0RyYXdUZXh0
QXRQb2ludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
cwogICAgICAgICB1bmRlcmxpbmVQb2ludC5tb3ZlKGJlZm9yZVdpZHRoLCAxKTsKIAogICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgY29udGV4dC5kcmF3TGlu
ZUZvclRleHQodW5kZXJsaW5lUG9pbnQsIHVuZGVybGluZWRXaWR0aCwgZmFsc2UpOworICAgICAg
ICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFJlY3QodW5kZXJsaW5lUG9pbnQsIEZsb2F0
U2l6ZSh1bmRlcmxpbmVkV2lkdGgsIGZvbnQuc2l6ZSgpIC8gMTYpKSwgZmFsc2UpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IDdj
YmMwNzhjYWIyN2VhMmUyMTU0MDA3YzE0ZWNjOTFiYzIyN2QyZjYuLmYzMTEzZDY0MWVkOGFmMjhj
OWUzNTMwN2M5ZmE4ODQ2ODU1YjYxYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKQEAgLTEwOTAsMTEgKzEwOTAsOSBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50TWFya2VkVGV4dERlY29yYXRpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZs
b2F0UgogICAgIH0KIAogICAgIC8vIDIuIFBhaW50Ci0gICAgVGV4dERlY29yYXRpb25QYWludGVy
IGRlY29yYXRpb25QYWludGVyIHsgY29udGV4dCwgbGluZVN0eWxlKCkudGV4dERlY29yYXRpb25z
SW5FZmZlY3QoKSwgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbWFya2VkVGV4dC5zdHlsZS50
ZXh0RGVjb3JhdGlvblN0eWxlcyB9OworICAgIFRleHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0
aW9uUGFpbnRlciB7IGNvbnRleHQsIGxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0
KCksIHJlbmRlcmVyKCksIGlzRmlyc3RMaW5lKCksIGxpbmVGb250KCksIG1hcmtlZFRleHQuc3R5
bGUudGV4dERlY29yYXRpb25TdHlsZXMgfTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJbmxp
bmVUZXh0Qm94KHRoaXMpOwotICAgIGRlY29yYXRpb25QYWludGVyLnNldEZvbnQobGluZUZvbnQo
KSk7CiAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0V2lkdGgoc25hcHBlZFNlbGVjdGlvblJlY3Qu
d2lkdGgoKSk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0QmFzZWxpbmUobGluZVN0eWxlKCku
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SXNIb3Jp
em9udGFsKGlzSG9yaXpvbnRhbCgpKTsKICAgICBpZiAobWFya2VkVGV4dC5zdHlsZS50ZXh0U2hh
ZG93KSB7CiAgICAgICAgIGRlY29yYXRpb25QYWludGVyLnNldFRleHRTaGFkb3coJm1hcmtlZFRl
eHQuc3R5bGUudGV4dFNoYWRvdy52YWx1ZSgpKTsKQEAgLTEyMDAsNyArMTE5OCw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgRmxvYXRQCiAgICAgQ29sb3IgdW5kZXJsaW5lQ29sb3IgPSB1bmRlcmxpbmUu
Y29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBDb21wb3NpdGlvblVuZGVybGluZUNvbG9yOjpU
ZXh0Q29sb3IgPyByZW5kZXJlcigpLnN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENv
bG9yRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcikgOiByZW5kZXJlcigpLnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIodW5kZXJsaW5lLmNvbG9yKTsKICAgICBj
b250ZXh0LnNldFN0cm9rZUNvbG9yKHVuZGVybGluZUNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcyhsaW5lVGhpY2tuZXNzKTsKLSAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4
dChGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIGxvZ2lj
YWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MpLCB3aWR0aCwgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LnByaW50aW5nKCkpOworICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChib3hP
cmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkgLSBsaW5l
VGhpY2tuZXNzLCB3aWR0aCwgbGluZVRoaWNrbmVzcyksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5w
cmludGluZygpKTsKIH0KIAogaW50IElubGluZVRleHRCb3g6OmNhcmV0TWluT2Zmc2V0KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
RnVuY3Rpb25zLmNwcAppbmRleCA3NTUxYTlmZDZjZDYwOTJhN2VjMGJiNjY5NzkzYWZmYWQ0ZTRk
OTgzLi5kMjZjMDQ4M2M4NDU1NjhmN2Y2OGQ1YTkyYjU3NWUzYThiMjE2MzBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMu
Y3BwCkBAIC05Nyw5ICs5Nyw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQsIFBhaW50SW5mbyYgcGFpCiAgICAgaWYgKCFz
dHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKSkgewogICAgICAgICBjb25z
dCBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSBjaGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0Pihm
bG93KS5maXJzdCgpOwogICAgICAgICBpZiAodGV4dFJlbmRlcmVyKSB7Ci0gICAgICAgICAgICB0
ZXh0RGVjb3JhdGlvblBhaW50ZXIuZW1wbGFjZShwYWludEluZm8uY29udGV4dCgpLCBzdHlsZS50
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCAqdGV4dFJlbmRlcmVyLCBmYWxzZSk7Ci0gICAgICAg
ICAgICB0ZXh0RGVjb3JhdGlvblBhaW50ZXItPnNldEZvbnQoc3R5bGUuZm9udENhc2NhZGUoKSk7
Ci0gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblBhaW50ZXItPnNldEJhc2VsaW5lKHN0eWxlLmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpOworICAgICAgICAgICAgdGV4dERlY29yYXRpb25QYWludGVy
LmVtcGxhY2UocGFpbnRJbmZvLmNvbnRleHQoKSwgc3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZl
Y3QoKSwgKnRleHRSZW5kZXJlciwgZmFsc2UsIHN0eWxlLmZvbnRDYXNjYWRlKCkpOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERl
Y29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3Jh
dGlvblBhaW50ZXIuY3BwCmluZGV4IDk4ZTg4ZGM0ODA1ZDZhNWRhN2FhNTQyMDVkZGIxNmU3NDE2
OTg5ODAuLjliODU5NWMwM2U2MGY1MTFkNDQ5MGYwYjZlZTMxYWQzZWY1ZjUwN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBA
IC04MSw3NSArODEsMzkgQEAgc3RhdGljIHZvaWQgYWRqdXN0U3RlcFRvRGVjb3JhdGlvbkxlbmd0
aChmbG9hdCYgc3RlcCwgZmxvYXQmIGNvbnRyb2xQb2ludERpc3RhbmMKICAqICAgICAgICAgICAg
IHwtLS0tLS0tLS0tLXwKICAqICAgICAgICAgICAgICAgICBzdGVwCiAgKi8KLXN0YXRpYyB2b2lk
IHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcywgZmxvYXQgZm9udFNpemUpCitzdGF0aWMgdm9pZCBzdHJva2VXYXZ5VGV4dERlY29y
YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGZvbnRTaXplKQogewotICAgIEZsb2F0UG9pbnQgcDEgPSBzdGFydDsKLSAgICBGbG9hdFBv
aW50IHAyID0gZW5kOwotICAgIGNvbnRleHQuYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKHAx
LCBwMiwgc3Ryb2tlVGhpY2tuZXNzLCBjb250ZXh0LnN0cm9rZVN0eWxlKCkpOworICAgIEZsb2F0
UG9pbnQgcDEgPSByZWN0Lm1pblhNaW5ZQ29ybmVyKCk7CisgICAgRmxvYXRQb2ludCBwMiA9IHJl
Y3QubWF4WE1pbllDb3JuZXIoKTsKKyAgICBjb250ZXh0LmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhwMSwgcDIsIHJlY3QuaGVpZ2h0KCksIGNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7CiAKICAg
ICBQYXRoIHBhdGg7CiAgICAgcGF0aC5tb3ZlVG8ocDEpOwogCi0gICAgZmxvYXQgY29udHJvbFBv
aW50RGlzdGFuY2U7Ci0gICAgZmxvYXQgc3RlcDsKLSAgICBnZXRXYXZ5U3Ryb2tlUGFyYW1ldGVy
cyhmb250U2l6ZSwgY29udHJvbFBvaW50RGlzdGFuY2UsIHN0ZXApOworICAgIGF1dG8gd2F2eVN0
cm9rZVBhcmFtZXRlcnMgPSBnZXRXYXZ5U3Ryb2tlUGFyYW1ldGVycyhmb250U2l6ZSk7CiAKLSAg
ICBib29sIGlzVmVydGljYWxMaW5lID0gKHAxLngoKSA9PSBwMi54KCkpOworICAgIEFTU0VSVChw
MS55KCkgPT0gcDIueSgpKTsKIAotICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICBB
U1NFUlQocDEueCgpID09IHAyLngoKSk7CisgICAgZmxvYXQgeUF4aXMgPSBwMS55KCk7CisgICAg
ZmxvYXQgeDEgPSBzdGQ6Om1pbihwMS54KCksIHAyLngoKSk7CisgICAgZmxvYXQgeDIgPSBzdGQ6
Om1heChwMS54KCksIHAyLngoKSk7CiAKLSAgICAgICAgZmxvYXQgeEF4aXMgPSBwMS54KCk7Ci0g
ICAgICAgIGZsb2F0IHkxOwotICAgICAgICBmbG9hdCB5MjsKKyAgICBhZGp1c3RTdGVwVG9EZWNv
cmF0aW9uTGVuZ3RoKHdhdnlTdHJva2VQYXJhbWV0ZXJzLnN0ZXAsIHdhdnlTdHJva2VQYXJhbWV0
ZXJzLmNvbnRyb2xQb2ludERpc3RhbmNlLCB4MiAtIHgxKTsKKyAgICBGbG9hdFBvaW50IGNvbnRy
b2xQb2ludDEoMCwgeUF4aXMgKyB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9sUG9pbnREaXN0
YW5jZSk7CisgICAgRmxvYXRQb2ludCBjb250cm9sUG9pbnQyKDAsIHlBeGlzIC0gd2F2eVN0cm9r
ZVBhcmFtZXRlcnMuY29udHJvbFBvaW50RGlzdGFuY2UpOwogCi0gICAgICAgIGlmIChwMS55KCkg
PCBwMi55KCkpIHsKLSAgICAgICAgICAgIHkxID0gcDEueSgpOwotICAgICAgICAgICAgeTIgPSBw
Mi55KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB5MSA9IHAyLnkoKTsKLSAgICAg
ICAgICAgIHkyID0gcDEueSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYWRqdXN0U3RlcFRvRGVj
b3JhdGlvbkxlbmd0aChzdGVwLCBjb250cm9sUG9pbnREaXN0YW5jZSwgeTIgLSB5MSk7Ci0gICAg
ICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50MSh4QXhpcyArIGNvbnRyb2xQb2ludERpc3RhbmNl
LCAwKTsKLSAgICAgICAgRmxvYXRQb2ludCBjb250cm9sUG9pbnQyKHhBeGlzIC0gY29udHJvbFBv
aW50RGlzdGFuY2UsIDApOwotCi0gICAgICAgIGZvciAoZmxvYXQgeSA9IHkxOyB5ICsgMiAqIHN0
ZXAgPD0geTI7KSB7Ci0gICAgICAgICAgICBjb250cm9sUG9pbnQxLnNldFkoeSArIHN0ZXApOwot
ICAgICAgICAgICAgY29udHJvbFBvaW50Mi5zZXRZKHkgKyBzdGVwKTsKLSAgICAgICAgICAgIHkg
Kz0gMiAqIHN0ZXA7Ci0gICAgICAgICAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oY29udHJvbFBv
aW50MSwgY29udHJvbFBvaW50MiwgRmxvYXRQb2ludCh4QXhpcywgeSkpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHAxLnkoKSA9PSBwMi55KCkpOwotCi0gICAgICAg
IGZsb2F0IHlBeGlzID0gcDEueSgpOwotICAgICAgICBmbG9hdCB4MTsKLSAgICAgICAgZmxvYXQg
eDI7Ci0KLSAgICAgICAgaWYgKHAxLngoKSA8IHAyLngoKSkgewotICAgICAgICAgICAgeDEgPSBw
MS54KCk7Ci0gICAgICAgICAgICB4MiA9IHAyLngoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHgxID0gcDIueCgpOwotICAgICAgICAgICAgeDIgPSBwMS54KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBhZGp1c3RTdGVwVG9EZWNvcmF0aW9uTGVuZ3RoKHN0ZXAsIGNvbnRyb2xQb2lu
dERpc3RhbmNlLCB4MiAtIHgxKTsKLSAgICAgICAgRmxvYXRQb2ludCBjb250cm9sUG9pbnQxKDAs
IHlBeGlzICsgY29udHJvbFBvaW50RGlzdGFuY2UpOwotICAgICAgICBGbG9hdFBvaW50IGNvbnRy
b2xQb2ludDIoMCwgeUF4aXMgLSBjb250cm9sUG9pbnREaXN0YW5jZSk7Ci0KLSAgICAgICAgZm9y
IChmbG9hdCB4ID0geDE7IHggKyAyICogc3RlcCA8PSB4MjspIHsKLSAgICAgICAgICAgIGNvbnRy
b2xQb2ludDEuc2V0WCh4ICsgc3RlcCk7Ci0gICAgICAgICAgICBjb250cm9sUG9pbnQyLnNldFgo
eCArIHN0ZXApOwotICAgICAgICAgICAgeCArPSAyICogc3RlcDsKLSAgICAgICAgICAgIHBhdGgu
YWRkQmV6aWVyQ3VydmVUbyhjb250cm9sUG9pbnQxLCBjb250cm9sUG9pbnQyLCBGbG9hdFBvaW50
KHgsIHlBeGlzKSk7Ci0gICAgICAgIH0KKyAgICBmb3IgKGZsb2F0IHggPSB4MTsgeCArIDIgKiB3
YXZ5U3Ryb2tlUGFyYW1ldGVycy5zdGVwIDw9IHgyOykgeworICAgICAgICBjb250cm9sUG9pbnQx
LnNldFgoeCArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLnN0ZXApOworICAgICAgICBjb250cm9sUG9p
bnQyLnNldFgoeCArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLnN0ZXApOworICAgICAgICB4ICs9IDIg
KiB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5zdGVwOworICAgICAgICBwYXRoLmFkZEJlemllckN1cnZl
VG8oY29udHJvbFBvaW50MSwgY29udHJvbFBvaW50MiwgRmxvYXRQb2ludCh4LCB5QXhpcykpOwog
ICAgIH0KIAogICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAgIGF1dG8g
c3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsKKyAgICBjb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcyhyZWN0LmhlaWdodCgpKTsKICAgICBjb250ZXh0LnN0cm9rZVBh
dGgocGF0aCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNz
KTsKIH0KIAogI2lmIEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lOSykKQEAgLTIw
MywxOCArMTY3LDYgQEAgc3RhdGljIERhc2hBcnJheSB0cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2lu
dHNUb1NraXBJbmtCb3VuZGFyaWVzKGNvbnN0IERhc2hBcnJheSYKICAgICAKICAgICByZXR1cm4g
cmVzdWx0OwogfQotCi1zdGF0aWMgdm9pZCBkcmF3U2tpcElua1VuZGVybGluZShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbE9yaWdpbiwKLSAgICBmbG9hdCB1bmRlcmxpbmVPZmZzZXQsIGZsb2F0IHdpZHRoLCBib29s
IGlzUHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQot
ewotICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRMb2NhbE9yaWdpbiA9IGxvY2FsT3JpZ2luOwotICAg
IGFkanVzdGVkTG9jYWxPcmlnaW4ubW92ZSgwLCB1bmRlcmxpbmVPZmZzZXQpOwotICAgIEZsb2F0
UmVjdCB1bmRlcmxpbmVCb3VuZGluZ0JveCA9IGNvbnRleHQuY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoYWRqdXN0ZWRMb2NhbE9yaWdpbiwgd2lkdGgsIGlzUHJpbnRpbmcpOwotICAgIERh
c2hBcnJheSBpbnRlcnNlY3Rpb25zID0gZm9udC5kYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJl
Y3QodGV4dFJ1biwgdGV4dE9yaWdpbiwgdW5kZXJsaW5lQm91bmRpbmdCb3gpOwotICAgIERhc2hB
cnJheSBhID0gdHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhp
bnRlcnNlY3Rpb25zLCB1bmRlcmxpbmVCb3VuZGluZ0JveC5oZWlnaHQoKSwgd2lkdGgpOwotICAg
IEFTU0VSVCghKGEuc2l6ZSgpICUgMikpOwotICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChh
ZGp1c3RlZExvY2FsT3JpZ2luLCBhLCBpc1ByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5
bGUpOwotfQogI2VuZGlmCiAKIHN0YXRpYyBTdHJva2VTdHlsZSB0ZXh0RGVjb3JhdGlvblN0eWxl
VG9TdHJva2VTdHlsZShUZXh0RGVjb3JhdGlvblN0eWxlIGRlY29yYXRpb25TdHlsZSkKQEAgLTI0
NywxMSArMTk5LDEyIEBAIGJvb2wgVGV4dERlY29yYXRpb25QYWludGVyOjpTdHlsZXM6Om9wZXJh
dG9yPT0oY29uc3QgU3R5bGVzJiBvdGhlcikgY29uc3QKICAgICAgICAgJiYgdW5kZXJsaW5lU3R5
bGUgPT0gb3RoZXIudW5kZXJsaW5lU3R5bGUgJiYgb3ZlcmxpbmVTdHlsZSA9PSBvdGhlci5vdmVy
bGluZVN0eWxlICYmIGxpbmV0aHJvdWdoU3R5bGUgPT0gb3RoZXIubGluZXRocm91Z2hTdHlsZTsK
IH0KIAotVGV4dERlY29yYXRpb25QYWludGVyOjpUZXh0RGVjb3JhdGlvblBhaW50ZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRlY29yYXRpb25z
LCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCBpc0ZpcnN0TGluZSwgc3RkOjpvcHRp
b25hbDxTdHlsZXM+IHN0eWxlcykKK1RleHREZWNvcmF0aW9uUGFpbnRlcjo6VGV4dERlY29yYXRp
b25QYWludGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgT3B0aW9uU2V0PFRleHREZWNvcmF0
aW9uPiBkZWNvcmF0aW9ucywgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGJvb2wgaXNGaXJz
dExpbmUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBzdGQ6Om9wdGlvbmFsPFN0eWxlcz4gc3R5
bGVzKQogICAgIDogbV9jb250ZXh0IHsgY29udGV4dCB9CiAgICAgLCBtX2RlY29yYXRpb25zIHsg
ZGVjb3JhdGlvbnMgfQogICAgICwgbV93YXZ5T2Zmc2V0IHsgd2F2eU9mZnNldEZyb21EZWNvcmF0
aW9uKCkgfQogICAgICwgbV9pc1ByaW50aW5nIHsgcmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGlu
ZygpIH0KKyAgICAsIG1fZm9udCB7IGZvbnQgfQogICAgICwgbV9zdHlsZXMgeyBzdHlsZXMgPyAq
V1RGTW92ZShzdHlsZXMpIDogc3R5bGVzRm9yUmVuZGVyZXIocmVuZGVyZXIsIGRlY29yYXRpb25z
LCBpc0ZpcnN0TGluZSwgUHNldWRvSWQ6Ok5vbmUpIH0KICAgICAsIG1fbGluZVN0eWxlIHsgaXNG
aXJzdExpbmUgPyByZW5kZXJlci5maXJzdExpbmVTdHlsZSgpIDogcmVuZGVyZXIuc3R5bGUoKSB9
CiB7CkBAIC0yNjMsMzEgKzIxNiwzNiBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6cGFp
bnRUZXh0RGVjb3JhdGlvbihjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbAogICAgIFVO
VVNFRF9QQVJBTSh0ZXh0UnVuKTsKICAgICBVTlVTRURfUEFSQU0odGV4dE9yaWdpbik7CiAjZW5k
aWYKLSAgICBBU1NFUlQobV9mb250KTsKKyAgICBjb25zdCBhdXRvJiBmb250TWV0cmljcyA9IG1f
bGluZVN0eWxlLmZvbnRNZXRyaWNzKCk7CiAgICAgZmxvYXQgdGV4dERlY29yYXRpb25UaGlja25l
c3MgPSB0ZXh0RGVjb3JhdGlvblN0cm9rZVRoaWNrbmVzcyhtX2xpbmVTdHlsZS5jb21wdXRlZEZv
bnRQaXhlbFNpemUoKSk7Ci0gICAgbV9jb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyh0ZXh0RGVj
b3JhdGlvblRoaWNrbmVzcyk7CiAgICAgRmxvYXRQb2ludCBsb2NhbE9yaWdpbiA9IGJveE9yaWdp
bjsKIAotICAgIGF1dG8gcGFpbnREZWNvcmF0aW9uID0gWyZdIChPcHRpb25TZXQ8VGV4dERlY29y
YXRpb24+IGRlY29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUgc3R5bGUsIGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3QgRmxvYXRQb2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCwg
aW50IG9mZnNldCkgeworICAgIGF1dG8gcGFpbnREZWNvcmF0aW9uID0gWyZdIChUZXh0RGVjb3Jh
dGlvbiBkZWNvcmF0aW9uLCBUZXh0RGVjb3JhdGlvblN0eWxlIHN0eWxlLCBjb25zdCBDb2xvciYg
Y29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgewogICAgICAgICBtX2NvbnRleHQuc2V0U3Ry
b2tlQ29sb3IoY29sb3IpOwogCiAgICAgICAgIGF1dG8gc3Ryb2tlU3R5bGUgPSB0ZXh0RGVjb3Jh
dGlvblN0eWxlVG9TdHJva2VTdHlsZShzdHlsZSk7CiAKICAgICAgICAgaWYgKHN0eWxlID09IFRl
eHREZWNvcmF0aW9uU3R5bGU6OldhdnkpCi0gICAgICAgICAgICBzdHJva2VXYXZ5VGV4dERlY29y
YXRpb24obV9jb250ZXh0LCBzdGFydCwgZW5kLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgbV9s
aW5lU3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCkpOworICAgICAgICAgICAgc3Ryb2tlV2F2
eVRleHREZWNvcmF0aW9uKG1fY29udGV4dCwgcmVjdCwgbV9saW5lU3R5bGUuY29tcHV0ZWRGb250
UGl4ZWxTaXplKCkpOwogICAgICAgICBlbHNlIGlmIChkZWNvcmF0aW9uID09IFRleHREZWNvcmF0
aW9uOjpVbmRlcmxpbmUgfHwgZGVjb3JhdGlvbiA9PSBUZXh0RGVjb3JhdGlvbjo6T3ZlcmxpbmUp
IHsKICNpZiBFTkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9JTkspCiAgICAgICAgICAg
ICBpZiAoKG1fbGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tpcCgpID09IFRleHREZWNvcmF0aW9u
U2tpcDo6SW5rIHx8IG1fbGluZVN0eWxlLnRleHREZWNvcmF0aW9uU2tpcCgpID09IFRleHREZWNv
cmF0aW9uU2tpcDo6QXV0bykgJiYgbV9pc0hvcml6b250YWwpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIW1fY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGRy
YXdTa2lwSW5rVW5kZXJsaW5lKG1fY29udGV4dCwgKm1fZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdp
biwgbG9jYWxPcmlnaW4sIG9mZnNldCwgbV93aWR0aCwgbV9pc1ByaW50aW5nLCBzdHlsZSA9PSBU
ZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgRmxvYXRSZWN0IHVuZGVybGluZUJvdW5kaW5nQm94ID0gbV9jb250ZXh0LmNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KHJlY3QsIG1faXNQcmludGluZyk7CisgICAgICAgICAgICAgICAg
ICAgIERhc2hBcnJheSBpbnRlcnNlY3Rpb25zID0gbV9mb250LmRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdCh0ZXh0UnVuLCB0ZXh0T3JpZ2luLCB1bmRlcmxpbmVCb3VuZGluZ0JveCk7Cisg
ICAgICAgICAgICAgICAgICAgIERhc2hBcnJheSBib3VuZGFyaWVzID0gdHJhbnNsYXRlSW50ZXJz
ZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRhcmllcyhpbnRlcnNlY3Rpb25zLCB1bmRlcmxpbmVC
b3VuZGluZ0JveC5oZWlnaHQoKSwgcmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCEoYm91bmRhcmllcy5zaXplKCkgJSAyKSk7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IHVzZSB1bmRlcmxpbmVCb3VuZGluZ0JveCBoZXJlIGJlY2F1c2UgZHJhd0xpbmVz
Rm9yVGV4dCgpIHdpbGwgcnVuIGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KCkgaW50ZXJu
YWxseS4KKyAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocmVj
dC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBib3VuZGFyaWVzLCBtX2lzUHJpbnRpbmcsIHN0
eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHN1cHBvcnQgdGV4dC1kZWNvcmF0aW9uLXNraXA6IG5vbmUuCiAjZW5kaWYKLSAg
ICAgICAgICAgICAgICBtX2NvbnRleHQuZHJhd0xpbmVGb3JUZXh0KHN0YXJ0LCBtX3dpZHRoLCBt
X2lzUHJpbnRpbmcsIHN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tl
U3R5bGUpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC5kcmF3TGluZUZvclRleHQocmVjdCwg
bV9pc1ByaW50aW5nLCBzdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9r
ZVN0eWxlKTsKICAgICAgICAgICAgIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKGRlY29yYXRpb24gPT0gVGV4dERlY29yYXRpb246OkxpbmVUaHJvdWdoKTsKLSAgICAgICAg
ICAgIG1fY29udGV4dC5kcmF3TGluZUZvclRleHQoc3RhcnQsIG1fd2lkdGgsIG1faXNQcmludGlu
Zywgc3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7Cisg
ICAgICAgICAgICBtX2NvbnRleHQuZHJhd0xpbmVGb3JUZXh0KHJlY3QsIG1faXNQcmludGluZywg
c3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7CiAgICAg
ICAgIH0KICAgICB9OwogCkBAIC0yOTgsMTAgKzI1NiwxMCBAQCB2b2lkIFRleHREZWNvcmF0aW9u
UGFpbnRlcjo6cGFpbnRUZXh0RGVjb3JhdGlvbihjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25z
dCBGbAogICAgIGludCBleHRyYU9mZnNldCA9IDA7CiAgICAgYm9vbCBjbGlwcGluZyA9ICFhcmVM
aW5lc09wYXF1ZSAmJiBtX3NoYWRvdyAmJiBtX3NoYWRvdy0+bmV4dCgpOwogICAgIGlmIChjbGlw
cGluZykgewotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6
ZShtX3dpZHRoLCBtX2Jhc2VsaW5lICsgMikpOworICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3Qo
bG9jYWxPcmlnaW4sIEZsb2F0U2l6ZShtX3dpZHRoLCBmb250TWV0cmljcy5hc2NlbnQoKSArIDIp
KTsKICAgICAgICAgZm9yIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBtX3NoYWRvdzsgc2hh
ZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkgewogICAgICAgICAgICAgaW50IHNoYWRvd0V4
dGVudCA9IHNoYWRvdy0+cGFpbnRpbmdFeHRlbnQoKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBz
aGFkb3dSZWN0KGxvY2FsT3JpZ2luLCBGbG9hdFNpemUobV93aWR0aCwgbV9iYXNlbGluZSArIDIp
KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KGxvY2FsT3JpZ2luLCBGbG9hdFNp
emUobV93aWR0aCwgZm9udE1ldHJpY3MuYXNjZW50KCkgKyAyKSk7CiAgICAgICAgICAgICBzaGFk
b3dSZWN0LmluZmxhdGUoc2hhZG93RXh0ZW50KTsKICAgICAgICAgICAgIGludCBzaGFkb3dYID0g
bV9pc0hvcml6b250YWwgPyBzaGFkb3ctPngoKSA6IHNoYWRvdy0+eSgpOwogICAgICAgICAgICAg
aW50IHNoYWRvd1kgPSBtX2lzSG9yaXpvbnRhbCA/IHNoYWRvdy0+eSgpIDogLXNoYWRvdy0+eCgp
OwpAQCAtMzExLDcgKzI2OSw3IEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludFRl
eHREZWNvcmF0aW9uKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsCiAgICAgICAgIH0K
ICAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKICAgICAgICAgbV9jb250ZXh0LmNsaXAoY2xpcFJl
Y3QpOwotICAgICAgICBleHRyYU9mZnNldCArPSBtX2Jhc2VsaW5lICsgMjsKKyAgICAgICAgZXh0
cmFPZmZzZXQgKz0gZm9udE1ldHJpY3MuYXNjZW50KCkgKyAyOwogICAgICAgICBsb2NhbE9yaWdp
bi5tb3ZlKDAsIGV4dHJhT2Zmc2V0KTsKICAgICB9CiAKQEAgLTMzNywyMCArMjk1LDIwIEBAIHZv
aWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludFRleHREZWNvcmF0aW9uKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGNvbnN0IEZsCiAgICAgICAgIGlmIChtX2RlY29yYXRpb25zLmNvbnRhaW5z
KFRleHREZWNvcmF0aW9uOjpVbmRlcmxpbmUpKSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0g
Y29tcHV0ZVVuZGVybGluZU9mZnNldChtX2xpbmVTdHlsZS50ZXh0VW5kZXJsaW5lUG9zaXRpb24o
KSwgbV9saW5lU3R5bGUuZm9udE1ldHJpY3MoKSwgbV9pbmxpbmVUZXh0Qm94LCB0ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcyk7CiAgICAgICAgICAgICBmbG9hdCB3YXZ5T2Zmc2V0ID0gbV9zdHlsZXMu
dW5kZXJsaW5lU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6V2F2eSA/IG1fd2F2eU9mZnNl
dCA6IDA7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHN0YXJ0ID0gbG9jYWxPcmlnaW4gKyBGbG9h
dFNpemUoMCwgb2Zmc2V0ICsgd2F2eU9mZnNldCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVu
ZCA9IGxvY2FsT3JpZ2luICsgRmxvYXRTaXplKG1fd2lkdGgsIG9mZnNldCArIHdhdnlPZmZzZXQp
OwotICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9uKFRleHREZWNvcmF0aW9uOjpVbmRlcmxpbmUs
IG1fc3R5bGVzLnVuZGVybGluZVN0eWxlLCBtX3N0eWxlcy51bmRlcmxpbmVDb2xvciwgc3RhcnQs
IGVuZCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0KGxvY2FsT3JpZ2luLCBG
bG9hdFNpemUobV93aWR0aCwgdGV4dERlY29yYXRpb25UaGlja25lc3MpKTsKKyAgICAgICAgICAg
IHJlY3QubW92ZSgwLCBvZmZzZXQgKyB3YXZ5T2Zmc2V0KTsKKyAgICAgICAgICAgIHBhaW50RGVj
b3JhdGlvbihUZXh0RGVjb3JhdGlvbjo6VW5kZXJsaW5lLCBtX3N0eWxlcy51bmRlcmxpbmVTdHls
ZSwgbV9zdHlsZXMudW5kZXJsaW5lQ29sb3IsIHJlY3QpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChtX2RlY29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpPdmVybGluZSkpIHsKICAg
ICAgICAgICAgIGZsb2F0IHdhdnlPZmZzZXQgPSBtX3N0eWxlcy5vdmVybGluZVN0eWxlID09IFRl
eHREZWNvcmF0aW9uU3R5bGU6OldhdnkgPyBtX3dhdnlPZmZzZXQgOiAwOwotICAgICAgICAgICAg
RmxvYXRQb2ludCBzdGFydCA9IGxvY2FsT3JpZ2luIC0gRmxvYXRTaXplKDAsIHdhdnlPZmZzZXQp
OwotICAgICAgICAgICAgRmxvYXRQb2ludCBlbmQgPSBsb2NhbE9yaWdpbiArIEZsb2F0U2l6ZSht
X3dpZHRoLCAtd2F2eU9mZnNldCk7Ci0gICAgICAgICAgICBwYWludERlY29yYXRpb24oVGV4dERl
Y29yYXRpb246Ok92ZXJsaW5lLCBtX3N0eWxlcy5vdmVybGluZVN0eWxlLCBtX3N0eWxlcy5vdmVy
bGluZUNvbG9yLCBzdGFydCwgZW5kLCAwKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0KGxv
Y2FsT3JpZ2luLCBGbG9hdFNpemUobV93aWR0aCwgdGV4dERlY29yYXRpb25UaGlja25lc3MpKTsK
KyAgICAgICAgICAgIHJlY3QubW92ZSgwLCAtd2F2eU9mZnNldCk7CisgICAgICAgICAgICBwYWlu
dERlY29yYXRpb24oVGV4dERlY29yYXRpb246Ok92ZXJsaW5lLCBtX3N0eWxlcy5vdmVybGluZVN0
eWxlLCBtX3N0eWxlcy5vdmVybGluZUNvbG9yLCByZWN0KTsKICAgICAgICAgfQogICAgICAgICBp
ZiAobV9kZWNvcmF0aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gpKSB7
Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHN0YXJ0ID0gbG9jYWxPcmlnaW4gKyBGbG9hdFNpemUo
MCwgMiAqIG1fYmFzZWxpbmUgLyAzKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5kID0gbG9j
YWxPcmlnaW4gKyBGbG9hdFNpemUobV93aWR0aCwgMiAqIG1fYmFzZWxpbmUgLyAzKTsKLSAgICAg
ICAgICAgIHBhaW50RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gsIG1fc3R5
bGVzLmxpbmV0aHJvdWdoU3R5bGUsIG1fc3R5bGVzLmxpbmV0aHJvdWdoQ29sb3IsIHN0YXJ0LCBl
bmQsIDApOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6
ZShtX3dpZHRoLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcykpOworICAgICAgICAgICAgcmVjdC5t
b3ZlKDAsIDIgKiBmb250TWV0cmljcy5mbG9hdEFzY2VudCgpIC8gMyk7CisgICAgICAgICAgICBw
YWludERlY29yYXRpb24oVGV4dERlY29yYXRpb246OkxpbmVUaHJvdWdoLCBtX3N0eWxlcy5saW5l
dGhyb3VnaFN0eWxlLCBtX3N0eWxlcy5saW5ldGhyb3VnaENvbG9yLCByZWN0KTsKICAgICAgICAg
fQogICAgIH0gd2hpbGUgKHNoYWRvdyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaAppbmRleCAwMjk0YTQ2M2M3ZjRiNDliYzk4NTExZWZk
MmNmYTA4NTdkZGNjMzE0Li5hNmQxNGIyYjVmNDU2Mzc4MzYwMmEyZWE3OTAwNDZlZjljODAxYjAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWlu
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRl
ci5oCkBAIC00MiwxMyArNDIsMTEgQEAgY2xhc3MgVGV4dFJ1bjsKIGNsYXNzIFRleHREZWNvcmF0
aW9uUGFpbnRlciB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFN0eWxlczsKLSAgICBUZXh0RGVjb3Jh
dGlvblBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiwgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBk
ZWNvcmF0aW9ucywgY29uc3QgUmVuZGVyVGV4dCYsIGJvb2wgaXNGaXJzdExpbmUsIHN0ZDo6b3B0
aW9uYWw8U3R5bGVzPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgVGV4dERlY29yYXRpb25QYWludGVy
KEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gZGVjb3JhdGlvbnMs
IGNvbnN0IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBGb250Q2FzY2FkZSYs
IHN0ZDo6b3B0aW9uYWw8U3R5bGVzPiA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgCiAgICAgdm9pZCBz
ZXRJbmxpbmVUZXh0Qm94KGNvbnN0IElubGluZVRleHRCb3gqIGlubGluZVRleHRCb3gpIHsgbV9p
bmxpbmVUZXh0Qm94ID0gaW5saW5lVGV4dEJveDsgfQotICAgIHZvaWQgc2V0Rm9udChjb25zdCBG
b250Q2FzY2FkZSYgZm9udCkgeyBtX2ZvbnQgPSAmZm9udDsgfQogICAgIHZvaWQgc2V0SXNIb3Jp
em9udGFsKGJvb2wgaXNIb3Jpem9udGFsKSB7IG1faXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFs
OyB9CiAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0K
LSAgICB2b2lkIHNldEJhc2VsaW5lKGZsb2F0IGJhc2VsaW5lKSB7IG1fYmFzZWxpbmUgPSBiYXNl
bGluZTsgfQogICAgIHZvaWQgc2V0VGV4dFNoYWRvdyhjb25zdCBTaGFkb3dEYXRhKiB0ZXh0U2hh
ZG93KSB7IG1fc2hhZG93ID0gdGV4dFNoYWRvdzsgfQogICAgIHZvaWQgc2V0U2hhZG93Q29sb3JG
aWx0ZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogY29sb3JGaWx0ZXIpIHsgbV9zaGFkb3dDb2xv
ckZpbHRlciA9IGNvbG9yRmlsdGVyOyB9CiAKQEAgLTcyLDE0ICs3MCwxMyBAQCBwcml2YXRlOgog
ICAgIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gbV9kZWNvcmF0aW9uczsKICAgICBmbG9hdCBt
X3dhdnlPZmZzZXQ7CiAgICAgZmxvYXQgbV93aWR0aCB7IDAgfTsKLSAgICBmbG9hdCBtX2Jhc2Vs
aW5lIHsgMCB9OwogICAgIEZsb2F0UG9pbnQgbV9ib3hPcmlnaW47CiAgICAgYm9vbCBtX2lzUHJp
bnRpbmc7CiAgICAgYm9vbCBtX2lzSG9yaXpvbnRhbCB7IHRydWUgfTsKICAgICBjb25zdCBTaGFk
b3dEYXRhKiBtX3NoYWRvdyB7IG51bGxwdHIgfTsKICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
KiBtX3NoYWRvd0NvbG9yRmlsdGVyIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IElubGluZVRleHRC
b3gqIG1faW5saW5lVGV4dEJveCB7IG51bGxwdHIgfTsKLSAgICBjb25zdCBGb250Q2FzY2FkZSog
bV9mb250IHsgbnVsbHB0ciB9OworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7CiAKICAg
ICBTdHlsZXMgbV9zdHlsZXM7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fbGluZVN0eWxlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAKaW5kZXggMTM2ZjMx
YThlYmI5MGJjYzI4ZGEwNzY5ODY3MzBjMTdjOTgyMzExOC4uZWM5NDg4NTUxYTk0NjM2Zjg3YTFl
MzA0NjdjNGM5NTU2N2IyNDY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5s
aW5lVGV4dEJveFN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuY3BwCkBAIC04NCwxNyArODQsMTMgQEAgaW50IGNvbXB1dGVVbmRlcmxpbmVPZmZz
ZXQoT3B0aW9uU2V0PFRleHRVbmRlcmxpbmVQb3NpdGlvbj4gdW5kZXJsaW5lUG9zaXRpb24sIGMK
ICAgICByZXR1cm4gZm9udE1ldHJpY3MuYXNjZW50KCkgKyBnYXA7CiB9CiAgICAgCi12b2lkIGdl
dFdhdnlTdHJva2VQYXJhbWV0ZXJzKGZsb2F0IGZvbnRTaXplLCBmbG9hdCYgY29udHJvbFBvaW50
RGlzdGFuY2UsIGZsb2F0JiBzdGVwKQorV2F2eVN0cm9rZVBhcmFtZXRlcnMgZ2V0V2F2eVN0cm9r
ZVBhcmFtZXRlcnMoZmxvYXQgZm9udFNpemUpCiB7Ci0gICAgLy8gRGlzdGFuY2UgYmV0d2VlbiBk
ZWNvcmF0aW9uJ3MgYXhpcyBhbmQgQmV6aWVyIGN1cnZlJ3MgY29udHJvbCBwb2ludHMuCi0gICAg
Ly8gVGhlIGhlaWdodCBvZiB0aGUgY3VydmUgaXMgYmFzZWQgb24gdGhpcyBkaXN0YW5jZS4gSW5j
cmVhc2VzIHRoZSBjdXJ2ZSdzIGhlaWdodAotICAgIC8vIGFzIGZvbnRTaXplIGluY3JlYXNlcyB0
byBtYWtlIHRoZSBjdXJ2ZSBsb29rIGJldHRlci4KLSAgICBjb250cm9sUG9pbnREaXN0YW5jZSA9
IDAuMDkzNzUgKiBmb250U2l6ZTsKLQotICAgIC8vIEluY3JlbWVudCB1c2VkIHRvIGZvcm0gdGhl
IGRpYW1vbmQgc2hhcGUgYmV0d2VlbiBzdGFydCBwb2ludCAocDEpLCBjb250cm9sCi0gICAgLy8g
cG9pbnRzIGFuZCBlbmQgcG9pbnQgKHAyKSBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgZGVjb3JhdGlv
bi4gVGhlIGN1cnZlIGdldHMKLSAgICAvLyB3aWRlciBhcyBmb250IHNpemUgaW5jcmVhc2VzLgot
ICAgIHN0ZXAgPSBmb250U2l6ZSAvIDQuNTsKKyAgICBXYXZ5U3Ryb2tlUGFyYW1ldGVycyByZXN1
bHQ7CisgICAgLy8gTW9yZSBpbmZvcm1hdGlvbiBpcyBpbiB0aGUgV2F2eVN0cm9rZVBhcmFtZXRl
cnMgZGVmaW5pdGlvbi4KKyAgICByZXN1bHQuY29udHJvbFBvaW50RGlzdGFuY2UgPSBmb250U2l6
ZSAqIDEuNSAvIDE2OworICAgIHJlc3VsdC5zdGVwID0gZm9udFNpemUgLyA0LjU7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4dGVuZEludFRvRmxvYXQoaW50
JiBleHRlbmRNZSwgZmxvYXQgZXh0ZW5kVG8pCkBAIC0xMTEsOCArMTA3LDcgQEAgR2x5cGhPdmVy
ZmxvdyB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBsaW5l
U3R5bGUsIGNvbnN0IEkKICAgICAgICAgcmV0dXJuIEdseXBoT3ZlcmZsb3coKTsKIAogICAgIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcyA9IHRleHREZWNvcmF0aW9uU3Ryb2tlVGhpY2tuZXNzKGxpbmVT
dHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSk7Ci0gICAgZmxvYXQgY29udHJvbFBvaW50RGlz
dGFuY2UgPSAwOwotICAgIGZsb2F0IHN0ZXA7CisgICAgV2F2eVN0cm9rZVBhcmFtZXRlcnMgd2F2
eVN0cm9rZVBhcmFtZXRlcnM7CiAgICAgZmxvYXQgd2F2eU9mZnNldCA9IDA7CiAgICAgICAgIAog
ICAgIFRleHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlID0gbGluZVN0eWxlLnRleHRE
ZWNvcmF0aW9uU3R5bGUoKTsKQEAgLTEyMCw3ICsxMTUsNyBAQCBHbHlwaE92ZXJmbG93IHZpc3Vh
bE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwgY29u
c3QgSQogICAgIEdseXBoT3ZlcmZsb3cgb3ZlcmZsb3dSZXN1bHQ7CiAgICAgCiAgICAgaWYgKGRl
Y29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpXYXZ5KSB7Ci0gICAgICAgIGdl
dFdhdnlTdHJva2VQYXJhbWV0ZXJzKGxpbmVTdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSwg
Y29udHJvbFBvaW50RGlzdGFuY2UsIHN0ZXApOworICAgICAgICB3YXZ5U3Ryb2tlUGFyYW1ldGVy
cyA9IGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKGxpbmVTdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNp
emUoKSk7CiAgICAgICAgIHdhdnlPZmZzZXQgPSB3YXZ5T2Zmc2V0RnJvbURlY29yYXRpb24oKTsK
ICAgICAgICAgb3ZlcmZsb3dSZXN1bHQubGVmdCA9IHN0cm9rZVRoaWNrbmVzczsKICAgICAgICAg
b3ZlcmZsb3dSZXN1bHQucmlnaHQgPSBzdHJva2VUaGlja25lc3M7CkBAIC0xMzIsOCArMTI3LDgg
QEAgR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKGNvbnN0IFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IEkKICAgICAgICAgaW50IHVuZGVybGluZU9mZnNldCA9
IDE7CiAgICAgICAgIHVuZGVybGluZU9mZnNldCArPSBjb21wdXRlVW5kZXJsaW5lT2Zmc2V0KGxp
bmVTdHlsZS50ZXh0VW5kZXJsaW5lUG9zaXRpb24oKSwgbGluZVN0eWxlLmZvbnRNZXRyaWNzKCks
IGlubGluZVRleHRCb3gsIHN0cm9rZVRoaWNrbmVzcyk7CiAgICAgICAgIGlmIChkZWNvcmF0aW9u
U3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6V2F2eSkgewotICAgICAgICAgICAgZXh0ZW5k
SW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC5ib3R0b20sIHVuZGVybGluZU9mZnNldCArIHdhdnlP
ZmZzZXQgKyBjb250cm9sUG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7
Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwgLSh1bmRl
cmxpbmVPZmZzZXQgKyB3YXZ5T2Zmc2V0IC0gY29udHJvbFBvaW50RGlzdGFuY2UgLSBzdHJva2VU
aGlja25lc3MpKTsKKyAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQu
Ym90dG9tLCB1bmRlcmxpbmVPZmZzZXQgKyB3YXZ5T2Zmc2V0ICsgd2F2eVN0cm9rZVBhcmFtZXRl
cnMuY29udHJvbFBvaW50RGlzdGFuY2UgKyBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOworICAg
ICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC50b3AsIC0odW5kZXJsaW5l
T2Zmc2V0ICsgd2F2eU9mZnNldCAtIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2ludERp
c3RhbmNlIC0gc3Ryb2tlVGhpY2tuZXNzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LmJvdHRvbSwgdW5kZXJsaW5lT2Zmc2V0
ICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKICAgICAgICAgICAgIGV4dGVuZEludFRvRmxv
YXQob3ZlcmZsb3dSZXN1bHQudG9wLCAtdW5kZXJsaW5lT2Zmc2V0KTsKQEAgLTE0MSw4ICsxMzYs
OCBAQCBHbHlwaE92ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyU3R5bGUmIGxpbmVTdHlsZSwgY29uc3QgSQogICAgIH0KICAgICBpZiAoZGVjb3JhdGlvbiAm
IFRleHREZWNvcmF0aW9uOjpPdmVybGluZSkgewogICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxl
ID09IFRleHREZWNvcmF0aW9uU3R5bGU6OldhdnkpIHsKLSAgICAgICAgICAgIGV4dGVuZEludFRv
RmxvYXQob3ZlcmZsb3dSZXN1bHQuYm90dG9tLCAtd2F2eU9mZnNldCArIGNvbnRyb2xQb2ludERp
c3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKLSAgICAgICAgICAgIGV4dGVuZElu
dFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCB3YXZ5T2Zmc2V0ICsgY29udHJvbFBvaW50RGlz
dGFuY2UgKyBzdHJva2VUaGlja25lc3MpOworICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChv
dmVyZmxvd1Jlc3VsdC5ib3R0b20sIC13YXZ5T2Zmc2V0ICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMu
Y29udHJvbFBvaW50RGlzdGFuY2UgKyBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOworICAgICAg
ICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC50b3AsIHdhdnlPZmZzZXQgKyB3
YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9sUG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVz
cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJm
bG93UmVzdWx0LmJvdHRvbSwgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKICAgICAgICAgICAg
IC8vIHRvcCBpcyB1bnRvdWNoZWQKQEAgLTE1MSw4ICsxNDYsOCBAQCBHbHlwaE92ZXJmbG93IHZp
c3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwg
Y29uc3QgSQogICAgIGlmIChkZWNvcmF0aW9uICYgVGV4dERlY29yYXRpb246OkxpbmVUaHJvdWdo
KSB7CiAgICAgICAgIGZsb2F0IGJhc2VsaW5lID0gbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuZmxv
YXRBc2NlbnQoKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVjb3JhdGlv
blN0eWxlOjpXYXZ5KSB7Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVz
dWx0LmJvdHRvbSwgMiAqIGJhc2VsaW5lIC8gMyArIGNvbnRyb2xQb2ludERpc3RhbmNlICsgc3Ry
b2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKLSAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3Zl
cmZsb3dSZXN1bHQudG9wLCAtKDIgKiBiYXNlbGluZSAvIDMgLSBjb250cm9sUG9pbnREaXN0YW5j
ZSAtIHN0cm9rZVRoaWNrbmVzcykpOworICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVy
Zmxvd1Jlc3VsdC5ib3R0b20sIDIgKiBiYXNlbGluZSAvIDMgKyB3YXZ5U3Ryb2tlUGFyYW1ldGVy
cy5jb250cm9sUG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7CisgICAg
ICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwgLSgyICogYmFzZWxp
bmUgLyAzIC0gd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29udHJvbFBvaW50RGlzdGFuY2UgLSBzdHJv
a2VUaGlja25lc3MpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4dGVuZEludFRv
RmxvYXQob3ZlcmZsb3dSZXN1bHQuYm90dG9tLCAyICogYmFzZWxpbmUgLyAzICsgc3Ryb2tlVGhp
Y2tuZXNzIC0gaGVpZ2h0KTsKICAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dS
ZXN1bHQudG9wLCAtKDIgKiBiYXNlbGluZSAvIDMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5s
aW5lVGV4dEJveFN0eWxlLmgKaW5kZXggY2M1MzEyYTQ4N2RhODUxOWRkNmQ1MDcwNGE3NjA3N2Jh
OTdhM2QyNi4uOTQ1ZjkwNWI2NTBlYjEzNTBlYTMzMjI4NDJlNGViYjkyNmYxZTA2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmgKQEAgLTQ1LDcgKzQ1LDE5IEBA
IGlubGluZSBmbG9hdCB3YXZ5T2Zmc2V0RnJvbURlY29yYXRpb24oKQogfQogCiBHbHlwaE92ZXJm
bG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSwgY29uc3QgSW5saW5lVGV4dEJveCopOwotdm9pZCBnZXRXYXZ5U3Ryb2tlUGFyYW1ldGVy
cyhmbG9hdCBmb250U2l6ZSwgZmxvYXQmIGNvbnRyb2xQb2ludERpc3RhbmNlLCBmbG9hdCYgc3Rl
cCk7CisKK3N0cnVjdCBXYXZ5U3Ryb2tlUGFyYW1ldGVycyB7CisgICAgLy8gRGlzdGFuY2UgYmV0
d2VlbiBkZWNvcmF0aW9uJ3MgYXhpcyBhbmQgQmV6aWVyIGN1cnZlJ3MgY29udHJvbCBwb2ludHMu
CisgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgY3VydmUgaXMgYmFzZWQgb24gdGhpcyBkaXN0YW5j
ZS4gSW5jcmVhc2VzIHRoZSBjdXJ2ZSdzIGhlaWdodAorICAgIC8vIGFzIGZvbnRTaXplIGluY3Jl
YXNlcyB0byBtYWtlIHRoZSBjdXJ2ZSBsb29rIGJldHRlci4KKyAgICBmbG9hdCBjb250cm9sUG9p
bnREaXN0YW5jZSB7IDAgfTsKKworICAgIC8vIEluY3JlbWVudCB1c2VkIHRvIGZvcm0gdGhlIGRp
YW1vbmQgc2hhcGUgYmV0d2VlbiBzdGFydCBwb2ludCAocDEpLCBjb250cm9sCisgICAgLy8gcG9p
bnRzIGFuZCBlbmQgcG9pbnQgKHAyKSBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgZGVjb3JhdGlvbi4g
VGhlIGN1cnZlIGdldHMKKyAgICAvLyB3aWRlciBhcyBmb250IHNpemUgaW5jcmVhc2VzLgorICAg
IGZsb2F0IHN0ZXAgeyAwIH07Cit9OworV2F2eVN0cm9rZVBhcmFtZXRlcnMgZ2V0V2F2eVN0cm9r
ZVBhcmFtZXRlcnMoZmxvYXQgZm9udFNpemUpOwogaW50IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQo
T3B0aW9uU2V0PFRleHRVbmRlcmxpbmVQb3NpdGlvbj4sIGNvbnN0IEZvbnRNZXRyaWNzJiwgY29u
c3QgSW5saW5lVGV4dEJveCosIGludCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyk7CiAgICAgCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="371082"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353913</attachid>
            <date>2018-11-05 15:35:49 -0800</date>
            <delta_ts>2018-11-05 16:14:29 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-191245-20181105153548.patch</filename>
            <type>text/plain</type>
            <size>51824</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3ODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFmMjNhYTNkMmM1NjYw
Y2ZiMTRhYzJmMWNjOTlhOGVlMTgzYjI1YS4uMDUzZTZjOTE1YjE3OTEyMjRhYzhmNTYxNmU1Mzc1
ZjNkMWUxZWUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE4LTExLTA1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAg
dGV4dCBkZWNvcmF0aW9uIGRyYXdpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWmFsYW4g
QnVqdGFzLgorCisgICAgICAgIFRoaXMgaXMgc29tZSBnZW5lcmFsIGNsZWFuIHVwIG9mIHRoZSB0
ZXh0IGRlY29yYXRpb25zIGNvZGUuIFRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAg
ICAgICBUaGlzIHBhdGNoIG1vZGlmaWVzIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
KCkgJiBmcmllbmRzIHRvIGFjY2VwdCBhIEZsb2F0UmVjdCBpbnN0ZWFkIG9mIGEgRmxvYXRQb2lu
dCArIGZsb2F0IHdpZHRoLgorICAgICAgICBUaGlzIGlzIGhlbHBmdWwgYmVjYXVzZSBpdCBhbGxv
d3MgZm9yIGVhc2llciBib3VuZGluZyBib3ggY2FsY3VsYXRpb25zLgorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gcmVtb3ZlcyBzb21lIHJlZHVuZGFudCBjb21wdXRhdGlvbnMgdGhhdCB0aGUgc2tp
cDppbmsgY29kZXBhdGggd2FzIHBlcmZvcm1pbmcuCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZWZhY3RvcnMgdGhlIHdhdnkgZGVjb3JhdGlvbiBwYXJhbWV0ZXJzIHRvIG5vdCB1c2Ugb3V0IHBh
cmFtcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5l
Qm91bmRzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZXNGb3JUZXh0OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojp0aGlja25lc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtl
ZFRleHREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
Q29tcG9zaXRpb25VbmRlcmxpbmUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJva2VXYXZ5VGV4dERlY29yYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRh
cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlRleHREZWNv
cmF0aW9uUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6
OnBhaW50VGV4dERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1NraXBJbmtVbmRl
cmxpbmUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0SW5saW5l
VGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnNldFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0Rm9udCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnNldEJh
c2VsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6dmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyk6CisgICAgICAgICogc3R5bGUv
SW5saW5lVGV4dEJveFN0eWxlLmg6CisKIDIwMTgtMTEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHRlZCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA1
ZDY2ZmI4OTQyMGExZWEwNTcxMDhkZWQ0MzM1ZmM2ZmY0MDEwYTJlLi4wYjU3NjljZDEyZDIxZWI3
ZWE3ZTE4OTdlOWYyZWI5MDA5ODEyMWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTEwODMsMTggKzEwODMsMTgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCiB9CiAjZW5kaWYKIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHdpZHRoLCBib29sIHByaW50aW5nKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29t
cHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHBy
aW50aW5nKQogewogICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocG9pbnQsIHdpZHRoLCBwcmludGluZywg
ZHVtbXlDb2xvcik7CisgICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5n
TW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwogfQogCi1GbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywg
Q29sb3ImIGNvbG9yKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3Vu
ZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wg
cHJpbnRpbmcsIENvbG9yJiBjb2xvcikKIHsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHBvaW50
OwotICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHN0cm9rZVRoaWNrbmVzcygpLCAwLjVm
KTsKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBmbG9hdCB0
aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKICAgICBpZiAocHJpbnRp
bmcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUod2lkdGgsIHRo
aWNrbmVzcykpOworICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJl
Y3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7
CiAgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFu
ZCB5IHNjYWxlcyBhcmUgZXF1YWwuCkBAIC0xMTA4LDEyICsxMTA4LDEyIEBAIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQoY29uc3QgRmxvCiAgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoc2hhZGUpOwogICAgIH0KIAotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFu
c2Zvcm0ubWFwUG9pbnQocG9pbnQpOworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFu
c2Zvcm0ubWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICAvLyBWaXN1YWwgb3ZlcmZsb3cg
bWlnaHQgb2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVy
Zmxvd0ZvckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxp
bmUgZGVjb3JhdGlvbi4KICAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQo
cm91bmRmKGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwogICAgIGlm
IChhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQogICAgICAgICBvcmlnaW4gPSBp
bnZlcnNlLnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxvYXRS
ZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCB0aGlja25lc3MpKTsKKyAgICByZXR1cm4gRmxv
YXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggODYxOTA1MzM5YTQxZDIyYTgzMmZlNzFhM2JlZjY5MmUyM2Nh
ODBiMy4uZDJiMzliM2RiNGE5YzViNDdjYzljM2ZkNjk1Y2ZlZjc1M2YzNTkyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAg
LTQxOCw5ICs0MTgsOSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVz
KTsKIAotICAgIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNv
bGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
ID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOworICAgIEZsb2F0UmVjdCBjb21w
dXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5n
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJl
Y3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxl
ID0gU29saWRTdHJva2UpOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tl
KTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwpAQCAtNjI2LDcgKzYyNiw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogCi0gICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdp
ZHRoLCBib29sIHByaW50aW5nLCBDb2xvciYpOworICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJv
dW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJp
bnRpbmcsIENvbG9yJik7CiAKICAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJv
a2VXaWR0aChmbG9hdCkgY29uc3Q7CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZv
clN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCBkNDhiOTI0ZWI2MDQz
NmQ4MzFhOThlNTY5NWE5MzA4MjUzOGY0MmFlLi41MDM2ODkyNmFjZjMwZWYxNGQzMzQ3NTJiM2Zl
OWM4YzhkYWIxNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmlu
ZGV4IGY2NWVlMjU2NTcyYjIxOGVkN2RlOWZmMThhYjYzMDZlYTNjZjc5NDcuLjNkOWM0OGRmMzU4
ZDBhZDg1NTA2NDY2MDNiNzVmMWVmNzA4YTcxMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAt
MTAyMyw3ICsxMDIzLDcgQEAgdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGMKICAgICAgICAgY2Fpcm9f
c2V0X2FudGlhbGlhcyhjYWlyb0NvbnRleHQsIENBSVJPX0FOVElBTElBU19ERUZBVUxUKTsKIH0K
IAotdm9pZCBkcmF3TGluZXNGb3JUZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBjb25zdCBDb2xvciYgY29sb3Is
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgQ29s
b3IgbW9kaWZpZWRDb2xvciA9IGNvbG9yOwogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRl
TGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHBsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHdpZHRocy5sYXN0KCksIHByaW50aW5nLCBtb2RpZmllZENvbG9yLCBzdHJva2VUaGlja25l
c3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb09wZXJhdGlvbnMuaAppbmRleCBjYjc4ZGZiMWI1YWE4Mzc2MDJlYzUyYzQxNGViZGZj
NDU3M2FkZDY5Li4wODVlNjFhNWIzYzljN2M5NzIxNmIzYzdiY2Q2ZDc2OTI1OGNjODRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuaApAQCAtMTQ0LDcgKzE0NCw3IEBAIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d1N1cmZhY2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBG
CiAKIHZvaWQgZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImKTsKIHZvaWQg
ZHJhd0xpbmUoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBib29sKTsKLXZv
aWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBjb25zdCBDb2xvciYsIGZsb2F0KTsK
K3ZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGNv
bnN0IENvbG9yJik7CiB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CiB2
b2lkIGRyYXdFbGxpcHNlKFBsYXRmb3JtQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCAyZjhiOTI1ODZkM2U4ZDk0ODFlMTlhMjQ5OGQ4
MmY3ZGI1ZmY5MDE2Li5jMzRhOTliOTYxMTYyZWRmNjg2ZmY1MTIxODA1ZDZiOTAzZjM4YzE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMTUsMTIgKzMxNSwxMiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLAogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdHMsIHdpZHRoLCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewotICAg
IGRyYXdMaW5lc0ZvclRleHQob3JpZ2luLCBEYXNoQXJyYXkgeyB3aWR0aCwgMCB9LCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcyk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9u
KCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IHJlY3Qud2lkdGgoKSwgMCB9LCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyOSwxMiArMzI5LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIG1faW1w
bC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVVbmRlcmxpbmVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRm
b3JtQ29udGV4dCgpLCBwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywg
bV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIENhaXJv
OjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAppbmRleCBjNzdkZmI3MDY2YzE4ZDU2ZjNk
OWNjMWQ3OTBjOTMzNTZjNDY0MWM2Li42YzIwMDY3OTkxMTA2Nzg3ZTIzYzRhNWM2ZDUwNTUzNWRi
ZDNmMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTI5Niwx
MSArMjk2LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pCiAgICAgQ2Fpcm86OmRyYXdMaW5l
KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlh
bGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3Mp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQogewotICAgIFVOVVNFRF9Q
QVJBTShzdHJva2VUaGlja25lc3MpOwogICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4
dCwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIENhaXJvOjpkcmF3TGluZXNGb3JU
ZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5oCmluZGV4IDJkNzQyODUyZWM0NGViZGVmY2RiYzU3YzkxYzVhMGVk
YzczZmY4ZTQuLmYxYjAyZDM0YWIyZmYyOWFkY2ZiODc0M2M4OTRjMWU0NjA4YjY3M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCmluZGV4IGZlMTEyZGRkMDY4YWZmNDM1ZTU3N2U2MzM5ZjBkZWI3N2NlZDllZWYuLjM3NDkw
MjFmMzdjYmQzMTAxMjY3MGE2YzdhYzA4NTQ1MzVjOTRjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
QEAgLTE1NzAsMTUgKzE1NzAsMTUgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICByZXR1
cm4gRmxvYXRSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9y
aWdpbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKICAgICBEYXNoQXJyYXkg
d2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQod2lkdGgpOworICAgIHdpZHRocy5hcHBlbmQocmVj
dC53aWR0aCgpKTsKICAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIGRyYXdMaW5lc0ZvclRleHQo
cG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CisgICAg
ZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTU4NywxMyArMTU4NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRo
aWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAKLSAg
ICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChwb2ludCwgd2lkdGhzLmxhc3QoKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3Ip
OworICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2lu
Z01vZGVGb3JUZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRo
aWNrbmVzcykpLCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CiAgICAgYm9vbCBmaWxsQ29s
b3JJc05vdEVxdWFsVG9TdHJva2VDb2xvciA9IGZpbGxDb2xvcigpICE9IGxvY2FsU3Ryb2tlQ29s
b3I7CiAgICAgCiAgICAgVmVjdG9yPENHUmVjdCwgND4gZGFzaEJvdW5kczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA3MzUzZDM3YWZiMWMxNTYzMjYwYzE5MGRhYmU5
MTNiY2M0MzcxNjE1Li42ZjkxY2QwZTU1ZDk2NmEzNWNlMmU0MDc0OGQ2OThkOGRmMmRmMDFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC01OTMsNyArNTkzLDcgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdM
aW5lJiBpdGVtKQogCiB2b2lkIERyYXdMaW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQo
KSwgbV93aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOworICAgIGNvbnRleHQuZHJh
d0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3RoaWNrbmVzcywgbV93aWR0aHMsIG1fcHJpbnRpbmcs
IG1fZG91YmxlTGluZXMpOwogfQogCiBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmVz
Rm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKQEAgLTYw
Myw3ICs2MDMsNyBAQCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgYwogICAgIGlmICghbV93aWR0aHMu
c2l6ZSgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgcmVz
dWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCksIG1fc3Ryb2tlV2lkdGgpKTsK
KyAgICBGbG9hdFJlY3QgcmVzdWx0KHBvaW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCks
IG1fdGhpY2tuZXNzKSk7CiAgICAgcmVzdWx0LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBp
eGVsIHNuYXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRh
a2UgdGhlIENUTSBpbnRvIGFjY291bnQuCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYxNCw2
ICs2MTQsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkKICAgICB0cy5kdW1wUHJvcGVydHkoImJsb2Nr
LWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9uKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
bG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
InBvaW50IiwgaXRlbS5wb2ludCgpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRoaWNrbmVzcyIs
IGl0ZW0udGhpY2tuZXNzKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZG91YmxlIiwgaXRlbS5k
b3VibGVMaW5lcygpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRocyIsIGl0ZW0ud2lkdGhz
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaXMtcHJpbnRpbmciLCBpdGVtLmlzUHJpbnRpbmco
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA3YzdlYjZkNzJmMTBkMWYy
NmQwMTg2NzgxYjAyMmM2ZDM5MjE0MDNkLi4yYjdkMTRjYjA1ZDIwNjM2NjYxODIzN2I0NTFhNGE0
Y2IxY2I2ZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTc5MSwyNiAr
NzkxLDI3IEBAIHByaXZhdGU6CiAKIGNsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4dD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9j
YWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKKyAgICBzdGF0aWMgUmVmPERyYXdMaW5lc0Zv
clRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9h
dFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChibG9ja0xvY2F0aW9uLCBsb2NhbEFu
Y2hvciwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVdpZHRoKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwg
bG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsK
ICAgICB9CiAKICAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxv
Y2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9CiAgICAgY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2Nh
dGlvbjsgfQogICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsQW5jaG9yOyB9CiAgICAgRmxvYXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KKyAgICBmbG9hdCB0aGlja25lc3Mo
KSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsgfQogICAgIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aHM7IH0KICAgICBib29sIGlzUHJpbnRpbmcoKSBj
b25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0
IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAogcHJpdmF0ZToKLSAgICBEcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9j
YWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKKyAgICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3Is
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMpCiAgICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdM
aW5lc0ZvclRleHQpCiAgICAgICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCiAg
ICAgICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAgICAgLCBtX3dpZHRocyh3
aWR0aHMpCi0gICAgICAgICwgbV9zdHJva2VXaWR0aChzdHJva2VXaWR0aCkKKyAgICAgICAgLCBt
X3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAgICAgICwgbV9wcmludGluZyhwcmludGluZykKICAg
ICAgICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQogICAgIHsKQEAgLTgyMyw3ICs4MjQs
NyBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwogICAgIEZsb2F0
U2l6ZSBtX2xvY2FsQW5jaG9yOwogICAgIERhc2hBcnJheSBtX3dpZHRoczsKLSAgICBmbG9hdCBt
X3N0cm9rZVdpZHRoOworICAgIGZsb2F0IG1fdGhpY2tuZXNzOwogICAgIGJvb2wgbV9wcmludGlu
ZzsKICAgICBib29sIG1fZG91YmxlTGluZXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCmluZGV4IDUzMDdmMDI1ZmIyMTgwMzIyOTk1OGNhZjkyYjUzOWE1MmNk
YzY2MjIuLjkwMzliNzhlZTJhZjRkZDQ4OWQzYWZiNmU2NzRlMTE1YWViYzA4YmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTIzMCw5ICsyMzAsOSBAQCB2
b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCi12
b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKIHsKLSAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5l
c0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVzcykpKTsKKyAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5l
c0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcykpKTsKICAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApp
bmRleCAxYjc5NDM3YWM3MDI4MjY2Y2Y0OWQzYTQ1NDFlNjlkNzhhYzlhMWViLi5iNjlkNDRlZjJl
YmQ2NjNlMzk3ZDZhNDA1YzhmNjBjZTgxNmZlZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIG92ZXJyaWRlOwogICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5jcHAKaW5kZXggNTc4NDk1ZmVhYTMwYTk2ODQ4MjA5NGY5NjRlYjI5MDlhMmViZTMxOC4u
MmIxYWVjZjBkMWI3ZTZhMzQxYmY5NGJmZmFlZDIyMGYxYTQ1ODYzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTYz
MSw5ICs2MzEsOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlh
cykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQogewotICAgIHN0cnVjdCBEcmF3TGlu
ZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQ
b2ludCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvciwgZmxvYXQ+IHsKKyAgICBzdHJ1Y3Qg
RHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CiAgICAg
ICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKQEAg
LTY0Nyw5ICs2NDcsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhcwogICAgICAgICB9CiAgICAg
fTsKIAotICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOwogICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3TGluZXNGb3JUZXh0Pihwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5l
cywgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRleHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRo
cywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAK
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmlu
ZGV4IDZkNmZhYzM4M2U3YWYwNmM5MjEzZGNiNGZlMDg3Y2Q2ZjM4NGQ5MTkuLmRiZDY3MjMxNDg0
ZjkxODcyMWNjMGJmZGQ4NjM4NWU3ZmU1Yjg5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxv
YXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYs
IGJvb2wsIGJvb2wsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6
UGF0aCYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1dlYkNvcmVUZXh0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dl
YkNvcmVUZXh0UmVuZGVyZXIuY3BwCmluZGV4IDc2ZjkwYzExMDEzZjkyZjg2YWIwMDhhMWY4YjY3
ZWExNGRiNzkxODAuLjk3MjJiZWY2ZGEwMGFjNDcyZWU2MmZiNTI3YzE4NDliZTgyNTAwODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5kZXJl
ci5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgZG9EcmF3VGV4dEF0UG9pbnQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnMKICAgICAgICAg
dW5kZXJsaW5lUG9pbnQubW92ZShiZWZvcmVXaWR0aCwgMSk7CiAKICAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihjb2xvcik7Ci0gICAgICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KHVu
ZGVybGluZVBvaW50LCB1bmRlcmxpbmVkV2lkdGgsIGZhbHNlKTsKKyAgICAgICAgY29udGV4dC5k
cmF3TGluZUZvclRleHQoRmxvYXRSZWN0KHVuZGVybGluZVBvaW50LCBGbG9hdFNpemUodW5kZXJs
aW5lZFdpZHRoLCBmb250LnNpemUoKSAvIDE2KSksIGZhbHNlKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA3Y2JjMDc4Y2FiMjdl
YTJlMjE1NDAwN2MxNGVjYzkxYmMyMjdkMmY2Li5mMzExM2Q2NDFlZDhhZjI4YzllMzUzMDdjOWZh
ODg0Njg1NWI2MWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCkBAIC0xMDkwLDExICsxMDkwLDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtl
ZFRleHREZWNvcmF0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFIKICAgICB9
CiAKICAgICAvLyAyLiBQYWludAotICAgIFRleHREZWNvcmF0aW9uUGFpbnRlciBkZWNvcmF0aW9u
UGFpbnRlciB7IGNvbnRleHQsIGxpbmVTdHlsZSgpLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCks
IHJlbmRlcmVyKCksIGlzRmlyc3RMaW5lKCksIG1hcmtlZFRleHQuc3R5bGUudGV4dERlY29yYXRp
b25TdHlsZXMgfTsKKyAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3JhdGlvblBhaW50ZXIg
eyBjb250ZXh0LCBsaW5lU3R5bGUoKS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCByZW5kZXJl
cigpLCBpc0ZpcnN0TGluZSgpLCBsaW5lRm9udCgpLCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNv
cmF0aW9uU3R5bGVzIH07CiAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0SW5saW5lVGV4dEJveCh0
aGlzKTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRGb250KGxpbmVGb250KCkpOwogICAgIGRl
Y29yYXRpb25QYWludGVyLnNldFdpZHRoKHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRoKCkpOwot
ICAgIGRlY29yYXRpb25QYWludGVyLnNldEJhc2VsaW5lKGxpbmVTdHlsZSgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpOwogICAgIGRlY29yYXRpb25QYWludGVyLnNldElzSG9yaXpvbnRhbChpc0hv
cml6b250YWwoKSk7CiAgICAgaWYgKG1hcmtlZFRleHQuc3R5bGUudGV4dFNoYWRvdykgewogICAg
ICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRUZXh0U2hhZG93KCZtYXJrZWRUZXh0LnN0eWxlLnRl
eHRTaGFkb3cudmFsdWUoKSk7CkBAIC0xMjAwLDcgKzExOTgsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEZsb2F0UAogICAgIENvbG9yIHVuZGVybGluZUNvbG9yID0gdW5kZXJsaW5lLmNvbXBvc2l0aW9u
VW5kZXJsaW5lQ29sb3IgPT0gQ29tcG9zaXRpb25VbmRlcmxpbmVDb2xvcjo6VGV4dENvbG9yID8g
cmVuZGVyZXIoKS5zdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpIDogcmVuZGVyZXIoKS5zdHlsZSgpLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKHVuZGVybGluZS5jb2xvcik7CiAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcih1bmRlcmxpbmVDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25l
c3MobGluZVRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRQb2lu
dChib3hPcmlnaW4ueCgpICsgc3RhcnQsIGJveE9yaWdpbi55KCkgKyBsb2dpY2FsSGVpZ2h0KCkg
LSBsaW5lVGhpY2tuZXNzKSwgd2lkdGgsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygp
KTsKKyAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4dChGbG9hdFJlY3QoYm94T3JpZ2luLngoKSAr
IHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgbG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywg
d2lkdGgsIGxpbmVUaGlja25lc3MpLCByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSk7
CiB9CiAKIGludCBJbmxpbmVUZXh0Qm94OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5j
cHAKaW5kZXggNzU1MWE5ZmQ2Y2Q2MDkyYTdlYzBiYjY2OTc5M2FmZmFkNGU0ZDk4My4uZDI2YzA0
ODNjODQ1NTY4ZjdmNjhkNWE5MmI1NzVlM2E4YjIxNjMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtOTcs
OSArOTcsNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNv
bnN0IExheW91dCYgbGF5b3V0LCBQYWludEluZm8mIHBhaQogICAgIGlmICghc3R5bGUudGV4dERl
Y29yYXRpb25zSW5FZmZlY3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyVGV4
dCogdGV4dFJlbmRlcmVyID0gY2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykuZmlyc3Qo
KTsKICAgICAgICAgaWYgKHRleHRSZW5kZXJlcikgewotICAgICAgICAgICAgdGV4dERlY29yYXRp
b25QYWludGVyLmVtcGxhY2UocGFpbnRJbmZvLmNvbnRleHQoKSwgc3R5bGUudGV4dERlY29yYXRp
b25zSW5FZmZlY3QoKSwgKnRleHRSZW5kZXJlciwgZmFsc2UpOwotICAgICAgICAgICAgdGV4dERl
Y29yYXRpb25QYWludGVyLT5zZXRGb250KHN0eWxlLmZvbnRDYXNjYWRlKCkpOwotICAgICAgICAg
ICAgdGV4dERlY29yYXRpb25QYWludGVyLT5zZXRCYXNlbGluZShzdHlsZS5mb250TWV0cmljcygp
LmFzY2VudCgpKTsKKyAgICAgICAgICAgIHRleHREZWNvcmF0aW9uUGFpbnRlci5lbXBsYWNlKHBh
aW50SW5mby5jb250ZXh0KCksIHN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCksICp0ZXh0
UmVuZGVyZXIsIGZhbHNlLCBzdHlsZS5mb250Q2FzY2FkZSgpKTsKICAgICAgICAgfQogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVy
LmNwcAppbmRleCA5OGU4OGRjNDgwNWQ2YTVkYTdhYTU0MjA1ZGRiMTZlNzQxNjk4OTgwLi45Yjg1
OTVjMDNlNjBmNTExZDQ0OTBmMGI2ZWUzMWFkM2VmNWY1MDdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcApAQCAtODEsNzUgKzgx
LDM5IEBAIHN0YXRpYyB2b2lkIGFkanVzdFN0ZXBUb0RlY29yYXRpb25MZW5ndGgoZmxvYXQmIHN0
ZXAsIGZsb2F0JiBjb250cm9sUG9pbnREaXN0YW5jCiAgKiAgICAgICAgICAgICB8LS0tLS0tLS0t
LS18CiAgKiAgICAgICAgICAgICAgICAgc3RlcAogICovCi1zdGF0aWMgdm9pZCBzdHJva2VXYXZ5
VGV4dERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kLCBmbG9hdCBzdHJva2VUaGlja25lc3MsIGZs
b2F0IGZvbnRTaXplKQorc3RhdGljIHZvaWQgc3Ryb2tlV2F2eVRleHREZWNvcmF0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBmb250U2l6
ZSkKIHsKLSAgICBGbG9hdFBvaW50IHAxID0gc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBwMiA9IGVu
ZDsKLSAgICBjb250ZXh0LmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhwMSwgcDIsIHN0cm9r
ZVRoaWNrbmVzcywgY29udGV4dC5zdHJva2VTdHlsZSgpKTsKKyAgICBGbG9hdFBvaW50IHAxID0g
cmVjdC5taW5YTWluWUNvcm5lcigpOworICAgIEZsb2F0UG9pbnQgcDIgPSByZWN0Lm1heFhNaW5Z
Q29ybmVyKCk7CisgICAgY29udGV4dC5hZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAy
LCByZWN0LmhlaWdodCgpLCBjb250ZXh0LnN0cm9rZVN0eWxlKCkpOwogCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGgubW92ZVRvKHAxKTsKIAotICAgIGZsb2F0IGNvbnRyb2xQb2ludERpc3RhbmNl
OwotICAgIGZsb2F0IHN0ZXA7Ci0gICAgZ2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMoZm9udFNpemUs
IGNvbnRyb2xQb2ludERpc3RhbmNlLCBzdGVwKTsKKyAgICBhdXRvIHdhdnlTdHJva2VQYXJhbWV0
ZXJzID0gZ2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMoZm9udFNpemUpOwogCi0gICAgYm9vbCBpc1Zl
cnRpY2FsTGluZSA9IChwMS54KCkgPT0gcDIueCgpKTsKKyAgICBBU1NFUlQocDEueSgpID09IHAy
LnkoKSk7CiAKLSAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgQVNTRVJUKHAxLngo
KSA9PSBwMi54KCkpOworICAgIGZsb2F0IHlBeGlzID0gcDEueSgpOworICAgIGZsb2F0IHgxID0g
c3RkOjptaW4ocDEueCgpLCBwMi54KCkpOworICAgIGZsb2F0IHgyID0gc3RkOjptYXgocDEueCgp
LCBwMi54KCkpOwogCi0gICAgICAgIGZsb2F0IHhBeGlzID0gcDEueCgpOwotICAgICAgICBmbG9h
dCB5MTsKLSAgICAgICAgZmxvYXQgeTI7CisgICAgYWRqdXN0U3RlcFRvRGVjb3JhdGlvbkxlbmd0
aCh3YXZ5U3Ryb2tlUGFyYW1ldGVycy5zdGVwLCB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9s
UG9pbnREaXN0YW5jZSwgeDIgLSB4MSk7CisgICAgRmxvYXRQb2ludCBjb250cm9sUG9pbnQxKDAs
IHlBeGlzICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29udHJvbFBvaW50RGlzdGFuY2UpOworICAg
IEZsb2F0UG9pbnQgY29udHJvbFBvaW50MigwLCB5QXhpcyAtIHdhdnlTdHJva2VQYXJhbWV0ZXJz
LmNvbnRyb2xQb2ludERpc3RhbmNlKTsKIAotICAgICAgICBpZiAocDEueSgpIDwgcDIueSgpKSB7
Ci0gICAgICAgICAgICB5MSA9IHAxLnkoKTsKLSAgICAgICAgICAgIHkyID0gcDIueSgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgeTEgPSBwMi55KCk7Ci0gICAgICAgICAgICB5MiA9
IHAxLnkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFkanVzdFN0ZXBUb0RlY29yYXRpb25MZW5n
dGgoc3RlcCwgY29udHJvbFBvaW50RGlzdGFuY2UsIHkyIC0geTEpOwotICAgICAgICBGbG9hdFBv
aW50IGNvbnRyb2xQb2ludDEoeEF4aXMgKyBjb250cm9sUG9pbnREaXN0YW5jZSwgMCk7Ci0gICAg
ICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50Mih4QXhpcyAtIGNvbnRyb2xQb2ludERpc3RhbmNl
LCAwKTsKLQotICAgICAgICBmb3IgKGZsb2F0IHkgPSB5MTsgeSArIDIgKiBzdGVwIDw9IHkyOykg
ewotICAgICAgICAgICAgY29udHJvbFBvaW50MS5zZXRZKHkgKyBzdGVwKTsKLSAgICAgICAgICAg
IGNvbnRyb2xQb2ludDIuc2V0WSh5ICsgc3RlcCk7Ci0gICAgICAgICAgICB5ICs9IDIgKiBzdGVw
OwotICAgICAgICAgICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKGNvbnRyb2xQb2ludDEsIGNvbnRy
b2xQb2ludDIsIEZsb2F0UG9pbnQoeEF4aXMsIHkpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEFTU0VSVChwMS55KCkgPT0gcDIueSgpKTsKLQotICAgICAgICBmbG9hdCB5QXhp
cyA9IHAxLnkoKTsKLSAgICAgICAgZmxvYXQgeDE7Ci0gICAgICAgIGZsb2F0IHgyOwotCi0gICAg
ICAgIGlmIChwMS54KCkgPCBwMi54KCkpIHsKLSAgICAgICAgICAgIHgxID0gcDEueCgpOwotICAg
ICAgICAgICAgeDIgPSBwMi54KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4MSA9
IHAyLngoKTsKLSAgICAgICAgICAgIHgyID0gcDEueCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
YWRqdXN0U3RlcFRvRGVjb3JhdGlvbkxlbmd0aChzdGVwLCBjb250cm9sUG9pbnREaXN0YW5jZSwg
eDIgLSB4MSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50MSgwLCB5QXhpcyArIGNv
bnRyb2xQb2ludERpc3RhbmNlKTsKLSAgICAgICAgRmxvYXRQb2ludCBjb250cm9sUG9pbnQyKDAs
IHlBeGlzIC0gY29udHJvbFBvaW50RGlzdGFuY2UpOwotCi0gICAgICAgIGZvciAoZmxvYXQgeCA9
IHgxOyB4ICsgMiAqIHN0ZXAgPD0geDI7KSB7Ci0gICAgICAgICAgICBjb250cm9sUG9pbnQxLnNl
dFgoeCArIHN0ZXApOwotICAgICAgICAgICAgY29udHJvbFBvaW50Mi5zZXRYKHggKyBzdGVwKTsK
LSAgICAgICAgICAgIHggKz0gMiAqIHN0ZXA7Ci0gICAgICAgICAgICBwYXRoLmFkZEJlemllckN1
cnZlVG8oY29udHJvbFBvaW50MSwgY29udHJvbFBvaW50MiwgRmxvYXRQb2ludCh4LCB5QXhpcykp
OwotICAgICAgICB9CisgICAgZm9yIChmbG9hdCB4ID0geDE7IHggKyAyICogd2F2eVN0cm9rZVBh
cmFtZXRlcnMuc3RlcCA8PSB4MjspIHsKKyAgICAgICAgY29udHJvbFBvaW50MS5zZXRYKHggKyB3
YXZ5U3Ryb2tlUGFyYW1ldGVycy5zdGVwKTsKKyAgICAgICAgY29udHJvbFBvaW50Mi5zZXRYKHgg
KyB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5zdGVwKTsKKyAgICAgICAgeCArPSAyICogd2F2eVN0cm9r
ZVBhcmFtZXRlcnMuc3RlcDsKKyAgICAgICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKGNvbnRyb2xQ
b2ludDEsIGNvbnRyb2xQb2ludDIsIEZsb2F0UG9pbnQoeCwgeUF4aXMpKTsKICAgICB9CiAKICAg
ICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBhdXRvIHN0cm9rZVRoaWNr
bmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisgICAgY29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MocmVjdC5oZWlnaHQoKSk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwor
ICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKICNp
ZiBFTkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJT05fU0tJUF9JTkspCkBAIC0yMDMsMTggKzE2Nyw2
IEBAIHN0YXRpYyBEYXNoQXJyYXkgdHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5r
Qm91bmRhcmllcyhjb25zdCBEYXNoQXJyYXkmCiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
LQotc3RhdGljIHZvaWQgZHJhd1NraXBJbmtVbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29u
c3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxPcmlnaW4s
Ci0gICAgZmxvYXQgdW5kZXJsaW5lT2Zmc2V0LCBmbG9hdCB3aWR0aCwgYm9vbCBpc1ByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBGbG9h
dFBvaW50IGFkanVzdGVkTG9jYWxPcmlnaW4gPSBsb2NhbE9yaWdpbjsKLSAgICBhZGp1c3RlZExv
Y2FsT3JpZ2luLm1vdmUoMCwgdW5kZXJsaW5lT2Zmc2V0KTsKLSAgICBGbG9hdFJlY3QgdW5kZXJs
aW5lQm91bmRpbmdCb3ggPSBjb250ZXh0LmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGFk
anVzdGVkTG9jYWxPcmlnaW4sIHdpZHRoLCBpc1ByaW50aW5nKTsKLSAgICBEYXNoQXJyYXkgaW50
ZXJzZWN0aW9ucyA9IGZvbnQuZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KHRleHRSdW4s
IHRleHRPcmlnaW4sIHVuZGVybGluZUJvdW5kaW5nQm94KTsKLSAgICBEYXNoQXJyYXkgYSA9IHRy
YW5zbGF0ZUludGVyc2VjdGlvblBvaW50c1RvU2tpcElua0JvdW5kYXJpZXMoaW50ZXJzZWN0aW9u
cywgdW5kZXJsaW5lQm91bmRpbmdCb3guaGVpZ2h0KCksIHdpZHRoKTsKLSAgICBBU1NFUlQoIShh
LnNpemUoKSAlIDIpKTsKLSAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQoYWRqdXN0ZWRMb2Nh
bE9yaWdpbiwgYSwgaXNQcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KICNl
bmRpZgogCiBzdGF0aWMgU3Ryb2tlU3R5bGUgdGV4dERlY29yYXRpb25TdHlsZVRvU3Ryb2tlU3R5
bGUoVGV4dERlY29yYXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUpCkBAIC0yNDcsMTEgKzE5OSwx
MiBAQCBib29sIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6U3R5bGVzOjpvcGVyYXRvcj09KGNvbnN0
IFN0eWxlcyYgb3RoZXIpIGNvbnN0CiAgICAgICAgICYmIHVuZGVybGluZVN0eWxlID09IG90aGVy
LnVuZGVybGluZVN0eWxlICYmIG92ZXJsaW5lU3R5bGUgPT0gb3RoZXIub3ZlcmxpbmVTdHlsZSAm
JiBsaW5ldGhyb3VnaFN0eWxlID09IG90aGVyLmxpbmV0aHJvdWdoU3R5bGU7CiB9CiAKLVRleHRE
ZWNvcmF0aW9uUGFpbnRlcjo6VGV4dERlY29yYXRpb25QYWludGVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBkZWNvcmF0aW9ucywgY29uc3QgUmVu
ZGVyVGV4dCYgcmVuZGVyZXIsIGJvb2wgaXNGaXJzdExpbmUsIHN0ZDo6b3B0aW9uYWw8U3R5bGVz
PiBzdHlsZXMpCitUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlRleHREZWNvcmF0aW9uUGFpbnRlcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gZGVjb3Jh
dGlvbnMsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBib29sIGlzRmlyc3RMaW5lLCBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCwgc3RkOjpvcHRpb25hbDxTdHlsZXM+IHN0eWxlcykKICAgICA6
IG1fY29udGV4dCB7IGNvbnRleHQgfQogICAgICwgbV9kZWNvcmF0aW9ucyB7IGRlY29yYXRpb25z
IH0KICAgICAsIG1fd2F2eU9mZnNldCB7IHdhdnlPZmZzZXRGcm9tRGVjb3JhdGlvbigpIH0KICAg
ICAsIG1faXNQcmludGluZyB7IHJlbmRlcmVyLmRvY3VtZW50KCkucHJpbnRpbmcoKSB9CisgICAg
LCBtX2ZvbnQgeyBmb250IH0KICAgICAsIG1fc3R5bGVzIHsgc3R5bGVzID8gKldURk1vdmUoc3R5
bGVzKSA6IHN0eWxlc0ZvclJlbmRlcmVyKHJlbmRlcmVyLCBkZWNvcmF0aW9ucywgaXNGaXJzdExp
bmUsIFBzZXVkb0lkOjpOb25lKSB9CiAgICAgLCBtX2xpbmVTdHlsZSB7IGlzRmlyc3RMaW5lID8g
cmVuZGVyZXIuZmlyc3RMaW5lU3R5bGUoKSA6IHJlbmRlcmVyLnN0eWxlKCkgfQogewpAQCAtMjYz
LDMxICsyMTYsMzYgQEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50VGV4dERlY29y
YXRpb24oY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmwKICAgICBVTlVTRURfUEFSQU0o
dGV4dFJ1bik7CiAgICAgVU5VU0VEX1BBUkFNKHRleHRPcmlnaW4pOwogI2VuZGlmCi0gICAgQVNT
RVJUKG1fZm9udCk7CisgICAgY29uc3QgYXV0byYgZm9udE1ldHJpY3MgPSBtX2xpbmVTdHlsZS5m
b250TWV0cmljcygpOwogICAgIGZsb2F0IHRleHREZWNvcmF0aW9uVGhpY2tuZXNzID0gdGV4dERl
Y29yYXRpb25TdHJva2VUaGlja25lc3MobV9saW5lU3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXpl
KCkpOwotICAgIG1fY29udGV4dC5zZXRTdHJva2VUaGlja25lc3ModGV4dERlY29yYXRpb25UaGlj
a25lc3MpOwogICAgIEZsb2F0UG9pbnQgbG9jYWxPcmlnaW4gPSBib3hPcmlnaW47CiAKLSAgICBh
dXRvIHBhaW50RGVjb3JhdGlvbiA9IFsmXSAoT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBkZWNv
cmF0aW9uLCBUZXh0RGVjb3JhdGlvblN0eWxlIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3IsIGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQsIGludCBvZmZzZXQp
IHsKKyAgICBhdXRvIHBhaW50RGVjb3JhdGlvbiA9IFsmXSAoVGV4dERlY29yYXRpb24gZGVjb3Jh
dGlvbiwgVGV4dERlY29yYXRpb25TdHlsZSBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIHsKICAgICAgICAgbV9jb250ZXh0LnNldFN0cm9rZUNvbG9yKGNv
bG9yKTsKIAogICAgICAgICBhdXRvIHN0cm9rZVN0eWxlID0gdGV4dERlY29yYXRpb25TdHlsZVRv
U3Ryb2tlU3R5bGUoc3R5bGUpOwogCiAgICAgICAgIGlmIChzdHlsZSA9PSBUZXh0RGVjb3JhdGlv
blN0eWxlOjpXYXZ5KQotICAgICAgICAgICAgc3Ryb2tlV2F2eVRleHREZWNvcmF0aW9uKG1fY29u
dGV4dCwgc3RhcnQsIGVuZCwgdGV4dERlY29yYXRpb25UaGlja25lc3MsIG1fbGluZVN0eWxlLmNv
bXB1dGVkRm9udFBpeGVsU2l6ZSgpKTsKKyAgICAgICAgICAgIHN0cm9rZVdhdnlUZXh0RGVjb3Jh
dGlvbihtX2NvbnRleHQsIHJlY3QsIG1fbGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgp
KTsKICAgICAgICAgZWxzZSBpZiAoZGVjb3JhdGlvbiA9PSBUZXh0RGVjb3JhdGlvbjo6VW5kZXJs
aW5lIHx8IGRlY29yYXRpb24gPT0gVGV4dERlY29yYXRpb246Ok92ZXJsaW5lKSB7CiAjaWYgRU5B
QkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OX1NLSVBfSU5LKQogICAgICAgICAgICAgaWYgKChtX2xp
bmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXA6OkluayB8
fCBtX2xpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblNraXAoKSA9PSBUZXh0RGVjb3JhdGlvblNraXA6
OkF1dG8pICYmIG1faXNIb3Jpem9udGFsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbnRl
eHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBkcmF3U2tpcElua1Vu
ZGVybGluZShtX2NvbnRleHQsICptX2ZvbnQsIHRleHRSdW4sIHRleHRPcmlnaW4sIGxvY2FsT3Jp
Z2luLCBvZmZzZXQsIG1fd2lkdGgsIG1faXNQcmludGluZywgc3R5bGUgPT0gVGV4dERlY29yYXRp
b25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2Nv
bnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVj
dCB1bmRlcmxpbmVCb3VuZGluZ0JveCA9IG1fY29udGV4dC5jb21wdXRlVW5kZXJsaW5lQm91bmRz
Rm9yVGV4dChyZWN0LCBtX2lzUHJpbnRpbmcpOworICAgICAgICAgICAgICAgICAgICBEYXNoQXJy
YXkgaW50ZXJzZWN0aW9ucyA9IG1fZm9udC5kYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3Qo
dGV4dFJ1biwgdGV4dE9yaWdpbiwgdW5kZXJsaW5lQm91bmRpbmdCb3gpOworICAgICAgICAgICAg
ICAgICAgICBEYXNoQXJyYXkgYm91bmRhcmllcyA9IHRyYW5zbGF0ZUludGVyc2VjdGlvblBvaW50
c1RvU2tpcElua0JvdW5kYXJpZXMoaW50ZXJzZWN0aW9ucywgdW5kZXJsaW5lQm91bmRpbmdCb3gu
aGVpZ2h0KCksIHJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghKGJv
dW5kYXJpZXMuc2l6ZSgpICUgMikpOworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1
c2UgdW5kZXJsaW5lQm91bmRpbmdCb3ggaGVyZSBiZWNhdXNlIGRyYXdMaW5lc0ZvclRleHQoKSB3
aWxsIHJ1biBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dCgpIGludGVybmFsbHkuCisgICAg
ICAgICAgICAgICAgICAgIG1fY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24o
KSwgcmVjdC5oZWlnaHQoKSwgYm91bmRhcmllcywgbV9pc1ByaW50aW5nLCBzdHlsZSA9PSBUZXh0
RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBz
dXBwb3J0IHRleHQtZGVjb3JhdGlvbi1za2lwOiBub25lLgogI2VuZGlmCi0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LmRyYXdMaW5lRm9yVGV4dChzdGFydCwgbV93aWR0aCwgbV9pc1ByaW50aW5n
LCBzdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKKyAg
ICAgICAgICAgICAgICBtX2NvbnRleHQuZHJhd0xpbmVGb3JUZXh0KHJlY3QsIG1faXNQcmludGlu
Zywgc3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChkZWNvcmF0
aW9uID09IFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCk7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQuZHJhd0xpbmVGb3JUZXh0KHN0YXJ0LCBtX3dpZHRoLCBtX2lzUHJpbnRpbmcsIHN0eWxlID09
IFRleHREZWNvcmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUpOworICAgICAgICAgICAg
bV9jb250ZXh0LmRyYXdMaW5lRm9yVGV4dChyZWN0LCBtX2lzUHJpbnRpbmcsIHN0eWxlID09IFRl
eHREZWNvcmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUpOwogICAgICAgICB9CiAgICAg
fTsKIApAQCAtMjk4LDEwICsyNTYsMTAgQEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBh
aW50VGV4dERlY29yYXRpb24oY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmwKICAgICBp
bnQgZXh0cmFPZmZzZXQgPSAwOwogICAgIGJvb2wgY2xpcHBpbmcgPSAhYXJlTGluZXNPcGFxdWUg
JiYgbV9zaGFkb3cgJiYgbV9zaGFkb3ctPm5leHQoKTsKICAgICBpZiAoY2xpcHBpbmcpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvY2FsT3JpZ2luLCBGbG9hdFNpemUobV93aWR0aCwg
bV9iYXNlbGluZSArIDIpKTsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGxvY2FsT3JpZ2lu
LCBGbG9hdFNpemUobV93aWR0aCwgZm9udE1ldHJpY3MuYXNjZW50KCkgKyAyKSk7CiAgICAgICAg
IGZvciAoY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gbV9zaGFkb3c7IHNoYWRvdzsgc2hhZG93
ID0gc2hhZG93LT5uZXh0KCkpIHsKICAgICAgICAgICAgIGludCBzaGFkb3dFeHRlbnQgPSBzaGFk
b3ctPnBhaW50aW5nRXh0ZW50KCk7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChs
b2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lkdGgsIG1fYmFzZWxpbmUgKyAyKSk7CisgICAgICAg
ICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lkdGgs
IGZvbnRNZXRyaWNzLmFzY2VudCgpICsgMikpOwogICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZs
YXRlKHNoYWRvd0V4dGVudCk7CiAgICAgICAgICAgICBpbnQgc2hhZG93WCA9IG1faXNIb3Jpem9u
dGFsID8gc2hhZG93LT54KCkgOiBzaGFkb3ctPnkoKTsKICAgICAgICAgICAgIGludCBzaGFkb3dZ
ID0gbV9pc0hvcml6b250YWwgPyBzaGFkb3ctPnkoKSA6IC1zaGFkb3ctPngoKTsKQEAgLTMxMSw3
ICsyNjksNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRUZXh0RGVjb3JhdGlv
bihjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbAogICAgICAgICB9CiAgICAgICAgIG1f
Y29udGV4dC5zYXZlKCk7CiAgICAgICAgIG1fY29udGV4dC5jbGlwKGNsaXBSZWN0KTsKLSAgICAg
ICAgZXh0cmFPZmZzZXQgKz0gbV9iYXNlbGluZSArIDI7CisgICAgICAgIGV4dHJhT2Zmc2V0ICs9
IGZvbnRNZXRyaWNzLmFzY2VudCgpICsgMjsKICAgICAgICAgbG9jYWxPcmlnaW4ubW92ZSgwLCBl
eHRyYU9mZnNldCk7CiAgICAgfQogCkBAIC0zMzcsMjAgKzI5NSwyMCBAQCB2b2lkIFRleHREZWNv
cmF0aW9uUGFpbnRlcjo6cGFpbnRUZXh0RGVjb3JhdGlvbihjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBjb25zdCBGbAogICAgICAgICBpZiAobV9kZWNvcmF0aW9ucy5jb250YWlucyhUZXh0RGVjb3Jh
dGlvbjo6VW5kZXJsaW5lKSkgewogICAgICAgICAgICAgaW50IG9mZnNldCA9IGNvbXB1dGVVbmRl
cmxpbmVPZmZzZXQobV9saW5lU3R5bGUudGV4dFVuZGVybGluZVBvc2l0aW9uKCksIG1fbGluZVN0
eWxlLmZvbnRNZXRyaWNzKCksIG1faW5saW5lVGV4dEJveCwgdGV4dERlY29yYXRpb25UaGlja25l
c3MpOwogICAgICAgICAgICAgZmxvYXQgd2F2eU9mZnNldCA9IG1fc3R5bGVzLnVuZGVybGluZVN0
eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OldhdnkgPyBtX3dhdnlPZmZzZXQgOiAwOwotICAg
ICAgICAgICAgRmxvYXRQb2ludCBzdGFydCA9IGxvY2FsT3JpZ2luICsgRmxvYXRTaXplKDAsIG9m
ZnNldCArIHdhdnlPZmZzZXQpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBlbmQgPSBsb2NhbE9y
aWdpbiArIEZsb2F0U2l6ZShtX3dpZHRoLCBvZmZzZXQgKyB3YXZ5T2Zmc2V0KTsKLSAgICAgICAg
ICAgIHBhaW50RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlvbjo6VW5kZXJsaW5lLCBtX3N0eWxlcy51
bmRlcmxpbmVTdHlsZSwgbV9zdHlsZXMudW5kZXJsaW5lQ29sb3IsIHN0YXJ0LCBlbmQsIG9mZnNl
dCk7CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1f
d2lkdGgsIHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUo
MCwgb2Zmc2V0ICsgd2F2eU9mZnNldCk7CisgICAgICAgICAgICBwYWludERlY29yYXRpb24oVGV4
dERlY29yYXRpb246OlVuZGVybGluZSwgbV9zdHlsZXMudW5kZXJsaW5lU3R5bGUsIG1fc3R5bGVz
LnVuZGVybGluZUNvbG9yLCByZWN0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobV9kZWNvcmF0
aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlvbjo6T3ZlcmxpbmUpKSB7CiAgICAgICAgICAgICBm
bG9hdCB3YXZ5T2Zmc2V0ID0gbV9zdHlsZXMub3ZlcmxpbmVTdHlsZSA9PSBUZXh0RGVjb3JhdGlv
blN0eWxlOjpXYXZ5ID8gbV93YXZ5T2Zmc2V0IDogMDsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQg
c3RhcnQgPSBsb2NhbE9yaWdpbiAtIEZsb2F0U2l6ZSgwLCB3YXZ5T2Zmc2V0KTsKLSAgICAgICAg
ICAgIEZsb2F0UG9pbnQgZW5kID0gbG9jYWxPcmlnaW4gKyBGbG9hdFNpemUobV93aWR0aCwgLXdh
dnlPZmZzZXQpOwotICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9uKFRleHREZWNvcmF0aW9uOjpP
dmVybGluZSwgbV9zdHlsZXMub3ZlcmxpbmVTdHlsZSwgbV9zdHlsZXMub3ZlcmxpbmVDb2xvciwg
c3RhcnQsIGVuZCwgMCk7CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChsb2NhbE9yaWdpbiwg
RmxvYXRTaXplKG1fd2lkdGgsIHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSk7CisgICAgICAgICAg
ICByZWN0Lm1vdmUoMCwgLXdhdnlPZmZzZXQpOworICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9u
KFRleHREZWNvcmF0aW9uOjpPdmVybGluZSwgbV9zdHlsZXMub3ZlcmxpbmVTdHlsZSwgbV9zdHls
ZXMub3ZlcmxpbmVDb2xvciwgcmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZGVjb3Jh
dGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246OkxpbmVUaHJvdWdoKSkgewotICAgICAgICAg
ICAgRmxvYXRQb2ludCBzdGFydCA9IGxvY2FsT3JpZ2luICsgRmxvYXRTaXplKDAsIDIgKiBtX2Jh
c2VsaW5lIC8gMyk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVuZCA9IGxvY2FsT3JpZ2luICsg
RmxvYXRTaXplKG1fd2lkdGgsIDIgKiBtX2Jhc2VsaW5lIC8gMyk7Ci0gICAgICAgICAgICBwYWlu
dERlY29yYXRpb24oVGV4dERlY29yYXRpb246OkxpbmVUaHJvdWdoLCBtX3N0eWxlcy5saW5ldGhy
b3VnaFN0eWxlLCBtX3N0eWxlcy5saW5ldGhyb3VnaENvbG9yLCBzdGFydCwgZW5kLCAwKTsKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCByZWN0KGxvY2FsT3JpZ2luLCBGbG9hdFNpemUobV93aWR0aCwg
dGV4dERlY29yYXRpb25UaGlja25lc3MpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZSgwLCAyICog
Zm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSAvIDMpOworICAgICAgICAgICAgcGFpbnREZWNvcmF0
aW9uKFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCwgbV9zdHlsZXMubGluZXRocm91Z2hTdHls
ZSwgbV9zdHlsZXMubGluZXRocm91Z2hDb2xvciwgcmVjdCk7CiAgICAgICAgIH0KICAgICB9IHdo
aWxlIChzaGFkb3cpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dERlY29yYXRpb25QYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29y
YXRpb25QYWludGVyLmgKaW5kZXggMDI5NGE0NjNjN2Y0YjQ5YmM5ODUxMWVmZDJjZmEwODU3ZGRj
YzMxNC4uYTZkMTRiMmI1ZjQ1NjM3ODM2MDJhMmVhNzkwMDQ2ZWY5YzgwMWIwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaApAQCAtNDIs
MTMgKzQyLDExIEBAIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUZXh0RGVjb3JhdGlvblBhaW50ZXIg
ewogcHVibGljOgogICAgIHN0cnVjdCBTdHlsZXM7Ci0gICAgVGV4dERlY29yYXRpb25QYWludGVy
KEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gZGVjb3JhdGlvbnMs
IGNvbnN0IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5lLCBzdGQ6Om9wdGlvbmFsPFN0eWxl
cz4gPSBzdGQ6Om51bGxvcHQpOworICAgIFRleHREZWNvcmF0aW9uUGFpbnRlcihHcmFwaGljc0Nv
bnRleHQmLCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRlY29yYXRpb25zLCBjb25zdCBSZW5k
ZXJUZXh0JiwgYm9vbCBpc0ZpcnN0TGluZSwgY29uc3QgRm9udENhc2NhZGUmLCBzdGQ6Om9wdGlv
bmFsPFN0eWxlcz4gPSBzdGQ6Om51bGxvcHQpOwogICAgIAogICAgIHZvaWQgc2V0SW5saW5lVGV4
dEJveChjb25zdCBJbmxpbmVUZXh0Qm94KiBpbmxpbmVUZXh0Qm94KSB7IG1faW5saW5lVGV4dEJv
eCA9IGlubGluZVRleHRCb3g7IH0KLSAgICB2b2lkIHNldEZvbnQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpIHsgbV9mb250ID0gJmZvbnQ7IH0KICAgICB2b2lkIHNldElzSG9yaXpvbnRhbChib29s
IGlzSG9yaXpvbnRhbCkgeyBtX2lzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbDsgfQogICAgIHZv
aWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9Ci0gICAgdm9pZCBz
ZXRCYXNlbGluZShmbG9hdCBiYXNlbGluZSkgeyBtX2Jhc2VsaW5lID0gYmFzZWxpbmU7IH0KICAg
ICB2b2lkIHNldFRleHRTaGFkb3coY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdykgeyBtX3No
YWRvdyA9IHRleHRTaGFkb3c7IH0KICAgICB2b2lkIHNldFNoYWRvd0NvbG9yRmlsdGVyKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMqIGNvbG9yRmlsdGVyKSB7IG1fc2hhZG93Q29sb3JGaWx0ZXIgPSBj
b2xvckZpbHRlcjsgfQogCkBAIC03MiwxNCArNzAsMTMgQEAgcHJpdmF0ZToKICAgICBPcHRpb25T
ZXQ8VGV4dERlY29yYXRpb24+IG1fZGVjb3JhdGlvbnM7CiAgICAgZmxvYXQgbV93YXZ5T2Zmc2V0
OwogICAgIGZsb2F0IG1fd2lkdGggeyAwIH07Ci0gICAgZmxvYXQgbV9iYXNlbGluZSB7IDAgfTsK
ICAgICBGbG9hdFBvaW50IG1fYm94T3JpZ2luOwogICAgIGJvb2wgbV9pc1ByaW50aW5nOwogICAg
IGJvb2wgbV9pc0hvcml6b250YWwgeyB0cnVlIH07CiAgICAgY29uc3QgU2hhZG93RGF0YSogbV9z
aGFkb3cgeyBudWxscHRyIH07CiAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogbV9zaGFkb3dD
b2xvckZpbHRlciB7IG51bGxwdHIgfTsKICAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBtX2lubGlu
ZVRleHRCb3ggeyBudWxscHRyIH07Ci0gICAgY29uc3QgRm9udENhc2NhZGUqIG1fZm9udCB7IG51
bGxwdHIgfTsKKyAgICBjb25zdCBGb250Q2FzY2FkZSYgbV9mb250OwogCiAgICAgU3R5bGVzIG1f
c3R5bGVzOwogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX2xpbmVTdHlsZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCmluZGV4IDEzNmYzMWE4ZWJiOTBiY2My
OGRhMDc2OTg2NzMwYzE3Yzk4MjMxMTguLmVjOTQ4ODU1MWE5NDYzNmY4N2ExZTMwNDY3YzRjOTU1
NjdiMjQ2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hT
dHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNw
cApAQCAtODQsMTcgKzg0LDEzIEBAIGludCBjb21wdXRlVW5kZXJsaW5lT2Zmc2V0KE9wdGlvblNl
dDxUZXh0VW5kZXJsaW5lUG9zaXRpb24+IHVuZGVybGluZVBvc2l0aW9uLCBjCiAgICAgcmV0dXJu
IGZvbnRNZXRyaWNzLmFzY2VudCgpICsgZ2FwOwogfQogICAgIAotdm9pZCBnZXRXYXZ5U3Ryb2tl
UGFyYW1ldGVycyhmbG9hdCBmb250U2l6ZSwgZmxvYXQmIGNvbnRyb2xQb2ludERpc3RhbmNlLCBm
bG9hdCYgc3RlcCkKK1dhdnlTdHJva2VQYXJhbWV0ZXJzIGdldFdhdnlTdHJva2VQYXJhbWV0ZXJz
KGZsb2F0IGZvbnRTaXplKQogewotICAgIC8vIERpc3RhbmNlIGJldHdlZW4gZGVjb3JhdGlvbidz
IGF4aXMgYW5kIEJlemllciBjdXJ2ZSdzIGNvbnRyb2wgcG9pbnRzLgotICAgIC8vIFRoZSBoZWln
aHQgb2YgdGhlIGN1cnZlIGlzIGJhc2VkIG9uIHRoaXMgZGlzdGFuY2UuIEluY3JlYXNlcyB0aGUg
Y3VydmUncyBoZWlnaHQKLSAgICAvLyBhcyBmb250U2l6ZSBpbmNyZWFzZXMgdG8gbWFrZSB0aGUg
Y3VydmUgbG9vayBiZXR0ZXIuCi0gICAgY29udHJvbFBvaW50RGlzdGFuY2UgPSAwLjA5Mzc1ICog
Zm9udFNpemU7Ci0KLSAgICAvLyBJbmNyZW1lbnQgdXNlZCB0byBmb3JtIHRoZSBkaWFtb25kIHNo
YXBlIGJldHdlZW4gc3RhcnQgcG9pbnQgKHAxKSwgY29udHJvbAotICAgIC8vIHBvaW50cyBhbmQg
ZW5kIHBvaW50IChwMikgYWxvbmcgdGhlIGF4aXMgb2YgdGhlIGRlY29yYXRpb24uIFRoZSBjdXJ2
ZSBnZXRzCi0gICAgLy8gd2lkZXIgYXMgZm9udCBzaXplIGluY3JlYXNlcy4KLSAgICBzdGVwID0g
Zm9udFNpemUgLyA0LjU7CisgICAgV2F2eVN0cm9rZVBhcmFtZXRlcnMgcmVzdWx0OworICAgIC8v
IE1vcmUgaW5mb3JtYXRpb24gaXMgaW4gdGhlIFdhdnlTdHJva2VQYXJhbWV0ZXJzIGRlZmluaXRp
b24uCisgICAgcmVzdWx0LmNvbnRyb2xQb2ludERpc3RhbmNlID0gZm9udFNpemUgKiAxLjUgLyAx
NjsKKyAgICByZXN1bHQuc3RlcCA9IGZvbnRTaXplIC8gNC41OworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBleHRlbmRJbnRUb0Zsb2F0KGludCYgZXh0ZW5kTWUs
IGZsb2F0IGV4dGVuZFRvKQpAQCAtMTExLDggKzEwNyw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFs
T3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25z
dCBJCiAgICAgICAgIHJldHVybiBHbHlwaE92ZXJmbG93KCk7CiAKICAgICBmbG9hdCBzdHJva2VU
aGlja25lc3MgPSB0ZXh0RGVjb3JhdGlvblN0cm9rZVRoaWNrbmVzcyhsaW5lU3R5bGUuY29tcHV0
ZWRGb250UGl4ZWxTaXplKCkpOwotICAgIGZsb2F0IGNvbnRyb2xQb2ludERpc3RhbmNlID0gMDsK
LSAgICBmbG9hdCBzdGVwOworICAgIFdhdnlTdHJva2VQYXJhbWV0ZXJzIHdhdnlTdHJva2VQYXJh
bWV0ZXJzOwogICAgIGZsb2F0IHdhdnlPZmZzZXQgPSAwOwogICAgICAgICAKICAgICBUZXh0RGVj
b3JhdGlvblN0eWxlIGRlY29yYXRpb25TdHlsZSA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0
eWxlKCk7CkBAIC0xMjAsNyArMTE1LDcgQEAgR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxvd0Zv
ckRlY29yYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IEkKICAgICBH
bHlwaE92ZXJmbG93IG92ZXJmbG93UmVzdWx0OwogICAgIAogICAgIGlmIChkZWNvcmF0aW9uU3R5
bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6V2F2eSkgewotICAgICAgICBnZXRXYXZ5U3Ryb2tl
UGFyYW1ldGVycyhsaW5lU3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCksIGNvbnRyb2xQb2lu
dERpc3RhbmNlLCBzdGVwKTsKKyAgICAgICAgd2F2eVN0cm9rZVBhcmFtZXRlcnMgPSBnZXRXYXZ5
U3Ryb2tlUGFyYW1ldGVycyhsaW5lU3R5bGUuY29tcHV0ZWRGb250UGl4ZWxTaXplKCkpOwogICAg
ICAgICB3YXZ5T2Zmc2V0ID0gd2F2eU9mZnNldEZyb21EZWNvcmF0aW9uKCk7CiAgICAgICAgIG92
ZXJmbG93UmVzdWx0LmxlZnQgPSBzdHJva2VUaGlja25lc3M7CiAgICAgICAgIG92ZXJmbG93UmVz
dWx0LnJpZ2h0ID0gc3Ryb2tlVGhpY2tuZXNzOwpAQCAtMTMyLDggKzEyNyw4IEBAIEdseXBoT3Zl
cmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGlu
ZVN0eWxlLCBjb25zdCBJCiAgICAgICAgIGludCB1bmRlcmxpbmVPZmZzZXQgPSAxOwogICAgICAg
ICB1bmRlcmxpbmVPZmZzZXQgKz0gY29tcHV0ZVVuZGVybGluZU9mZnNldChsaW5lU3R5bGUudGV4
dFVuZGVybGluZVBvc2l0aW9uKCksIGxpbmVTdHlsZS5mb250TWV0cmljcygpLCBpbmxpbmVUZXh0
Qm94LCBzdHJva2VUaGlja25lc3MpOwogICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRl
eHREZWNvcmF0aW9uU3R5bGU6OldhdnkpIHsKLSAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQo
b3ZlcmZsb3dSZXN1bHQuYm90dG9tLCB1bmRlcmxpbmVPZmZzZXQgKyB3YXZ5T2Zmc2V0ICsgY29u
dHJvbFBvaW50RGlzdGFuY2UgKyBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOwotICAgICAgICAg
ICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC50b3AsIC0odW5kZXJsaW5lT2Zmc2V0
ICsgd2F2eU9mZnNldCAtIGNvbnRyb2xQb2ludERpc3RhbmNlIC0gc3Ryb2tlVGhpY2tuZXNzKSk7
CisgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LmJvdHRvbSwgdW5k
ZXJsaW5lT2Zmc2V0ICsgd2F2eU9mZnNldCArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRyb2xQ
b2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKKyAgICAgICAgICAgIGV4
dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCAtKHVuZGVybGluZU9mZnNldCArIHdh
dnlPZmZzZXQgLSB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9sUG9pbnREaXN0YW5jZSAtIHN0
cm9rZVRoaWNrbmVzcykpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXh0ZW5kSW50
VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC5ib3R0b20sIHVuZGVybGluZU9mZnNldCArIHN0cm9rZVRo
aWNrbmVzcyAtIGhlaWdodCk7CiAgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93
UmVzdWx0LnRvcCwgLXVuZGVybGluZU9mZnNldCk7CkBAIC0xNDEsOCArMTM2LDggQEAgR2x5cGhP
dmVyZmxvdyB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBs
aW5lU3R5bGUsIGNvbnN0IEkKICAgICB9CiAgICAgaWYgKGRlY29yYXRpb24gJiBUZXh0RGVjb3Jh
dGlvbjo6T3ZlcmxpbmUpIHsKICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9PSBUZXh0RGVj
b3JhdGlvblN0eWxlOjpXYXZ5KSB7Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJm
bG93UmVzdWx0LmJvdHRvbSwgLXdhdnlPZmZzZXQgKyBjb250cm9sUG9pbnREaXN0YW5jZSArIHN0
cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92
ZXJmbG93UmVzdWx0LnRvcCwgd2F2eU9mZnNldCArIGNvbnRyb2xQb2ludERpc3RhbmNlICsgc3Ry
b2tlVGhpY2tuZXNzKTsKKyAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1
bHQuYm90dG9tLCAtd2F2eU9mZnNldCArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2lu
dERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKKyAgICAgICAgICAgIGV4dGVu
ZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCB3YXZ5T2Zmc2V0ICsgd2F2eVN0cm9rZVBh
cmFtZXRlcnMuY29udHJvbFBvaW50RGlzdGFuY2UgKyBzdHJva2VUaGlja25lc3MpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC5i
b3R0b20sIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7CiAgICAgICAgICAgICAvLyB0b3AgaXMg
dW50b3VjaGVkCkBAIC0xNTEsOCArMTQ2LDggQEAgR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxv
d0ZvckRlY29yYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IEkKICAg
ICBpZiAoZGVjb3JhdGlvbiAmIFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkgewogICAgICAg
ICBmbG9hdCBiYXNlbGluZSA9IGxpbmVTdHlsZS5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7
CiAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6V2F2
eSkgewotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC5ib3R0b20s
IDIgKiBiYXNlbGluZSAvIDMgKyBjb250cm9sUG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVz
cyAtIGhlaWdodCk7Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0
LnRvcCwgLSgyICogYmFzZWxpbmUgLyAzIC0gY29udHJvbFBvaW50RGlzdGFuY2UgLSBzdHJva2VU
aGlja25lc3MpKTsKKyAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQu
Ym90dG9tLCAyICogYmFzZWxpbmUgLyAzICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29udHJvbFBv
aW50RGlzdGFuY2UgKyBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOworICAgICAgICAgICAgZXh0
ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC50b3AsIC0oMiAqIGJhc2VsaW5lIC8gMyAtIHdh
dnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2ludERpc3RhbmNlIC0gc3Ryb2tlVGhpY2tuZXNz
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJm
bG93UmVzdWx0LmJvdHRvbSwgMiAqIGJhc2VsaW5lIC8gMyArIHN0cm9rZVRoaWNrbmVzcyAtIGhl
aWdodCk7CiAgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwg
LSgyICogYmFzZWxpbmUgLyAzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9J
bmxpbmVUZXh0Qm94U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hT
dHlsZS5oCmluZGV4IGNjNTMxMmE0ODdkYTg1MTlkZDZkNTA3MDRhNzYwNzdiYTk3YTNkMjYuLjk0
NWY5MDViNjUwZWIxMzUwZWEzMzIyODQyZTRlYmI5MjZmMWUwNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL0lubGluZVRleHRCb3hTdHlsZS5oCkBAIC00NSw3ICs0NSwxOSBAQCBpbmxpbmUgZmxv
YXQgd2F2eU9mZnNldEZyb21EZWNvcmF0aW9uKCkKIH0KIAogR2x5cGhPdmVyZmxvdyB2aXN1YWxP
dmVyZmxvd0ZvckRlY29yYXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0
IElubGluZVRleHRCb3gqKTsKLXZvaWQgZ2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMoZmxvYXQgZm9u
dFNpemUsIGZsb2F0JiBjb250cm9sUG9pbnREaXN0YW5jZSwgZmxvYXQmIHN0ZXApOworCitzdHJ1
Y3QgV2F2eVN0cm9rZVBhcmFtZXRlcnMgeworICAgIC8vIERpc3RhbmNlIGJldHdlZW4gZGVjb3Jh
dGlvbidzIGF4aXMgYW5kIEJlemllciBjdXJ2ZSdzIGNvbnRyb2wgcG9pbnRzLgorICAgIC8vIFRo
ZSBoZWlnaHQgb2YgdGhlIGN1cnZlIGlzIGJhc2VkIG9uIHRoaXMgZGlzdGFuY2UuIEluY3JlYXNl
cyB0aGUgY3VydmUncyBoZWlnaHQKKyAgICAvLyBhcyBmb250U2l6ZSBpbmNyZWFzZXMgdG8gbWFr
ZSB0aGUgY3VydmUgbG9vayBiZXR0ZXIuCisgICAgZmxvYXQgY29udHJvbFBvaW50RGlzdGFuY2Ug
eyAwIH07CisKKyAgICAvLyBJbmNyZW1lbnQgdXNlZCB0byBmb3JtIHRoZSBkaWFtb25kIHNoYXBl
IGJldHdlZW4gc3RhcnQgcG9pbnQgKHAxKSwgY29udHJvbAorICAgIC8vIHBvaW50cyBhbmQgZW5k
IHBvaW50IChwMikgYWxvbmcgdGhlIGF4aXMgb2YgdGhlIGRlY29yYXRpb24uIFRoZSBjdXJ2ZSBn
ZXRzCisgICAgLy8gd2lkZXIgYXMgZm9udCBzaXplIGluY3JlYXNlcy4KKyAgICBmbG9hdCBzdGVw
IHsgMCB9OworfTsKK1dhdnlTdHJva2VQYXJhbWV0ZXJzIGdldFdhdnlTdHJva2VQYXJhbWV0ZXJz
KGZsb2F0IGZvbnRTaXplKTsKIGludCBjb21wdXRlVW5kZXJsaW5lT2Zmc2V0KE9wdGlvblNldDxU
ZXh0VW5kZXJsaW5lUG9zaXRpb24+LCBjb25zdCBGb250TWV0cmljcyYsIGNvbnN0IElubGluZVRl
eHRCb3gqLCBpbnQgdGV4dERlY29yYXRpb25UaGlja25lc3MpOwogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353919</attachid>
            <date>2018-11-05 16:14:56 -0800</date>
            <delta_ts>2018-11-05 16:14:56 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-191245-20181105161455.patch</filename>
            <type>text/plain</type>
            <size>51887</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3ODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI2OTRkYTFiZGI1ZGFi
MDk2NTEwZTQ1ODA2ODhjYTQ4Y2NjNGQ1NC4uZmY5MWU0ZDRkY2MyZTlkNmI3ZWQzMjQxOTA2NjU2
YzUzMGExMGMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE4LTExLTA1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAg
dGV4dCBkZWNvcmF0aW9uIGRyYXdpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMjQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWmFsYW4g
QnVqdGFzLgorCisgICAgICAgIFRoaXMgaXMgc29tZSBnZW5lcmFsIGNsZWFuIHVwIG9mIHRoZSB0
ZXh0IGRlY29yYXRpb25zIGNvZGUuIFRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAg
ICAgICBUaGlzIHBhdGNoIG1vZGlmaWVzIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
KCkgJiBmcmllbmRzIHRvIGFjY2VwdCBhIEZsb2F0UmVjdCBpbnN0ZWFkIG9mIGEgRmxvYXRQb2lu
dCArIGZsb2F0IHdpZHRoLgorICAgICAgICBUaGlzIGlzIGhlbHBmdWwgYmVjYXVzZSBpdCBhbGxv
d3MgZm9yIGVhc2llciBib3VuZGluZyBib3ggY2FsY3VsYXRpb25zLgorICAgICAgICBUaGlzIHBh
dGNoIGFsc28gcmVtb3ZlcyBzb21lIHJlZHVuZGFudCBjb21wdXRhdGlvbnMgdGhhdCB0aGUgc2tp
cDppbmsgY29kZXBhdGggd2FzIHBlcmZvcm1pbmcuCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZWZhY3RvcnMgdGhlIHdhdnkgZGVjb3JhdGlvbiBwYXJhbWV0ZXJzIHRvIG5vdCB1c2Ugb3V0IHBh
cmFtcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5l
Qm91bmRzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZXNGb3JUZXh0OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojp0aGlja25lc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtl
ZFRleHREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
Q29tcG9zaXRpb25VbmRlcmxpbmUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHJva2VXYXZ5VGV4dERlY29yYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNsYXRlSW50ZXJzZWN0aW9uUG9pbnRzVG9Ta2lwSW5rQm91bmRh
cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlRleHREZWNv
cmF0aW9uUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6
OnBhaW50VGV4dERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1NraXBJbmtVbmRl
cmxpbmUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0SW5saW5l
VGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnNldFdp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRlcjo6c2V0Rm9udCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnNldEJh
c2VsaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6dmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyk6CisgICAgICAgICogc3R5bGUv
SW5saW5lVGV4dEJveFN0eWxlLmg6CisKIDIwMTgtMTEtMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXJzaW5nIHN1cHBvcnQgZm9yIHRleHQt
dW5kZXJsaW5lLW9mZnNldCBhbmQgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5k
ZXggNWQ2NmZiODk0MjBhMWVhMDU3MTA4ZGVkNDMzNWZjNmZmNDAxMGEyZS4uMGI1NzY5Y2QxMmQy
MWViN2VhN2UxODk3ZTlmMmViOTAwOTgxMjFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0xMDgzLDE4ICsxMDgz
LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQogfQogI2VuZGlmCiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZykKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6
OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZykKIHsKICAgICBDb2xvciBkdW1teUNvbG9yOwotICAgIHJldHVybiBjb21wdXRl
TGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHBvaW50LCB3aWR0aCwgcHJpbnRp
bmcsIGR1bW15Q29sb3IpOworICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlh
c2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKIH0KIAotRmxvYXRS
ZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIGJvb2wgcHJpbnRp
bmcsIENvbG9yJiBjb2xvcikKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBi
b29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRmxvYXRQb2ludCBvcmlnaW4gPSBw
b2ludDsKLSAgICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChzdHJva2VUaGlja25lc3MoKSwg
MC41Zik7CisgICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CisgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7CiAgICAgaWYgKHBy
aW50aW5nKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdpZHRo
LCB0aGlja25lc3MpKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6
ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwogICAgIC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcg
eCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgpAQCAtMTEwOCwxMiArMTEwOCwxMiBAQCBGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVG
b3JUZXh0KGNvbnN0IEZsbwogICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KHNoYWRlKTsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IGRldmljZVBvaW50ID0g
dHJhbnNmb3JtLm1hcFBvaW50KHBvaW50KTsKKyAgICBGbG9hdFBvaW50IGRldmljZVBvaW50ID0g
dHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgLy8gVmlzdWFsIG92ZXJm
bG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFsIHJvdW5kZi9jZWlsZi4gdmlzdWFs
T3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBvdmVyZmxvdyB2YWx1ZSBmb3IgdW5k
ZXJsaW5lIGRlY29yYXRpb24uCiAgICAgRmxvYXRQb2ludCBkZXZpY2VPcmlnaW4gPSBGbG9hdFBv
aW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihkZXZpY2VQb2ludC55KCkpKTsKICAg
ICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKSkKICAgICAgICAgb3JpZ2lu
ID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9yaWdpbik7Ci0gICAgcmV0dXJuIEZs
b2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZSh3aWR0aCwgdGhpY2tuZXNzKSk7CisgICAgcmV0dXJu
IEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDg2MTkwNTMzOWE0MWQyMmE4MzJmZTcxYTNiZWY2OTJl
MjNjYTgwYjMuLmQyYjM5YjNkYjRhOWM1YjQ3Y2M5YzNmZDY5NWNmZWY3NTNmMzU5MmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CkBAIC00MTgsOSArNDE4LDkgQEAgcHVibGljOgogICAgIH07CiAgICAgRmxvYXRSZWN0IHJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxT
aWRlcyk7CiAKLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBib29sIHByaW50aW5nKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lk
dGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUg
PSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICBGbG9hdFJlY3Qg
Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmlu
dGluZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0
cm9rZSk7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKQEAgLTYyNiw3ICs2MjYsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKIAotICAgIEZsb2F0UmVjdCBjb21wdXRlTGlu
ZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB3aWR0aCwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKKyAgICBGbG9hdFJlY3QgY29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29s
IHByaW50aW5nLCBDb2xvciYpOwogCiAgICAgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9y
U3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OwogICAgIGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuV2lk
dGhGb3JTdHJva2VXaWR0aChmbG9hdCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKaW5kZXggZDQ4YjkyNGVi
NjA0MzZkODMxYTk4ZTU2OTVhOTMwODI1MzhmNDJhZS4uNTAzNjg5MjZhY2YzMGVmMTRkMzM0NzUy
YjNmZTljOGM4ZGFiMTc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cAppbmRleCBmNjVlZTI1NjU3MmIyMThlZDdkZTlmZjE4YWI2MzA2ZWEzY2Y3OTQ3Li4zZDljNDhk
ZjM1OGQwYWQ4NTUwNjQ2NjAzYjc1ZjFlZjcwOGE3MTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAK
QEAgLTEwMjMsNyArMTAyMyw3IEBAIHZvaWQgZHJhd0xpbmUoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjCiAgICAgICAgIGNh
aXJvX3NldF9hbnRpYWxpYXMoY2Fpcm9Db250ZXh0LCBDQUlST19BTlRJQUxJQVNfREVGQVVMVCk7
CiB9CiAKLXZvaWQgZHJhd0xpbmVzRm9yVGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgY29uc3QgQ29sb3ImIGNv
bG9yLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit2b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZv
cm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAg
IENvbG9yIG1vZGlmaWVkQ29sb3IgPSBjb2xvcjsKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29t
cHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChwbGF0Zm9ybUNvbnRleHQs
IHBvaW50LCB3aWR0aHMubGFzdCgpLCBwcmludGluZywgbW9kaWZpZWRDb2xvciwgc3Ryb2tlVGhp
Y2tuZXNzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggY2I3OGRmYjFiNWFhODM3NjAyZWM1MmM0MTRl
YmRmYzQ1NzNhZGQ2OS4uMDg1ZTYxYTViM2M5YzdjOTcyMTZiM2M3YmNkNmQ3NjkyNThjYzg0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdTdXJmYWNlKFBsYXRmb3JtQ29udGV4dENhaXJvJiwgY2Fpcm9fc3VyZmFjZV90KiwgY29u
c3QgRgogCiB2b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQsIGNvbnN0IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJik7CiB2
b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgYm9vbCk7
Ci12b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgY29uc3QgQ29sb3ImLCBmbG9h
dCk7Cit2b2lkIGRyYXdMaW5lc0ZvclRleHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mLCBjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
LCBjb25zdCBDb2xvciYpOwogdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFBsYXRmb3Jt
Q29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
Owogdm9pZCBkcmF3RWxsaXBzZShQbGF0Zm9ybUNvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggMmY4YjkyNTg2ZDNlOGQ5NDgxZTE5YTI0
OThkODJmN2RiNWZmOTAxNi4uYzM0YTk5Yjk2MTE2MmVkZjY4NmZmNTEyMTgwNWQ2YjkwM2YzOGMx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzE1LDEyICszMTUsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxhdGZv
cm1Db250ZXh0KCksIHJlY3RzLCB3aWR0aCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lk
dGgsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsK
LSAgICBkcmF3TGluZXNGb3JUZXh0KG9yaWdpbiwgRGFzaEFycmF5IHsgd2lkdGgsIDAgfSwgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOworICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2Nh
dGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyByZWN0LndpZHRoKCksIDAgfSwgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0zMjksMTIgKzMyOSwxMiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBw
cmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgICAgICBt
X2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGlu
ZXMsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlja25l
c3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29s
b3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggYzc3ZGZiNzA2NmMxOGQ1
NmYzZDljYzFkNzkwYzkzMzU2YzQ2NDFjNi4uNmMyMDA2Nzk5MTEwNjc4N2UyM2M0YTVjNmQ1MDU1
MzVkYmQzZjA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCkBAIC0y
OTYsMTEgKzI5NiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaQogICAgIENhaXJvOjpkcmF3
TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRB
bnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tu
ZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKIHsKLSAgICBVTlVT
RURfUEFSQU0oc3Ryb2tlVGhpY2tuZXNzKTsKICAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNv
bnRleHQsIHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBDYWlybzo6ZHJhd0xpbmVz
Rm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaAppbmRleCAyZDc0Mjg1MmVjNDRlYmRlZmNkYmM1N2M5MWM1
YTBlZGM3M2ZmOGU0Li5mMWIwMmQzNGFiMmZmMjlhZGNmYjg3NDNjODk0YzFlNDYwOGI2NzNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtNzksNyArNzksNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlk
ZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAppbmRleCBmZTExMmRkZDA2OGFmZjQzNWU1NzdlNjMzOWYwZGViNzdjZWQ5ZWVmLi4z
NzQ5MDIxZjM3Y2JkMzEwMTI2NzBhNmM3YWMwODU0NTM1Yzk0Y2M1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCkBAIC0xNTcwLDE1ICsxNTcwLDE1IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAg
cmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5k
ZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgRGFzaEFy
cmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKHdpZHRoKTsKKyAgICB3aWR0aHMuYXBwZW5k
KHJlY3Qud2lkdGgoKSk7CiAgICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICBkcmF3TGluZXNGb3JU
ZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwor
ICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCB3aWR0
aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTE1ODcsMTMgKzE1ODcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJv
a2VUaGlja25lc3MoKSk7CisgICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwg
dGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwog
Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5n
TW9kZUZvclRleHQocG9pbnQsIHdpZHRocy5sYXN0KCksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNv
bG9yKTsKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxp
YXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgp
LCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwogICAgIGJvb2wgZmls
bENvbG9ySXNOb3RFcXVhbFRvU3Ryb2tlQ29sb3IgPSBmaWxsQ29sb3IoKSAhPSBsb2NhbFN0cm9r
ZUNvbG9yOwogICAgIAogICAgIFZlY3RvcjxDR1JlY3QsIDQ+IGRhc2hCb3VuZHM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggNzM1M2QzN2FmYjFjMTU2MzI2MGMxOTBk
YWJlOTEzYmNjNDM3MTYxNS4uNmY5MWNkMGU1NWQ5NjZhMzVjZTJlNDA3NDhkNjk4ZDhkZjJkZjAx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNTkzLDcgKzU5Myw3
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3TGluZSYgaXRlbSkKIAogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBv
aW50KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKKyAgICBjb250ZXh0
LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV90aGlja25lc3MsIG1fd2lkdGhzLCBtX3ByaW50
aW5nLCBtX2RvdWJsZUxpbmVzKTsKIH0KIAogc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdM
aW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CkBA
IC02MDMsNyArNjAzLDcgQEAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRl
eHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGMKICAgICBpZiAoIW1fd2lk
dGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAgRmxvYXRSZWN0
IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9rZVdpZHRo
KSk7CisgICAgRmxvYXRSZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFz
dCgpLCBtX3RoaWNrbmVzcykpOwogICAgIHJlc3VsdC5pbmZsYXRlKDEpOyAvLyBBY2NvdW50IGZv
ciBwaXhlbCBzbmFwcGluZy4gRklYTUU6IFRoaXMgaXNuJ3QgcGVyZmVjdCwgYXMgaXQgZG9lc24n
dCB0YWtlIHRoZSBDVE0gaW50byBhY2NvdW50LgogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02
MTQsNiArNjE0LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgdHMuZHVtcFByb3BlcnR5KCJi
bG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJwb2ludCIsIGl0ZW0ucG9pbnQoKSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJ0aGlja25l
c3MiLCBpdGVtLnRoaWNrbmVzcygpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0
ZW0uZG91YmxlTGluZXMoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndp
ZHRocygpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50
aW5nKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggN2M3ZWI2ZDcyZjEw
ZDFmMjZkMDE4Njc4MWIwMjJjNmQzOTIxNDAzZC4uMmI3ZDE0Y2IwNWQyMDYzNjY2MTgyMzdiNDUx
YTRhNGNiMWNiNmUzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC03OTEs
MjYgKzc5MSwyNyBAQCBwcml2YXRlOgogCiBjbGFzcyBEcmF3TGluZXNGb3JUZXh0IDogcHVibGlj
IERyYXdpbmdJdGVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lc0ZvclRleHQ+
IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUm
IGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCisgICAgc3RhdGljIFJlZjxEcmF3TGlu
ZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9j
YWxBbmNob3IsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VXaWR0aCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRp
b24sIGxvY2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVz
KSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQogICAg
IGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
TG9jYXRpb247IH0KICAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQogICAgIEZsb2F0UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9CisgICAgZmxvYXQgdGhpY2tu
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KICAgICBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzOyB9CiAgICAgYm9vbCBpc1ByaW50aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQogICAgIGJvb2wgZG91YmxlTGluZXMoKSBj
b25zdCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9CiAKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUm
IGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCisgICAgRHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5j
aG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzKQogICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3TGluZXNGb3JUZXh0KQogICAgICAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9u
KQogICAgICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCiAgICAgICAgICwgbV93aWR0
aHMod2lkdGhzKQotICAgICAgICAsIG1fc3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgpCisgICAgICAg
ICwgbV90aGlja25lc3ModGhpY2tuZXNzKQogICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRpbmcp
CiAgICAgICAgICwgbV9kb3VibGVMaW5lcyhkb3VibGVMaW5lcykKICAgICB7CkBAIC04MjMsNyAr
ODI0LDcgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKICAgICBG
bG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKICAgICBEYXNoQXJyYXkgbV93aWR0aHM7Ci0gICAgZmxv
YXQgbV9zdHJva2VXaWR0aDsKKyAgICBmbG9hdCBtX3RoaWNrbmVzczsKICAgICBib29sIG1fcHJp
bnRpbmc7CiAgICAgYm9vbCBtX2RvdWJsZUxpbmVzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1MzA3ZjAyNWZiMjE4MDMyMjk5NThjYWY5MmI1Mzlh
NTJjZGM2NjIyLi45MDM5Yjc4ZWUyYWY0ZGQ0ODlkM2FmYjZlNjc0ZTExNWFlYmMwOGJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0yMzAsOSArMjMwLDkg
QEAgdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCiB7Ci0gICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3
TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MpKSk7CisgICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3
TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKSk7CiAgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKaW5kZXggMWI3OTQzN2FjNzAyODI2NmNmNDlkM2E0NTQxZTY5ZDc4YWM5YTFlYi4uYjY5ZDQ0
ZWYyZWJkNjYzZTM5N2Q2YTQwNWM4ZjYwY2U4MTZmZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuY3BwCmluZGV4IDU3ODQ5NWZlYWEzMGE5Njg0ODIwOTRmOTY0ZWIyOTA5YTJlYmUz
MTguLjJiMWFlY2YwZDFiN2U2YTM0MWJmOTRiZmZhZWQyMjBmMWE0NTg2MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCkBA
IC02MzEsOSArNjMxLDkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQKICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3Mp
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKIHsKLSAgICBzdHJ1Y3QgRHJh
d0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZs
b2F0UG9pbnQsIERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3IsIGZsb2F0PiB7CisgICAgc3Ry
dWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewog
ICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwogCiAgICAgICAg
IHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRl
CkBAIC02NDcsOSArNjQ3LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXMKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBVTlVTRURfUEFSQU0oc3Ryb2tlVGhpY2tuZXNzKTsKICAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcikpOwog
fQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fp
cm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
aAppbmRleCA2ZDZmYWMzODNlN2FmMDZjOTIxM2RjYjRmZTA4N2NkNmYzODRkOTE5Li5kYmQ2NzIz
MTQ4NGY5MTg3MjFjYzBiZmRkODYzODVlN2ZlNWI4OWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC03Miw3ICs3Miw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9XZWJDb3JlVGV4dFJlbmRlcmVyLmNwcAppbmRleCA3NmY5MGMxMTAxM2Y5MmY4NmFiMDA4YTFm
OGI2N2VhMTRkYjc5MTgwLi45NzIyYmVmNmRhMDBhYzQ3MmVlNjJmYjUyN2MxODQ5YmU4MjUwMDgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2ViQ29yZVRleHRSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dlYkNvcmVUZXh0UmVu
ZGVyZXIuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGRvRHJhd1RleHRBdFBvaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zCiAgICAg
ICAgIHVuZGVybGluZVBvaW50Lm1vdmUoYmVmb3JlV2lkdGgsIDEpOwogCiAgICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoY29sb3IpOwotICAgICAgICBjb250ZXh0LmRyYXdMaW5lRm9yVGV4
dCh1bmRlcmxpbmVQb2ludCwgdW5kZXJsaW5lZFdpZHRoLCBmYWxzZSk7CisgICAgICAgIGNvbnRl
eHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdCh1bmRlcmxpbmVQb2ludCwgRmxvYXRTaXplKHVu
ZGVybGluZWRXaWR0aCwgZm9udC5zaXplKCkgLyAxNikpLCBmYWxzZSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggOWU3MWE3MWJh
ZmE2NTZhYWU4Y2QwMGYwZTM1ZDkwMDM0NzFiMWYwMC4uNTAzOWUyYWFhY2ViMTk1OTNiZTk0OTdl
OWVlMmJmMDc5M2Y3OTk3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcApAQCAtMTA5MCwxMSArMTA5MCw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRN
YXJrZWRUZXh0RGVjb3JhdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSCiAg
ICAgfQogCiAgICAgLy8gMi4gUGFpbnQKLSAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIgZGVjb3Jh
dGlvblBhaW50ZXIgeyBjb250ZXh0LCBsaW5lU3R5bGUoKS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCgpLCByZW5kZXJlcigpLCBpc0ZpcnN0TGluZSgpLCBtYXJrZWRUZXh0LnN0eWxlLnRleHREZWNv
cmF0aW9uU3R5bGVzIH07CisgICAgVGV4dERlY29yYXRpb25QYWludGVyIGRlY29yYXRpb25QYWlu
dGVyIHsgY29udGV4dCwgbGluZVN0eWxlKCkudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgcmVu
ZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgbGluZUZvbnQoKSwgbWFya2VkVGV4dC5zdHlsZS50ZXh0
RGVjb3JhdGlvblN0eWxlcyB9OwogICAgIGRlY29yYXRpb25QYWludGVyLnNldElubGluZVRleHRC
b3godGhpcyk7Ci0gICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0Rm9udChsaW5lRm9udCgpKTsKICAg
ICBkZWNvcmF0aW9uUGFpbnRlci5zZXRXaWR0aChzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgp
KTsKLSAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRCYXNlbGluZShsaW5lU3R5bGUoKS5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKICAgICBkZWNvcmF0aW9uUGFpbnRlci5zZXRJc0hvcml6b250YWwo
aXNIb3Jpem9udGFsKCkpOwogICAgIGlmIChtYXJrZWRUZXh0LnN0eWxlLnRleHRTaGFkb3cpIHsK
ICAgICAgICAgZGVjb3JhdGlvblBhaW50ZXIuc2V0VGV4dFNoYWRvdygmbWFya2VkVGV4dC5zdHls
ZS50ZXh0U2hhZG93LnZhbHVlKCkpOwpAQCAtMTIwMCw3ICsxMTk4LDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBGbG9hdFAKICAgICBDb2xvciB1bmRlcmxpbmVDb2xvciA9IHVuZGVybGluZS5jb21wb3Np
dGlvblVuZGVybGluZUNvbG9yID09IENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xv
ciA/IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0
ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yKSA6IHJlbmRlcmVyKCkuc3R5bGUoKS5j
b2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcih1bmRlcmxpbmUuY29sb3IpOwogICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0
UG9pbnQoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4ueSgpICsgbG9naWNhbEhlaWdo
dCgpIC0gbGluZVRoaWNrbmVzcyksIHdpZHRoLCByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRp
bmcoKSk7CisgICAgY29udGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KGJveE9yaWdpbi54
KCkgKyBzdGFydCwgYm94T3JpZ2luLnkoKSArIGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25l
c3MsIHdpZHRoLCBsaW5lVGhpY2tuZXNzKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5n
KCkpOwogfQogCiBpbnQgSW5saW5lVGV4dEJveDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlv
bnMuY3BwCmluZGV4IDc1NTFhOWZkNmNkNjA5MmE3ZWMwYmI2Njk3OTNhZmZhZDRlNGQ5ODMuLmQy
NmMwNDgzYzg0NTU2OGY3ZjY4ZDVhOTJiNTc1ZTNhOGIyMTYzMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKQEAg
LTk3LDkgKzk3LDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93
LCBjb25zdCBMYXlvdXQmIGxheW91dCwgUGFpbnRJbmZvJiBwYWkKICAgICBpZiAoIXN0eWxlLnRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRl
clRleHQqIHRleHRSZW5kZXJlciA9IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpLmZp
cnN0KCk7CiAgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIpIHsKLSAgICAgICAgICAgIHRleHREZWNv
cmF0aW9uUGFpbnRlci5lbXBsYWNlKHBhaW50SW5mby5jb250ZXh0KCksIHN0eWxlLnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCksICp0ZXh0UmVuZGVyZXIsIGZhbHNlKTsKLSAgICAgICAgICAgIHRl
eHREZWNvcmF0aW9uUGFpbnRlci0+c2V0Rm9udChzdHlsZS5mb250Q2FzY2FkZSgpKTsKLSAgICAg
ICAgICAgIHRleHREZWNvcmF0aW9uUGFpbnRlci0+c2V0QmFzZWxpbmUoc3R5bGUuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSk7CisgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvblBhaW50ZXIuZW1wbGFj
ZShwYWludEluZm8uY29udGV4dCgpLCBzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLCAq
dGV4dFJlbmRlcmVyLCBmYWxzZSwgc3R5bGUuZm9udENhc2NhZGUoKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlv
blBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHAKaW5kZXggOThlODhkYzQ4MDVkNmE1ZGE3YWE1NDIwNWRkYjE2ZTc0MTY5ODk4MC4u
OWI4NTk1YzAzZTYwZjUxMWQ0NDkwZjBiNmVlMzFhZDNlZjVmNTA3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTgxLDc1
ICs4MSwzOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RTdGVwVG9EZWNvcmF0aW9uTGVuZ3RoKGZsb2F0
JiBzdGVwLCBmbG9hdCYgY29udHJvbFBvaW50RGlzdGFuYwogICogICAgICAgICAgICAgfC0tLS0t
LS0tLS0tfAogICogICAgICAgICAgICAgICAgIHN0ZXAKICAqLwotc3RhdGljIHZvaWQgc3Ryb2tl
V2F2eVRleHREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
LCBmbG9hdCBmb250U2l6ZSkKK3N0YXRpYyB2b2lkIHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgZm9u
dFNpemUpCiB7Ci0gICAgRmxvYXRQb2ludCBwMSA9IHN0YXJ0OwotICAgIEZsb2F0UG9pbnQgcDIg
PSBlbmQ7Ci0gICAgY29udGV4dC5hZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCBz
dHJva2VUaGlja25lc3MsIGNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7CisgICAgRmxvYXRQb2ludCBw
MSA9IHJlY3QubWluWE1pbllDb3JuZXIoKTsKKyAgICBGbG9hdFBvaW50IHAyID0gcmVjdC5tYXhY
TWluWUNvcm5lcigpOworICAgIGNvbnRleHQuYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKHAx
LCBwMiwgcmVjdC5oZWlnaHQoKSwgY29udGV4dC5zdHJva2VTdHlsZSgpKTsKIAogICAgIFBhdGgg
cGF0aDsKICAgICBwYXRoLm1vdmVUbyhwMSk7CiAKLSAgICBmbG9hdCBjb250cm9sUG9pbnREaXN0
YW5jZTsKLSAgICBmbG9hdCBzdGVwOwotICAgIGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKGZvbnRT
aXplLCBjb250cm9sUG9pbnREaXN0YW5jZSwgc3RlcCk7CisgICAgYXV0byB3YXZ5U3Ryb2tlUGFy
YW1ldGVycyA9IGdldFdhdnlTdHJva2VQYXJhbWV0ZXJzKGZvbnRTaXplKTsKIAotICAgIGJvb2wg
aXNWZXJ0aWNhbExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CisgICAgQVNTRVJUKHAxLnkoKSA9
PSBwMi55KCkpOwogCi0gICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgIEFTU0VSVChw
MS54KCkgPT0gcDIueCgpKTsKKyAgICBmbG9hdCB5QXhpcyA9IHAxLnkoKTsKKyAgICBmbG9hdCB4
MSA9IHN0ZDo6bWluKHAxLngoKSwgcDIueCgpKTsKKyAgICBmbG9hdCB4MiA9IHN0ZDo6bWF4KHAx
LngoKSwgcDIueCgpKTsKIAotICAgICAgICBmbG9hdCB4QXhpcyA9IHAxLngoKTsKLSAgICAgICAg
ZmxvYXQgeTE7Ci0gICAgICAgIGZsb2F0IHkyOworICAgIGFkanVzdFN0ZXBUb0RlY29yYXRpb25M
ZW5ndGgod2F2eVN0cm9rZVBhcmFtZXRlcnMuc3RlcCwgd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29u
dHJvbFBvaW50RGlzdGFuY2UsIHgyIC0geDEpOworICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50
MSgwLCB5QXhpcyArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2ludERpc3RhbmNlKTsK
KyAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDIoMCwgeUF4aXMgLSB3YXZ5U3Ryb2tlUGFyYW1l
dGVycy5jb250cm9sUG9pbnREaXN0YW5jZSk7CiAKLSAgICAgICAgaWYgKHAxLnkoKSA8IHAyLnko
KSkgewotICAgICAgICAgICAgeTEgPSBwMS55KCk7Ci0gICAgICAgICAgICB5MiA9IHAyLnkoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHkxID0gcDIueSgpOwotICAgICAgICAgICAg
eTIgPSBwMS55KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGp1c3RTdGVwVG9EZWNvcmF0aW9u
TGVuZ3RoKHN0ZXAsIGNvbnRyb2xQb2ludERpc3RhbmNlLCB5MiAtIHkxKTsKLSAgICAgICAgRmxv
YXRQb2ludCBjb250cm9sUG9pbnQxKHhBeGlzICsgY29udHJvbFBvaW50RGlzdGFuY2UsIDApOwot
ICAgICAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDIoeEF4aXMgLSBjb250cm9sUG9pbnREaXN0
YW5jZSwgMCk7Ci0KLSAgICAgICAgZm9yIChmbG9hdCB5ID0geTE7IHkgKyAyICogc3RlcCA8PSB5
MjspIHsKLSAgICAgICAgICAgIGNvbnRyb2xQb2ludDEuc2V0WSh5ICsgc3RlcCk7Ci0gICAgICAg
ICAgICBjb250cm9sUG9pbnQyLnNldFkoeSArIHN0ZXApOwotICAgICAgICAgICAgeSArPSAyICog
c3RlcDsKLSAgICAgICAgICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhjb250cm9sUG9pbnQxLCBj
b250cm9sUG9pbnQyLCBGbG9hdFBvaW50KHhBeGlzLCB5KSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBBU1NFUlQocDEueSgpID09IHAyLnkoKSk7Ci0KLSAgICAgICAgZmxvYXQg
eUF4aXMgPSBwMS55KCk7Ci0gICAgICAgIGZsb2F0IHgxOwotICAgICAgICBmbG9hdCB4MjsKLQot
ICAgICAgICBpZiAocDEueCgpIDwgcDIueCgpKSB7Ci0gICAgICAgICAgICB4MSA9IHAxLngoKTsK
LSAgICAgICAgICAgIHgyID0gcDIueCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
eDEgPSBwMi54KCk7Ci0gICAgICAgICAgICB4MiA9IHAxLngoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGFkanVzdFN0ZXBUb0RlY29yYXRpb25MZW5ndGgoc3RlcCwgY29udHJvbFBvaW50RGlzdGFu
Y2UsIHgyIC0geDEpOwotICAgICAgICBGbG9hdFBvaW50IGNvbnRyb2xQb2ludDEoMCwgeUF4aXMg
KyBjb250cm9sUG9pbnREaXN0YW5jZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgY29udHJvbFBvaW50
MigwLCB5QXhpcyAtIGNvbnRyb2xQb2ludERpc3RhbmNlKTsKLQotICAgICAgICBmb3IgKGZsb2F0
IHggPSB4MTsgeCArIDIgKiBzdGVwIDw9IHgyOykgewotICAgICAgICAgICAgY29udHJvbFBvaW50
MS5zZXRYKHggKyBzdGVwKTsKLSAgICAgICAgICAgIGNvbnRyb2xQb2ludDIuc2V0WCh4ICsgc3Rl
cCk7Ci0gICAgICAgICAgICB4ICs9IDIgKiBzdGVwOwotICAgICAgICAgICAgcGF0aC5hZGRCZXpp
ZXJDdXJ2ZVRvKGNvbnRyb2xQb2ludDEsIGNvbnRyb2xQb2ludDIsIEZsb2F0UG9pbnQoeCwgeUF4
aXMpKTsKLSAgICAgICAgfQorICAgIGZvciAoZmxvYXQgeCA9IHgxOyB4ICsgMiAqIHdhdnlTdHJv
a2VQYXJhbWV0ZXJzLnN0ZXAgPD0geDI7KSB7CisgICAgICAgIGNvbnRyb2xQb2ludDEuc2V0WCh4
ICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMuc3RlcCk7CisgICAgICAgIGNvbnRyb2xQb2ludDIuc2V0
WCh4ICsgd2F2eVN0cm9rZVBhcmFtZXRlcnMuc3RlcCk7CisgICAgICAgIHggKz0gMiAqIHdhdnlT
dHJva2VQYXJhbWV0ZXJzLnN0ZXA7CisgICAgICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhjb250
cm9sUG9pbnQxLCBjb250cm9sUG9pbnQyLCBGbG9hdFBvaW50KHgsIHlBeGlzKSk7CiAgICAgfQog
CiAgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgYXV0byBzdHJva2VU
aGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOworICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKHJlY3QuaGVpZ2h0KCkpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MpOwogfQog
CiAjaWYgRU5BQkxFKENTUzNfVEVYVF9ERUNPUkFUSU9OX1NLSVBfSU5LKQpAQCAtMjAzLDE4ICsx
NjcsNiBAQCBzdGF0aWMgRGFzaEFycmF5IHRyYW5zbGF0ZUludGVyc2VjdGlvblBvaW50c1RvU2tp
cElua0JvdW5kYXJpZXMoY29uc3QgRGFzaEFycmF5JgogICAgIAogICAgIHJldHVybiByZXN1bHQ7
CiB9Ci0KLXN0YXRpYyB2b2lkIGRyYXdTa2lwSW5rVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRleHRSdW4s
IGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsT3Jp
Z2luLAotICAgIGZsb2F0IHVuZGVybGluZU9mZnNldCwgZmxvYXQgd2lkdGgsIGJvb2wgaXNQcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAg
RmxvYXRQb2ludCBhZGp1c3RlZExvY2FsT3JpZ2luID0gbG9jYWxPcmlnaW47Ci0gICAgYWRqdXN0
ZWRMb2NhbE9yaWdpbi5tb3ZlKDAsIHVuZGVybGluZU9mZnNldCk7Ci0gICAgRmxvYXRSZWN0IHVu
ZGVybGluZUJvdW5kaW5nQm94ID0gY29udGV4dC5jb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChhZGp1c3RlZExvY2FsT3JpZ2luLCB3aWR0aCwgaXNQcmludGluZyk7Ci0gICAgRGFzaEFycmF5
IGludGVyc2VjdGlvbnMgPSBmb250LmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCh0ZXh0
UnVuLCB0ZXh0T3JpZ2luLCB1bmRlcmxpbmVCb3VuZGluZ0JveCk7Ci0gICAgRGFzaEFycmF5IGEg
PSB0cmFuc2xhdGVJbnRlcnNlY3Rpb25Qb2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGludGVyc2Vj
dGlvbnMsIHVuZGVybGluZUJvdW5kaW5nQm94LmhlaWdodCgpLCB3aWR0aCk7Ci0gICAgQVNTRVJU
KCEoYS5zaXplKCkgJSAyKSk7Ci0gICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KGFkanVzdGVk
TG9jYWxPcmlnaW4sIGEsIGlzUHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7Ci19
CiAjZW5kaWYKIAogc3RhdGljIFN0cm9rZVN0eWxlIHRleHREZWNvcmF0aW9uU3R5bGVUb1N0cm9r
ZVN0eWxlKFRleHREZWNvcmF0aW9uU3R5bGUgZGVjb3JhdGlvblN0eWxlKQpAQCAtMjQ3LDExICsx
OTksMTIgQEAgYm9vbCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxlczo6b3BlcmF0b3I9PShj
b25zdCBTdHlsZXMmIG90aGVyKSBjb25zdAogICAgICAgICAmJiB1bmRlcmxpbmVTdHlsZSA9PSBv
dGhlci51bmRlcmxpbmVTdHlsZSAmJiBvdmVybGluZVN0eWxlID09IG90aGVyLm92ZXJsaW5lU3R5
bGUgJiYgbGluZXRocm91Z2hTdHlsZSA9PSBvdGhlci5saW5ldGhyb3VnaFN0eWxlOwogfQogCi1U
ZXh0RGVjb3JhdGlvblBhaW50ZXI6OlRleHREZWNvcmF0aW9uUGFpbnRlcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gZGVjb3JhdGlvbnMsIGNvbnN0
IFJlbmRlclRleHQmIHJlbmRlcmVyLCBib29sIGlzRmlyc3RMaW5lLCBzdGQ6Om9wdGlvbmFsPFN0
eWxlcz4gc3R5bGVzKQorVGV4dERlY29yYXRpb25QYWludGVyOjpUZXh0RGVjb3JhdGlvblBhaW50
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRl
Y29yYXRpb25zLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCBpc0ZpcnN0TGluZSwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIHN0ZDo6b3B0aW9uYWw8U3R5bGVzPiBzdHlsZXMpCiAg
ICAgOiBtX2NvbnRleHQgeyBjb250ZXh0IH0KICAgICAsIG1fZGVjb3JhdGlvbnMgeyBkZWNvcmF0
aW9ucyB9CiAgICAgLCBtX3dhdnlPZmZzZXQgeyB3YXZ5T2Zmc2V0RnJvbURlY29yYXRpb24oKSB9
CiAgICAgLCBtX2lzUHJpbnRpbmcgeyByZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5nKCkgfQor
ICAgICwgbV9mb250IHsgZm9udCB9CiAgICAgLCBtX3N0eWxlcyB7IHN0eWxlcyA/ICpXVEZNb3Zl
KHN0eWxlcykgOiBzdHlsZXNGb3JSZW5kZXJlcihyZW5kZXJlciwgZGVjb3JhdGlvbnMsIGlzRmly
c3RMaW5lLCBQc2V1ZG9JZDo6Tm9uZSkgfQogICAgICwgbV9saW5lU3R5bGUgeyBpc0ZpcnN0TGlu
ZSA/IHJlbmRlcmVyLmZpcnN0TGluZVN0eWxlKCkgOiByZW5kZXJlci5zdHlsZSgpIH0KIHsKQEAg
LTI2MywzMSArMjE2LDM2IEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludFRleHRE
ZWNvcmF0aW9uKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsCiAgICAgVU5VU0VEX1BB
UkFNKHRleHRSdW4pOwogICAgIFVOVVNFRF9QQVJBTSh0ZXh0T3JpZ2luKTsKICNlbmRpZgotICAg
IEFTU0VSVChtX2ZvbnQpOworICAgIGNvbnN0IGF1dG8mIGZvbnRNZXRyaWNzID0gbV9saW5lU3R5
bGUuZm9udE1ldHJpY3MoKTsKICAgICBmbG9hdCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyA9IHRl
eHREZWNvcmF0aW9uU3Ryb2tlVGhpY2tuZXNzKG1fbGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVs
U2l6ZSgpKTsKLSAgICBtX2NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKHRleHREZWNvcmF0aW9u
VGhpY2tuZXNzKTsKICAgICBGbG9hdFBvaW50IGxvY2FsT3JpZ2luID0gYm94T3JpZ2luOwogCi0g
ICAgYXV0byBwYWludERlY29yYXRpb24gPSBbJl0gKE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4g
ZGVjb3JhdGlvbiwgVGV4dERlY29yYXRpb25TdHlsZSBzdHlsZSwgY29uc3QgQ29sb3ImIGNvbG9y
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYgZW5kLCBpbnQgb2Zm
c2V0KSB7CisgICAgYXV0byBwYWludERlY29yYXRpb24gPSBbJl0gKFRleHREZWNvcmF0aW9uIGRl
Y29yYXRpb24sIFRleHREZWNvcmF0aW9uU3R5bGUgc3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvciwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSB7CiAgICAgICAgIG1fY29udGV4dC5zZXRTdHJva2VDb2xv
cihjb2xvcik7CiAKICAgICAgICAgYXV0byBzdHJva2VTdHlsZSA9IHRleHREZWNvcmF0aW9uU3R5
bGVUb1N0cm9rZVN0eWxlKHN0eWxlKTsKIAogICAgICAgICBpZiAoc3R5bGUgPT0gVGV4dERlY29y
YXRpb25TdHlsZTo6V2F2eSkKLSAgICAgICAgICAgIHN0cm9rZVdhdnlUZXh0RGVjb3JhdGlvbiht
X2NvbnRleHQsIHN0YXJ0LCBlbmQsIHRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCBtX2xpbmVTdHls
ZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSk7CisgICAgICAgICAgICBzdHJva2VXYXZ5VGV4dERl
Y29yYXRpb24obV9jb250ZXh0LCByZWN0LCBtX2xpbmVTdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNp
emUoKSk7CiAgICAgICAgIGVsc2UgaWYgKGRlY29yYXRpb24gPT0gVGV4dERlY29yYXRpb246OlVu
ZGVybGluZSB8fCBkZWNvcmF0aW9uID09IFRleHREZWNvcmF0aW9uOjpPdmVybGluZSkgewogI2lm
IEVOQUJMRShDU1MzX1RFWFRfREVDT1JBVElPTl9TS0lQX0lOSykKICAgICAgICAgICAgIGlmICgo
bV9saW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25Ta2lwOjpJ
bmsgfHwgbV9saW5lU3R5bGUudGV4dERlY29yYXRpb25Ta2lwKCkgPT0gVGV4dERlY29yYXRpb25T
a2lwOjpBdXRvKSAmJiBtX2lzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgIGlmICghbV9j
b250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZHJhd1NraXBJ
bmtVbmRlcmxpbmUobV9jb250ZXh0LCAqbV9mb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBsb2Nh
bE9yaWdpbiwgb2Zmc2V0LCBtX3dpZHRoLCBtX2lzUHJpbnRpbmcsIHN0eWxlID09IFRleHREZWNv
cmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUpOworICAgICAgICAgICAgICAgIGlmICgh
bV9jb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBGbG9h
dFJlY3QgdW5kZXJsaW5lQm91bmRpbmdCb3ggPSBtX2NvbnRleHQuY29tcHV0ZVVuZGVybGluZUJv
dW5kc0ZvclRleHQocmVjdCwgbV9pc1ByaW50aW5nKTsKKyAgICAgICAgICAgICAgICAgICAgRGFz
aEFycmF5IGludGVyc2VjdGlvbnMgPSBtX2ZvbnQuZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhS
ZWN0KHRleHRSdW4sIHRleHRPcmlnaW4sIHVuZGVybGluZUJvdW5kaW5nQm94KTsKKyAgICAgICAg
ICAgICAgICAgICAgRGFzaEFycmF5IGJvdW5kYXJpZXMgPSB0cmFuc2xhdGVJbnRlcnNlY3Rpb25Q
b2ludHNUb1NraXBJbmtCb3VuZGFyaWVzKGludGVyc2VjdGlvbnMsIHVuZGVybGluZUJvdW5kaW5n
Qm94LmhlaWdodCgpLCByZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IShib3VuZGFyaWVzLnNpemUoKSAlIDIpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgdXNlIHVuZGVybGluZUJvdW5kaW5nQm94IGhlcmUgYmVjYXVzZSBkcmF3TGluZXNGb3JUZXh0
KCkgd2lsbCBydW4gY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoKSBpbnRlcm5hbGx5Lgor
ICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0
aW9uKCksIHJlY3QuaGVpZ2h0KCksIGJvdW5kYXJpZXMsIG1faXNQcmludGluZywgc3R5bGUgPT0g
VGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQg
dG8gc3VwcG9ydCB0ZXh0LWRlY29yYXRpb24tc2tpcDogbm9uZS4KICNlbmRpZgotICAgICAgICAg
ICAgICAgIG1fY29udGV4dC5kcmF3TGluZUZvclRleHQoc3RhcnQsIG1fd2lkdGgsIG1faXNQcmlu
dGluZywgc3R5bGUgPT0gVGV4dERlY29yYXRpb25TdHlsZTo6RG91YmxlLCBzdHJva2VTdHlsZSk7
CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LmRyYXdMaW5lRm9yVGV4dChyZWN0LCBtX2lzUHJp
bnRpbmcsIHN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OkRvdWJsZSwgc3Ryb2tlU3R5bGUp
OwogICAgICAgICAgICAgCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoZGVj
b3JhdGlvbiA9PSBUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gpOwotICAgICAgICAgICAgbV9j
b250ZXh0LmRyYXdMaW5lRm9yVGV4dChzdGFydCwgbV93aWR0aCwgbV9pc1ByaW50aW5nLCBzdHls
ZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC5kcmF3TGluZUZvclRleHQocmVjdCwgbV9pc1ByaW50aW5nLCBzdHlsZSA9
PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpEb3VibGUsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgfQog
ICAgIH07CiAKQEAgLTI5OCwxMCArMjU2LDEwIEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVy
OjpwYWludFRleHREZWNvcmF0aW9uKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZsCiAg
ICAgaW50IGV4dHJhT2Zmc2V0ID0gMDsKICAgICBib29sIGNsaXBwaW5nID0gIWFyZUxpbmVzT3Bh
cXVlICYmIG1fc2hhZG93ICYmIG1fc2hhZG93LT5uZXh0KCk7CiAgICAgaWYgKGNsaXBwaW5nKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lk
dGgsIG1fYmFzZWxpbmUgKyAyKSk7CisgICAgICAgIEZsb2F0UmVjdCBjbGlwUmVjdChsb2NhbE9y
aWdpbiwgRmxvYXRTaXplKG1fd2lkdGgsIGZvbnRNZXRyaWNzLmFzY2VudCgpICsgMikpOwogICAg
ICAgICBmb3IgKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9IG1fc2hhZG93OyBzaGFkb3c7IHNo
YWRvdyA9IHNoYWRvdy0+bmV4dCgpKSB7CiAgICAgICAgICAgICBpbnQgc2hhZG93RXh0ZW50ID0g
c2hhZG93LT5wYWludGluZ0V4dGVudCgpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6ZShtX3dpZHRoLCBtX2Jhc2VsaW5lICsgMikpOworICAg
ICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6ZShtX3dp
ZHRoLCBmb250TWV0cmljcy5hc2NlbnQoKSArIDIpKTsKICAgICAgICAgICAgIHNoYWRvd1JlY3Qu
aW5mbGF0ZShzaGFkb3dFeHRlbnQpOwogICAgICAgICAgICAgaW50IHNoYWRvd1ggPSBtX2lzSG9y
aXpvbnRhbCA/IHNoYWRvdy0+eCgpIDogc2hhZG93LT55KCk7CiAgICAgICAgICAgICBpbnQgc2hh
ZG93WSA9IG1faXNIb3Jpem9udGFsID8gc2hhZG93LT55KCkgOiAtc2hhZG93LT54KCk7CkBAIC0z
MTEsNyArMjY5LDcgQEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50VGV4dERlY29y
YXRpb24oY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmwKICAgICAgICAgfQogICAgICAg
ICBtX2NvbnRleHQuc2F2ZSgpOwogICAgICAgICBtX2NvbnRleHQuY2xpcChjbGlwUmVjdCk7Ci0g
ICAgICAgIGV4dHJhT2Zmc2V0ICs9IG1fYmFzZWxpbmUgKyAyOworICAgICAgICBleHRyYU9mZnNl
dCArPSBmb250TWV0cmljcy5hc2NlbnQoKSArIDI7CiAgICAgICAgIGxvY2FsT3JpZ2luLm1vdmUo
MCwgZXh0cmFPZmZzZXQpOwogICAgIH0KIApAQCAtMzM3LDIwICsyOTUsMjAgQEAgdm9pZCBUZXh0
RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50VGV4dERlY29yYXRpb24oY29uc3QgVGV4dFJ1biYgdGV4
dFJ1biwgY29uc3QgRmwKICAgICAgICAgaWYgKG1fZGVjb3JhdGlvbnMuY29udGFpbnMoVGV4dERl
Y29yYXRpb246OlVuZGVybGluZSkpIHsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSBjb21wdXRl
VW5kZXJsaW5lT2Zmc2V0KG1fbGluZVN0eWxlLnRleHRVbmRlcmxpbmVQb3NpdGlvbigpLCBtX2xp
bmVTdHlsZS5mb250TWV0cmljcygpLCBtX2lubGluZVRleHRCb3gsIHRleHREZWNvcmF0aW9uVGhp
Y2tuZXNzKTsKICAgICAgICAgICAgIGZsb2F0IHdhdnlPZmZzZXQgPSBtX3N0eWxlcy51bmRlcmxp
bmVTdHlsZSA9PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpXYXZ5ID8gbV93YXZ5T2Zmc2V0IDogMDsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgc3RhcnQgPSBsb2NhbE9yaWdpbiArIEZsb2F0U2l6ZSgw
LCBvZmZzZXQgKyB3YXZ5T2Zmc2V0KTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgZW5kID0gbG9j
YWxPcmlnaW4gKyBGbG9hdFNpemUobV93aWR0aCwgb2Zmc2V0ICsgd2F2eU9mZnNldCk7Ci0gICAg
ICAgICAgICBwYWludERlY29yYXRpb24oVGV4dERlY29yYXRpb246OlVuZGVybGluZSwgbV9zdHls
ZXMudW5kZXJsaW5lU3R5bGUsIG1fc3R5bGVzLnVuZGVybGluZUNvbG9yLCBzdGFydCwgZW5kLCBv
ZmZzZXQpOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QobG9jYWxPcmlnaW4sIEZsb2F0U2l6
ZShtX3dpZHRoLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcykpOworICAgICAgICAgICAgcmVjdC5t
b3ZlKDAsIG9mZnNldCArIHdhdnlPZmZzZXQpOworICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9u
KFRleHREZWNvcmF0aW9uOjpVbmRlcmxpbmUsIG1fc3R5bGVzLnVuZGVybGluZVN0eWxlLCBtX3N0
eWxlcy51bmRlcmxpbmVDb2xvciwgcmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZGVj
b3JhdGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246Ok92ZXJsaW5lKSkgewogICAgICAgICAg
ICAgZmxvYXQgd2F2eU9mZnNldCA9IG1fc3R5bGVzLm92ZXJsaW5lU3R5bGUgPT0gVGV4dERlY29y
YXRpb25TdHlsZTo6V2F2eSA/IG1fd2F2eU9mZnNldCA6IDA7Ci0gICAgICAgICAgICBGbG9hdFBv
aW50IHN0YXJ0ID0gbG9jYWxPcmlnaW4gLSBGbG9hdFNpemUoMCwgd2F2eU9mZnNldCk7Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IGVuZCA9IGxvY2FsT3JpZ2luICsgRmxvYXRTaXplKG1fd2lkdGgs
IC13YXZ5T2Zmc2V0KTsKLSAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbihUZXh0RGVjb3JhdGlv
bjo6T3ZlcmxpbmUsIG1fc3R5bGVzLm92ZXJsaW5lU3R5bGUsIG1fc3R5bGVzLm92ZXJsaW5lQ29s
b3IsIHN0YXJ0LCBlbmQsIDApOworICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QobG9jYWxPcmln
aW4sIEZsb2F0U2l6ZShtX3dpZHRoLCB0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcykpOworICAgICAg
ICAgICAgcmVjdC5tb3ZlKDAsIC13YXZ5T2Zmc2V0KTsKKyAgICAgICAgICAgIHBhaW50RGVjb3Jh
dGlvbihUZXh0RGVjb3JhdGlvbjo6T3ZlcmxpbmUsIG1fc3R5bGVzLm92ZXJsaW5lU3R5bGUsIG1f
c3R5bGVzLm92ZXJsaW5lQ29sb3IsIHJlY3QpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2Rl
Y29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkpIHsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgc3RhcnQgPSBsb2NhbE9yaWdpbiArIEZsb2F0U2l6ZSgwLCAyICog
bV9iYXNlbGluZSAvIDMpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBlbmQgPSBsb2NhbE9yaWdp
biArIEZsb2F0U2l6ZShtX3dpZHRoLCAyICogbV9iYXNlbGluZSAvIDMpOwotICAgICAgICAgICAg
cGFpbnREZWNvcmF0aW9uKFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCwgbV9zdHlsZXMubGlu
ZXRocm91Z2hTdHlsZSwgbV9zdHlsZXMubGluZXRocm91Z2hDb2xvciwgc3RhcnQsIGVuZCwgMCk7
CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdChsb2NhbE9yaWdpbiwgRmxvYXRTaXplKG1fd2lk
dGgsIHRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUoMCwg
MiAqIGZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkgLyAzKTsKKyAgICAgICAgICAgIHBhaW50RGVj
b3JhdGlvbihUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gsIG1fc3R5bGVzLmxpbmV0aHJvdWdo
U3R5bGUsIG1fc3R5bGVzLmxpbmV0aHJvdWdoQ29sb3IsIHJlY3QpOwogICAgICAgICB9CiAgICAg
fSB3aGlsZSAoc2hhZG93KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRE
ZWNvcmF0aW9uUGFpbnRlci5oCmluZGV4IDAyOTRhNDYzYzdmNGI0OWJjOTg1MTFlZmQyY2ZhMDg1
N2RkY2MzMTQuLmE2ZDE0YjJiNWY0NTYzNzgzNjAyYTJlYTc5MDA0NmVmOWM4MDFiMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmgKQEAg
LTQyLDEzICs0MiwxMSBAQCBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVGV4dERlY29yYXRpb25QYWlu
dGVyIHsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgU3R5bGVzOwotICAgIFRleHREZWNvcmF0aW9uUGFp
bnRlcihHcmFwaGljc0NvbnRleHQmLCBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGRlY29yYXRp
b25zLCBjb25zdCBSZW5kZXJUZXh0JiwgYm9vbCBpc0ZpcnN0TGluZSwgc3RkOjpvcHRpb25hbDxT
dHlsZXM+ID0gc3RkOjpudWxsb3B0KTsKKyAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBkZWNvcmF0aW9ucywgY29uc3Qg
UmVuZGVyVGV4dCYsIGJvb2wgaXNGaXJzdExpbmUsIGNvbnN0IEZvbnRDYXNjYWRlJiwgc3RkOjpv
cHRpb25hbDxTdHlsZXM+ID0gc3RkOjpudWxsb3B0KTsKICAgICAKICAgICB2b2lkIHNldElubGlu
ZVRleHRCb3goY29uc3QgSW5saW5lVGV4dEJveCogaW5saW5lVGV4dEJveCkgeyBtX2lubGluZVRl
eHRCb3ggPSBpbmxpbmVUZXh0Qm94OyB9Ci0gICAgdm9pZCBzZXRGb250KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250KSB7IG1fZm9udCA9ICZmb250OyB9CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwo
Ym9vbCBpc0hvcml6b250YWwpIHsgbV9pc0hvcml6b250YWwgPSBpc0hvcml6b250YWw7IH0KICAg
ICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQotICAgIHZv
aWQgc2V0QmFzZWxpbmUoZmxvYXQgYmFzZWxpbmUpIHsgbV9iYXNlbGluZSA9IGJhc2VsaW5lOyB9
CiAgICAgdm9pZCBzZXRUZXh0U2hhZG93KGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3cpIHsg
bV9zaGFkb3cgPSB0ZXh0U2hhZG93OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dDb2xvckZpbHRlcihj
b25zdCBGaWx0ZXJPcGVyYXRpb25zKiBjb2xvckZpbHRlcikgeyBtX3NoYWRvd0NvbG9yRmlsdGVy
ID0gY29sb3JGaWx0ZXI7IH0KIApAQCAtNzIsMTQgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgT3B0
aW9uU2V0PFRleHREZWNvcmF0aW9uPiBtX2RlY29yYXRpb25zOwogICAgIGZsb2F0IG1fd2F2eU9m
ZnNldDsKICAgICBmbG9hdCBtX3dpZHRoIHsgMCB9OwotICAgIGZsb2F0IG1fYmFzZWxpbmUgeyAw
IH07CiAgICAgRmxvYXRQb2ludCBtX2JveE9yaWdpbjsKICAgICBib29sIG1faXNQcmludGluZzsK
ICAgICBib29sIG1faXNIb3Jpem9udGFsIHsgdHJ1ZSB9OwogICAgIGNvbnN0IFNoYWRvd0RhdGEq
IG1fc2hhZG93IHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMqIG1fc2hh
ZG93Q29sb3JGaWx0ZXIgeyBudWxscHRyIH07CiAgICAgY29uc3QgSW5saW5lVGV4dEJveCogbV9p
bmxpbmVUZXh0Qm94IHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBtX2ZvbnQg
eyBudWxscHRyIH07CisgICAgY29uc3QgRm9udENhc2NhZGUmIG1fZm9udDsKIAogICAgIFN0eWxl
cyBtX3N0eWxlczsKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9saW5lU3R5bGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAppbmRleCBhYjE1NjdmYWJkMTk0
YzJkM2NlNWRhYTMyNDg0Njk0Nzk3YTUxY2RiLi41ODc1NDVhM2NkMjg3OTEyYTMzNGQzNjllNWQ4
OTY0ZjQ2NmE4NTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0lubGluZVRleHRCb3hTdHls
ZS5jcHAKQEAgLTgzLDE3ICs4MywxMyBAQCBpbnQgY29tcHV0ZVVuZGVybGluZU9mZnNldChUZXh0
VW5kZXJsaW5lUG9zaXRpb24gdW5kZXJsaW5lUG9zaXRpb24sIGNvbnN0IEZvbnRNZQogICAgIHJl
dHVybiBmb250TWV0cmljcy5hc2NlbnQoKSArIGdhcDsKIH0KICAgICAKLXZvaWQgZ2V0V2F2eVN0
cm9rZVBhcmFtZXRlcnMoZmxvYXQgZm9udFNpemUsIGZsb2F0JiBjb250cm9sUG9pbnREaXN0YW5j
ZSwgZmxvYXQmIHN0ZXApCitXYXZ5U3Ryb2tlUGFyYW1ldGVycyBnZXRXYXZ5U3Ryb2tlUGFyYW1l
dGVycyhmbG9hdCBmb250U2l6ZSkKIHsKLSAgICAvLyBEaXN0YW5jZSBiZXR3ZWVuIGRlY29yYXRp
b24ncyBheGlzIGFuZCBCZXppZXIgY3VydmUncyBjb250cm9sIHBvaW50cy4KLSAgICAvLyBUaGUg
aGVpZ2h0IG9mIHRoZSBjdXJ2ZSBpcyBiYXNlZCBvbiB0aGlzIGRpc3RhbmNlLiBJbmNyZWFzZXMg
dGhlIGN1cnZlJ3MgaGVpZ2h0Ci0gICAgLy8gYXMgZm9udFNpemUgaW5jcmVhc2VzIHRvIG1ha2Ug
dGhlIGN1cnZlIGxvb2sgYmV0dGVyLgotICAgIGNvbnRyb2xQb2ludERpc3RhbmNlID0gMC4wOTM3
NSAqIGZvbnRTaXplOwotCi0gICAgLy8gSW5jcmVtZW50IHVzZWQgdG8gZm9ybSB0aGUgZGlhbW9u
ZCBzaGFwZSBiZXR3ZWVuIHN0YXJ0IHBvaW50IChwMSksIGNvbnRyb2wKLSAgICAvLyBwb2ludHMg
YW5kIGVuZCBwb2ludCAocDIpIGFsb25nIHRoZSBheGlzIG9mIHRoZSBkZWNvcmF0aW9uLiBUaGUg
Y3VydmUgZ2V0cwotICAgIC8vIHdpZGVyIGFzIGZvbnQgc2l6ZSBpbmNyZWFzZXMuCi0gICAgc3Rl
cCA9IGZvbnRTaXplIC8gNC41OworICAgIFdhdnlTdHJva2VQYXJhbWV0ZXJzIHJlc3VsdDsKKyAg
ICAvLyBNb3JlIGluZm9ybWF0aW9uIGlzIGluIHRoZSBXYXZ5U3Ryb2tlUGFyYW1ldGVycyBkZWZp
bml0aW9uLgorICAgIHJlc3VsdC5jb250cm9sUG9pbnREaXN0YW5jZSA9IGZvbnRTaXplICogMS41
IC8gMTY7CisgICAgcmVzdWx0LnN0ZXAgPSBmb250U2l6ZSAvIDQuNTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0ZW5kSW50VG9GbG9hdChpbnQmIGV4dGVu
ZE1lLCBmbG9hdCBleHRlbmRUbykKQEAgLTExMCw4ICsxMDYsNyBAQCBHbHlwaE92ZXJmbG93IHZp
c3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSwg
Y29uc3QgSQogICAgICAgICByZXR1cm4gR2x5cGhPdmVyZmxvdygpOwogCiAgICAgZmxvYXQgc3Ry
b2tlVGhpY2tuZXNzID0gdGV4dERlY29yYXRpb25TdHJva2VUaGlja25lc3MobGluZVN0eWxlLmNv
bXB1dGVkRm9udFBpeGVsU2l6ZSgpKTsKLSAgICBmbG9hdCBjb250cm9sUG9pbnREaXN0YW5jZSA9
IDA7Ci0gICAgZmxvYXQgc3RlcDsKKyAgICBXYXZ5U3Ryb2tlUGFyYW1ldGVycyB3YXZ5U3Ryb2tl
UGFyYW1ldGVyczsKICAgICBmbG9hdCB3YXZ5T2Zmc2V0ID0gMDsKICAgICAgICAgCiAgICAgVGV4
dERlY29yYXRpb25TdHlsZSBkZWNvcmF0aW9uU3R5bGUgPSBsaW5lU3R5bGUudGV4dERlY29yYXRp
b25TdHlsZSgpOwpAQCAtMTE5LDcgKzExNCw3IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZs
b3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBJCiAg
ICAgR2x5cGhPdmVyZmxvdyBvdmVyZmxvd1Jlc3VsdDsKICAgICAKICAgICBpZiAoZGVjb3JhdGlv
blN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6OldhdnkpIHsKLSAgICAgICAgZ2V0V2F2eVN0
cm9rZVBhcmFtZXRlcnMobGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpLCBjb250cm9s
UG9pbnREaXN0YW5jZSwgc3RlcCk7CisgICAgICAgIHdhdnlTdHJva2VQYXJhbWV0ZXJzID0gZ2V0
V2F2eVN0cm9rZVBhcmFtZXRlcnMobGluZVN0eWxlLmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpKTsK
ICAgICAgICAgd2F2eU9mZnNldCA9IHdhdnlPZmZzZXRGcm9tRGVjb3JhdGlvbigpOwogICAgICAg
ICBvdmVyZmxvd1Jlc3VsdC5sZWZ0ID0gc3Ryb2tlVGhpY2tuZXNzOwogICAgICAgICBvdmVyZmxv
d1Jlc3VsdC5yaWdodCA9IHN0cm9rZVRoaWNrbmVzczsKQEAgLTEzMSw4ICsxMjYsOCBAQCBHbHlw
aE92ZXJmbG93IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUm
IGxpbmVTdHlsZSwgY29uc3QgSQogICAgICAgICBpbnQgdW5kZXJsaW5lT2Zmc2V0ID0gMTsKICAg
ICAgICAgdW5kZXJsaW5lT2Zmc2V0ICs9IGNvbXB1dGVVbmRlcmxpbmVPZmZzZXQobGluZVN0eWxl
LnRleHRVbmRlcmxpbmVQb3NpdGlvbigpLCBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKSwgaW5saW5l
VGV4dEJveCwgc3Ryb2tlVGhpY2tuZXNzKTsKICAgICAgICAgaWYgKGRlY29yYXRpb25TdHlsZSA9
PSBUZXh0RGVjb3JhdGlvblN0eWxlOjpXYXZ5KSB7Ci0gICAgICAgICAgICBleHRlbmRJbnRUb0Zs
b2F0KG92ZXJmbG93UmVzdWx0LmJvdHRvbSwgdW5kZXJsaW5lT2Zmc2V0ICsgd2F2eU9mZnNldCAr
IGNvbnRyb2xQb2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKLSAgICAg
ICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCAtKHVuZGVybGluZU9m
ZnNldCArIHdhdnlPZmZzZXQgLSBjb250cm9sUG9pbnREaXN0YW5jZSAtIHN0cm9rZVRoaWNrbmVz
cykpOworICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC5ib3R0b20s
IHVuZGVybGluZU9mZnNldCArIHdhdnlPZmZzZXQgKyB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250
cm9sUG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7CisgICAgICAgICAg
ICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwgLSh1bmRlcmxpbmVPZmZzZXQg
KyB3YXZ5T2Zmc2V0IC0gd2F2eVN0cm9rZVBhcmFtZXRlcnMuY29udHJvbFBvaW50RGlzdGFuY2Ug
LSBzdHJva2VUaGlja25lc3MpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4dGVu
ZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQuYm90dG9tLCB1bmRlcmxpbmVPZmZzZXQgKyBzdHJv
a2VUaGlja25lc3MgLSBoZWlnaHQpOwogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVy
Zmxvd1Jlc3VsdC50b3AsIC11bmRlcmxpbmVPZmZzZXQpOwpAQCAtMTQwLDggKzEzNSw4IEBAIEds
eXBoT3ZlcmZsb3cgdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlLCBjb25zdCBJCiAgICAgfQogICAgIGlmIChkZWNvcmF0aW9uICYgVGV4dERl
Y29yYXRpb246Ok92ZXJsaW5lKSB7CiAgICAgICAgIGlmIChkZWNvcmF0aW9uU3R5bGUgPT0gVGV4
dERlY29yYXRpb25TdHlsZTo6V2F2eSkgewotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChv
dmVyZmxvd1Jlc3VsdC5ib3R0b20sIC13YXZ5T2Zmc2V0ICsgY29udHJvbFBvaW50RGlzdGFuY2Ug
KyBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOwotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9h
dChvdmVyZmxvd1Jlc3VsdC50b3AsIHdhdnlPZmZzZXQgKyBjb250cm9sUG9pbnREaXN0YW5jZSAr
IHN0cm9rZVRoaWNrbmVzcyk7CisgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93
UmVzdWx0LmJvdHRvbSwgLXdhdnlPZmZzZXQgKyB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9s
UG9pbnREaXN0YW5jZSArIHN0cm9rZVRoaWNrbmVzcyAtIGhlaWdodCk7CisgICAgICAgICAgICBl
eHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVzdWx0LnRvcCwgd2F2eU9mZnNldCArIHdhdnlTdHJv
a2VQYXJhbWV0ZXJzLmNvbnRyb2xQb2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1
bHQuYm90dG9tLCBzdHJva2VUaGlja25lc3MgLSBoZWlnaHQpOwogICAgICAgICAgICAgLy8gdG9w
IGlzIHVudG91Y2hlZApAQCAtMTUwLDggKzE0NSw4IEBAIEdseXBoT3ZlcmZsb3cgdmlzdWFsT3Zl
cmZsb3dGb3JEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBJ
CiAgICAgaWYgKGRlY29yYXRpb24gJiBUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gpIHsKICAg
ICAgICAgZmxvYXQgYmFzZWxpbmUgPSBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2Vu
dCgpOwogICAgICAgICBpZiAoZGVjb3JhdGlvblN0eWxlID09IFRleHREZWNvcmF0aW9uU3R5bGU6
OldhdnkpIHsKLSAgICAgICAgICAgIGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQuYm90
dG9tLCAyICogYmFzZWxpbmUgLyAzICsgY29udHJvbFBvaW50RGlzdGFuY2UgKyBzdHJva2VUaGlj
a25lc3MgLSBoZWlnaHQpOwotICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jl
c3VsdC50b3AsIC0oMiAqIGJhc2VsaW5lIC8gMyAtIGNvbnRyb2xQb2ludERpc3RhbmNlIC0gc3Ry
b2tlVGhpY2tuZXNzKSk7CisgICAgICAgICAgICBleHRlbmRJbnRUb0Zsb2F0KG92ZXJmbG93UmVz
dWx0LmJvdHRvbSwgMiAqIGJhc2VsaW5lIC8gMyArIHdhdnlTdHJva2VQYXJhbWV0ZXJzLmNvbnRy
b2xQb2ludERpc3RhbmNlICsgc3Ryb2tlVGhpY2tuZXNzIC0gaGVpZ2h0KTsKKyAgICAgICAgICAg
IGV4dGVuZEludFRvRmxvYXQob3ZlcmZsb3dSZXN1bHQudG9wLCAtKDIgKiBiYXNlbGluZSAvIDMg
LSB3YXZ5U3Ryb2tlUGFyYW1ldGVycy5jb250cm9sUG9pbnREaXN0YW5jZSAtIHN0cm9rZVRoaWNr
bmVzcykpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChv
dmVyZmxvd1Jlc3VsdC5ib3R0b20sIDIgKiBiYXNlbGluZSAvIDMgKyBzdHJva2VUaGlja25lc3Mg
LSBoZWlnaHQpOwogICAgICAgICAgICAgZXh0ZW5kSW50VG9GbG9hdChvdmVyZmxvd1Jlc3VsdC50
b3AsIC0oMiAqIGJhc2VsaW5lIC8gMykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvSW5saW5lVGV4dEJveFN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0
Qm94U3R5bGUuaAppbmRleCBhODUyNWE0NjliZjczYTJkZjY1ZDNhNjhmMDg1N2FjNmIzZTI3ZDcw
Li5jYjA2ZmQxMDhhM2YzZWNjNGYxNGY3MGVkYzM0Mzk4MzBkYzZjZDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuaApAQCAtNDQsOCArNDQsMTkgQEAgaW5saW5l
IGZsb2F0IHdhdnlPZmZzZXRGcm9tRGVjb3JhdGlvbigpCiAgICAgcmV0dXJuIDE7CiB9CiAKK3N0
cnVjdCBXYXZ5U3Ryb2tlUGFyYW1ldGVycyB7CisgICAgLy8gRGlzdGFuY2UgYmV0d2VlbiBkZWNv
cmF0aW9uJ3MgYXhpcyBhbmQgQmV6aWVyIGN1cnZlJ3MgY29udHJvbCBwb2ludHMuCisgICAgLy8g
VGhlIGhlaWdodCBvZiB0aGUgY3VydmUgaXMgYmFzZWQgb24gdGhpcyBkaXN0YW5jZS4gSW5jcmVh
c2VzIHRoZSBjdXJ2ZSdzIGhlaWdodAorICAgIC8vIGFzIGZvbnRTaXplIGluY3JlYXNlcyB0byBt
YWtlIHRoZSBjdXJ2ZSBsb29rIGJldHRlci4KKyAgICBmbG9hdCBjb250cm9sUG9pbnREaXN0YW5j
ZSB7IDAgfTsKKworICAgIC8vIEluY3JlbWVudCB1c2VkIHRvIGZvcm0gdGhlIGRpYW1vbmQgc2hh
cGUgYmV0d2VlbiBzdGFydCBwb2ludCAocDEpLCBjb250cm9sCisgICAgLy8gcG9pbnRzIGFuZCBl
bmQgcG9pbnQgKHAyKSBhbG9uZyB0aGUgYXhpcyBvZiB0aGUgZGVjb3JhdGlvbi4gVGhlIGN1cnZl
IGdldHMKKyAgICAvLyB3aWRlciBhcyBmb250IHNpemUgaW5jcmVhc2VzLgorICAgIGZsb2F0IHN0
ZXAgeyAwIH07Cit9OworV2F2eVN0cm9rZVBhcmFtZXRlcnMgZ2V0V2F2eVN0cm9rZVBhcmFtZXRl
cnMoZmxvYXQgZm9udFNpemUpOwogR2x5cGhPdmVyZmxvdyB2aXN1YWxPdmVyZmxvd0ZvckRlY29y
YXRpb25zKGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IElubGluZVRleHRCb3gq
KTsKLXZvaWQgZ2V0V2F2eVN0cm9rZVBhcmFtZXRlcnMoZmxvYXQgZm9udFNpemUsIGZsb2F0JiBj
b250cm9sUG9pbnREaXN0YW5jZSwgZmxvYXQmIHN0ZXApOwogaW50IGNvbXB1dGVVbmRlcmxpbmVP
ZmZzZXQoVGV4dFVuZGVybGluZVBvc2l0aW9uLCBjb25zdCBGb250TWV0cmljcyYsIGNvbnN0IElu
bGluZVRleHRCb3gqLCBpbnQgdGV4dERlY29yYXRpb25UaGlja25lc3MpOwogICAgIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>