<?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>187765</bug_id>
          
          <creation_ts>2018-07-18 09:52:43 -0700</creation_ts>
          <short_desc>Allow icon, widget, scrollbar and theme to be drawn through DisplayList</short_desc>
          <delta_ts>2018-08-06 16:35:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>187002</dependson>
          <blocked>187795</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1443034</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 09:52:43 -0700</bug_when>
    <thetext>Drawing these items should go through GraphicsContext which will create special DisplayListItems for drawing them. These DisplayListItems will store all the parameters to be used when replaying the DisplayList back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443043</commentid>
    <comment_count>1</comment_count>
      <attachid>345256</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 10:29:09 -0700</bug_when>
    <thetext>Created attachment 345256
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443058</commentid>
    <comment_count>2</comment_count>
      <attachid>345259</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 11:06:21 -0700</bug_when>
    <thetext>Created attachment 345259
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443110</commentid>
    <comment_count>3</comment_count>
      <attachid>345268</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 12:04:48 -0700</bug_when>
    <thetext>Created attachment 345268
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443115</commentid>
    <comment_count>4</comment_count>
      <attachid>345270</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 12:35:17 -0700</bug_when>
    <thetext>Created attachment 345270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443150</commentid>
    <comment_count>5</comment_count>
      <attachid>345280</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 13:59:58 -0700</bug_when>
    <thetext>Created attachment 345280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443162</commentid>
    <comment_count>6</comment_count>
      <attachid>345284</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 14:25:29 -0700</bug_when>
    <thetext>Created attachment 345284
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443233</commentid>
    <comment_count>7</comment_count>
      <attachid>345307</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-07-18 17:03:56 -0700</bug_when>
    <thetext>Created attachment 345307
Patch for Review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1448280</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-06 16:35:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/42986479&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345256</attachid>
            <date>2018-07-18 10:29:09 -0700</date>
            <delta_ts>2018-07-18 11:06:21 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>187765.patch</filename>
            <type>text/plain</type>
            <size>206577</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxZGU3MDU0ZGExNS4uZDMyNWFmMjdhZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAxOC0wNy0xNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIFRlbXBsYXRpemUgRGlzcGxheUxpc3RJdGVtcyBhbmQgdXNlIHN0ZDo6dHVwbGUg
dG8gc3RvcmUgdGhlIGFyZ3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg3MDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmViYXNlbGluZSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAg
ICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMt
d2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6
CisKIDIwMTgtMDctMTcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5za2lwIExheW91dFRlc3QgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLWRpc3BsYXkvZGlzcGxheS1jb250ZW50cy1maXJzdC1sZXR0ZXItMDAyLmh0bWwuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlz
dC1leHBlY3RlZC50eHQKaW5kZXggYTg4M2U2ODUyZTEuLjdjN2E4OTRkZWIxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0CkBAIC0xLDEzICsxLDE1IEBACiAgCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAo
Y2hhbmdlLWZsYWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAjQzgwMDAwKSkpCiAoZmlsbC1yZWN0
CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNp
emUgNTV4NTApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29s
b3IgIzAwMDBDODdGKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDI1NikK
KyAgICAoZmlsbC1jb2xvciAjMDAwMEM4N0YpKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAo
MzAsMzApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNo
YWRvdy1leHBlY3RlZC50eHQKaW5kZXggZGU2OThhZTY0ZGIuLjk5ODdiYWUxYWE4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CkBAIC01LDE0ICs1LDE1IEBACiAoc2F2ZQogICAocmVzdG9yZS1p
bmRleCA0KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJs
dXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1m
bGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQog
KGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcp
CiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDg0OGIwNzc1NDVhLi4wNTRlMzRhNDUyOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0yLDE5ICsyLDIwIEBACiAodHJhbnNs
YXRlCiAgICh4IDAuMDApCiAgICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCisoY29uY2F0
ZW5hdGUtY3RtCiAgIChjdG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwt
MTguMzApfSkpCiAoc2F2ZQogICAocmVzdG9yZS1pbmRleCA1KSkKIChzZXQtc3RhdGUKLSAgKGNo
YW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0
IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisg
IChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1mbGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1
ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChl
eHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlv
biBzb3VyY2Utb3ZlcikKKyAgKGNvbXBvc2l0ZS1vcGVyYXRvciBzb3VyY2Utb3ZlcikKICAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSkKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYzVmNmFjNmIy
NWEuLjRhZjdlMTA5ZTkzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5
ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTYsMTMgKzYsMTQgQEAKICAgKGV4
dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDEw
NCkKICAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVy
KQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3Jt
YWwpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKLSAgKGZpbGwtY29sb3Ig
IzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQotICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKKyAg
KHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKKyAgICAoZmlsbC1jb2xv
ciAjMDAwMEZGKQorICAgIChzdHJva2Utc3R5bGUgMCkKKyAgICAoc2hvdWxkLWFudGlhbGlhcyAw
KSkpCiAoZHJhdy1yZWN0CiAgIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKICAgKHJlY3Qg
YXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmY3
ZWYyNzVmNjEuLjVlMWZjOTY4YjQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAt
Niw3ICs2LDcgQEAgcmVjb3JkZWQ6CiAgIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDAp
CiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAKIHJlcGxheWVkOiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdr
MS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXgg
MjEwZTQ0YjA4NzcuLjExZTdlMDFlOTg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtNSwxNSArNSwxNiBAQAogKHNhdmUKICAg
KHJlc3RvcmUtaW5kZXggNCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQot
ICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0y
MCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1zdWJwaXhlbC1x
dWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDUy
NTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9
MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApCisgICAgKHNo
b3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QK
ICAgKGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQgKDUwLDUwKSBz
aXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKKyAgKGNvbXBvc2l0ZS1vcGVyYXRvciBzb3VyY2Utb3ZlcikKICAgKGJsZW5k
LW1vZGUgbm9ybWFsKSkKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NGU5ODEyOWRjLi5hZmNj
OGM0YTk0MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwyMCArMiwyMSBAQAogKHRyYW5zbGF0ZQogICAoeCAw
LjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQorKGNvbmNhdGVuYXRlLWN0bQog
ICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQog
KHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3Mg
NTI1MzEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEw
IGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1z
dWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdl
LWZsYWdzIDUyNTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZz
ZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDAp
CisgICAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3Np
dGVkLXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAg
IChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21w
b3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJj
ZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2UxOWQyYTE5ZjguLmZmMjMzZGYyOTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDY5IEBACisy
MDE4LTA3LTE4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgaWNvbiwgd2lkZ2V0LCBzY3JvbGxiYXIgYW5kIHRoZW1lIHRvIGJlIGRy
YXduIHRocm91Z2ggRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4Nzc2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERyYXdpbmcgdGhlc2UgaXRlbXMgc2hvdWxkIGdvIHRocm91Z2ggR3Jh
cGhpY3NDb250ZXh0IHdoaWNoIHdpbGwgY3JlYXRlCisgICAgICAgIHNwZWNpYWwgRGlzcGxheUxp
c3RJdGVtcyBmb3IgZHJhd2luZyB0aGVtLiBUaGVzZSBEaXNwbGF5TGlzdEl0ZW1zIHdpbGwKKyAg
ICAgICAgc3RvcmUgYWxsIHRoZSBwYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2hlbiByZXBsYXlpbmcg
dGhlIERpc3BsYXlMaXN0IGJhY2suCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250cm9sU3RhdGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9UaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICog
cGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdJY29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SWNv
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RoZW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2lvcy9JY29uSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1QYWludCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJ
Y29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93cGUvSWNvbldQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBh
aW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6
V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9UaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50VG9nZ2xlQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50
U3RlcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGxhdGZvcm1QYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwp
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFp
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dwZS9XaWRnZXRXUEUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3Jt
UGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorCisyMDE4LTA3LTE3ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBEaXNw
bGF5TGlzdEl0ZW1zIGFuZCB1c2Ugc3RkOjp0dXBsZSB0byBzdG9yZSB0aGUgYXJndW1lbnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcwMDIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNwbGF5TGlz
dEl0ZW1zIGFyZSBzaW1wbGUgb2JqZWN0cyB3aGljaCByZXByZXNlbnQgZ3JhcGhpY3MgY29tbWFu
ZHMgYW5kCisgICAgICAgIHRoZWlyIGFyZ3VtZW50cy4gVGhlIGFyZ3VtZW50cyBhcmUgc3RvcmVk
IHdoaWxlIHJlY29yZGluZyB0aGUgRGlzcGxheUxpc3QgCisgICAgICAgIGFuZCB1c2VkIHdoZW4g
cmVwbGF5aW5nIGl0IGJhY2suIEluIGZhY3QsIHdlIGRvIG5vdCBjYXJlIG11Y2ggYWJvdXQga25v
d2luZworICAgICAgICB0aGVzZSBhcmd1bWVudHMgZXhwZWN0IHdoZW4gZGVidWdnaW5nIHRoZSBE
aXNwbGF5TGlzdC4gU28gYSBtZWNoYW5pY2FsIHdheQorICAgICAgICB0byBzdG9yZSB0aGUgYXJn
dW1lbnRzIGFuZCBwYXNzaW5nIHRoZW0gdG8gR3JhcGhpY3NDb250ZXh0IHNob3VsZCBiZSBzdWZm
aWNpZW50LgorICAgICAgICBUaGlzIHdpbGwgbWFrZSBhZGRpbmcgYSBuZXcgRGlzcGxheUxpc3RJ
dGVtIGVhc2llciBhbmQgaW4gbWFrZXMgdGhlIGNvZGUKKyAgICAgICAgYSBsb3Qgc2hvcnRlci4K
KworICAgICAgICBUaGlzIHBhdGNoIHRlbXBsYXRpemVzIHRoZSBEaXNwbGF5TGlzdEl0ZW1zIGNs
YXNzZXMgYW5kIHVzZXMgc3RkOjp0dXBsZSB0bworICAgICAgICBzdG9yZSB0aGUgYXJndW1lbnRz
LiBUaGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCAK
KyAgICAgICAgdG8gdGhlIHRlbXBsYXRlIGFsb25nIHdpdGggdGhlIHR5cGVzIG9mIHRoZSBzdGQ6
OnR1cGxlIGl0ZW1zLiBUaGUgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5IGlzIGEgbGl0dGxlIGJp
dCBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lOgorCisgICAgICAgIC0tIEl0ZW06IFRo
aXMgaXMgdGhlIGJhc2UgY2xhc3MgYW5kIHRoaXMgaXMgd2hhdCBEaXNwbGF5TGlzdCBzdG9yZXMu
CisgICAgICAgIC0tIEdlb210cnlJdGVtOiBJdCBpcyBkZXJpdmVkIGZyb20gSXRlbSBhbmQgdGhl
IG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAgICAgIGl0IGFuZCBJdGVtIGlzIGl0IGtub3dz
IHRoZSBleHRlbnQgb2YgdGhlIEl0ZW0uCisgICAgICAgIC0tIEdyYXBoaWNzSXRlbTogSXQncyBh
IHRlbXBsYXRlIGNsYXNzIHdoaWNoIHRha2VzIGEgcG9pbnRlciB0byBhIEdyYXBoaWNzQ29udGV4
dAorICAgICAgICBmdW5jdGlvbiwgc2V0IG9mIGFyZ3VtZW50cycgdHlwZXMuIEl0cyBjb25zdHJ1
Y3RvciBzYXZlcyB0aGUgYXJndW1lbnRzIGluCisgICAgICAgIHN0ZDo6dHVwbGUuIEl0cyBhcHBs
eSBtZXRob2QgY2FsbHMgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiBieSBwYXNzaW5nCisg
ICAgICAgIHRoZSBhcmd1bWVudHMgaXQgc3RvcmVzLgorICAgICAgICAtLSBTZXR0aW5nSXRlbTog
SXQgaXMgZGVyaXZlZCBmcm9tIEl0ZW0gYW5kIEdyYXBoaWNzSXRlbS4KKyAgICAgICAgLS0gRHJh
d2luZ0l0ZW06IEl0IGlzIGRlcml2ZWQgZnJvbSBHZW9tdHJ5SXRlbSBhbmQgR3JhcGhpY3NJdGVt
LgorCisgICAgICAgIE5vdGVzIGFuZCBzb21lIGRyYXdiYWNrcyBvZiB0aGlzIHBhdGNoIGFyZToK
KyAgICAgICAgLS0gVGhlIERpc3BsYXlMaXN0IHJlcGxheWluZyBiYWNrIGZ1bmN0aW9uIHNob3Vs
ZCBiZSBtZXRob2RzIG9mIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgLS0gVGhlIG9wZXJhdG9y
IDw8IGhhcyB0byBiZSBkZWZpbmVkIGZvciBhbGwgdGhlIGFyZ3VtZW50cycgdHlwZXMuCisgICAg
ICAgIC0tIFdoZW4gYW4gYXJndW1lbnRzIGlzIGEgUmVmQ291bnRlZCBhbmQgdGhlIEdyYXBoaWNz
Q29udGV4IGZ1bmN0aW9uIHRha2VzCisgICAgICAgIGEgcmF3IHBvaW50ZXIgb3IgcmVmZXJlbmNl
IHRvIHRoZSBvYmplY3QgaXRzZWxmLCB0aGUgR3JhcGhpY3NJdGVtIGNhbiBzdG9yZQorICAgICAg
ICBhIFJlZiBvciBhIFJlZlB0ciB0byB0aGUgb2JqZWN0LiBUaGUgaW1wbGljaXQgY2FzdGluZyBv
ZiBSZWZQdHIgYW5kIFJlZgorICAgICAgICB3aWxsIGRvIHRoZSBtYWdpYyB3aGVuIHRoZSBhcmd1
bWVudHMgYXJlIHBhc3NlZCB0byBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmFwcGx5U3RhdGVDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNp
emVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
aXRlbXNEZXNjcmlwdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXRlbURl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06Om5hbWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmFyZ3VtZW50TmFtZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZGVzY3JpcHRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OnNp
emVJbkJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVy
YXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVz
dG9yZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlRyYW5zbGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3RhdGU6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1p
dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsZWFyU2hhZG93OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpE
cmF3R2x5cGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9j
YWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdJbWFnZTo6RHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3SW1hZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6
RHJhd05hdGl2ZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjphcHBseSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6
bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxp
cHNlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1BhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhD
b2xvcjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjphcHBseSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6bG9j
YWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmxvY2Fs
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VFbGxpcHNlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5j
eUxheWVyOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW06OmlzR2VvbWV0cnlJdGVtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZW9tZXRyeUl0
ZW06OnNldEV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0cnlJ
dGVtOjpleHRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21l
dHJ5SXRlbTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okdlb21ldHJ5SXRlbTo6R2VvbWV0cnlJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpHcmFwaGljc0l0ZW06OkdyYXBoaWNzSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVtOjphcmd1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVtOjphcHBseSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVtOjppdGVyYXJ0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0dGluZ0l0ZW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0dGluZ0l0ZW06OlNldHRpbmdJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OnJlc3RvcmVJbmRleCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6c2V0UmVzdG9yZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6c3ViR2x5cGhCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzU3RhdGVJdGVtIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjppc1N0YXRlSXRlbVR5cGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpz
ZXRFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdJdGVtOjpleHRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdJdGVtOjpleHRlbnRLbm93biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmxvY2FsQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OlNhdmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6UmVzdG9yZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6
eCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlOjp5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpU
cmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Um90YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJvdGF0ZTo6YW5nbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTY2FsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRl
OjpTZXRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUNhcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lQ2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6
ZGFzaE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9p
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1p
dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRN
aXRlckxpbWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Q2xlYXJTaGFk
b3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6cmVjdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xp
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0Ojpy
ZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0OjpDbGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXBPdXRUb1BhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpwYXRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6d2lu
ZFJ1bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBQYXRoOjpDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0dseXBoczo6YmxvY2tMb2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6c2V0QmxvY2tMb2NhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxBbmNo
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHM6OmFuY2hvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnbHlwaHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OnNvdXJjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpk
ZXN0aW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6c291cmNlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6
ZGVzdGluYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdUaWxlZEltYWdlOjp0aWxlU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OnNwYWNpbmcgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdl
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOjppbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OnNvdXJjZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6
OmRlc3RpbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpzb3VyY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVzdGluYXRp
b24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdQYXR0ZXJuOjppbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjp0aWxlUmVjdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm46OmRlc3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3UGF0dGVybjo6cGhhc2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpzcGFjaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6Om9wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OnJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0Ojpib3Jk
ZXJUaGlja25lc3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdSZWN0OjpEcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmU6OnBvaW50MSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OnBvaW50MiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ6OnNldEJsb2NrTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmJsb2NrTG9jYXRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmxvY2Fs
QW5jaG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZXNGb3JUZXh0Ojpwb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6d2lkdGhzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojppc1ByaW50
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TGluZXNGb3JUZXh0Ojpkb3VibGVMaW5lcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpwb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6d2lk
dGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpyZWN0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxs
aXBzZTo6RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6RHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpwYXRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUGF0aDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjb2xvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Bh
dGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpyZWN0cyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3Rz
Ojp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ZvY3VzUmluZ1JlY3RzOjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6Y29sb3IgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6
RHJhd0ZvY3VzUmluZ1JlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OkZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6cmVjdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoQ29sb3I6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29t
cG9zaXRlZFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29tcG9zaXRl
T3BlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxDb21wb3NpdGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVk
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6cm91bmRlZFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Ymxl
bmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpyb3VuZGVkSG9sZVJlY3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6cGF0aCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZp
bGxQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxs
aXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsRWxsaXBzZTo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmxpbmVXaWR0aCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVj
dDo6U3Ryb2tlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U3Ryb2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OnJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6
OlN0cm9rZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsZWFyUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBs
eVN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURl
dmljZVNjYWxlRmFjdG9yOjpzY2FsZUZhY3RvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXll
cjo6cmVwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNG
b3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisKIDIwMTgtMDctMTcgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViIEFuaW1hdGlvbnNdIEludGVycG9sYXRpb24g
YmV0d2VlbiBsZW5ndGhzIHdpdGggYW4gImF1dG8iIHZhbHVlIHNob3VsZCBiZSBkaXNjcmV0ZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oCmluZGV4IDFkY2U4Yjc1ODA3Li4y
OTNiNzE0YzliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0
YXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaApAQCAt
MTAzLDYgKzEwMywxMiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29udHJvbFN0YXRlcyYpCit7Cisg
ICAgLy8gRklYTUU6IGR1bXAgdGhlIENvbnRyb2xTdGF0ZXMgbWVtYmVycyB0byB0aGUgVGV4dFN0
cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcAppbmRleCBmOWUwNWY1NWY3NS4uZGUyOGYwMjc0ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcApAQCAtMTYzLDExICsxNjMsMTYgQEAgdm9pZCBT
Y3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgV2lkZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChjb250
ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZnJhbWVSZWN0KCkuaW50ZXJzZWN0cyhkYW1hZ2VS
ZWN0KSkKKyAgICBpZiAoIWZyYW1lUmVjdCgpLmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghdGhlbWUoKS5wYWludCgqdGhpcywgY29udGV4dCwgZGFt
YWdlUmVjdCkpCi0gICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Cisg
ICAgY29udGV4dC5kcmF3U2Nyb2xsYmFyKCp0aGlzLCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBT
Y3JvbGxiYXI6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghdGhlbWUoKS5wYWludCgqdGhpcywgY29udGV4dCwg
cmVjdCkpCisgICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQg
U2Nyb2xsYmFyOjphdXRvc2Nyb2xsVGltZXJGaXJlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oCmluZGV4IDYyZjUwNDRhODM5Li5jMGQ0MzBhZDNkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmgKQEAgLTg0LDYgKzg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJl
c3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKICAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFdpZGdldDo6U2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdp
bikgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmKTsKIAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5h
YmxlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwpAQCAtMTgyLDYgKzE4
MywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiB9OwogCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsYmFyJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUg
U2Nyb2xsYmFyIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQor
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dJ
REdFVChTY3JvbGxiYXIsIGlzU2Nyb2xsYmFyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAK
aW5kZXggYzBhZjE5MmIxZDEuLjY0YmI0Zjc4ZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUu
Y3BwCkBAIC01Nyw3ICs1NywxMiBAQCBib29sIFRoZW1lOjpjb250cm9sUmVxdWlyZXNQcmVXaGl0
ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBU
aGVtZTo6cGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgU2Nyb2xsVmlldyosIGZsb2F0LCBmbG9hdCwgYm9v
bCwgYm9vbCkKK3ZvaWQgVGhlbWU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpv
b21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVt
QXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBjb250ZXh0LmRyYXdU
aGVtZSgqdGhpcywgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxW
aWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJh
bmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Cit9CisKK3ZvaWQgVGhlbWU6OnBsYXRmb3JtUGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RoZW1lLmgKaW5kZXggZThjZWMzNWQ1OTEuLmQ2MzI1NGJjYWYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RoZW1lLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJUaGVtZVR5
cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNjgsNyArNjksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xS
ZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0OwogCiAgICAgLy8gTWV0aG9k
IGZvciBwYWludGluZyBhIGNvbnRyb2wuIFRoZSByZWN0IGlzIGluIHpvb21lZCBjb29yZGluYXRl
cy4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21G
YWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFu
Y2UpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRy
b2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IFNjcm9sbFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFj
dG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xQ
YXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6
b29tRmFjdG9yLCB2b2lkKiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNl
KTsKIAogICAgIC8vIFNvbWUgY29udHJvbHMgbWF5IHNwaWxsIG91dCBvZiB0aGVpciBjb250YWlu
ZXJzIChlLmcuLCB0aGUgY2hlY2sgb24gYW4gT1MgWCBjaGVja2JveCkuICBXaGVuIHRoZXNlIGNv
bnRyb2xzIHJlcGFpbnQsCiAgICAgLy8gdGhlIHRoZW1lIG5lZWRzIHRvIGNvbW11bmljYXRlIHRo
aXMgaW5mbGF0ZWQgcmVjdCB0byB0aGUgZW5naW5lIHNvIHRoYXQgaXQgY2FuIGludmFsaWRhdGUg
dGhlIHdob2xlIGNvbnRyb2wuCkBAIC04OCw1ICs5MCwxMSBAQCBwcml2YXRlOgogICAgIFRoZW1l
KGNvbnN0IFRoZW1lJikgPSBkZWxldGU7CiAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVGhlbWUm
KSA9IGRlbGV0ZTsKIH07CisgICAgCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgVGhlbWUmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBUaGVt
ZSBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lk
Z2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCBmMzFmMjQ1YTgw
Yi4uOTljZDgzYmZjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CkBAIC0xMTQsNiArMTE1LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgU2VjdXJpdHlPcmln
aW5QYWludFBvbGljeSB7IEFueU9yaWdpbiwgQWNjZXNzaWJsZU9yaWdpbk9ubHkgfTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JiwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFp
bnRQb2xpY3k6OkFueU9yaWdpbik7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGludmFsaWRhdGUoKSB7IGludmFsaWRh
dGVSZWN0KGJvdW5kc1JlY3QoKSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYpID0gMDsKIApAQCAtMjQ0LDYgKzI0NiwxMiBAQCBpbmxpbmUgdm9pZCBX
aWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKIAogI2VuZGlmCiAKK2lubGluZSBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBXaWRnZXQmKQoreworICAgIC8v
IEZJWE1FOiBkdW1wIHRoZSBXaWRnZXQgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICBy
ZXR1cm4gdHM7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNkZWZpbmUgU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSURHRVQoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA1MmVkYmFlOTQ1My4u
NzE4NTk4NmIyMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTM3MCw2ICszNzEsMTIgQEAgQUxXQVlTX0lOTElORSBmbG9h
dCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3aWR0
aDsKIH0KIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mIHRzLCBjb25zdCBGb250JikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgRm9udCBtZW1i
ZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRm9udF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAppbmRleCAxNzUyZGNiZDA4ZS4uNDVmMTdmYWNkN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8Y2xpbWl0cz4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0dlb21ldHJ5Lmg+CkBA
IC0yMjgsNSArMjI5LDExIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2lubGluZSBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgR2x5cGhCdWZm
ZXImKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBHbHlwaEJ1ZmZlciBtZW1iZXJzIHRvIHRo
ZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKwogfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAppbmRleCBjN2ZjNGM2ZTM2OS4uN2Jm
YmZmYTQ3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQu
aApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250
ZXh0KiBDR0NvbnRleHRSZWY7CkBAIC0xNTYsNCArMTU3LDEwIEBAIHByaXZhdGU6CiAgICAgUGxh
dGZvcm1HcmFkaWVudCBtX2dyYWRpZW50OwogfTsKIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFkaWVudCYpCit7CisgICAg
Ly8gRklYTUU6IGR1bXAgdGhlIEdyYWRpZW50IG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisg
ICAgcmV0dXJuIHRzOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCBjOTczMWFhNTE5NC4uY2M3MTMzYzY3
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcApAQCAtMzEsMTAgKzMxLDE0IEBACiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVk
UmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
SW1wbC5oIgorI2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUaGVtZS5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtODQzLDYgKzg0Nyw1MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCiAgICAgc2V0
UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SWNvbihJY29uJiBpY29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1wbCkK
KyAgICAgICAgbV9pbXBsLT5kcmF3SWNvbihpY29uLCByZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IGljb24ucGxhdGZvcm1QYWludCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3V2lkZ2V0KFdpZGdldCYgd2lkZ2V0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRyYXdXaWRnZXQod2lkZ2V0LCByZWN0KTsKKyAg
ICBlbHNlCisgICAgICAgIHdpZGdldC5wbGF0Zm9ybVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbC0+ZHJh
d1Njcm9sbGJhcihzY3JvbGxiYXIsIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsYmFy
LnBsYXRmb3JtUGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RoZW1lKFRoZW1lJiB0aGVtZSwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYg
c3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZv
aWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRyYXdUaGVtZSh0aGVtZSwgcGFydCwgc3RhdGVz
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3Rvciwg
cGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7
CisgICAgZWxzZQorICAgICAgICB0aGVtZS5wbGF0Zm9ybVBhaW50KCp0aGlzLCBwYXJ0LCBzdGF0
ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9y
LCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNl
KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CkBAIC0xMTI5LDYgKzExNzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgIHNldFBsYXRmb3JtU2hvdWxk
QW50aWFsaWFzKHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRT
bW9vdGhGb250cyhzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CiB9CisgICAgCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGUpCit7CisgICAgc3RhdGUuYXBwbHkoKnRoaXMpOworfQogCiBmbG9hdCBHcmFw
aGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0
cm9rZVdpZHRoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBjY2MyZDAzZTdlYS4uZmVhOWE5NjI3NTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29udHJv
bFN0YXRlcy5oIgogI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCkBAIC0zNCw2ICszNSw3IEBACiAjaW5jbHVkZSAi
SW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApAQCAtODAsMTYgKzgyLDIwIEBAIGNvbnN0
IGludCBjTWlzc3BlbGxpbmdMaW5lUGF0dGVybkdhcFdpZHRoID0gMTsKIGNsYXNzIEFmZmluZVRy
YW5zZm9ybTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbDsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKK2NsYXNzIEljb247CiBjbGFzcyBJbWFnZUJ1
ZmZlcjsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBSb3VuZGVkUmVjdDsKLWNsYXNzIFVSTDsKLWNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgUGF0aDsKK2NsYXNzIFJvdW5kZWRSZWN0Owor
Y2xhc3MgU2Nyb2xsYmFyOwogY2xhc3MgVGV4dFJ1bjsKK2NsYXNzIFRoZW1lOwogY2xhc3MgVHJh
bnNmb3JtYXRpb25NYXRyaXg7CitjbGFzcyBVUkw7CitjbGFzcyBXaWRnZXQ7CiAKIGVudW0gVGV4
dERyYXdpbmdNb2RlIHsKICAgICBUZXh0TW9kZUZpbGwgPSAxIDw8IDAsCkBAIC0xMTYsNiArMTIy
LDEyIEBAIGVudW0gY2xhc3MgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgOiB1aW50OF90IHsKICAg
ICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAogICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcwog
fTsKKyAgICAKK2lubGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKQoreworICAgIC8vIEZJWE1F
OiBkdW1wIHRoZSBJbWFnZVBhaW50aW5nT3B0aW9ucyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICBy
ZXR1cm4gdHM7Cit9CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiBjbGFzcyBSZWNvcmRlcjsK
QEAgLTIzMyw2ICsyNDUsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zIHsKICAgICBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gbV9vcmllbnRhdGlvbkRlc2NyaXB0aW9uOwogICAg
IEludGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJwb2xhdGlvblF1YWxpdHk7CiB9OworICAgIAor
aW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIElt
YWdlUGFpbnRpbmdPcHRpb25zIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30K
IAogc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKQEAgLTI1NSw3ICsyNzMsNiBAQCBzdHJ1Y3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBo
aWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNDEyLDYg
KzQyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpOwogCiAgICAgdm9pZCBhcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7
CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJik7CiAKICAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CiAgICAgICAgIFJvdW5kQWxsU2lkZXMs
CkBAIC00NDgsNiArNDY2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRy
YXcsIGNvbnN0IENvbG9yJik7CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0ljb24oSWNvbiYsIGNv
bnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdm9pZCBkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIGRyYXdUaGVtZShUaGVtZSYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVz
JiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiwg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKwogICAgIHZvaWQgc2V0
TGluZUNhcChMaW5lQ2FwKTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0IGRhc2hPZmZzZXQpOwogICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
SW1wbC5oCmluZGV4IDZiY2Y3NjhhZGZkLi44NDY5MmM0ZDczMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaApAQCAt
NzgsMTMgKzc4LDIwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9h
dCBzdHJva2VUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRo
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisjaWYgVVNFKENHKQogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOworI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJ
bnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUaGVtZShUaGVtZSYs
IENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSWNvbi5oCmluZGV4IDg2MGVhNjk2ZmViLi5lMjVjYTg4ZWM4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxMCArMjEsMTIgQEAKICNpZm5kZWYg
SWNvbl9oCiAjZGVmaW5lIEljb25faAogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlLmgiCkBAIC00OCw3ICs1MCwxMiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB+SWNvbigpOwogCi0gICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgY29udGV4dC5kcmF3SWNvbigq
dGhpcywgcmVjdCk7CisgICAgfQorCisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IHN0YXRpYyBSZWZQdHI8SWNvbj4gY3JlYXRlKEhJQ09OIGhJY29uKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgSWNvbihoSWNvbikpOyB9CkBAIC03OSw2ICs4NiwxMiBAQCBwcml2YXRlOgogICAgIEdk
a1BpeGJ1ZiogbV9pY29uOwogI2VuZGlmCiB9OworICAgIAoraW5saW5lIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEljb24mKQoreworICAgIC8vIEZJWE1FOiBk
dW1wIHRoZSBJY29uIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOwor
fQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCA4Y2ZiMWU5MjI1Ny4u
YzE2NmYxYmI2ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTMyMCw3ICsz
MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIG9yaWdpbiwgZmxvYXQgd2lkdGgsIGJvbwogICAgIGRyYXdMaW5lc0ZvclRleHQob3Jp
Z2luLCBEYXNoQXJyYXkgeyB3aWR0aCwgMCB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5l
c0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9r
ZVRoaWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHJva2VTdHlsZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmlu
ZGV4IGUwNmU0MDMxZDg3Li4yNTUwODhkYmRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCkBAIC0yOTQsOSArMjk0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2kK
ICAgICBDYWlybzo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBz
dHJva2VTdHlsZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBV
TlVTRURfUEFSQU0oc3Ryb2tlU3R5bGUpOwogICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29u
dGV4dCwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQpAQCAtMzEyLDEwICszMTIsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKaW5kZXggOTk3Y2JkZGE1MWMu
Ljk2MWE5Njk3Yzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtNzks
MTAgKzc5LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwogICAgIHZv
aWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGQyOTUwNzE3OGNiLi5kNWIyMjA5NmZmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcApAQCAtMTU4Nyw3ICsxNTg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hB
cnJheSYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVz
LCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChw
b2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggYTQwZjg5
Zjc2ODguLmE2YmUxZGMyZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTExNCw4
ICsxMTQsOCBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAog
c2l6ZV90IERpc3BsYXlMaXN0OjpzaXplSW5CeXRlcygpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHJl
c3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiByZWYgOiBtX2xpc3QpCi0gICAgICAgIHJlc3VsdCAr
PSBJdGVtOjpzaXplSW5CeXRlcyhyZWYpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkK
KyAgICAgICAgcmVzdWx0ICs9IGl0ZW0tPnNpemVJbkJ5dGVzKCk7CiAKICAgICByZXR1cm4gcmVz
dWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCBkNDQzN2UzZDQxYi4uZjg2MmI4Nzhi
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC00MSw4ICs0MSw2IEBAIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgSXRlbTsKLQog
ZW51bSBBc1RleHRGbGFnIHsKICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MCwKICAgICBJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9ucyAgICAgID0gMSA8PCAwLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDFmY2VlOGIzODQzLi42YzQ3NmU5Y2My
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMTIxICsyNiw5MCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKIAot
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi0vLyBT
aG91bGQgbWF0Y2ggUmVuZGVyVGhlbWU6OnBsYXRmb3JtRm9jdXNSaW5nV2lkdGgoKQotc3RhdGlj
IGNvbnN0IGZsb2F0IHBsYXRmb3JtRm9jdXNSaW5nV2lkdGggPSAzOwotCi0jaWYgIWRlZmluZWQo
TkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECi1XVEY6OkNTdHJpbmcgSXRlbTo6ZGVzY3JpcHRpb24o
KSBjb25zdAotewotICAgIFRleHRTdHJlYW0gdHM7Ci0gICAgdHMgPDwgKnRoaXM7Ci0gICAgcmV0
dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Ci19Ci0jZW5kaWYKLQotc2l6ZV90IEl0ZW06OnNpemVJ
bkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewot
ICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
U2F2ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRy
YW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Um90YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRl
bmF0ZUNUTT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lQ2Fw
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lSm9p
bj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFy
U2hhZG93PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PERyYXdHbHlwaHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJ
bWFnZT4oaXRlbSkpOwotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
TmF0aXZlSW1hZ2U+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0
ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd1JlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxp
cHNlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxG
aWxsUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3VuZGVk
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsRWxsaXBzZT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotI2lmIFVTRShDRykK
LSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxB
cHBseUZpbGxQYXR0ZXJuPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Cit1c2luZyBJ
dGVtRGVzY3JpcHRvciA9IHN0cnVjdCB7CisgICAgU3RyaW5nIG5hbWU7CisgICAgVmVjdG9yPFN0
cmluZz4gYXJndW1lbnRzTmFtZXM7Cit9OworCitzdGF0aWMgY29uc3QgVmVjdG9yPEl0ZW1EZXNj
cmlwdG9yPiYgaXRlbXNEZXNjcmlwdG9ycygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4+IGl0ZW1zRGVzY3JpcHRvcnMgPSBWZWN0b3I8SXRlbURl
c2NyaXB0b3I+KHsKKyAgICAgICAgeyAic2F2ZSIsIHsgfSB9LAorICAgICAgICB7ICJyZXN0b3Jl
IiwgeyB9IH0sCisgICAgICAgIHsgInNldC1zdGF0ZSIsIHsgInN0YXRlLWNoYW5nZSIgfSB9LAor
ICAgICAgICB7ICJ0cmFuc2xhdGUiLCB7ICJ4IiwgInkiIH0gfSwKKyAgICAgICAgeyAicm90YXRl
IiwgeyAiYW5nbGUiIH0gfSwKKyAgICAgICAgeyAic2NhbGUiLCB7ICJzaXplIiB9IH0sCisgICAg
ICAgIHsgImNvbmNhdGVuYXRlLWN0bSIsIHsgImN0bSIgfSB9LAorICAgICAgICB7ICJzZXQtbGlu
ZS1jYXAiLCB7ICJsaW5lLWNhcCIgfSB9LAorICAgICAgICB7ICJzZXQtbGluZS1kYXNoIiwgeyAi
ZGFzaC1hcnJheSIsICJkYXNoLW9mZnNldCIgfSB9LAorICAgICAgICB7ICJzZXQtbGluZS1qb2lu
IiwgeyAibGluZS1qb2luIiB9IH0sCisgICAgICAgIHsgInNldC1taXRlci1saW1pdCIsIHsgIm1p
dHJlLWxpbWl0IiB9IH0sCisgICAgICAgIHsgImNsZWFyLXNoYWRvdyIsIHsgfSB9LAorICAgICAg
ICB7ICJjbGlwIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJjbGlwLW91dCIsIHsgInJlY3Qi
IH0gfSwKKyAgICAgICAgeyAiY2xpcC1vdXQtdG8tcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAg
ICAgeyAiY2xpcC1wYXRoIiwgeyAicGF0aCIsICJ3aW5kLXJ1bGUiIH0gfSwKKyAgICAgICAgeyAi
YXBwbHktc3Ryb2tlLXBhdHRlcm4iLCB7IH0gfSwKKyAgICAgICAgeyAiYXBwbHktZmlsbC1wYXR0
ZXJuIiwgeyB9IH0sCisgICAgICAgIHsgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0b3IiLCB7ICJz
Y2FsZS1mYWN0b3IiIH0gfSwKKworICAgICAgICB7ICJiZWdpbi10cmFuc3BhcmVuY3ktbGF5ZXIi
LCB7ICJvcGFjaXR5IiB9IH0sCisgICAgICAgIHsgImVuZC10cmFuc3BhcmVuY3ktbGF5ZXIiLCB7
IH0gfSwKKyAgICAgICAgeyAiZHJhdy1nbHlwaHMiLCB7ICJmb250IiwgImdseXBoLWJ1ZmZlciIs
ICJmcm9tIiwgIm51bS1nbHlwaHMiLCAicG9pbnQiLCAiZm9udC1zbW9vdGhpbmciIH0gfSwKKyAg
ICAgICAgeyAiZHJhdy1pbWFnZSIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcmVj
dCIsICJpbWFnZS1wYWludGluZy1vcHRpb25zIiB9IH0sCisgICAgICAgIHsgImRyYXctdGlsZWQt
aW1hZ2UiLCB7ICJpbWFnZSIsICJkZXN0LXJlY3QiLCAic291cmNlLXBvaW50IiwgInRpbGUtc2l6
ZSIsICJzcGFjaW5nIiwgImltYWdlLXBhaW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAi
ZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiLCB7ICJpbWFnZSIsICJkZXN0LXJlY3QiLCAic291cmNl
LXJlY3QiLCAidGlsZS1zY2FsZWZhY3RvciIsICJoLXJ1bGUiLCAidi1ydWxlIiwgImltYWdlLXBh
aW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1uYXRpdmUtaW1hZ2UiLCB7ICJp
bWFnZSIsICJzZWxmLXNpemUiLCAiZGVzdC1yZWN0IiwgInNvdXJjZS1yZWN0IiwgImNvbXBvc2l0
ZS1vcGVyYXRvciIsICJibGVuZC1tb2RlIiwgImltYWdlLW9yaWVudGF0aW9uIiB9IH0sCisgICAg
ICAgIHsgImRyYXctcGF0dGVybiIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJ0aWxlLXJlY3Qi
LCAicGF0dGVybi10cmFuc2Zvcm0iLCAicGhhc2UiLCAic3BhY2luZyIsICJjb21wb3NpdGUtb3Bl
cmF0b3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAgICB7ICJkcmF3LXJlY3QiLCB7ICJyZWN0
IiwgImJvcmRlci10aGlja25lc3MiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1saW5lIiwgeyAicG9p
bnQtMSIsICJwb2ludC0yIiB9IH0sCisgICAgICAgIHsgImRyYXctbGluZXMtZm9yLXRleHQiLCB7
ICJwb2ludCIsICJ3aWR0aHMiLCAiaXMtcHJpbnRpbmciLCAiZG91YmxlLWxpbmVzIiwgInN0cm9r
ZS1zdHlsZSIgfSB9LAorICAgICAgICB7ICJkcmF3LWxpbmUtZm9yLWRvY3VtZW50LW1hcmtlciIs
IHsgInBvaW50IiwgIndpZHRoIiwgImRvY3VtZW50LW1hcmtlci1saW5lLXN0eWxlIiB9IH0sCisg
ICAgICAgIHsgImRyYXctZWxsaXBzZSIsIHsgInJlY3QiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1w
YXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7ICJkcmF3LWZvY3VzLXJpbmctcGF0aCIsIHsg
InBhdGgiLCAid2lkdGgiLCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsgImRyYXct
Zm9jdXMtcmluZy1yZWN0cyIsIHsgInJlY3RzIiwgIndpZHRoIiwgIm9mZnNldCIsICJjb2xvciIg
fSB9LAorICAgICAgICB7ICJkcmF3LWljb24iLCB7ICJpY29uIiwgInJlY3QiIH0gfSwKKyAgICAg
ICAgeyAiZHJhdy13aWRnZXQiLCB7ICJ3aWRnZXQiLCAicmVjdCJ9IH0sCisgICAgICAgIHsgImRy
YXctc2Nyb2xsYmFyIiwgeyAic2Nyb2xsYmFyIiwgInJlY3QiIH0gfSwKKyAgICAgICAgeyAiZHJh
dy10aGVtZSIsIHsgInRoZW1lIiwgImNvbnRyb2wtcGFydCIsICJjb250cm9sLXN0YXRlcyIsICJ6
b29tZWQtcmVjdCIsICJ6b29tLWZhY3RvciIsICJzY3JvbGwtdmlldyIsICJkZXZpY2Utc2NhbGUt
ZmFjdG9yIiwgInBhZ2Utc2NhbGUtZmFjdG9yIiwgInVzZS1zeXN0ZW0tYXBwZWFyYW5jZSIsICJ1
c2UtZGFyay1hcHBlYXJhbmNlIiB9IH0sCisgICAgICAgIHsgImZpbGwtcmVjdCIsIHsgInJlY3Qi
IH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtY29sb3IiLCB7ICJyZWN0IiwgImNvbG9y
IiB9IH0sCisgICAgICAgIHsgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IiwgeyAicmVjdCIsICJn
cmFkaWVudCIgfSB9LAorICAgICAgICB7ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCIsIHsgInJlY3Qi
LCAiY29sb3IiLCAiY29tcG9zaXRlLW9wZXJhdG9yIiwgImJsZW5kLW1vZGUiIH0gfSwKKyAgICAg
ICAgeyAiZmlsbC1yb3VuZGVkLXJlY3QiLCB7ICJyZWN0IiwgImNvbG9yIiwgImJsZW5kLW1vZGUi
IH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIiwgeyAicmVjdCIs
ICJyb3VuZGVkLWhvbGUtcmVjdCIsICJjb2xvciIgfSB9LAorICAgICAgICB7ICJmaWxsLXBhdGgi
LCB7ICJwYXRoIiB9IH0sCisgICAgICAgIHsgImZpbGwtZWxsaXBzZSIsIHsgInJlY3QiIH0gfSwK
KyAgICAgICAgeyAic3Ryb2tlLXJlY3QiLCB7ICJyZWN0IiwgImxpbmUtd2lkdGgiIH0gfSwKKyAg
ICAgICAgeyAic3Ryb2tlLXBhdGgiLCB7ICJwYXRoIiB9IH0sCisgICAgICAgIHsgInN0cm9rZS1l
bGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJjbGVhci1yZWN0IiwgeyAicmVjdCIg
fSB9CisgICAgfSk7CisKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihJdGVtVHlwZTo6
TWF4KSA9PSBpdGVtc0Rlc2NyaXB0b3JzLmdldCgpLnNpemUoKSk7CisgICAgcmV0dXJuIGl0ZW1z
RGVzY3JpcHRvcnM7Cit9CisKK3N0YXRpYyBjb25zdCBJdGVtRGVzY3JpcHRvciYgaXRlbURlc2Ny
aXB0b3IoSXRlbVR5cGUgaXRlbVR5cGUpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVf
dD4oaXRlbVR5cGUpIDwgaXRlbXNEZXNjcmlwdG9ycygpLnNpemUoKSk7CisgICAgcmV0dXJuIGl0
ZW1zRGVzY3JpcHRvcnMoKVtzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW1UeXBlKV07CiB9Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3aW5n
SXRlbSYgaXRlbSkKLXsKLSAgICB0cy5zdGFydEdyb3VwKCk7Ci0gICAgdHMgPDwgImV4dGVudCAi
OwotICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCi0gICAgICAgIHRzIDw8IGl0ZW0uZXh0ZW50
KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAidW5rbm93biI7CiAgICAgCi0gICAgdHMuZW5k
R3JvdXAoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2F2ZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2F2ZSgpOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2F2ZSYgaXRl
bSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlc3RvcmUtaW5kZXgiLCBpdGVtLnJlc3RvcmVJ
bmRleCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQot
Ci12b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKLXsK
LSAgICB0cy5kdW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJ5IiwgaXRlbS55KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0ZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucm90YXRl
KG1fYW5nbGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5nbGUi
LCBpdGVtLmFuZ2xlKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zY2FsZSht
X3NpemUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2NhbGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXplIiwgaXRl
bS5hbW91bnQoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLUNvbmNhdGVuYXRlQ1RNOjpDb25j
YXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQot
ewotfQotCi12b2lkIENvbmNhdGVuYXRlQ1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29uY2F0
ZW5hdGVDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjdG0iLCBpdGVtLnRyYW5z
Zm9ybSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIG1fc3RhdGUuYXBwbHkoY29udGV4
dCk7Ci19Ci0KLXZvaWQgU2V0U3RhdGU6OmFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKLXsKLSAgICBtX3N0YXRlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBz
dGF0ZSkKLXsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZSgpOwotICAgIHJldHVybiB0czsKLX0KLQot
dm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2Fw
KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5lQ2FwLmxpbmVDYXAoKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hB
cnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJyYXkoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hPZmZzZXQoKSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2luKTsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtam9p
biIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRN
aXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAg
Y29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0JiBtaXRl
ckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGltaXQiLCBtaXRlckxpbWl0
Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsZWFyU2hhZG93Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwotfQotCi12b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0pCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBDbGlwT3V0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgY29udGV4dC5jbGlwT3V0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0JiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgQ2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0aCYgaXRl
bSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi12b2lkIENsaXBQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGlwUGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q2xpcFBhdGgmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRo
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2luZC1ydWxlIiwgaXRlbS53aW5kUnVsZSgpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLURyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQot
ICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQotICAgICwgbV9ibG9ja0xvY2F0
aW9uKGJsb2NrTG9jYXRpb24pCi0gICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQotICAg
ICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUpCi17Ci0gICAgbV9nbHlwaHMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7Ci0gICAgbV9hZHZhbmNlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGNvdW50KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewotICAgICAgICBtX2dseXBocy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhzW2ldKTsKLSAgICAgICAg
bV9hZHZhbmNlcy51bmNoZWNrZWRBcHBlbmQoYWR2YW5jZXNbaV0pOwotICAgIH0KLSAgICBjb21w
dXRlQm91bmRzKCk7Ci19Ci0KLWlubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0
ZUdseXBoQnVmZmVyKCkgY29uc3QKLXsKLSAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewotICAgICAgICByZXN1
bHQuYWRkKG1fZ2x5cGhzW2ldLCAmbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ldKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBEcmF3R2x5cGhzOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3R2x5cGhzKG1fZm9u
dCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAwLCBtX2dseXBocy5zaXplKCksIGFuY2hvclBvaW50
KCksIG1fc21vb3RoaW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoczo6Y29tcHV0ZUJvdW5k
cygpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgY29kZSBkb2Vzbid0IGFjdHVhbGx5IHRha2UgdGhl
IGV4dGVudHMgb2YgdGhlIGdseXBocyBpbnRvIGNvbnNpZGVyYXRpb24uIEl0IGFzc3VtZXMgdGhh
dAotICAgIC8vIHRoZSBnbHlwaCBsaWVzIGVudGlyZWx5IHdpdGhpbiBpdHMgWyhhc2NlbnQgKyBk
ZXNjZW50KSwgYWR2YW5jZV0gcmVjdC4KLSAgICBmbG9hdCBhc2NlbnQgPSBtX2ZvbnQtPmZvbnRN
ZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKLSAgICBmbG9hdCBkZXNjZW50ID0gbV9mb250LT5mb250
TWV0cmljcygpLmZsb2F0RGVzY2VudCgpOwotICAgIEZsb2F0UG9pbnQgY3VycmVudCA9IHRvRmxv
YXRQb2ludChsb2NhbEFuY2hvcigpKTsKLSAgICBzaXplX3QgbnVtR2x5cGhzID0gbV9nbHlwaHMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAg
ICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UgPSBtX2FkdmFuY2VzW2ldOwotICAgICAg
ICBGbG9hdFJlY3QgZ2x5cGhSZWN0ID0gRmxvYXRSZWN0KGN1cnJlbnQueCgpLCBjdXJyZW50Lnko
KSAtIGFzY2VudCwgYWR2YW5jZS53aWR0aCgpLCBhc2NlbnQgKyBkZXNjZW50KTsKLSAgICAgICAg
bV9ib3VuZHMudW5pdGUoZ2x5cGhSZWN0KTsKLQotICAgICAgICBjdXJyZW50Lm1vdmUoYWR2YW5j
ZS53aWR0aCgpLCBhZHZhbmNlLmhlaWdodCgpKTsKLSAgICB9Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAorU3RyaW5nIEl0ZW06Om5hbWUoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBsb2Nh
bEJvdW5kcyA9IG1fYm91bmRzOwotICAgIGxvY2FsQm91bmRzLm1vdmUobV9ibG9ja0xvY2F0aW9u
LngoKSwgbV9ibG9ja0xvY2F0aW9uLnkoKSk7Ci0gICAgcmV0dXJuIGxvY2FsQm91bmRzOworICAg
IHJldHVybiBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLm5hbWU7CiB9CiAKLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQor
U3RyaW5nIEl0ZW06OmFyZ3VtZW50TmFtZShzaXplX3QgaW5kZXgpIGNvbnN0CiB7Ci0gICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBGSVhNRTog
ZHVtcCBtb3JlIHN0dWZmLgotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBp
dGVtLmJsb2NrTG9jYXRpb24oKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3Ii
LCBpdGVtLmxvY2FsQW5jaG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9yLXBvaW50
IiwgaXRlbS5hbmNob3JQb2ludCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxlbmd0aCIsIGl0
ZW0uZ2x5cGhzKCkuc2l6ZSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotRHJhd0ltYWdlOjpE
cmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdJbWFnZSkKLSAg
ICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAg
ICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBh
aW50aW5nT3B0aW9ucykKLXsKLX0KLQotdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdlLmdl
dCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3SW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotRHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2Up
Ci0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNl
KQotICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKLSAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQot
ICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0K
LQotdm9pZCBEcmF3VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0
aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNpemUsIG1fc3BhY2luZywgbV9pbWFnZVBhaW50aW5n
T3B0aW9ucyk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2Ui
LCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXBvaW50IiwgaXRl
bS5zb3VyY2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3Rp
bmF0aW9uKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1zaXplIiwgaXRlbS50aWxlU2l6
ZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBpdGVtLnNwYWNpbmcoKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdl
OjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwg
bV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAs
IG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKLSAgICAsIG1faFJ1bGUoaFJ1bGUp
Ci0gICAgLCBtX3ZSdWxlKHZSdWxlKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd1Rp
bGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNj
YWxlRmFjdG9yLCBtX2hSdWxlLCBtX3ZSdWxlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdUaWxlZFNjYWxlZEltYWdlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0u
aW1hZ2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNl
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLURyYXdO
YXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBi
bGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlKQotI2lmIFVTRShDRykKLSAgICAvLyBGSVhNRTog
TmVlZCB0byBzdG9yZSBhbiBpbWFnZSBmb3IgQ2Fpcm8uCi0gICAgLCBtX2ltYWdlKGltYWdlKQot
I2VuZGlmCi0gICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCi0gICAgLCBtX2Rlc3RpbmF0aW9u
KGRlc3RSZWN0KQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCi0jaWYgVVNFKENHKQotICAgICwg
bV9vcChvcCkKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSNlbmRpZgotICAgICwgbV9v
cmllbnRhdGlvbihvcmllbnRhdGlvbikKLXsKLSNpZiAhVVNFKENHKQotICAgIFVOVVNFRF9QQVJB
TShpbWFnZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICBVTlVTRURfUEFSQU0oYmxlbmRN
b2RlKTsKLSNlbmRpZgotfQotCi12b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotI2lmIFVTRShDRykKLSAgICBjb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShtX2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvbiwgbV9zcmNSZWN0
LCBtX29wLCBtX2JsZW5kTW9kZSwgbV9vcmllbnRhdGlvbik7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQotewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgLy8gRklYTUU6
IGR1bXAgbW9yZSBzdHVmZi4KLSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRl
bS5zb3VyY2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3Rp
bmF0aW9uKCkpOwotICAgIHJldHVybiB0czsKLX0KLSNlbmRpZgotCi1EcmF3UGF0dGVybjo6RHJh
d1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1f
cGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKQotICAgICwgbV90aWxlUmVjdCh0aWxl
UmVjdCkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCi0gICAgLCBtX3BoYXNlKHBoYXNl
KQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX29wKG9wKQotICAgICwgbV9ibGVu
ZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi12b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3UGF0dGVybihtX2lt
YWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFuc2Zvcm0s
IG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0
ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInBhdHRlcm4tdHJhbnNmb3JtIiwgaXRlbS5wYXR0ZXJuVHJhbnNmb3JtKCkpOwot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1yZWN0IiwgaXRlbS50aWxlUmVjdCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdFJlY3QoKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJwaGFzZSIsIGl0ZW0ucGhhc2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJz
cGFjaW5nIiwgaXRlbS5zcGFjaW5nKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3
UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRl
eHQuZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UmVjdCYgaXRlbSkK
LXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVzcygpKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgYm91bmRz
OwotICAgIGJvdW5kcy5maXRUb1BvaW50cyhtX3BvaW50MSwgbV9wb2ludDIpOwotICAgIHJldHVy
biBib3VuZHM7Ci19Ci0KLXZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lKG1fcG9pbnQxLCBtX3BvaW50Mik7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3TGluZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQx
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBv
aW50KCksIG1fd2lkdGhzLCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBy
ZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6
OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoKSByZXR1cm5zLgot
Ci0gICAgaWYgKCFtX3dpZHRocy5zaXplKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
LQotICAgIEZsb2F0UmVjdCByZXN1bHQocG9pbnQoKSwgRmxvYXRTaXplKG1fd2lkdGhzLmxhc3Qo
KSwgbV9zdHJva2VXaWR0aCkpOwotICAgIHJlc3VsdC5pbmZsYXRlKDEpOyAvLyBBY2NvdW50IGZv
ciBwaXhlbCBzbmFwcGluZy4gRklYTUU6IFRoaXMgaXNuJ3QgcGVyZmVjdCwgYXMgaXQgZG9lc24n
dCB0YWtlIHRoZSBDVE0gaW50byBhY2NvdW50LgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGlu
ZXNGb3JUZXh0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0u
YmxvY2tMb2NhdGlvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0
ZW0ubG9jYWxBbmNob3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludCIsIGl0ZW0ucG9p
bnQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkb3VibGUiLCBpdGVtLmRvdWJsZUxpbmVzKCkp
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGhzIiwgaXRlbS53aWR0aHMoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJpcy1wcmludGluZyIsIGl0ZW0uaXNQcmludGluZygpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi12b2lkIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIobV9wb2ludCwgbV93aWR0aCwgbV9zdHlsZSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdAotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0
dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvckRvY3VtZW50TWFya2VyKCkgcmV0dXJucy4KLQotICAgIEZsb2F0UmVjdCByZXN1
bHQobV9wb2ludCwgRmxvYXRTaXplKG1fd2lkdGgsIGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3Mp
KTsKLSAgICByZXN1bHQuaW5mbGF0ZShjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKTsgLy8gQWNj
b3VudCBmb3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcuCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXImIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50
IiwgaXRlbS5wb2ludCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0
aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1f
cmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdQYXRoOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0jaWYgVVNFKENHKQotICAgIGNv
bnRleHQuZHJhd1BhdGgobV9wYXRoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3UGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRl
bS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgotICAgIHJldHVybiB0
czsKLX0KLQotdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3BhdGgsIG1fd2lk
dGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dAotewotICAgIEZsb2F0UmVjdCByZXN1bHQgPSBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwot
ICAgIHJlc3VsdC5pbmZsYXRlKHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3Rm9jdXNSaW5nUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRo
IiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgotICAgIHRz
LmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIs
IGl0ZW0uY29sb3IoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdGb2N1c1JpbmdS
ZWN0czo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRl
eHQuZHJhd0ZvY3VzUmluZyhtX3JlY3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Ci19
Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IHJlc3Vs
dDsKLSAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX3JlY3RzKQotICAgICAgICByZXN1bHQudW5pdGUo
cmVjdCk7Ci0gICAgcmVzdWx0LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKLXsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdHMiLCBpdGVtLnJlY3RzKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBp
dGVtLndpZHRoKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQo
KSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3QmIGl0
ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi12b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IpOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmlsbFJlY3RXaXRoQ29sb3ImIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJl
Y3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3Qs
IG1fZ3JhZGllbnQuZ2V0KCkpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCi17Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBGSVhN
RTogbG9nIGdyYWRpZW50LgotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdCht
X3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYg
aXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1w
UHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNv
bXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwotICAgIHJldHVybiB0
czsKLX0KLQotdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29s
b3IsIG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xv
ciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRl
bS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAg
Y29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhvbGVSZWN0
LCBtX2NvbG9yKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGVtKQotewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicm91bmRlZC1o
b2xlLXJlY3QiLCBpdGVtLnJvdW5kZWRIb2xlUmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbFBh
dGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LmZpbGxQYXRoKG1fcGF0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0
aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbEVsbGlwc2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZp
bGxFbGxpcHNlKG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Ci0gICAgYm91bmRzLmV4
cGFuZChtX2xpbmVXaWR0aCwgbV9saW5lV2lkdGgpOwotICAgIHJldHVybiBib3VuZHM7Ci19Ci0K
LXZvaWQgU3Ryb2tlUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuc3Ryb2tlUmVjdChtX3JlY3QsIG1fbGluZVdpZHRoKTsKLX0KLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJl
Y3QmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUGF0aDo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHRha2Ugc3Ryb2tlIHRoaWNrbmVzcyBpbnRvIGFjY291bnQgY29ycmVjdGx5LCB2
aWEgQ0dQYXRoQnlTdHJva2luZ1BhdGgoKS4KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBj
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwotCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcGF0
aC5ib3VuZGluZ1JlY3QoKTsKLSAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVzcywgc3Ry
b2tlVGhpY2tuZXNzKTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi12b2lkIFN0cm9rZVBhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnN0
cm9rZVBhdGgobV9wYXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBh
dGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQu
c3Ryb2tlVGhpY2tuZXNzKCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OwotICAg
IGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOwotICAgIHJl
dHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBzZShtX3JlY3Qp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGVhclJlY3QobV9yZWN0
KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENsZWFyUmVjdCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihtX29wYWNpdHkpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRl
bSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLXZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7Ci19Ci0KLSNpZiBVU0UoQ0cpCi12b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYXBwbHlTdHJva2VQ
YXR0ZXJuKCk7Ci19Ci0KLXZvaWQgQXBwbHlGaWxsUGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYXBwbHlGaWxsUGF0dGVybigpOwot
fQotI2VuZGlmCi0KLXZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihtX3NjYWxlRmFjdG9yKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0pCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJzY2FsZS1mYWN0b3IiLCBpdGVtLnNjYWxlRmFjdG9yKCkpOwot
ICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJlc3RvcmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFuc2xhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
Y2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1kYXNoIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQtbGluZS1qb2luIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMgPDwgInNldC1taXRlci1saW1pdCI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRzIDw8ICJjbGlwIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNsaXAtb3V0IjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogdHMgPDwgImNsaXAtb3V0LXRvLXBhdGgiOyBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogdHMgPDwgImNsaXAtcGF0aCI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHRzIDw8ICJkcmF3LWdseXBocyI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogdHMgPDwgImRyYXctaW1hZ2Ui
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogdHMgPDwgImRyYXct
dGlsZWQtaW1hZ2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZTogdHMgPDwgImRyYXctdGlsZWQtc2NhbGVkLWltYWdlIjsgYnJlYWs7Ci0jaWYgVVNFKENH
KSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOiB0cyA8
PCAiZHJhdy1uYXRpdmUtaW1hZ2UiOyBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOiB0cyA8PCAiZHJhdy1wYXR0ZXJuIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1JlY3Q6IHRzIDw8ICJkcmF3LXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZTogdHMgPDwgImRyYXctbGluZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHRzIDw8ICJkcmF3LWxpbmVzLWZvci10ZXh0IjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjogdHMgPDwgImRy
YXctbGluZXMtZm9yLWRvY3VtZW50LW1hcmtlciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdFbGxpcHNlOiB0cyA8PCAiZHJhdy1lbGxpcHNlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdGg6IHRzIDw8ICJkcmF3LXBhdGgiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogdHMgPDwgImRyYXctZm9jdXMtcmluZy1wYXRoIjsgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB0cyA8PCAiZHJhdy1m
b2N1cy1yaW5nLXJlY3RzIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRz
IDw8ICJmaWxsLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjogdHMgPDwgImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVu
dCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwg
ImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJv
dW5kZWQtaG9sZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB0cyA8PCAi
ZmlsbC1wYXRoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHRzIDw8
ICJmaWxsLWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB0
cyA8PCAic3Ryb2tlLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRo
OiB0cyA8PCAic3Ryb2tlLXBhdGgiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOiB0cyA8PCAic3Ryb2tlLWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclJlY3Q6IHRzIDw8ICJjbGVhci1yZWN0IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImJlZ2luLXRyYW5zcGFyZW5jeS1sYXll
ciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB0cyA8
PCAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciI7IGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHRzIDw8ICJhcHBseS1zdHJva2UtcGF0dGVy
biI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJh
cHBseS1maWxsLXBhdHRlcm4iOyBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFk
b3ciOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQotewotICAgIFRleHRTdHJl
YW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwotICAgIHRzIDw8IGl0ZW0udHlwZSgpOwotCi0gICAg
Ly8gRklYTUU6IE1ha2UgYSBtYWNybyB3aGljaCB0YWtlcyBhIG1hY3JvIGZvciBhbGwgdGhlc2Ug
ZW51bWVyYXRpb24gc3dpdGNoZXMKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2F2ZT4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+KGl0ZW0pOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8U2NhbGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+
KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRM
aW5lQ2FwPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVtKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TWl0ZXJM
aW1pdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXA+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwT3V0Pihp
dGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxDbGlwUGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdHbHlwaHM6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRJ
bWFnZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFn
ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdHRl
cm4+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1JlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d0xpbmU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxEcmF3UGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0
aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxSZWN0V2l0aENvbG9yPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsQ29tcG9zaXRl
ZFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91
bmRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxGaWxsUGF0aD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsRWxs
aXBzZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJl
Y3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTdHJva2VQYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4o
aXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LQotICAgIC8vIEl0ZW1zIHdpdGggbm8gYWRkaXRpb25hbCBkYXRhLgotICAgIGNhc2UgSXRlbVR5
cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0j
aWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Cisg
ICAgQVNTRVJUKGluZGV4IDwgaXRlbURlc2NyaXB0b3IobV90eXBlKS5hcmd1bWVudHNOYW1lcy5z
aXplKCkpOworICAgIHJldHVybiBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLmFyZ3VtZW50c05hbWVz
W2luZGV4XTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggZjAw
ZWE3ZTg1Y2IuLjYyNDRlZDBiYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMzIgKzMxLDMyIEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSWNvbi5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiVGhlbWUu
aCIKKyNpbmNsdWRlICJUaGVtZVR5cGVzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7
Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJ
bWFnZVBhaW50aW5nT3B0aW9uczsKLQogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogZW51bSBj
bGFzcyBJdGVtVHlwZSB7Ci0gICAgU2F2ZSwKKyAgICBNaW4gPSAwLAorICAgIFNhdmUgPSBNaW4s
CiAgICAgUmVzdG9yZSwKKyAgICBTZXRTdGF0ZSwKICAgICBUcmFuc2xhdGUsCiAgICAgUm90YXRl
LAogICAgIFNjYWxlLAogICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldFN0YXRlLAogICAgIFNl
dExpbmVDYXAsCiAgICAgU2V0TGluZURhc2gsCiAgICAgU2V0TGluZUpvaW4sCkBAIC02NiwxMyAr
NjYsMTcgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgQ2xpcE91dCwKICAgICBDbGlwT3V0
VG9QYXRoLAogICAgIENsaXBQYXRoLAorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwKKyAgICBBcHBs
eUZpbGxQYXR0ZXJuLAorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCisKKyAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyLAorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAogICAgIERyYXdHbHlw
aHMsCiAgICAgRHJhd0ltYWdlLAogICAgIERyYXdUaWxlZEltYWdlLAogICAgIERyYXdUaWxlZFNj
YWxlZEltYWdlLAotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQogICAgIERyYXdOYXRpdmVJbWFn
ZSwKLSNlbmRpZgogICAgIERyYXdQYXR0ZXJuLAogICAgIERyYXdSZWN0LAogICAgIERyYXdMaW5l
LApAQCAtODIsNiArODYsMTAgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgRHJhd1BhdGgs
CiAgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCiAgICAgRHJhd0ZvY3VzUmluZ1JlY3RzLAorICAgIERy
YXdJY29uLAorICAgIERyYXdXaWRnZXQsCisgICAgRHJhd1Njcm9sbGJhciwKKyAgICBEcmF3VGhl
bWUsCiAgICAgRmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RX
aXRoR3JhZGllbnQsCkBAIC05NCwxMjk1ICsxMDIsOTMzIEBAIGVudW0gY2xhc3MgSXRlbVR5cGUg
ewogICAgIFN0cm9rZVBhdGgsCiAgICAgU3Ryb2tlRWxsaXBzZSwKICAgICBDbGVhclJlY3QsCi0g
ICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllciwKLSNp
ZiBVU0UoQ0cpCi0gICAgQXBwbHlTdHJva2VQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBi
ZSBhIHJlY29yZGVkIGl0ZW0uCi0gICAgQXBwbHlGaWxsUGF0dGVybiwgLy8gRklYTUU6IHNob3Vs
ZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgotI2VuZGlmCi0gICAgQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvciwKKyAgICBNYXgKIH07CiAKIGNsYXNzIEl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxJdGVt
PiB7CiBwdWJsaWM6Ci0gICAgSXRlbSgpID0gZGVsZXRlOwotCi0gICAgSXRlbShJdGVtVHlwZSB0
eXBlKQotICAgICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0KICAgICB2aXJ0dWFs
IH5JdGVtKCkgPSBkZWZhdWx0OwogCi0gICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV90eXBlOwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCA9IDA7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEaXNwbGF5TGlzdEl0ZW0gPSB0cnVlOworICAgIHZpcnR1YWwgYm9vbCBpc0dlb21ldHJ5SXRl
bSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBzaXplX3Qgc2l6ZUluQnl0
ZXMoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgLy8gQSBzdGF0ZSBpdGVtIGlzIG9uZSBwcmVz
ZXJ2ZWQgYnkgU2F2ZS9SZXN0b3JlLgotICAgIGJvb2wgaXNTdGF0ZUl0ZW0oKSBjb25zdAorICAg
IHZpcnR1YWwgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gaXNTdGF0ZUl0ZW1UeXBlKG1fdHlwZSk7CisgICAgICAgIHRzIDw8IG5hbWUo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUgaXRl
bVR5cGUpCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAg
IFdURjo6Q1N0cmluZyBkdW1wKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJdGVtKEl0ZW1U
eXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgewotICAgICAgICBzd2l0Y2gg
KGl0ZW1UeXBlKSB7Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBUcmFuc2xhdGU6Ci0gICAgICAg
IGNhc2UgSXRlbVR5cGU6OiBSb3RhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTY2FsZToK
LSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IENvbmNhdGVuYXRlQ1RNOgotICAgICAgICBjYXNlIEl0
ZW1UeXBlOjogU2V0U3RhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lQ2FwOgot
ICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TGluZURhc2g6Ci0gICAgICAgIGNhc2UgSXRlbVR5
cGU6OiBTZXRMaW5lSm9pbjoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBDbGVhclNoYWRvdzoKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSNpZiAhZGVmaW5lZChOREVC
VUcpIHx8ICFMT0dfRElTQUJMRUQKLSAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25z
dDsKLSNlbmRpZgotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOwor
ICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgU3RyaW5nIGFyZ3VtZW50TmFtZShzaXplX3Qg
aW5kZXgpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIEl0ZW1UeXBlIG1fdHlwZTsKIH07CiAKLWNs
YXNzIERyYXdpbmdJdGVtIDogcHVibGljIEl0ZW0geworY2xhc3MgR2VvbWV0cnlJdGVtIDogcHVi
bGljIEl0ZW0gewogcHVibGljOgotICAgIERyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAg
ICAgIDogSXRlbSh0eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4dGVudChjb25z
dCBGbG9hdFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBl
eHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgpOyB9Ci0KICAgICBib29sIGV4
dGVudEtub3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9
CiAKLSAgICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRpb24gaW4gbG9j
YWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMgb2YgdHJhbnNm
b3JtLCBzaGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KLSAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0ZW0o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbV9leHRlbnQ7IC8vIEluIGJhc2UgY29vcmRpbmF0ZXMsIHRha2luZyBzaGFkb3dz
IGFuZCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KLX07Ci0KLWNsYXNzIFNhdmUgOiBwdWJsaWMg
SXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTYXZlPiBjcmVhdGUoKQorICAgIHZvaWQg
c2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVjdCYgZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9
CisgICAgY29uc3QgRmxvYXRSZWN0IGV4dGVudCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsKKyAgICAgICAgcmV0dXJuIG1fZXh0ZW50LnZhbHVlX29y
KEZsb2F0UmVjdCgpKTsKICAgICB9CiAKLSAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0
IG9mIHRoZSBjb3JyZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCi0gICAg
c2l6ZV90IHJlc3RvcmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9Ci0g
ICAgdm9pZCBzZXRSZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0g
aW5kZXg7IH0KLQotcHJpdmF0ZToKLSAgICBTYXZlKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpTYXZlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogICAgIAotICAgIHNpemVfdCBtX3Jlc3RvcmVJbmRleCB7IDAgfTsKLX07
Ci0KLWNsYXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxSZXN0b3JlPiBjcmVhdGUoKQorcHJvdGVjdGVkOgorICAgIEdlb21ldHJ5SXRlbShJdGVtVHlw
ZSB0eXBlKQorICAgICAgICA6IEl0ZW0odHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFJlc3RvcmUpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBSZXN0b3JlKCkKLSAg
ICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpSZXN0b3JlKQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRT
dHJlYW0mIHRzKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgSXRlbTo6ZHVtcCh0cyk7
CisgICAgICAgIHRzLnN0YXJ0R3JvdXAoKTsKKyAgICAgICAgdHMgPDwgImV4dGVudCAiOworICAg
ICAgICBpZiAoZXh0ZW50S25vd24oKSkKKyAgICAgICAgICAgIHRzIDw8IGV4dGVudCgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAgICAgIHRzLmVuZEdy
b3VwKCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbV9leHRlbnQ7CiB9OwogCi1j
bGFzcyBUcmFuc2xhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxU
cmFuc2xhdGU+IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEFw
cGxpZXIsIEFwcGxpZXIgYXBwbGllciwgY2xhc3MuLi4gQXJndW1lbnRzPgorY2xhc3MgR3JhcGhp
Y3NJdGVtIHsKK3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICAgICAgOiBtX2FyZ3VtZW50cyhzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1
bWVudHMpLi4uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNsYXRl
KHgsIHkpKTsKICAgICB9CiAKLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0g
ICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi1wcml2YXRlOgotICAgIFRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0
ZSkKLSAgICAgICAgLCBtX3goeCkKLSAgICAgICAgLCBtX3koeSkKKyAgICB0ZW1wbGF0ZTwgc3Rk
OjpzaXplX3QgST4KKyAgICBjb25zdCBhdXRvJiBhcmd1bWVudCgpIGNvbnN0CiAgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjpnZXQ8ST4obV9hcmd1bWVudHMpOwogICAgIH0KIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3g7
Ci0gICAgZmxvYXQgbV95OwotfTsKLQotY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUoYW5nbGVJblJhZGlhbnMpKTsKKyAg
ICAgICAgYXBwbHkoY29udGV4dCwgc3RkOjppbmRleF9zZXF1ZW5jZV9mb3I8QXJndW1lbnRzLi4u
PigpKTsKICAgICB9CiAKLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7
IH0KLQotcHJpdmF0ZToKLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6Um90YXRlKQotICAgICAgICAsIG1fYW5nbGUoYW5nbGUpCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpdGVyYXJ0ZShGdW5jdG9yJiYgZnVuY3Rvcikg
Y29uc3QKICAgICB7CisgICAgICAgIGl0ZXJhcnRlKFdURk1vdmUoZnVuY3RvciksIHN0ZDo6aW5k
ZXhfc2VxdWVuY2VfZm9yPEFyZ3VtZW50cy4uLj4oKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fYW5nbGU7
IC8vIEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSA6IHB1YmxpYyBJdGVtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNjYWxlPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQor
cHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdC4uLiBJbmRpY2VzPgorICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBzdGQ6OmluZGV4X3NlcXVlbmNlPEluZGlj
ZXMuLi4+KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUo
c2l6ZSkpOworICAgICAgICAoY29udGV4dC4qYXBwbGllcikoc3RkOjpnZXQ8SW5kaWNlcz4obV9h
cmd1bWVudHMpLi4uKTsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi1wcml2YXRlOgotICAgIFNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKLSAgICAgICAgLCBt
X3NpemUoc2l6ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCBzdGQ6OnNpemVfdC4u
LiBJbmRpY2VzPgorICAgIHZvaWQgaXRlcmFydGUoRnVuY3RvciYmIGZ1bmN0b3IsIHN0ZDo6aW5k
ZXhfc2VxdWVuY2U8SW5kaWNlcy4uLj4pIGNvbnN0CiAgICAgeworICAgICAgICB1c2luZyBzd2Fs
bG93ID0gaW50W107CisgICAgICAgICh2b2lkKXN3YWxsb3cgeyAxLCAoZnVuY3RvcihJbmRpY2Vz
LCBzdGQ6OmdldDxJbmRpY2VzPihtX2FyZ3VtZW50cykpLCBpbnQgeyB9KS4uLiB9OwogICAgIH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBGbG9hdFNpemUgbV9zaXplOworICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBtX2FyZ3Vt
ZW50czsKIH07CiAKLWNsYXNzIENvbmNhdGVuYXRlQ1RNIDogcHVibGljIEl0ZW0gewordGVtcGxh
dGUgPEl0ZW1UeXBlIGl0ZW1UeXBlLCB0eXBlbmFtZSBBcHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIs
IGNsYXNzLi4uIEFyZ3VtZW50cz4KK2NsYXNzIFNldHRpbmdJdGVtIDogcHVibGljIEl0ZW0sIHB1
YmxpYyBHcmFwaGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPiAgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q29uY2F0ZW5hdGVDVE0+IGNyZWF0ZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0
ZW5hdGVDVE0obWF0cml4KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldHRpbmdJ
dGVtKGFyZ3VtZW50cy4uLikpOwogICAgIH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQotcHJpdmF0ZToKLSAg
ICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFzcyBTZXRTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBm
bGFncykKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3Jl
YXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRTdGF0ZShzdGF0ZSwgZmxhZ3MpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2Jhc2Vfb2Y8U2VsZiwgVD46OnZhbHVlLCAiVGhpcyBmdW5jdGlvbiBzaG91bGQgY3Jl
YXRlIGNsYXNzZXMgZnJvbSBTZXR0aW5nSXRlbS4iKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgVChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CiAgICAgfQot
ICAgIAotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAotICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
KyAgICB1c2luZyBHcmFwaGljc0l0ZW1CYXNlID0gR3JhcGhpY3NJdGVtPEFwcGxpZXIsIGFwcGxp
ZXIsIEFyZ3VtZW50cy4uLj47CiAKLSAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0
U3RhdGUmKSBjb25zdDsKLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdU
Rjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotcHJpdmF0ZToKLSAgICBTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQot
ICAgICAgICAsIG1fc3RhdGUoc3RhdGUsIGZsYWdzKQorICAgIFNldHRpbmdJdGVtKEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogSXRlbShpdGVtVHlwZSkKKyAgICAgICAgLCBHcmFw
aGljc0l0ZW1CYXNlKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlOwotfTsKLQotY2xh
c3MgU2V0TGluZUNhcCA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNl
dExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxpbmVDYXApCisgICAgdm9pZCBkdW1wKFdURjo6VGV4
dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRMaW5lQ2FwKGxpbmVDYXApKTsKKyAgICAgICAgSXRlbTo6ZHVtcCh0cyk7Cisg
ICAgICAgIEdyYXBoaWNzSXRlbUJhc2U6Oml0ZXJhcnRlKFt0aGlzLCAmdHNdKHNpemVfdCBpbmRl
eCwgY29uc3QgYXV0byYgYXJndW1lbnRWYWx1ZSkgeworICAgICAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KHRoaXMtPmFyZ3VtZW50TmFtZShpbmRleCksIGFyZ3VtZW50VmFsdWUpOworICAgICAgICB9
KTsKICAgICB9Ci0gICAgCi0gICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ2FwOyB9CiAKIHByaXZhdGU6Ci0gICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0g
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKLSAgICAgICAgLCBtX2xpbmVDYXAo
bGluZUNhcCkKKyAgICB1c2luZyBTZWxmID0gU2V0dGluZ0l0ZW08aXRlbVR5cGUsIEFwcGxpZXIs
IGFwcGxpZXIsIEFyZ3VtZW50cy4uLj47CisKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEdyYXBoaWNzSXRlbUJh
c2U6OmFwcGx5KGNvbnRleHQpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKKyAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzaXplb2YoKnRoaXMpOyB9
CiB9OwogCi1jbGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK3RlbXBsYXRlIDxJdGVt
VHlwZSBpdGVtVHlwZSwgdHlwZW5hbWUgQXBwbGllciwgQXBwbGllciBhcHBsaWVyLCBjbGFzcy4u
LiBBcmd1bWVudHM+CitjbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBHZW9tZXRyeUl0ZW0sIHB1
YmxpYyBHcmFwaGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPiAgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0ZShjb25zdCBEYXNoQXJyYXkm
IGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0
ZShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdpbmdJdGVtKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pKTsKICAgICB9CiAKLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi1wcml2YXRlOgotICAgIFNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlNldExpbmVEYXNoKQotICAgICAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJh
eSkKLSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiAgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxTZWxmLCBU
Pjo6dmFsdWUsICJUaGlzIGZ1bmN0aW9uIHNob3VsZCBjcmVhdGUgY2xhc3NlcyBmcm9tIERyYXdp
bmdJdGVtLiIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKHN0ZDo6Zm9yd2FyZDxB
cmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIEdyYXBoaWNzSXRlbUJhc2Ug
PSBHcmFwaGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAgIERh
c2hBcnJheSBtX2Rhc2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7Ci19OworICAgIC8v
IFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCisgICAg
Y29uc3RleHByIHN0YXRpYyBmbG9hdCBjb25zdCBzX3BsYXRmb3JtRm9jdXNSaW5nV2lkdGggPSAz
OwogCi1jbGFzcyBTZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgRHJhd2lu
Z0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBHZW9tZXRyeUl0ZW0oaXRl
bVR5cGUpCisgICAgICAgICwgR3JhcGhpY3NJdGVtQmFzZShzdGQ6OmZvcndhcmQ8QXJndW1lbnRz
Pihhcmd1bWVudHMpLi4uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0
TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9Ci0gICAgCi0gICAgTGluZUpvaW4gbGluZUpvaW4o
KSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CiAKIHByaXZhdGU6Ci0gICAgU2V0TGluZUpv
aW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUpv
aW4pCi0gICAgICAgICwgbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB1c2luZyBT
ZWxmID0gRHJhd2luZ0l0ZW08aXRlbVR5cGUsIEFwcGxpZXIsIGFwcGxpZXIsIEFyZ3VtZW50cy4u
Lj47CiAKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3MgU2V0TWl0ZXJMaW1p
dCA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+
IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNldE1pdGVyTGltaXQobGltaXQpKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6YXBwbHko
Y29udGV4dCk7CiAgICAgfQogCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWl0ZXJMaW1pdDsgfQorICAgIGJvb2wgaXNHZW9tZXRyeUl0ZW0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gc2l6ZW9mKCp0aGlzKTsgfQogCi1wcml2YXRlOgotICAgIFNldE1pdGVyTGlt
aXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0KQotICAgICAgICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQorICAgIHZvaWQgZHVtcChX
VEY6OlRleHRTdHJlYW0mIHRzKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgR2VvbWV0
cnlJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6aXRlcmFydGUoW3Ro
aXMsICZ0c10oc2l6ZV90IGluZGV4LCBjb25zdCBhdXRvJiBhcmd1bWVudFZhbHVlKSB7CisgICAg
ICAgICAgICB0cy5kdW1wUHJvcGVydHkodGhpcy0+YXJndW1lbnROYW1lKGluZGV4KSwgYXJndW1l
bnRWYWx1ZSk7CisgICAgICAgIH0pOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX21pdGVyTGltaXQ7CiB9Owog
Ci1jbGFzcyBDbGVhclNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENsZWFyU2hhZG93PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ2xlYXJTaGFkb3cpOwotICAgIH0KK3VzaW5nIFNhdmVCYXNlID0gU2V0dGluZ0l0ZW08
CisgICAgSXRlbVR5cGU6OlNhdmUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAor
ICAgICZHcmFwaGljc0NvbnRleHQ6OnNhdmUKKz47CiAKLXByaXZhdGU6Ci0gICAgQ2xlYXJTaGFk
b3coKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsK
LQotLy8gRklYTUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPwotY2xhc3MgQ2xpcCA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIFNhdmUgOiBwdWJsaWMgU2F2ZUJhc2UgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xpcD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENsaXAocmVjdCkpOwotICAgIH0KKyAgICBjb25zdGV4cHIg
c3RhdGljIGF1dG8gY3JlYXRlID0gU2F2ZUJhc2U6OmNyZWF0ZTxTYXZlPjsKIAotICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgLy8gSW5kZXggaW4gdGhl
IGRpc3BsYXkgbGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBSZXN0b3JlIGl0ZW0uIDAgaWYgdW5t
YXRjaGVkLgorICAgIHNpemVfdCByZXN0b3JlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Rv
cmVJbmRleDsgfQorICAgIHZvaWQgc2V0UmVzdG9yZUluZGV4KHNpemVfdCBpbmRleCkgeyBtX3Jl
c3RvcmVJbmRleCA9IGluZGV4OyB9CiAKIHByaXZhdGU6Ci0gICAgQ2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKLSAgICAgICAgLCBtX3Jl
Y3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB1c2luZyBTYXZlQmFzZTo6U2F2ZUJhc2U7CiAKLSAgICBG
bG9hdFJlY3QgbV9yZWN0OwotfTsKLQotY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKKyAgICAg
ICAgU2F2ZUJhc2U6OmR1bXAodHMpOworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3RvcmUt
aW5kZXgiLCBtX3Jlc3RvcmVJbmRleCk7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBDbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQotICAgICAg
ICAsIG1fcmVjdChyZWN0KQotICAgIHsKLSAgICB9CisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4
IHsgMCB9OworfTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Cit1c2luZyBSZXN0b3JlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlJlc3Rv
cmUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUKKz47CiAKLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotfTsKK3VzaW5nIFNldFN0
YXRlQmFzZSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTZXRTdGF0ZSwKKyAgICB2b2lk
IChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiks
CisgICAgJkdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZSwKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZQorPjsKIAotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldFN0YXRlIDogcHVibGljIFNldFN0YXRlQmFzZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwotICAg
IH0KLQotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAg
ICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gU2V0U3RhdGVCYXNlOjpjcmVhdGU8U2V0
U3RhdGU+OworICAgIHVzaW5nIFNldFN0YXRlQmFzZTo6U2V0U3RhdGVCYXNlOworICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGFyZ3Vt
ZW50PDA+KCk7IH0KK307CiAKLXByaXZhdGU6Ci0gICAgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRo
JiBwYXRoKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgICAg
ICwgbV9wYXRoKHBhdGgpCi0gICAgewotICAgIH0KK3VzaW5nIFRyYW5zbGF0ZSA9IFNldHRpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpUcmFuc2xhdGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShmbG9hdCwgZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSwKKyAg
ICBmbG9hdCwgZmxvYXQKKz47CisKK3VzaW5nIFJvdGF0ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpSb3RhdGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisg
ICAgJkdyYXBoaWNzQ29udGV4dDo6cm90YXRlLAorICAgIGZsb2F0Cis+OworCit1c2luZyBTY2Fs
ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTY2FsZSwKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0U2l6ZSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNj
YWxlLAorICAgIEZsb2F0U2l6ZQorPjsKKwordXNpbmcgQ29uY2F0ZW5hdGVDVE0gPSBTZXR0aW5n
SXRlbTwKKyAgICBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCisgICAgdm9pZCAoR3JhcGhpY3ND
b250ZXh0OjoqKShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
Ojpjb25jYXRDVE0sCisgICAgQWZmaW5lVHJhbnNmb3JtCis+OworCit1c2luZyBTZXRMaW5lQ2Fw
ID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlNldExpbmVDYXAsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShMaW5lQ2FwKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Q2FwLAorICAgIExpbmVDYXAKKz47CisKK3VzaW5nIFNldExpbmVEYXNoID0gU2V0dGluZ0l0ZW08
CisgICAgSXRlbVR5cGU6OlNldExpbmVEYXNoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoLAorICAgIERhc2hBcnJheSwgZmxvYXQKKz47CisKK3VzaW5nIFNldExpbmVKb2luID0g
U2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlNldExpbmVKb2luLAorICAgIHZvaWQgKEdyYXBo
aWNzQ29udGV4dDo6KikoTGluZUpvaW4pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVK
b2luLAorICAgIExpbmVKb2luCis+OworCit1c2luZyBTZXRNaXRlckxpbWl0ID0gU2V0dGluZ0l0
ZW08CisgICAgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQsCisgICAgdm9pZCAoR3JhcGhpY3NDb250
ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCwKKyAg
ICBmbG9hdAorPjsKKwordXNpbmcgQ2xlYXJTaGFkb3cgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3csCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93Cis+OworCit1c2luZyBDbGlwID0gU2V0dGlu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0Ojoq
KShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpjbGlwLAorICAgIEZs
b2F0UmVjdAorPjsKKwordXNpbmcgQ2xpcE91dCA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBl
OjpDbGlwT3V0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0
JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCwKKyAgICBGbG9hdFJlY3QKKz47CisK
K3VzaW5nIENsaXBPdXRUb1BhdGggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcE91
dFRvUGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAg
ICAmR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0LAorICAgIGNvbnN0IFBhdGgKKz47CisKK3VzaW5n
IENsaXBQYXRoID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgsCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBQYXRoJiwgV2luZFJ1bGUpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoLAorICAgIGNvbnN0IFBhdGgsIFdpbmRSdWxlCis+
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyNp
ZiBVU0UoQ0cpCit1c2luZyBBcHBseVN0cm9rZVBhdHRlcm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJ
dGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KKz47CisKK3Vz
aW5nIEFwcGx5RmlsbFBhdHRlcm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6QXBwbHlG
aWxsUGF0dGVybiwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybgorPjsKKyNlbmRpZgogCi0gICAgY29uc3QgUGF0
aCBtX3BhdGg7Ci19OwordXNpbmcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciA9IFNldHRpbmdJdGVt
PAorICAgIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yLAorICAgIHZvaWQgKEdyYXBo
aWNzQ29udGV4dDo6KikoZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IsCisgICAgZmxvYXQKKz47CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0
ZW0geworLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJl
bmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgordXNpbmcgQmVnaW5UcmFu
c3BhcmVuY3lMYXllciA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoZmxvYXQpLAorICAgICZH
cmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgZmxvYXQKKz47CisK
K3VzaW5nIEVuZFRyYW5zcGFyZW5jeUxheWVyID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6
OkVuZFRyYW5zcGFyZW5jeUxheWVyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwK
KyAgICAmR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcgorPjsKKwordXNpbmcg
RHJhd0dseXBoc0Jhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0dseXBocywK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhp
bmdNb2RlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzLAorICAgIFJlZjxjb25z
dCBGb250PiwgR2x5cGhCdWZmZXIsIHVuc2lnbmVkLCB1bnNpZ25lZCwgRmxvYXRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUKKz47CisKK2NsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd0dseXBo
c0Jhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0
ZShSZWY8Y29uc3QgRm9udD4mJiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKKyAgICAgICAgYXV0byBzdWJH
bHlwaEJ1ZmZlciA9IERyYXdHbHlwaHM6OnN1YkdseXBoQnVmZmVyKGZvbnQucHRyKCksIGJ1ZmZl
ciwgZnJvbSwgbnVtR2x5cGhzKTsKKyAgICAgICAgcmV0dXJuIERyYXdHbHlwaHNCYXNlOjpjcmVh
dGUoV1RGTW92ZShmb250KSwgV1RGTW92ZShzdWJHbHlwaEJ1ZmZlciksIDAsIG51bUdseXBocywg
cG9pbnQsIGZvbnRTbW9vdGhpbmcpOwogICAgIH0KIAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fd2luZFJ1bGU7IH0KLQogcHJpdmF0ZToKLSAgICBDbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlw
UGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRS
dWxlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAgV2luZFJ1bGUgbV93
aW5kUnVsZTsKLX07CisgICAgdXNpbmcgRHJhd0dseXBoc0Jhc2U6OkRyYXdHbHlwaHNCYXNlOwog
Ci1jbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBG
bG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQor
ICAgIHN0YXRpYyBHbHlwaEJ1ZmZlciBzdWJHbHlwaEJ1ZmZlcihjb25zdCBGb250KiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlw
aHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgc21v
b3RoaW5nTW9kZSkpOworICAgICAgICBHbHlwaEJ1ZmZlciBzdWJCdWZmZXI7CisgICAgICAgIGNv
bnN0IGF1dG8qIGdseXBocyA9IGJ1ZmZlci5nbHlwaHMoZnJvbSk7CisgICAgICAgIGNvbnN0IGF1
dG8qIGFkdmFuY2VzID0gYnVmZmVyLmFkdmFuY2VzKGZyb20pOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKQorICAgICAgICAgICAgc3ViQnVmZmVyLmFkZChn
bHlwaHNbaV0sIGZvbnQsIGFkdmFuY2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIHN1YkJ1ZmZlcjsK
ICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2Nh
dGlvbjsgfQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxBbmNob3I7IH0KLQotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9Ci0KLSAgICBjb25z
dCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4g
bV9nbHlwaHM7IH0KLQotcHJpdmF0ZToKLSAgICBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgY29tcHV0ZUJvdW5k
cygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEdseXBoQnVmZmVyIGdlbmVyYXRlR2x5
cGhCdWZmZXIoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8mIGZvbnQgPSBhcmd1bWVudDwwPigpOworICAgICAgICBmbG9hdCBh
c2NlbnQgPSBmb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7CisgICAgICAgIGZsb2F0
IGRlc2NlbnQgPSBmb250LT5mb250TWV0cmljcygpLmZsb2F0RGVzY2VudCgpOwogCi0gICAgUmVm
PEZvbnQ+IG1fZm9udDsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBo
czsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7Ci0gICAg
RmxvYXRSZWN0IG1fYm91bmRzOwotICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwotICAg
IEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwotICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3Ro
aW5nTW9kZTsKLX07CisgICAgICAgIGNvbnN0IGF1dG8mIGdseXBoQnVmZmVyID0gYXJndW1lbnQ8
MT4oKTsKKyAgICAgICAgc2l6ZV90IG51bUdseXBocyA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAg
ICAgICAgYXV0byBjdXJyZW50ID0gYXJndW1lbnQ8ND4oKTsKIAotY2xhc3MgRHJhd0ltYWdlIDog
cHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdJbWFnZT4g
Y3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFn
ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAg
ICAgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2Ug
PSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhS
ZWN0ID0gRmxvYXRSZWN0KGN1cnJlbnQueCgpLCBjdXJyZW50LnkoKSAtIGFzY2VudCwgYWR2YW5j
ZS53aWR0aCgpLCBhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAgICAgICAgIGJvdW5kcy51bml0ZShn
bHlwaFJlY3QpOworICAgICAgICAgICAgY3VycmVudC5tb3ZlKGFkdmFuY2Uud2lkdGgoKSwgYWR2
YW5jZS5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9
Cit9OwogCi0gICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5n
ZXQoKTsgfQotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsg
fQotICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b247IH0KK3VzaW5nIERyYXdJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6
RHJhd0ltYWdlLAorICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlLAorICAgIFJlZjxJ
bWFnZT4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAor
Y2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNv
bnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3SW1hZ2VCYXNlOjpjcmVhdGU8RHJhd0lt
YWdlPjsKKyAgICB1c2luZyBEcmF3SW1hZ2VCYXNlOjpEcmF3SW1hZ2VCYXNlOwogcHJpdmF0ZToK
LSAgICBEcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJsZSBS
ZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhl
aXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRh
YmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3NvdXJj
ZTsKLSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworICAg
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9Owog
Ci1jbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0K
LSAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
Ci0gICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAg
IEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0K
LQotICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0K
LSAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQordXNp
bmcgRHJhd1RpbGVkSW1hZ2VCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlLAorICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpLAorICAgICZH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVj
dCwgRmxvYXRQb2ludCwgRmxvYXRTaXplLCBGbG9hdFNpemUsIEltYWdlUGFpbnRpbmdPcHRpb25z
Cis+OwogCitjbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3VGlsZWRJbWFnZUJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3VGlsZWRJ
bWFnZUJhc2U6OmNyZWF0ZTxEcmF3VGlsZWRJbWFnZT47CisgICAgdXNpbmcgRHJhd1RpbGVkSW1h
Z2VCYXNlOjpEcmF3VGlsZWRJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdl
OyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8g
cHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBGbG9hdFJl
Y3QgbV9kZXN0aW5hdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fc291cmNlOwotICAgIEZsb2F0U2l6
ZSBtX3RpbGVTaXplOwotICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7Ci0gICAgSW1hZ2VQYWludGlu
Z09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotY2xhc3MgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUg
dlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdl
KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVs
ZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbWFnZSYgaW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgRmxvYXRSZWN0IHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQordXNpbmcgRHJhd1RpbGVkU2NhbGVk
SW1hZ2VCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZElt
YWdlLAorICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
LAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlLAorICAgIFJlZjxJbWFnZT4s
IEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBGbG9hdFNpemUsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlLCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UgOiBwdWJsaWMgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlIHsKK3B1YmxpYzoKKyAg
ICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNl
OjpjcmVhdGU8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+OworICAgIHVzaW5nIERyYXdUaWxlZFNjYWxl
ZEltYWdlQmFzZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3
VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rvciwg
SW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJh
d2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMg
c2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlv
bjsKLSAgICBGbG9hdFJlY3QgbV9zb3VyY2U7Ci0gICAgRmxvYXRTaXplIG1fdGlsZVNjYWxlRmFj
dG9yOwotICAgIEltYWdlOjpUaWxlUnVsZSBtX2hSdWxlOwotICAgIEltYWdlOjpUaWxlUnVsZSBt
X3ZSdWxlOwotICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7
CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0K
IH07CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TmF0aXZl
SW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGlu
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisjaWYgVVNFKENHKSB8fCBV
U0UoRElSRUNUMkQpIHx8IFVTRShDQUlSTykKK3VzaW5nIERyYXdOYXRpdmVJbWFnZUJhc2UgPSBE
cmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlLAorICAgIHZvaWQgKEdy
YXBoaWNzQ29udGV4dDo6KikoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UsCisgICAgTmF0aXZlSW1hZ2VQdHIsIEZsb2F0U2l6ZSwgRmxvYXRSZWN0LCBG
bG9hdFJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24K
Kz47CiAKK2NsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3TmF0aXZlSW1hZ2VCYXNl
IHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd05hdGl2
ZUltYWdlQmFzZTo6Y3JlYXRlPERyYXdOYXRpdmVJbWFnZT47CisgICAgdXNpbmcgRHJhd05hdGl2
ZUltYWdlQmFzZTo6RHJhd05hdGl2ZUltYWdlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd05hdGl2
ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKTsKLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0jaWYgVVNFKENHKQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBtX2ltYWdlOwotI2VuZGlmCi0gICAgRmxvYXRTaXplIG1faW1h
Z2VTaXplOwotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3Ny
Y1JlY3Q7Ci0jaWYgVVNFKENHKQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxl
bmRNb2RlIG1fYmxlbmRNb2RlOwotI2VuZGlmCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVu
dGF0aW9uOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwy
PigpOyB9CiB9OwogI2VuZGlmCiAKLWNsYXNzIERyYXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9w
YXR0ZXJuVHJhbnNmb3JtOyB9Ci0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV90aWxlUmVjdDsgfQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KLSAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4g
bV9waGFzZTsgfQotICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFj
aW5nOyB9Cit1c2luZyBEcmF3UGF0dGVybkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlw
ZTo6RHJhd1BhdHRlcm4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybiwKKyAgICBSZWY8
SW1hZ2U+LCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50
LCBGbG9hdFNpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUKKz47CiAKLXByaXZhdGU6
Ci0gICAgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uOyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsg
Ly8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHBy
b2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAgQWZmaW5lVHJh
bnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKLSAg
ICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fcGhhc2U7Ci0gICAg
RmxvYXRTaXplIG1fc3BhY2luZzsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJs
ZW5kTW9kZSBtX2JsZW5kTW9kZTsKLX07Ci0KLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhl
IHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJv
dW5kcy4KLWNsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd1BhdHRlcm5CYXNlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFj
aXR5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihvcGFjaXR5KSk7Ci0gICAgfQotCi0gICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhY2l0eTsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9
IERyYXdQYXR0ZXJuQmFzZTo6Y3JlYXRlPERyYXdQYXR0ZXJuPjsKKyAgICB1c2luZyBEcmF3UGF0
dGVybkJhc2U6OkRyYXdQYXR0ZXJuQmFzZTsKIHByaXZhdGU6Ci0gICAgQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKQotICAgICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgZmxvYXQgbV9vcGFjaXR5OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBFbmRUcmFuc3BhcmVuY3lM
YXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRU
cmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEVuZFRyYW5zcGFyZW5jeUxheWVyKTsKLSAgICB9Cit1c2luZyBEcmF3UmVjdEJhc2Ug
PSBEcmF3aW5nSXRlbTxJdGVtVHlwZTo6RHJhd1JlY3QsIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpLCAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCwg
RmxvYXRSZWN0LCBmbG9hdD47CiAKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdSZWN0QmFz
ZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdSZWN0
QmFzZTo6Y3JlYXRlPERyYXdSZWN0PjsKKyAgICB1c2luZyBEcmF3UmVjdEJhc2U6OkRyYXdSZWN0
QmFzZTsKIHByaXZhdGU6Ci0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBj
b25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAot
Y2xhc3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RHJhd1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdSZWN0
KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9ib3JkZXJUaGlja25lc3M7IH0KK3VzaW5nIERyYXdMaW5lQmFzZSA9IERy
YXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3TGluZSwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUsCisgICAgRmxvYXRQb2ludCwgRmxvYXRQb2ludAorPjsK
IAorY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd0xpbmVCYXNlIHsKK3B1YmxpYzoKKyAgICBj
b25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0xpbmVCYXNlOjpjcmVhdGU8RHJhd0xp
bmU+OworICAgIHVzaW5nIERyYXdMaW5lQmFzZTo6RHJhd0xpbmVCYXNlOwogcHJpdmF0ZToKLSAg
ICBEcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykK
LSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0gICAgICAgICwgbV9y
ZWN0KHJlY3QpCi0gICAgICAgICwgbV9ib3JkZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQor
ICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJv
dW5kczsKKyAgICAgICAgYm91bmRzLmZpdFRvUG9pbnRzKGFyZ3VtZW50PDA+KCksIGFyZ3VtZW50
PDE+KCkpOworICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBmbG9hdCBt
X2JvcmRlclRoaWNrbmVzczsKIH07CiAKLWNsYXNzIERyYXdMaW5lIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwotICAgIH0K
LQotICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDE7IH0KLSAg
ICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQyOyB9Cit1c2luZyBE
cmF3TGluZXNGb3JUZXh0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0LAorICAgIEZsb2F0UG9pbnQsIERhc2hBcnJh
eSwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUKKz47CiAKK2NsYXNzIERyYXdMaW5lc0ZvclRleHQg
OiBwdWJsaWMgRHJhd0xpbmVzRm9yVGV4dEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGluZXNGb3JUZXh0QmFzZTo6Y3JlYXRlPERyYXdMaW5l
c0ZvclRleHQ+OworICAgIHVzaW5nIERyYXdMaW5lc0ZvclRleHRCYXNlOjpEcmF3TGluZXNGb3JU
ZXh0QmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdMaW5lKQotICAgICAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAgICAgLCBtX3Bv
aW50Mihwb2ludDIpCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7
CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwg
dG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0Fu
ZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKyAgICAgICAgaWYgKCFhcmd1bWVu
dDwxPigpLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAg
RmxvYXRSZWN0IGJvdW5kcyhhcmd1bWVudDwwPigpLCBGbG9hdFNpemUoYXJndW1lbnQ8MT4oKS5s
YXN0KCksIGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCkpKTsKKyAgICAgICAgYm91bmRzLmluZmxh
dGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNuYXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBw
ZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhlIENUTSBpbnRvIGFjY291bnQuCisgICAgICAg
IHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFBv
aW50IG1fcG9pbnQxOwotICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCi1jbGFzcyBEcmF3
TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2Nr
TG9jYXRpb24sIGxvY2FsQW5jaG9yLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ry
b2tlV2lkdGgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9u
OyB9Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9Ci0gICAgRmxvYXRQb2ludCBwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KLSAgICBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzOyB9Ci0gICAgYm9v
bCBpc1ByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQotICAgIGJvb2wgZG91
YmxlTGluZXMoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9Cit1c2luZyBEcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3
TGluZUZvckRvY3VtZW50TWFya2VyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciwKKyAgICBGbG9hdFBvaW50
LCBmbG9hdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUKKz47CiAKK2NsYXNzIERyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIgOiBwdWJsaWMgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlckJhc2Ugewor
cHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyQmFzZTo6Y3JlYXRlPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+OworICAg
IHVzaW5nIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOjpEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQg
c3Ryb2tlV2lkdGgpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0Zv
clRleHQpCi0gICAgICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCi0gICAgICAg
ICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKLSAgICAgICAgLCBtX3dpZHRocyh3aWR0aHMp
Ci0gICAgICAgICwgbV9zdHJva2VXaWR0aChzdHJva2VXaWR0aCkKLSAgICAgICAgLCBtX3ByaW50
aW5nKHByaW50aW5nKQotICAgICAgICAsIG1fZG91YmxlTGluZXMoZG91YmxlTGluZXMpCisgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9u
IG5lZWRzIHRvIHJldHVybiBhIHZhbHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpIHJldHVybnMuCisgICAgICAg
IEZsb2F0UmVjdCBib3VuZHMoYXJndW1lbnQ8MD4oKSwgRmxvYXRTaXplKGFyZ3VtZW50PDE+KCks
IGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpKTsKKyAgICAgICAgYm91bmRzLmluZmxhdGUoY01p
c3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7IC8vIEFjY291bnQgZm9yICJtaXNzcGVsbGluZyBkb3Qi
IHNuYXBwaW5nLgorICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKLSAgICBGbG9hdFNpemUg
bV9sb2NhbEFuY2hvcjsKLSAgICBEYXNoQXJyYXkgbV93aWR0aHM7Ci0gICAgZmxvYXQgbV9zdHJv
a2VXaWR0aDsKLSAgICBib29sIG1fcHJpbnRpbmc7Ci0gICAgYm9vbCBtX2RvdWJsZUxpbmVzOwog
fTsKIAotY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPiBj
cmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIocG9pbnQsIHdpZHRoLCBzdHlsZSkpOwotICAgIH0KLQot
ICAgIEZsb2F0UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50OyB9Ci0gICAgZmxv
YXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Cit1c2luZyBEcmF3RWxsaXBzZUJh
c2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0VsbGlwc2UsCisgICAgdm9pZCAo
R3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3RWxsaXBzZSwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIERyYXdFbGxpcHNl
IDogcHVibGljIERyYXdFbGxpcHNlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRp
YyBhdXRvIGNyZWF0ZSA9IERyYXdFbGxpcHNlQmFzZTo6Y3JlYXRlPERyYXdFbGxpcHNlPjsKKyAg
ICB1c2luZyBEcmF3RWxsaXBzZUJhc2U6OkRyYXdFbGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAg
RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
d2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgICAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKQotICAgICAgICAsIG1fcG9p
bnQocG9pbnQpCi0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX3N0eWxlKHN0
eWxlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmxvYXRQb2lu
dCBtX3BvaW50OwotICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgbV9zdHlsZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1l
bnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworI2lmIFVTRShDRykKK3VzaW5nIERyYXdQYXRoQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpEcmF3UGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBh
dGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCwKKyAgICBjb25zdCBQYXRoCis+
OworCitjbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3UGF0aEJhc2UgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7Ci0g
ICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3UGF0aEJhc2U6OmNyZWF0ZTxE
cmF3UGF0aD47CisgICAgdXNpbmcgRHJhd1BhdGhCYXNlOjpEcmF3UGF0aEJhc2U7CiBwcml2YXRl
OgotICAgIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAg
RmxvYXRSZWN0IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
YXJndW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIH07CisjZW5kaWYKIAotY2xhc3Mg
RHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRHJhd1BhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNvbnN0IFBhdGgm
IHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIERyYXdGb2N1c1JpbmdQYXRo
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCwKKyAg
ICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZywKKyAgICBj
b25zdCBQYXRoLCBmbG9hdCwgZmxvYXQsIENvbG9yCis+OwogCitjbGFzcyBEcmF3Rm9jdXNSaW5n
UGF0aCA6IHB1YmxpYyBEcmF3Rm9jdXNSaW5nUGF0aEJhc2UgeworcHVibGljOgorICAgIGNvbnN0
ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3Rm9jdXNSaW5nUGF0aEJhc2U6OmNyZWF0ZTxE
cmF3Rm9jdXNSaW5nUGF0aD47CisgICAgdXNpbmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlOjpEcmF3
Rm9jdXNSaW5nUGF0aEJhc2U7CiBwcml2YXRlOgotICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQotICAgICAgICAs
IG1fcGF0aChwYXRoKQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCkuZmFzdEJvdW5kaW5nUmVjdCgpOwor
ICAgICAgICBib3VuZHMuaW5mbGF0ZShzX3BsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgICAg
ICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9w
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7CiB9Owog
Ci1jbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdp
ZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGF0aDsgfQotICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV93aWR0aDsgfQotICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQordXNp
bmcgRHJhd0ZvY3VzUmluZ1JlY3RzQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nLAorICAgIFZlY3RvcjxGbG9hdFJlY3Q+LCBmbG9h
dCwgZmxvYXQsIENvbG9yCis+OwogCitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgOiBwdWJsaWMg
RHJhd0ZvY3VzUmluZ1JlY3RzQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBh
dXRvIGNyZWF0ZSA9IERyYXdGb2N1c1JpbmdSZWN0c0Jhc2U6OmNyZWF0ZTxEcmF3Rm9jdXNSaW5n
UmVjdHM+OworICAgIHVzaW5nIERyYXdGb2N1c1JpbmdSZWN0c0Jhc2U6OkRyYXdGb2N1c1JpbmdS
ZWN0c0Jhc2U7CiBwcml2YXRlOgotICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCi0gICAgICAgICwg
bV9wYXRoKHBhdGgpCi0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgICAgIGZvciAo
YXV0byYgcmVjdCA6IGFyZ3VtZW50PDA+KCkpCisgICAgICAgICAgICBib3VuZHMudW5pdGUocmVj
dCk7CisgICAgICAgIGJvdW5kcy5pbmZsYXRlKHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7Cisg
ICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IGNvbnN0IFBhdGggbV9wYXRoOwotICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgZmxvYXQgbV9vZmZz
ZXQ7Ci0gICAgQ29sb3IgbV9jb2xvcjsKIH07CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Cit1c2luZyBEcmF3SWNvbkJhc2UgPSBEcmF3aW5nSXRlbTwK
KyAgICBJdGVtVHlwZTo6RHJhd0ljb24sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJ
Y29uJiwgY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ljb24s
CisgICAgUmVmPEljb24+LCBGbG9hdFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3SWNvbiA6IHB1
YmxpYyBEcmF3SWNvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmlu
Z1JlY3RzPiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKSk7Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBj
b25zdCB7IHJldHVybiBtX3JlY3RzOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9Ci0gICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0K
KyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0ljb25CYXNlOjpjcmVhdGU8
RHJhd0ljb24+OworICAgIHVzaW5nIERyYXdJY29uQmFzZTo6RHJhd0ljb25CYXNlOwogcHJpdmF0
ZToKLSAgICBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAgICAgLCBt
X3JlY3RzKHJlY3RzKQotICAgICAgICAsIG1fd2lkdGgod2lkdGgpCi0gICAgICAgICwgbV9vZmZz
ZXQob2Zmc2V0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwotICAgIGZs
b2F0IG1fd2lkdGg7Ci0gICAgZmxvYXQgbV9vZmZzZXQ7Ci0gICAgQ29sb3IgbV9jb2xvcjsKKyAg
ICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsK
IAotY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewordXNpbmcgRHJhd1dpZGdl
dEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1dpZGdldCwKKyAgICB2b2lk
IChHcmFwaGljc0NvbnRleHQ6OiopKFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjpkcmF3V2lkZ2V0LAorICAgIFJlZjxXaWRnZXQ+LCBJbnRSZWN0Cis+Owor
ICAgIAorY2xhc3MgRHJhd1dpZGdldCA6IHB1YmxpYyBEcmF3V2lkZ2V0QmFzZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKLSAg
ICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisg
ICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdXaWRnZXRCYXNlOjpjcmVhdGU8
RHJhd1dpZGdldD47CisgICAgdXNpbmcgRHJhd1dpZGdldEJhc2U6OkRyYXdXaWRnZXRCYXNlOwog
cHJpdmF0ZToKLSAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAg
IEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IEZsb2F0UmVjdChhcmd1bWVudDwxPigpKTsgfQogfTsKLQotLy8gRklYTUU6IE1ha2UgdGhlc2Ug
aW5oZXJpdCBmcm9tIEZpbGxSZWN0IHByb3Blci4KLWNsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDog
cHVibGljIERyYXdpbmdJdGVtIHsKKyAgICAKK3VzaW5nIERyYXdTY3JvbGxiYXJCYXNlID0gRHJh
d2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdTY3JvbGxiYXIsCisgICAgdm9pZCAoR3JhcGhp
Y3NDb250ZXh0OjoqKShTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JiksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1Njcm9sbGJhciwKKyAgICBSZWY8U2Nyb2xsYmFyPiwgSW50UmVjdAorPjsK
KyAgICAKK2NsYXNzIERyYXdTY3JvbGxiYXIgOiBwdWJsaWMgRHJhd1Njcm9sbGJhckJhc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7Ci0gICAgfQot
Ci0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0KKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1Njcm9sbGJhckJhc2U6OmNyZWF0ZTxEcmF3U2Ny
b2xsYmFyPjsKKyAgICB1c2luZyBEcmF3U2Nyb2xsYmFyQmFzZTo6RHJhd1Njcm9sbGJhckJhc2U7
CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhDb2xvcikKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7
IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKKyAgICBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KGFyZ3VtZW50PDE+KCkpOyB9
CiB9OwotCi1jbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CisgICAgCit1c2luZyBEcmF3VGhlbWVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6
OkRyYXdUaGVtZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKFRoZW1lJiwgQ29udHJv
bFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZs
b2F0LCBmbG9hdCwgYm9vbCwgYm9vbCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1l
LAorICAgIFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QsIGZs
b2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sCis+OworICAgIAorY2xhc3MgRHJh
d1RoZW1lIDogcHVibGljIERyYXdUaGVtZUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRp
ZW50JiBncmFkaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxS
ZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
YXV0byBjcmVhdGUgPSBEcmF3VGhlbWVCYXNlOjpjcmVhdGU8RHJhd1RoZW1lPjsKKyAgICB1c2lu
ZyBEcmF3VGhlbWVCYXNlOjpEcmF3VGhlbWVCYXNlOwogcHJpdmF0ZToKLSAgICBGaWxsUmVjdFdp
dGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAg
ICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAg
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKLSAgICB7
Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9h
dFJlY3QgbV9yZWN0OwotICAgIG11dGFibGUgUmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBG
SVhNRTogTWFrZSB0aGlzIG5vdCBtdXRhYmxlCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGFyZ3VtZW50PDM+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVj
dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsQ29t
cG9zaXRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29s
b3IsIG9wLCBibGVuZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3I7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KK3VzaW5nIEZpbGxSZWN0QmFzZSA9IERyYXdpbmdJdGVt
PAorICAgIEl0ZW1UeXBlOjpGaWxsUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAorICAg
IEZsb2F0UmVjdAorPjsKIAorY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRmlsbFJlY3RCYXNlIHsK
K3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJlY3RCYXNl
OjpjcmVhdGU8RmlsbFJlY3Q+OworICAgIHVzaW5nIEZpbGxSZWN0QmFzZTo6RmlsbFJlY3RCYXNl
OwogcHJpdmF0ZToKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJl
Y3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAg
ICAgICAgLCBtX29wKG9wKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9h
dFJlY3QgbV9yZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
bV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CisgICAgY29uc3Qgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxSb3VuZGVk
UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxs
Um91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOwot
ICAgIH0KLQotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X2JsZW5kTW9kZTsgfQordXNpbmcgRmlsbFJlY3RXaXRoQ29sb3JCYXNlID0gRHJhd2luZ0l0ZW08
CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAorICAgIHZvaWQgKEdyYXBoaWNzQ29u
dGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdCwKKyAgICBGbG9hdFJlY3QsIENvbG9yCis+OwogCitjbGFzcyBGaWxs
UmVjdFdpdGhDb2xvciA6IHB1YmxpYyBGaWxsUmVjdFdpdGhDb2xvckJhc2UgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdFdpdGhDb2xvckJhc2U6
OmNyZWF0ZTxGaWxsUmVjdFdpdGhDb2xvcj47CisgICAgdXNpbmcgRmlsbFJlY3RXaXRoQ29sb3JC
YXNlOjpGaWxsUmVjdFdpdGhDb2xvckJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9y
KQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQotCi0gICAgRmxvYXRSb3VuZGVk
UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1v
ZGU7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7
IH0KIH07CiAKLWNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBj
cmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQotICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KK3VzaW5nIEZpbGxSZWN0V2l0
aEdyYWRpZW50QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYWRpZW50JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRS
ZWN0LCBSZWY8R3JhZGllbnQ+Cis+OwogCitjbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1
YmxpYyBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2U6OmNyZWF0ZTxGaWxs
UmVjdFdpdGhHcmFkaWVudD47CisgICAgdXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRCYXNlOjpG
aWxsUmVjdFdpdGhHcmFkaWVudEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAgICAgICAsIG1fcmVjdChyZWN0
KQotICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVj
dCBtX3JvdW5kZWRIb2xlUmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBGaWxs
UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxs
UGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRmlsbENvbXBvc2l0ZWRSZWN0QmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCisgICAg
dm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0LAorICAgIEZsb2F0UmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUKKz47CiAKK2NsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBGaWxsQ29tcG9zaXRl
ZFJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0g
RmlsbENvbXBvc2l0ZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxDb21wb3NpdGVkUmVjdD47CisgICAg
dXNpbmcgRmlsbENvbXBvc2l0ZWRSZWN0QmFzZTo6RmlsbENvbXBvc2l0ZWRSZWN0QmFzZTsKIHBy
aXZhdGU6Ci0gICAgRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RmlsbFBhdGgpCi0gICAgICAgICwgbV9wYXRoKHBhdGgpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCk7IH0KLQotICAgIGNvbnN0IFBhdGggbV9wYXRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsRWxsaXBzZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsRWxsaXBz
ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGxFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQordXNpbmcgRmlsbFJvdW5kZWRSZWN0QmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCisgICAgdm9p
ZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCwK
KyAgICBGbG9hdFJvdW5kZWRSZWN0LCBDb2xvciwgQmxlbmRNb2RlCis+OwogCitjbGFzcyBGaWxs
Um91bmRlZFJlY3QgOiBwdWJsaWMgRmlsbFJvdW5kZWRSZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
Y29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSb3VuZGVkUmVjdEJhc2U6OmNyZWF0
ZTxGaWxsUm91bmRlZFJlY3Q+OworICAgIHVzaW5nIEZpbGxSb3VuZGVkUmVjdEJhc2U6OkZpbGxS
b3VuZGVkUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVsbGlwc2UpCi0g
ICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLnJlY3QoKTsgfQogfTsKIAot
Y2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0
KHJlY3QsIGxpbmVXaWR0aCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lV2lkdGg7IH0KK3VzaW5nIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKKyAgICB2b2lk
IChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlLAorICAgIEZsb2F0UmVjdCwgRmxvYXRSb3VuZGVkUmVjdCwgQ29sb3IKKz47
CiAKK2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0
ZSA9IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlPjsKKyAgICB1c2luZyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZUJhc2U6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6U3Ryb2tlUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2xp
bmVXaWR0aChsaW5lV2lkdGgpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBmbG9hdCBtX2xpbmVXaWR0aDsKKyAgICBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3Mg
U3Ryb2tlUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxTdHJva2VQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIEZpbGxQYXRoQmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUGF0aCwKKyAgICB2b2lkIChHcmFw
aGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCwKKyAgICBjb25zdCBQYXRoCis+OwogCitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBGaWxs
UGF0aEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBG
aWxsUGF0aEJhc2U6OmNyZWF0ZTxGaWxsUGF0aD47CisgICAgdXNpbmcgRmlsbFBhdGhCYXNlOjpG
aWxsUGF0aEJhc2U7CiBwcml2YXRlOgotICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAgICAgLCBt
X3BhdGgocGF0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBjb25z
dCBQYXRoIG1fcGF0aDsKLSAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdS
ZWN0KCk7IH0KIH07CiAKLWNsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9r
ZUVsbGlwc2UocmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9Cit1c2luZyBGaWxsRWxsaXBzZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6RmlsbEVsbGlwc2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShj
b25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZSwKKyAg
ICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIEZpbGxFbGxpcHNl
QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxF
bGxpcHNlQmFzZTo6Y3JlYXRlPEZpbGxFbGxpcHNlPjsKKyAgICB1c2luZyBGaWxsRWxsaXBzZUJh
c2U6OkZpbGxFbGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVs
bGlwc2UpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgQ2xlYXJSZWN0IDog
cHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyUmVjdD4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENsZWFyUmVjdChyZWN0KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KK3VzaW5nIFN0cm9rZVJlY3RCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OlN0cm9rZVJlY3QsCisgICAgdm9pZCAoR3JhcGhpY3NDb250
ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUmVjdCwKKyAgICBGbG9hdFJlY3QsIGZsb2F0Cis+OwogCitjbGFzcyBTdHJva2VSZWN0
IDogcHVibGljIFN0cm9rZVJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGlj
IGF1dG8gY3JlYXRlID0gU3Ryb2tlUmVjdEJhc2U6OmNyZWF0ZTxTdHJva2VSZWN0PjsKKyAgICB1
c2luZyBTdHJva2VSZWN0QmFzZTo6U3Ryb2tlUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIENsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkNsZWFyUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBhcmd1bWVudDww
PigpOworICAgICAgICBib3VuZHMuZXhwYW5kKGFyZ3VtZW50PDE+KCksIGFyZ3VtZW50PDE+KCkp
OworICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLSNpZiBVU0UoQ0cp
Ci1jbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KK3VzaW5nIFN0
cm9rZVBhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OlN0cm9rZVBhdGgsCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBQYXRoJiksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aCwKKyAgICBjb25zdCBQYXRoCis+OwogCitjbGFzcyBTdHJva2VQ
YXRoIDogcHVibGljIFN0cm9rZVBhdGhCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3Rh
dGljIGF1dG8gY3JlYXRlID0gU3Ryb2tlUGF0aEJhc2U6OmNyZWF0ZTxTdHJva2VQYXRoPjsKKyAg
ICB1c2luZyBTdHJva2VQYXRoQmFzZTo6U3Ryb2tlUGF0aEJhc2U7CiBwcml2YXRlOgotICAgIEFw
cGx5U3Ryb2tlUGF0dGVybigpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlTdHJva2VQ
YXR0ZXJuKQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAg
IH0KKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8g
YWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0aCgpLgorICAgICAgICBm
bG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgRmxv
YXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCkuYm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJv
dW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgICAgICBy
ZXR1cm4gYm91bmRzOworICAgIH0KIH07CiAKLWNsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJs
aWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseUZpbGxQYXR0ZXJuPiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlGaWxsUGF0dGVy
bik7Ci0gICAgfQordXNpbmcgU3Ryb2tlRWxsaXBzZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJ
dGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNv
bnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UsCisg
ICAgRmxvYXRSZWN0Cis+OwogCitjbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIFN0cm9rZUVs
bGlwc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0g
U3Ryb2tlRWxsaXBzZUJhc2U6OmNyZWF0ZTxTdHJva2VFbGxpcHNlPjsKKyAgICB1c2luZyBTdHJv
a2VFbGxpcHNlQmFzZTo6U3Ryb2tlRWxsaXBzZUJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5Rmls
bFBhdHRlcm4oKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCisg
ICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisgICAgICAgIEZs
b2F0UmVjdCBib3VuZHMgPSBhcmd1bWVudDwwPigpOworICAgICAgICBib3VuZHMuZXhwYW5kKHN0
cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsK
ICAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwogfTsKLSNlbmRpZgotCi1jbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0
ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3Jl
YXRlKGZsb2F0IHNjYWxlRmFjdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwotICAgIH0KIAotICAgIGZs
b2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQordXNpbmcg
Q2xlYXJSZWN0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGVhclJlY3QsCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjpjbGVhclJlY3QsCisgICAgRmxvYXRSZWN0Cis+OwogCitjbGFzcyBDbGVh
clJlY3QgOiBwdWJsaWMgQ2xlYXJSZWN0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0
YXRpYyBhdXRvIGNyZWF0ZSA9IENsZWFyUmVjdEJhc2U6OmNyZWF0ZTxDbGVhclJlY3Q+OworICAg
IHVzaW5nIENsZWFyUmVjdEJhc2U6OkNsZWFyUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgICAgIDogSXRlbShJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKKyAgICBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsK
K2lubGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRz
KTsKKyAgICBpdGVtLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworaW5saW5lIFdURjo6
Q1N0cmluZyBJdGVtOjpkdW1wKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRz
IDw8ICp0aGlzOworICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlw
ZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVj
dC5wcmVkaWNhdGU7IH0gXAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0dFT01FVFJZSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorICAgIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVUeXBl
TmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbSYgaXRlbSkgeyByZXR1cm4gaXRlbS5wcmVkaWNhdGU7IH0gXAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RS
QVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0dFT01FVFJZSVRFTShHZW9tZXRyeUl0ZW0sIGlzR2VvbWV0cnlJ
dGVtKCkpCiAKICNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFRvVmFsdWVUeXBlTmFtZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCiAgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVt
KSB7IHJldHVybiBpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlRvVmFsdWVUeXBlTmFtZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJlc3RvcmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oVHJhbnNsYXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTY2FsZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShD
b25jYXRlbmF0ZUNUTSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
ZXRTdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5l
Q2FwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNo
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRHJhd0dseXBocykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3SW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRHJhd1RpbGVkSW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRHJhd1RpbGVkU2NhbGVkSW1hZ2UpCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdlKQot
I2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRl
cm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0
cykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFk
aWVudCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9z
aXRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJv
dW5kZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEZpbGxQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZp
bGxFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9r
ZVJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0
aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFyUmVjdCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEVuZFRyYW5zcGFy
ZW5jeUxheWVyKQotI2lmIFVTRShDRykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShBcHBseVN0cm9rZVBhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQXBwbHlGaWxsUGF0dGVybikKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFkb3cpCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBlYTI3MzI2YjU2MS4uZjg1OWM2OWEw
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsMjEgKzUy
LDIyIEBAIFJlY29yZGVyOjp+UmVjb3JkZXIoKQogCiB2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5k
SXRlbShjb25zdCBJdGVtJiBpdGVtKQogewotICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKQog
I2lmIFVTRShDRykKLSAgICAgICAgfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ry
b2tlUGF0dGVybiB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
CisgICAgaWYgKCFpczxHZW9tZXRyeUl0ZW0+KGl0ZW0pICYmIGl0ZW0udHlwZSgpICE9IEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gJiYgaXRlbS50eXBlKCkgIT0gSXRlbVR5cGU6OkFwcGx5
RmlsbFBhdHRlcm4pCisjZWxzZQorICAgIGlmICghaXM8R2VvbWV0cnlJdGVtPihpdGVtKSkKICNl
bmRpZgotICAgICkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVD
aGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVD
aGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7
Ci0gICAgICAgIGlmIChjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkgewotICAgICAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2aW5nIHN0
YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3RhdGUs
IGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0gICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVu
ZChTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSkpOwotICAgICAgICAgICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSAwOwotICAg
ICAgICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5t
X3N0YXRlOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3
aW5nID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKKyAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3RE
cmF3aW5nU3RhdGUpOworICAgIGlmIChjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkgeworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZp
bmcgc3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9z
dGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBl
bmQoU2V0U3RhdGU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5n
ZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKSk7CisgICAgICAgIHN0YXRlQ2hhbmdl
cy5tX2NoYW5nZUZsYWdzID0gMDsKKyAgICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdT
dGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwogICAgIH0KKyAgICBjdXJyZW50U3RhdGUoKS53
YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCkBAIC05OSw0NCArMTAwLDQ0IEBAIHZvaWQgUmVjb3Jk
ZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKICAgICBhcHBlbmRJdGVtKFNldE1p
dGVyTGltaXQ6OmNyZWF0ZShtaXRlckxpbWl0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lkIFJlY29yZGVyOjpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBz
dGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotICAgIERyYXdp
bmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ds
eXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShzdGFy
dFBvaW50KSwgc21vb3RoaW5nTW9kZSkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8
R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdHbHlwaHM6OmNyZWF0ZShtYWtlUmVmKGZvbnQp
LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBmb250U21vb3RoaW5n
KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIEltYWdlRHJhd1Jlc3Vs
dCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9
IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKGltYWdl
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFnZTo6
Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5n
T3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVy
OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1h
Z2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlv
bnMpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpE
aWRSZWNvcmQ7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxl
UnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRTY2FsZWRJbWFnZTo6
Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxl
LCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3Jl
YXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3Is
IGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CiAgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9
CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkgfHwgVVNFKENBSVJPKQogdm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5h
dGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pKSk7CisgICAgYXV0byYg
bmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1h
Z2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5k
TW9kZSwgb3JpZW50YXRpb24pKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0K
ICNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgYmxlbmRNb2Rl
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRHJhd1BhdHRlcm46OmNyZWF0ZShtYWtlUmVmKGltYWdlKSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCkBAIC0yMDksNyArMjEwLDcgQEAgQWZm
aW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2
aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkp
OworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0o
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkpKSk7CiAgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKIH0KIApAQCAtMjIwLDEyMSArMjIxLDE0NyBAQCB2b2lkIFJlY29y
ZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIERyYXdp
bmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1Jl
Y3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9
IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3UmVjdDo6Y3JlYXRlKHJlY3Qs
IGJvcmRlclRoaWNrbmVzcykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQog
CiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2lu
dDIpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOwogICAgIHVwZGF0ZUl0ZW1F
eHRlbnQobmV3SXRlbSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit2b2lkIFJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5
bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2lu
dCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBz
dHJva2VUaGlja25lc3MpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5
SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUocG9pbnQsIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUo
cG9pbnQsIHdpZHRoLCBzdHlsZSkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2Vv
bWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShw
b2ludCwgd2lkdGgsIHN0eWxlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKERyYXdFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93
bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUocmVjdCkp
KTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCisjaWYgVVNFKENHKQogdm9p
ZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpj
cmVhdGUocGF0aCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVt
PihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOwogfQorI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVt
PihhcHBlbmRJdGVtKERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3
aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdG
b2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdG
b2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorICAgIAordm9pZCBSZWNvcmRlcjo6ZHJh
d0ljb24oSWNvbiYgaWNvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGF1dG8mIG5l
d0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ljb246OmNyZWF0
ZShtYWtlUmVmKGljb24pLCByZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdXaWRnZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRl
bT4oYXBwZW5kSXRlbShEcmF3V2lkZ2V0OjpjcmVhdGUobWFrZVJlZih3aWRnZXQpLCByZWN0KSkp
OworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShE
cmF3U2Nyb2xsYmFyOjpjcmVhdGUobWFrZVJlZihzY3JvbGxiYXIpLCByZWN0KSkpOworICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdUaGVtZShU
aGVtZSYgdGhlbWUsIENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29u
c3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxW
aWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29s
IHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit7CisgICAgYXV0
byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGhlbWU6
OmNyZWF0ZSh0aGVtZSwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3Jv
bGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBl
YXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7
CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShG
aWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJlY3QsIGNvbG9yKSkpOworICAgIGF1dG8mIG5ld0l0
ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoQ29sb3I6
OmNyZWF0ZShyZWN0LCBjb2xvcikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRp
ZW50JiBncmFkaWVudCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwg
Z3JhZGllbnQpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4o
YXBwZW5kSXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkp
OwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVk
UmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSkpOworICAgIGF1dG8mIG5l
d0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbENvbXBvc2l0ZWRS
ZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKSk7CiAgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBi
bGVuZE1vZGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4o
YXBwZW5kSXRlbShGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2Rl
KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwg
Y29sb3IpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgY29sb3IpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRoOjpj
cmVhdGUocGF0aCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVt
PihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0
byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBz
ZTo6Y3JlYXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7Cisg
ICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShTdHJv
a2VSZWN0OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlUGF0aDo6Y3JlYXRlKHBh
dGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0
ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VFbGxp
cHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0
cnlJdGVtPihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSkpOwor
ICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oQ2xl
YXJSZWN0OjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwog
fQogCkBAIC00MDIsNyArNDI5LDcgQEAgSXRlbSYgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0
ZW0+JiYgaXRlbSkKICAgICByZXR1cm4gbV9kaXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92ZShpdGVt
KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0
ZW0pIGNvbnN0Cit2b2lkIFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KEdlb21ldHJ5SXRlbSYg
aXRlbSkgY29uc3QKIHsKICAgICBpZiAoc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBp
dGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKICAgICAgICAgaXRlbS5zZXRFeHRl
bnQoZXh0ZW50RnJvbUxvY2FsQm91bmRzKHJlY3QudmFsdWUoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggYzVhYzcwOTEzOTUuLmQ1YWU3NDYyZTIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTQ1LDggKzQ1LDYgQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1j
bGFzcyBEcmF3aW5nSXRlbTsKLQogY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGljOgpA
QCAtOTcsMTMgKzk1LDIwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOworI2lmIFVTRShDRykKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBk
cmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdT
Y3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQg
ZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9h
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lz
dGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKQEAgLTEz
Myw3ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRl
bSYpOwogCiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJl
Y3QmKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBjb25z
dDsKKyAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoR2VvbWV0cnlJdGVtJikgY29uc3Q7CiAgICAg
CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKICAgICBjb25zdCBGbG9h
dFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcAppbmRleCA4ZmVhYTJmNWQ3NS4uMGNmZmU2ZjljNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTU1LDkgKzU1LDkgQEAgc3RkOjp1bmlx
dWVfcHRyPERpc3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGJvb2wKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kp
IHsKICAgICAgICAgYXV0byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdldCgpOwog
Ci0gICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXM8RHJhd2luZ0l0ZW0+KGl0
ZW0pKSB7Ci0gICAgICAgICAgICBjb25zdCBEcmF3aW5nSXRlbSYgZHJhd2luZ0l0ZW0gPSBkb3du
Y2FzdDxEcmF3aW5nSXRlbT4oaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZHJhd2luZ0l0ZW0uZXh0
ZW50S25vd24oKSAmJiAhZHJhd2luZ0l0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFsQ2xp
cCkpIHsKKyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxHZW9tZXRyeUl0
ZW0+KGl0ZW0pKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBnZW9tZXRyeUl0ZW0gPSBkb3du
Y2FzdDxHZW9tZXRyeUl0ZW0+KGl0ZW0pOworICAgICAgICAgICAgaWYgKGdlb21ldHJ5SXRlbS5l
eHRlbnRLbm93bigpICYmICFnZW9tZXRyeUl0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFs
Q2xpcCkpIHsKICAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBz
dHJlYW0gPDwgInNraXBwaW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKaW5kZXggYWYxODVhNTRjZGQuLmYwYWU1Y2ZjYTE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsu
Y3BwCkBAIC0xMTMsMTEgKzExMyw4IEBAIFJlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFRPRE86IFNjYWxl
L2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KICAgICBjYWlyb190KiBjciA9IGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY2Fpcm9fc2F2ZShjcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCmluZGV4IGNlZTUxNmUx
NDQwLi5kYmQ4M2Q1N2MwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0ljb25JT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaW9zL0ljb25JT1MubW0KQEAgLTU1LDExICs1NSw4IEBAIFJlZlB0cjxJY29uPiBJY29uOjpj
cmVhdGVJY29uRm9ySW1hZ2UoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaW1hZ2UpKTsKIH0KIAotdm9pZCBJY29uOjpwYWlu
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2
b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KSBjb25zdAogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCiAgICAgZmxvYXQgd2lkdGggPSBDR0ltYWdlR2V0V2lk
dGgobV9jZ0ltYWdlLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9JY29uTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ljb25NYWMubW0KaW5kZXggNjE0M2I1MWQ0MzYuLmU4NTAzMDhkMGJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQpAQCAtOTEs
MTMgKzkxLDkgQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JVVEkoY29uc3QgU3Ry
aW5nJiBVVEkpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGltYWdlKSk7CiB9CiAKLXZv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQgbG9jYWxDdXJyZW50R0MoY29udGV4dCk7Ci0KICAgICBbbV9uc0ltYWdlIGRyYXdJ
blJlY3Q6cmVjdCBmcm9tUmVjdDpOU01ha2VSZWN0KDAsIDAsIFttX25zSW1hZ2Ugc2l6ZV0ud2lk
dGgsIFttX25zSW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJh
dGlvblNvdXJjZU92ZXIgZnJhY3Rpb246MS4wZl07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggOWE5NTRlMjJi
OTQuLjU1MjI5ZGUwZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtNjMxLDcgKzYzMSw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwg
cG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJs
aW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKIHsKICAgICBzdHJ1Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIERhc2hBcnJheSwg
Ym9vbCwgYm9vbCwgQ29sb3IsIGZsb2F0PiB7CiAgICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0Zv
clRleHQoKSA9IGRlZmF1bHQ7CkBAIC02NDcsNyArNjQ3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBEYXMKICAgICAgICAgfQogICAgIH07CiAKLSAgICBVTlVTRURfUEFSQU0oc3Ryb2tlVGhpY2tu
ZXNzKTsKKyAgICBVTlVTRURfUEFSQU0oc3Ryb2tlU3R5bGUpOwogICAgIGF1dG8mIHN0YXRlID0g
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
TGluZXNGb3JUZXh0Pihwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywg
c3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQpAQCAtNjkxLDEw
ICs2OTEsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4o
cmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBEcmF3Rm9jdXNS
aW5nIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQs
IENvbG9yPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmgKaW5kZXggZGM0ODQ5ZTVjZjQuLmU5ODBkMjBjY2VmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWly
b09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC03Miwx
MCArNzIsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29u
c3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiwgYm9vbCwgYm9vbCwgV2ViQ29yZTo6U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxv
YXQsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKaW5kZXggMDI5
ZDA3OWNjMWMuLjFhYmY0ZmFjMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAK
QEAgLTE3MDgsNyArMTcwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChpc1JlY29yZGluZygpKSB7Ci0gICAgICAgIG1fZGlzcGxheUxpc3RS
ZWNvcmRlci0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91Ymxl
TGluZXMsIHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVy
LT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywg
c3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKaW5kZXggNzk5ZTM0NzQwMzku
LjE4ZmU2Zjc5MTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSWNvbldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ljb25XaW4uY3BwCkBAIC03NCwxMSArNzQsOCBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3Jl
YXRlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJY29uKGhJY29uKSk7CiB9CiAKLXZvaWQgSWNvbjo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEljb246OnBs
YXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHIp
IGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd0NvbnRleHQoY29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChyKSk7CiAgICAgRHJhd0ljb25FeCh3aW5kb3dDb250ZXh0LmhkYygp
LCByLngoKSwgci55KCksIG1faEljb24sIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgMCwgMCwgRElf
Tk9STUFMKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dwZS9JY29uV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dwZS9J
Y29uV1BFLmNwcAppbmRleCA3NmEyMWRhMzZmMy4uMWVkYjdkOWY1YzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dwZS9JY29uV1BFLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAKQEAgLTMwLDcgKzMw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJY29uOjp+SWNvbigpID0gZGVmYXVsdDsKIAot
dm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKQordm9p
ZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAK
aW5kZXggODc0MTI5MzM5NzkuLmYzOGEwYTRlMTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0R3RrLmNwcApAQCAtODAsNyArODAsMTIgQEAgdm9pZCBXaWRnZXQ6OmhpZGUo
KQogICAgICAgICBndGtfd2lkZ2V0X2hpZGUocGxhdGZvcm1XaWRnZXQoKSk7CiB9CiAKLXZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgU2VjdXJpdHlP
cmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit7
CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBXaWRnZXQ6
OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCmluZGV4IDhiMWU4YjU0YjVj
Li5kY2M2YTQ5MDUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dp
ZGdldElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1t
CkBAIC0xNDEsMTQgKzE0MSwxNiBAQCBOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0ZXJWaWV3KCkgY29u
c3QKICAgICByZXR1cm4gdmlldzsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3Zv
aWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCiB7Ci0gICAgaWYgKHAucGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlz
LCByZWN0KTsKK30KICAgICAKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKICAgICBOU1ZpZXcgKnZpZXcg
PSBnZXRPdXRlclZpZXcoKTsKIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLnBsYXRm
b3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKIAogICAg
IE5TUmVjdCB2aWV3RnJhbWUgPSBbdmlldyBmcmFtZV07CkBAIC0xNTYsNyArMTU4LDcgQEAgdm9p
ZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0
LCB2aWV3RnJhbWUub3JpZ2luLnggLSB2aWV3Qm91bmRzLm9yaWdpbi54LCB2aWV3RnJhbWUub3Jp
Z2luLnkgLSB2aWV3Qm91bmRzLm9yaWdpbi55KTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKLSAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252
ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRd
OworICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0
OnJlY3QgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0OmNnQ29udGV4dF07CiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUoY2dDb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9U
aGVtZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKaW5kZXgg
NDkwMjhmMWI0M2MuLmU5ZjMwM2QzZDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBjb250cm9sUmVx
dWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQ7IH0KIAotICAgIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQs
IENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtB
cHBlYXJhbmNlKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0
JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJl
Y3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgZmluYWw7CiAgICAgdm9pZCBpbmZsYXRlQ29udHJvbFBh
aW50UmVjdChDb250cm9sUGFydCwgY29uc3QgQ29udHJvbFN0YXRlcyYsIEZsb2F0UmVjdCYsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCB1c2VyUHJlZmVyc1JlZHVj
ZWRNb3Rpb24oKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9UaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1h
Yy5tbQppbmRleCA0ODMxZmZmNGY4OC4uZDkyMzg1NjAxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0KQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgYm9vbCBkcmF3
Q2VsbEZvY3VzUmluZyhOU0NlbGwgKmNlbGwsIE5TUmVjdCBjZWxsRnJhbWUsIE5TVmlldyAqY29u
dHJvbFZpZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRUb2dnbGVC
dXR0b24oQ29udHJvbFBhcnQgYnV0dG9uVHlwZSwgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRl
cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3Qs
IGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCitzdGF0aWMgdm9pZCBwYWludFRvZ2ds
ZUJ1dHRvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0IGJ1dHRvblR5cGUs
IENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVj
dCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcikKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKIApAQCAtNTIwLDcgKzUyMCw3IEBAIHN0YXRpYyBOU0J1dHRvbkNlbGwg
KmJ1dHRvbihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBDb250cm9sU3RhdGVzJiBjb250cm9sU3Rh
dGVzCiAgICAgcmV0dXJuIGNlbGw7CiB9CiAgICAgCi1zdGF0aWMgdm9pZCBwYWludEJ1dHRvbihD
b250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZh
Y3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvcikKK3N0YXRpYyB2b2lkIHBhaW50QnV0dG9uKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0
YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogICAgIApAQCAt
NTk2LDcgKzU5Niw3IEBAIHN0YXRpYyBOU0NvbnRyb2xTaXplIHN0ZXBwZXJDb250cm9sU2l6ZUZv
ckZvbnQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgcmV0dXJuIE5TQ29udHJvbFNpemVN
aW5pOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFN0ZXBwZXIoQ29udHJvbFN0YXRlcyYgc3RhdGVz
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwg
ZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyopCitzdGF0aWMgdm9pZCBwYWludFN0ZXBwZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZs
b2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyopCiB7CiAg
ICAgLy8gV2UgZG9uJ3QgdXNlIE5TU3RlcHBlckNlbGwgYmVjYXVzZSB0aGVyZSBhcmUgbm8gd2F5
cyB0byBkcmF3IGFuCiAgICAgLy8gTlNTdGVwcGVyQ2VsbCB3aXRoIHRoZSB1cCBidXR0b24gaGln
aGxpZ2h0ZWQuCkBAIC04NDgsMjUgKzg0OCwyNSBAQCB2b2lkIFRoZW1lTWFjOjppbmZsYXRlQ29u
dHJvbFBhaW50UmVjdChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBDb250cm9sU3RhdGVzJiBzdAog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBUaGVtZU1hYzo6cGFpbnQo
Q29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwg
U2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBh
Z2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBl
YXJhbmNlKQordm9pZCBUaGVtZU1hYzo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxv
YXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5
c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7CiAgICAgTG9jYWxEZWZh
dWx0U3lzdGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSwg
dXNlRGFya0FwcGVhcmFuY2UpOwogCiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2Ug
Q2hlY2tib3hQYXJ0OgotICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24ocGFydCwgc3RhdGVz
LCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2Fs
ZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIHBhaW50VG9nZ2xlQnV0dG9u
KGNvbnRleHQsIHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnBy
ZXRfY2FzdDxTY3JvbGxWaWV3Kj4oc2Nyb2xsVmlldyksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdl
U2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0
OgotICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24ocGFydCwgc3RhdGVzLCBjb250ZXh0LCB6
b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIHBhaW50VG9nZ2xlQnV0dG9uKGNvbnRleHQsIHBh
cnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnByZXRfY2FzdDxTY3Jv
bGxWaWV3Kj4oc2Nyb2xsVmlldyksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3Ip
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAg
ICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKICAg
ICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgotICAgICAgICAgICAgcGFpbnRCdXR0b24ocGFy
dCwgc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBk
ZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIHBhaW50QnV0
dG9uKGNvbnRleHQsIHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRl
cnByZXRfY2FzdDxTY3JvbGxWaWV3Kj4oc2Nyb2xsVmlldyksIGRldmljZVNjYWxlRmFjdG9yLCBw
YWdlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5uZXJT
cGluQnV0dG9uUGFydDoKLSAgICAgICAgICAgIHBhaW50U3RlcHBlcihzdGF0ZXMsIGNvbnRleHQs
IHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcpOworICAgICAgICAgICAgcGFpbnRT
dGVwcGVyKGNvbnRleHQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3RvciwgcmVpbnRlcnBy
ZXRfY2FzdDxTY3JvbGxWaWV3Kj4oc2Nyb2xsVmlldykpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2lkZ2V0TWFjLm1tCmluZGV4IDk5NmMxOWQ1NTBmLi5iOGE3ZmM5MzIwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCkBAIC0xODYsOSArMTg2LDkgQEAg
TlNWaWV3ICpXaWRnZXQ6OmdldE91dGVyVmlldygpIGNvbnN0CiAgICAgcmV0dXJuIHZpZXc7CiB9
CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3Qm
IHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBh
aW50UG9saWN5KQogewotICAgIGlmIChwLnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAoY29u
dGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBOU1ZpZXcgKnZp
ZXcgPSBnZXRPdXRlclZpZXcoKTsKIApAQCAtMjAyLDExICsyMDIsMTcgQEAgdm9pZCBXaWRnZXQ6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmln
aW5QYWludFBvbGkKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCisgICAg
Y29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKyAgICAKK3ZvaWQgV2lkZ2V0Ojpw
bGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKICAgICAvLyBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoaXMgV2lkZ2V0LCBiZWNhdXNlIHNl
bmRpbmcgbWVzc2FnZXMgdG8gdGhlIHZpZXdzIGNhbiBpbnZva2UgYXJiaXRyYXJ5CiAgICAgLy8g
Y29kZSwgd2hpY2ggY2FuIGRlcmVmIGl0LgogICAgIFJlZjxXaWRnZXQ+IHByb3RlY3RlZFRoaXMo
KnRoaXMpOwogCisgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CiAgICAgTlNHcmFw
aGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKQEAgLTIxNCw3ICsy
MjAsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRS
ZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9saQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHBvcAogICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSBvZiBkcmF3aW5nIGludG8g
YSB3aW5kb3cgb3IgYW4gaW5jbHVzaXZlIGxheWVyLCBvciBwcmludGluZy4KICAgICAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9y
aW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11d
XTsKKyAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVy
dFJlY3Q6cmVjdCBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXV07CiAgICAgICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsNyArMjQz
LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVj
dCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGkKICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSAw
OwogICAgIH0KIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLnBsYXRmb3JtQ29udGV4
dCgpOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgogICAgIEFTU0VSVChjZ0Nv
bnRleHQgPT0gW2N1cnJlbnRDb250ZXh0IGdyYXBoaWNzUG9ydF0pOwpAQCAtMjU5LDcgKzI2NSw3
IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3Qm
IHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICAgICAgTlNHcmFwaGljc0NvbnRl
eHQgKm5zQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3Jh
cGhpY3NQb3J0OmNnQ29udGV4dCBmbGlwcGVkOk5PXTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwb3AKLSAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29u
dmVydFJlY3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6bnNDb250ZXh0
XTsKKyAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVy
dFJlY3Q6cmVjdCBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6bnNDb250ZXh0
XTsKICAgICB9CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmgKaW5kZXggZjhjYjNiZDI2NjcuLmVjZmUxN2JiMjE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmgKQEAgLTI1LDYgKzI1
LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBjbGFzcyBUZXh0UmVuZGVyaW5nTW9kZSA6
IHVpbnQ4X3QgewpAQCAtNDAsNiArNDIsMTIgQEAgZW51bSBjbGFzcyBGb250U21vb3RoaW5nTW9k
ZSA6IHVpbnQ4X3QgewogICAgIEFudGlhbGlhc2VkLAogICAgIFN1YnBpeGVsQW50aWFsaWFzZWQK
IH07CisgICAgCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZvbnRTbW9vdGhpbmdNb2RlJikKK3sKKyAgICAvLyBGSVhNRTogZHVt
cCB0aGUgRm9udFNtb290aGluZ01vZGUgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRz
OworfQogCiAvLyBUaGlzIHNldHRpbmcgaXMgdXNlZCB0byBwcm92aWRlIHdheXMgb2Ygc3dpdGNo
aW5nIGJldHdlZW4gbXVsdGlwbGUgcmVuZGVyaW5nIG1vZGVzIHRoYXQgbWF5IGhhdmUgZGlmZmVy
ZW50CiAvLyBtZXRyaWNzLiBJdCBpcyB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkg
dGV4dCBvbiBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1dpZGdldFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNw
cAppbmRleCA4YmRjMDIzYTQzNy4uYTUxZTRmMTc1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9XaWRnZXRXaW4uY3BwCkBAIC03NSw3ICs3NSwxMiBAQCB2b2lkIFdpZGdldDo6c2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQogICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0
Q3Vyc29yKGN1cnNvcik7CiB9CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBJbnRSZWN0JiwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNl
Y3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit7CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlz
LCByZWN0KTsKK30KKwordm9pZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UmVjdCYpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9XaWRnZXRXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1dp
ZGdldFdQRS5jcHAKaW5kZXggNWY2NjMzMGM1MjMuLjk0NTMzODVkODdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcApAQCAtNTIsNyArNTIsMTIgQEAgSW50UmVj
dCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWU7CiB9CiAKLXZv
aWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgU2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kp
Cit7CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBXaWRn
ZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCmluZGV4IDQ2ODQ3MmM2ODY1Li42YmI5ZTkxZTk2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZTo6cGFpbnQoY29uc3QgUmVuZGVyQm94JiBib3gsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xT
dGF0ZXMsIGNvbnMKICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0
b25QYXJ0OgogICAgICAgICB1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoYm94LCBjb250
cm9sU3RhdGVzKTsKLSAgICAgICAgVGhlbWU6OnNpbmdsZXRvbigpLnBhaW50KHBhcnQsIGNvbnRy
b2xTdGF0ZXMsIHBhaW50SW5mby5jb250ZXh0KCksIGRldmljZVBpeGVsU25hcHBlZFJlY3QsIGJv
eC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJmJveC52aWV3KCkuZnJhbWVWaWV3KCksIGRldmlj
ZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIGJveC5wYWdlKCkudXNlU3lzdGVtQXBwZWFy
YW5jZSgpLCBib3gucGFnZSgpLnVzZURhcmtBcHBlYXJhbmNlKCkpOworICAgICAgICBUaGVtZTo6
c2luZ2xldG9uKCkucGFpbnQocGFpbnRJbmZvLmNvbnRleHQoKSwgcGFydCwgY29udHJvbFN0YXRl
cywgZGV2aWNlUGl4ZWxTbmFwcGVkUmVjdCwgYm94LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpLCAm
Ym94LnZpZXcoKS5mcmFtZVZpZXcoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rv
ciwgYm94LnBhZ2UoKS51c2VTeXN0ZW1BcHBlYXJhbmNlKCksIGJveC5wYWdlKCkudXNlRGFya0Fw
cGVhcmFuY2UoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345259</attachid>
            <date>2018-07-18 11:06:21 -0700</date>
            <delta_ts>2018-07-18 12:04:48 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>187765.patch</filename>
            <type>text/plain</type>
            <size>208342</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxZGU3MDU0ZGExNS4uZDMyNWFmMjdhZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAxOC0wNy0xNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIFRlbXBsYXRpemUgRGlzcGxheUxpc3RJdGVtcyBhbmQgdXNlIHN0ZDo6dHVwbGUg
dG8gc3RvcmUgdGhlIGFyZ3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg3MDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmViYXNlbGluZSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAg
ICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMt
d2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6
CisKIDIwMTgtMDctMTcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5za2lwIExheW91dFRlc3QgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLWRpc3BsYXkvZGlzcGxheS1jb250ZW50cy1maXJzdC1sZXR0ZXItMDAyLmh0bWwuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlz
dC1leHBlY3RlZC50eHQKaW5kZXggYTg4M2U2ODUyZTEuLjdjN2E4OTRkZWIxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0CkBAIC0xLDEzICsxLDE1IEBACiAgCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAo
Y2hhbmdlLWZsYWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAjQzgwMDAwKSkpCiAoZmlsbC1yZWN0
CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNp
emUgNTV4NTApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29s
b3IgIzAwMDBDODdGKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDI1NikK
KyAgICAoZmlsbC1jb2xvciAjMDAwMEM4N0YpKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAo
MzAsMzApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNo
YWRvdy1leHBlY3RlZC50eHQKaW5kZXggZGU2OThhZTY0ZGIuLjk5ODdiYWUxYWE4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CkBAIC01LDE0ICs1LDE1IEBACiAoc2F2ZQogICAocmVzdG9yZS1p
bmRleCA0KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJs
dXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1m
bGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQog
KGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcp
CiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDg0OGIwNzc1NDVhLi4wNTRlMzRhNDUyOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0yLDE5ICsyLDIwIEBACiAodHJhbnNs
YXRlCiAgICh4IDAuMDApCiAgICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCisoY29uY2F0
ZW5hdGUtY3RtCiAgIChjdG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwt
MTguMzApfSkpCiAoc2F2ZQogICAocmVzdG9yZS1pbmRleCA1KSkKIChzZXQtc3RhdGUKLSAgKGNo
YW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0
IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisg
IChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1mbGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1
ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChl
eHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlv
biBzb3VyY2Utb3ZlcikKKyAgKGNvbXBvc2l0ZS1vcGVyYXRvciBzb3VyY2Utb3ZlcikKICAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSkKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYzVmNmFjNmIy
NWEuLjRhZjdlMTA5ZTkzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5
ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTYsMTMgKzYsMTQgQEAKICAgKGV4
dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDEw
NCkKICAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVy
KQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3Jt
YWwpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKLSAgKGZpbGwtY29sb3Ig
IzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQotICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKKyAg
KHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKKyAgICAoZmlsbC1jb2xv
ciAjMDAwMEZGKQorICAgIChzdHJva2Utc3R5bGUgMCkKKyAgICAoc2hvdWxkLWFudGlhbGlhcyAw
KSkpCiAoZHJhdy1yZWN0CiAgIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKICAgKHJlY3Qg
YXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmY3
ZWYyNzVmNjEuLjVlMWZjOTY4YjQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAt
Niw3ICs2LDcgQEAgcmVjb3JkZWQ6CiAgIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDAp
CiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAKIHJlcGxheWVkOiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdr
MS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXgg
MjEwZTQ0YjA4NzcuLjExZTdlMDFlOTg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtNSwxNSArNSwxNiBAQAogKHNhdmUKICAg
KHJlc3RvcmUtaW5kZXggNCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQot
ICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0y
MCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1zdWJwaXhlbC1x
dWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDUy
NTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9
MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApCisgICAgKHNo
b3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QK
ICAgKGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQgKDUwLDUwKSBz
aXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKKyAgKGNvbXBvc2l0ZS1vcGVyYXRvciBzb3VyY2Utb3ZlcikKICAgKGJsZW5k
LW1vZGUgbm9ybWFsKSkKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NGU5ODEyOWRjLi5hZmNj
OGM0YTk0MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwyMCArMiwyMSBAQAogKHRyYW5zbGF0ZQogICAoeCAw
LjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQorKGNvbmNhdGVuYXRlLWN0bQog
ICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQog
KHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3Mg
NTI1MzEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEw
IGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1z
dWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdl
LWZsYWdzIDUyNTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZz
ZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDAp
CisgICAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3Np
dGVkLXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAg
IChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21w
b3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJj
ZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2UxOWQyYTE5ZjguLjAzMTkzOWUzYmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDc3IEBACisy
MDE4LTA3LTE4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgaWNvbiwgd2lkZ2V0LCBzY3JvbGxiYXIgYW5kIHRoZW1lIHRvIGJlIGRy
YXduIHRocm91Z2ggRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4Nzc2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERyYXdpbmcgdGhlc2UgaXRlbXMgc2hvdWxkIGdvIHRocm91Z2ggR3Jh
cGhpY3NDb250ZXh0IHdoaWNoIHdpbGwgY3JlYXRlCisgICAgICAgIHNwZWNpYWwgRGlzcGxheUxp
c3RJdGVtcyBmb3IgZHJhd2luZyB0aGVtLiBUaGVzZSBEaXNwbGF5TGlzdEl0ZW1zIHdpbGwKKyAg
ICAgICAgc3RvcmUgYWxsIHRoZSBwYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2hlbiByZXBsYXlpbmcg
dGhlIERpc3BsYXlMaXN0IGJhY2suCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250cm9sU3RhdGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9UaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICog
cGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdJY29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SWNv
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RoZW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2lvcy9JY29uSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1QYWludCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJ
Y29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ljb24pOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1dpZGdldCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3U2Nyb2xsYmFyKToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaGVtZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dwZS9J
Y29uV1BFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRUb2dnbGVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTdGVwcGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlRoZW1lTWFjOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRGbGFncy5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAg
ICAgICogcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludCk6CisKKzIwMTgtMDctMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBUZW1wbGF0aXplIERpc3BsYXlMaXN0SXRl
bXMgYW5kIHVzZSBzdGQ6OnR1cGxlIHRvIHN0b3JlIHRoZSBhcmd1bWVudHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzAwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0SXRlbXMgYXJl
IHNpbXBsZSBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCBncmFwaGljcyBjb21tYW5kcyBhbmQKKyAg
ICAgICAgdGhlaXIgYXJndW1lbnRzLiBUaGUgYXJndW1lbnRzIGFyZSBzdG9yZWQgd2hpbGUgcmVj
b3JkaW5nIHRoZSBEaXNwbGF5TGlzdCAKKyAgICAgICAgYW5kIHVzZWQgd2hlbiByZXBsYXlpbmcg
aXQgYmFjay4gSW4gZmFjdCwgd2UgZG8gbm90IGNhcmUgbXVjaCBhYm91dCBrbm93aW5nCisgICAg
ICAgIHRoZXNlIGFyZ3VtZW50cyBleHBlY3Qgd2hlbiBkZWJ1Z2dpbmcgdGhlIERpc3BsYXlMaXN0
LiBTbyBhIG1lY2hhbmljYWwgd2F5CisgICAgICAgIHRvIHN0b3JlIHRoZSBhcmd1bWVudHMgYW5k
IHBhc3NpbmcgdGhlbSB0byBHcmFwaGljc0NvbnRleHQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCisg
ICAgICAgIFRoaXMgd2lsbCBtYWtlIGFkZGluZyBhIG5ldyBEaXNwbGF5TGlzdEl0ZW0gZWFzaWVy
IGFuZCBpbiBtYWtlcyB0aGUgY29kZQorICAgICAgICBhIGxvdCBzaG9ydGVyLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggdGVtcGxhdGl6ZXMgdGhlIERpc3BsYXlMaXN0SXRlbXMgY2xhc3NlcyBhbmQg
dXNlcyBzdGQ6OnR1cGxlIHRvCisgICAgICAgIHN0b3JlIHRoZSBhcmd1bWVudHMuIFRoZSBHcmFw
aGljc0NvbnRleHQgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IAorICAgICAgICB0
byB0aGUgdGVtcGxhdGUgYWxvbmcgd2l0aCB0aGUgdHlwZXMgb2YgdGhlIHN0ZDo6dHVwbGUgaXRl
bXMuIFRoZSBjbGFzcworICAgICAgICBoaWVyYXJjaHkgaXMgYSBsaXR0bGUgYml0IGRpZmZlcmVu
dCBmcm9tIHRoZSBvcmlnaW5hbCBvbmU6CisKKyAgICAgICAgLS0gSXRlbTogVGhpcyBpcyB0aGUg
YmFzZSBjbGFzcyBhbmQgdGhpcyBpcyB3aGF0IERpc3BsYXlMaXN0IHN0b3Jlcy4KKyAgICAgICAg
LS0gR2VvbXRyeUl0ZW06IEl0IGlzIGRlcml2ZWQgZnJvbSBJdGVtIGFuZCB0aGUgb25seSBkaWZm
ZXJlbmNlIGJldHdlZW4KKyAgICAgICAgaXQgYW5kIEl0ZW0gaXMgaXQga25vd3MgdGhlIGV4dGVu
dCBvZiB0aGUgSXRlbS4KKyAgICAgICAgLS0gR3JhcGhpY3NJdGVtOiBJdCdzIGEgdGVtcGxhdGUg
Y2xhc3Mgd2hpY2ggdGFrZXMgYSBwb2ludGVyIHRvIGEgR3JhcGhpY3NDb250ZXh0CisgICAgICAg
IGZ1bmN0aW9uLCBzZXQgb2YgYXJndW1lbnRzJyB0eXBlcy4gSXRzIGNvbnN0cnVjdG9yIHNhdmVz
IHRoZSBhcmd1bWVudHMgaW4KKyAgICAgICAgc3RkOjp0dXBsZS4gSXRzIGFwcGx5IG1ldGhvZCBj
YWxscyB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uIGJ5IHBhc3NpbmcKKyAgICAgICAgdGhl
IGFyZ3VtZW50cyBpdCBzdG9yZXMuCisgICAgICAgIC0tIFNldHRpbmdJdGVtOiBJdCBpcyBkZXJp
dmVkIGZyb20gSXRlbSBhbmQgR3JhcGhpY3NJdGVtLgorICAgICAgICAtLSBEcmF3aW5nSXRlbTog
SXQgaXMgZGVyaXZlZCBmcm9tIEdlb210cnlJdGVtIGFuZCBHcmFwaGljc0l0ZW0uCisKKyAgICAg
ICAgTm90ZXMgYW5kIHNvbWUgZHJhd2JhY2tzIG9mIHRoaXMgcGF0Y2ggYXJlOgorICAgICAgICAt
LSBUaGUgRGlzcGxheUxpc3QgcmVwbGF5aW5nIGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIG1ldGhv
ZHMgb2YgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICAtLSBUaGUgb3BlcmF0b3IgPDwgaGFzIHRv
IGJlIGRlZmluZWQgZm9yIGFsbCB0aGUgYXJndW1lbnRzJyB0eXBlcy4KKyAgICAgICAgLS0gV2hl
biBhbiBhcmd1bWVudHMgaXMgYSBSZWZDb3VudGVkIGFuZCB0aGUgR3JhcGhpY3NDb250ZXggZnVu
Y3Rpb24gdGFrZXMKKyAgICAgICAgYSByYXcgcG9pbnRlciBvciByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBpdHNlbGYsIHRoZSBHcmFwaGljc0l0ZW0gY2FuIHN0b3JlCisgICAgICAgIGEgUmVmIG9y
IGEgUmVmUHRyIHRvIHRoZSBvYmplY3QuIFRoZSBpbXBsaWNpdCBjYXN0aW5nIG9mIFJlZlB0ciBh
bmQgUmVmCisgICAgICAgIHdpbGwgZG8gdGhlIG1hZ2ljIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUg
cGFzc2VkIHRvIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0
ZUNoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjppdGVtc0Rlc2Ny
aXB0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjppdGVtRGVzY3JpcHRvcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6bmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6YXJndW1lbnROYW1lIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZXNjcmlwdGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6c2l6ZUluQnl0ZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Um90YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2NhbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmFw
cGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRT
dGF0ZTo6YWNjdW11bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFk
b3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OkRyYXdHbHlwaHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6Omdl
bmVyYXRlR2x5cGhCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdl
OjpEcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZl
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRp
dmVJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6YXBwbHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpsb2NhbEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZXNGb3JUZXh0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXI6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpsb2NhbEJvdW5kcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdGb2N1c1JpbmdQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVj
dHM6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVj
dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlw
c2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGVhclJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmFw
cGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eVN0cm9rZVBhdHRlcm46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbTo6aXNHZW9tZXRyeUl0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW06OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06Okl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21ldHJ5SXRlbTo6c2V0RXh0
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZW9tZXRyeUl0ZW06OmV4dGVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0cnlJdGVtOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0
cnlJdGVtOjpHZW9tZXRyeUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdy
YXBoaWNzSXRlbTo6R3JhcGhpY3NJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHcmFwaGljc0l0ZW06OmFyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpHcmFwaGljc0l0ZW06OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpHcmFwaGljc0l0ZW06Oml0ZXJhcnRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXR0aW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXR0aW5nSXRlbTo6U2V0dGluZ0l0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpEcmF3aW5nSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2F2ZTo6cmVzdG9yZUluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpzZXRSZXN0b3JlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpzdWJHbHlwaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNTdGF0ZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzU3RhdGVJdGVtVHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OnNldEV4dGVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4
dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6U2F2ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpSZXN0b3JlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6
VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3Rh
dGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjphbmdsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVD
YXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoQXJyYXkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
RGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVKb2luOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6
Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpyZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OnJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBP
dXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1Bh
dGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xp
cE91dFRvUGF0aDo6cGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OnBhdGggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjp3aW5kUnVsZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNs
aXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5
cGhzOjpibG9ja0xvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpzZXRCbG9ja0xvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEFuY2hvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6YW5j
aG9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHM6OmdseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6aW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmRlc3RpbmF0aW9u
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGls
ZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3VGlsZWRJbWFnZTo6aW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpzb3VyY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpkZXN0aW5hdGlv
biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U6OnRpbGVTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6c3BhY2luZyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVzdGluYXRp
b24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdO
YXRpdmVJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5hdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm46OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6cGF0dGVyblRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OnRpbGVSZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6ZGVzdFJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpwaGFzZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1BhdHRlcm46OnNwYWNpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cjo6b3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmJvcmRlclRoaWNrbmVz
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Jl
Y3Q6OkRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZTo6cG9pbnQxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZTo6cG9pbnQyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6c2V0
QmxvY2tMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVzRm9yVGV4dDo6YmxvY2tMb2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxBbmNob3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ6OnBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TGluZXNGb3JUZXh0Ojp3aWR0aHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmlzUHJpbnRpbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQ6OmRvdWJsZUxpbmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXI6OnBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjp3aWR0aCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcjo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OnJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3
RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Bh
dGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OnBhdGggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjp3
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1BhdGg6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0Zv
Y3VzUmluZ1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OnJlY3RzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OndpZHRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHM6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNS
aW5nUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpyZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6
Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6
OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb21wb3NpdGVPcGVyYXRvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0Ojpyb3VuZGVkUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpibGVuZE1vZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVk
UmVjdDo6RmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6cmVjdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OnJvdW5kZWRIb2xlUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNvbG9yIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNl
OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6bGluZVdpZHRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRo
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZVBhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6cmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxs
aXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFy
UmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0
dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxs
UGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OnNjYWxlRmFjdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OndpbGxBcHBlbmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmg6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKwogMjAxOC0wNy0xNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gSW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGxl
bmd0aHMgd2l0aCBhbiAiYXV0byIgdmFsdWUgc2hvdWxkIGJlIGRpc2NyZXRlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKaW5kZXggMWRjZThiNzU4MDcuLjI5M2I3MTRjOWJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oCkBAIC0xMDMsNiArMTAz
LDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb250cm9sU3RhdGVzJikKK3sKKyAgICAvLyBGSVhN
RTogZHVtcCB0aGUgQ29udHJvbFN0YXRlcyBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAg
IHJldHVybiB0czsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwCmluZGV4IGY5ZTA1ZjU1Zjc1Li5kZTI4ZjAyNzRkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0xNjMsMTEgKzE2MywxNiBAQCB2b2lkIFNjcm9sbGJhcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
LCBXaWRnZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGNvbnRleHQucGFpbnRp
bmdEaXNhYmxlZCgpIHx8ICFmcmFtZVJlY3QoKS5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAg
IGlmICghZnJhbWVSZWN0KCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCF0aGVtZSgpLnBhaW50KCp0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0KSkK
LSAgICAgICAgV2lkZ2V0OjpwYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBjb250ZXh0
LmRyYXdTY3JvbGxiYXIoKnRoaXMsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFNjcm9sbGJhcjo6
cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKCF0aGVtZSgpLnBhaW50KCp0aGlzLCBjb250ZXh0LCByZWN0KSkKKyAg
ICAgICAgV2lkZ2V0OjpwYWludChjb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6
OmF1dG9zY3JvbGxUaW1lckZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5k
ZXggNjJmNTA0NGE4MzkuLmMwZDQzMGFkM2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGlu
dCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgV2lkZ2V0OjpTZWN1cml0eU9yaWdpblBh
aW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CkBAIC0xODIsNiArMTgzLDEyIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTY3JvbGxiYXImKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBTY3JvbGxiYXIg
bWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisgICAgCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0lER0VUKFNjcm9s
bGJhciwgaXNTY3JvbGxiYXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAppbmRleCBjMGFm
MTkyYjFkMS4uNjRiYjRmNzhkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKQEAgLTU3
LDcgKzU3LDEyIEBAIGJvb2wgVGhlbWU6OmNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29u
dHJvbFBhcnQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRoZW1lOjpwYWlu
dChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0LCBTY3JvbGxWaWV3KiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKQor
dm9pZCBUaGVtZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sUGFydCBw
YXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwg
ZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNl
LCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGNvbnRleHQuZHJhd1RoZW1lKCp0aGlz
LCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmlj
ZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURh
cmtBcHBlYXJhbmNlKTsKK30KKwordm9pZCBUaGVtZTo6cGxhdGZvcm1QYWludChHcmFwaGljc0Nv
bnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKQogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuaAppbmRleCBlOGNlYzM1ZDU5MS4uZDYzMjU0YmNhZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
OCw3ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJl
V2hpdGVTcGFjZShDb250cm9sUGFydCkgY29uc3Q7CiAKICAgICAvLyBNZXRob2QgZm9yIHBhaW50
aW5nIGEgY29udHJvbC4gVGhlIHJlY3QgaXMgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgotICAgIHZp
cnR1YWwgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Ny
b2xsVmlldyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYs
IGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmll
dyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wg
dXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRy
b2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IHZvaWQqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOwogCiAgICAg
Ly8gU29tZSBjb250cm9scyBtYXkgc3BpbGwgb3V0IG9mIHRoZWlyIGNvbnRhaW5lcnMgKGUuZy4s
IHRoZSBjaGVjayBvbiBhbiBPUyBYIGNoZWNrYm94KS4gIFdoZW4gdGhlc2UgY29udHJvbHMgcmVw
YWludCwKICAgICAvLyB0aGUgdGhlbWUgbmVlZHMgdG8gY29tbXVuaWNhdGUgdGhpcyBpbmZsYXRl
ZCByZWN0IHRvIHRoZSBlbmdpbmUgc28gdGhhdCBpdCBjYW4gaW52YWxpZGF0ZSB0aGUgd2hvbGUg
Y29udHJvbC4KQEAgLTg4LDUgKzkwLDExIEBAIHByaXZhdGU6CiAgICAgVGhlbWUoY29uc3QgVGhl
bWUmKSA9IGRlbGV0ZTsKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUaGVtZSYpID0gZGVsZXRl
OwogfTsKKyAgICAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBUaGVtZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIFRoZW1lIG1lbWJlcnMg
dG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IGYzMWYyNDVhODBiLi45OWNkODNi
ZmNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTExNCw2
ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5IHsgQW55T3JpZ2luLCBBY2Nlc3NpYmxlT3JpZ2luT25seSB9OwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3Qm
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6
QW55T3JpZ2luKTsKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgaW52YWxpZGF0ZVJlY3QoYm91
bmRzUmVjdCgpKTsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRS
ZWN0JikgPSAwOwogCkBAIC0yNDQsNiArMjQ2LDEyIEBAIGlubGluZSB2b2lkIFdpZGdldDo6cmV0
YWluUGxhdGZvcm1XaWRnZXQoKQogCiAjZW5kaWYKIAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFdpZGdldCYpCit7CisgICAgLy8gRklYTUU6IGR1
bXAgdGhlIFdpZGdldCBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dJREdFVChUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDUyZWRiYWU5NDUzLi43MTg1OTg2YjIz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgpAQCAtMzcwLDYgKzM3MSwxMiBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IEZvbnQ6Ondp
ZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgcmV0dXJuIHdpZHRoOwogfQogCitp
bmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZvbnQmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBGb250IG1lbWJlcnMgdG8gdGhl
IFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBGb250X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaEJ1ZmZlci5oCmluZGV4IDE3NTJkY2JkMDhlLi40NWYxN2ZhY2Q3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDxjbGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHR2VvbWV0cnkuaD4KQEAgLTIyOCw1ICsy
MjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBHbHlwaEJ1ZmZlciYpCit7Cisg
ICAgLy8gRklYTUU6IGR1bXAgdGhlIEdseXBoQnVmZmVyIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJl
YW0uCisgICAgcmV0dXJuIHRzOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCmluZGV4IGM3ZmM0YzZlMzY5Li43YmZiZmZhNDdjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFy
aWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29u
dGV4dFJlZjsKQEAgLTE1Niw0ICsxNTcsMTAgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybUdyYWRp
ZW50IG1fZ3JhZGllbnQ7CiB9OwogCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYWRpZW50JikKK3sKKyAgICAvLyBGSVhNRTog
ZHVtcCB0aGUgR3JhZGllbnQgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4g
dHM7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGM5NzMxYWE1MTk0Li5jYzcxMzNjNjc1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCkBAIC0zMSwxMCArMzEsMTQgQEAKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgi
CiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRoZW1lLmgiCisjaW5jbHVkZSAiV2lk
Z2V0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC04NDMsNiArODQ3LDUwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0
RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKICAgICBzZXRQbGF0Zm9ybVRl
eHREcmF3aW5nTW9kZShtb2RlKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJY29u
KEljb24mIGljb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBt
X2ltcGwtPmRyYXdJY29uKGljb24sIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgaWNvbi5wbGF0
Zm9ybVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdX
aWRnZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2ltcGwp
CisgICAgICAgIG1faW1wbC0+ZHJhd1dpZGdldCh3aWRnZXQsIHJlY3QpOworICAgIGVsc2UKKyAg
ICAgICAgd2lkZ2V0LnBsYXRmb3JtUGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5kcmF3U2Nyb2xsYmFy
KHNjcm9sbGJhciwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIucGxhdGZvcm1Q
YWludCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUo
VGhlbWUmIHRoZW1lLCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNv
bnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xs
VmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9v
bCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2ltcGwp
CisgICAgICAgIG1faW1wbC0+ZHJhd1RoZW1lKHRoZW1lLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJl
Y3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVG
YWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKKyAgICBlbHNl
CisgICAgICAgIHRoZW1lLnBsYXRmb3JtUGFpbnQoKnRoaXMsIHBhcnQsIHN0YXRlcywgem9vbWVk
UmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2Fs
ZUZhY3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UpOworfQorCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTExMjks
NiArMTE3NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
c3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKICAgICBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRz
KHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKIH0KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjphcHBseVN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0
ZSkKK3sKKyAgICBzdGF0ZS5hcHBseSgqdGhpcyk7Cit9CiAKIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgp
IGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCmluZGV4IGNjYzJkMDNlN2VhLi5mZWE5YTk2Mjc1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTI2
LDYgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb250cm9sU3RhdGVzLmgi
CiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5j
bHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC04MCwxNiArODIsMjAgQEAgY29uc3QgaW50IGNNaXNz
cGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwog
Y2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OworY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOworY2xhc3MgSWNvbjsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xh
c3MgSW50UmVjdDsKLWNsYXNzIFJvdW5kZWRSZWN0OwotY2xhc3MgVVJMOwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CiBjbGFzcyBQYXRoOworY2xhc3MgUm91bmRlZFJlY3Q7CitjbGFzcyBTY3Jv
bGxiYXI7CiBjbGFzcyBUZXh0UnVuOworY2xhc3MgVGhlbWU7CiBjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKK2NsYXNzIFVSTDsKK2NsYXNzIFdpZGdldDsKIAogZW51bSBUZXh0RHJhd2luZ01v
ZGUgewogICAgIFRleHRNb2RlRmlsbCA9IDEgPDwgMCwKQEAgLTExNiw2ICsxMjIsMTIgQEAgZW51
bSBjbGFzcyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSA6IHVpbnQ4X3QgewogICAgIEF1dG9jb3Jy
ZWN0aW9uUmVwbGFjZW1lbnQsCiAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCiB9OworICAgIAor
aW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBj
b25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhl
IEltYWdlUGFpbnRpbmdPcHRpb25zIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGNsYXNzIFJlY29yZGVyOwpAQCAtMjMzLDYg
KzI0NSwxMiBAQCBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnMgewogICAgIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBtX29yaWVudGF0aW9uRGVzY3JpcHRpb247CiAgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHkgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKIH07CisgICAgCitpbmxpbmUgV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgSW1hZ2VQYWludGlu
Z09wdGlvbnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiBzdHJ1Y3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlKCkgPSBkZWZhdWx0OwpAQCAtMjU1LDcgKzI3Myw2IEBAIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi0KIGNsYXNzIEdy
YXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MTIsNiArNDI5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKICAg
ICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICB2b2lk
IGFwcGx5U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAog
ICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgUm91bmRBbGxTaWRlcywKQEAgLTQ0OCw2
ICs0NjYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKTsKICNlbmRpZgogCisgICAgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZv
aWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqLCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFz
aE9mZnNldCk7CiAgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKaW5k
ZXggNmJjZjc2OGFkZmQuLjg0NjkyYzRkNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCwxMyArNzgs
MjAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyNpZiBVU0UoQ0cpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBh
cnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpv
b21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
Y29uLmgKaW5kZXggODYwZWE2OTZmZWIuLmUyNWNhODhlYzg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSWNvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEwICsyMSwxMiBAQAogI2lmbmRlZiBJY29uX2gKICNk
ZWZpbmUgSWNvbl9oCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiTmF0aXZlSW1h
Z2UuaCIKQEAgLTQ4LDcgKzUwLDEyIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIH5J
Y29uKCk7CiAKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBjb250ZXh0LmRyYXdJY29uKCp0aGlzLCByZWN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGljIFJl
ZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29u
KGhJY29uKSk7IH0KQEAgLTc5LDYgKzg2LDEyIEBAIHByaXZhdGU6CiAgICAgR2RrUGl4YnVmKiBt
X2ljb247CiAjZW5kaWYKIH07CisgICAgCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgSWNvbiYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIElj
b24gbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDhjZmIxZTkyMjU3Li5jMTY2ZjFiYjY4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzIwLDcgKzMyMCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3Jp
Z2luLCBmbG9hdCB3aWR0aCwgYm9vCiAgICAgZHJhd0xpbmVzRm9yVGV4dChvcmlnaW4sIERhc2hB
cnJheSB7IHdpZHRoLCAwIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTMyOSw3ICszMjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChw
b2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlVGhpY2tuZXNz
KCkpOworICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggZTA2ZTQw
MzFkODcuLjI1NTA4OGRiZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAKQEAgLTI5NCw5ICsyOTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaQogICAgIENhaXJv
OjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOworICAgIFVOVVNFRF9QQVJB
TShzdHJva2VTdHlsZSk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2lu
dCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CkBAIC0zMTIsMTAgKzMxMiw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
UGF0aChjb25zdCBQYXRoJikKLXsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAppbmRleCA5OTdjYmRkYTUxYy4uOTYxYTk2OTdj
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCkBAIC03OSwxMCArNzksOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKaW5kZXggZDI5NTA3MTc4Y2IuLmQ1YjIyMDk2ZmYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCkBAIC0xNTg3LDcgKzE1ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRo
aWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0
aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBhNDBmODlmNzY4OC4uYTZi
ZTFkYzJlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtMTE0LDggKzExNCw4IEBA
IHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiBzaXplX3QgRGlz
cGxheUxpc3Q6OnNpemVJbkJ5dGVzKCkgY29uc3QKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
LSAgICBmb3IgKGF1dG8mIHJlZiA6IG1fbGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNp
emVJbkJ5dGVzKHJlZik7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9saXN0KQorICAgICAgICBy
ZXN1bHQgKz0gaXRlbS0+c2l6ZUluQnl0ZXMoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IGQ0NDM3ZTNkNDFiLi5mODYyYjg3OGI1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTQxLDggKzQxLDYgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBJdGVtOwotCiBlbnVtIEFzVGV4
dEZsYWcgewogICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAogICAgIElu
Y2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAgICAgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMWZjZWU4YjM4NDMuLjZjNDc2ZTljYzJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExMjEgKzI2LDkwIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogCi0jaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLS8vIFNob3VsZCBtYXRj
aCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCi1zdGF0aWMgY29uc3QgZmxv
YXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8
ICFMT0dfRElTQUJMRUQKLVdURjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17
Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICB0cyA8PCAqdGhpczsKLSAgICByZXR1cm4gdHMucmVs
ZWFzZSgpLnV0ZjgoKTsKLX0KLSNlbmRpZgotCi1zaXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29u
c3QgSXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3Rh
dGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVK
b2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PENsaXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBP
dXRUb1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBo
cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJ
bWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVt
KSk7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRpdmVJbWFn
ZT4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGlu
ZXNGb3JUZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0Pihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxs
Q29tcG9zaXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJl
Y3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RmlsbFBh
dHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKK3VzaW5nIEl0ZW1EZXNjcmlw
dG9yID0gc3RydWN0IHsKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcmd1
bWVudHNOYW1lczsKK307CisKK3N0YXRpYyBjb25zdCBWZWN0b3I8SXRlbURlc2NyaXB0b3I+JiBp
dGVtc0Rlc2NyaXB0b3JzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEl0
ZW1EZXNjcmlwdG9yPj4gaXRlbXNEZXNjcmlwdG9ycyA9IFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4o
eworICAgICAgICB7ICJzYXZlIiwgeyB9IH0sCisgICAgICAgIHsgInJlc3RvcmUiLCB7IH0gfSwK
KyAgICAgICAgeyAic2V0LXN0YXRlIiwgeyAic3RhdGUtY2hhbmdlIiB9IH0sCisgICAgICAgIHsg
InRyYW5zbGF0ZSIsIHsgIngiLCAieSIgfSB9LAorICAgICAgICB7ICJyb3RhdGUiLCB7ICJhbmds
ZSIgfSB9LAorICAgICAgICB7ICJzY2FsZSIsIHsgInNpemUiIH0gfSwKKyAgICAgICAgeyAiY29u
Y2F0ZW5hdGUtY3RtIiwgeyAiY3RtIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWNhcCIsIHsg
ImxpbmUtY2FwIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWRhc2giLCB7ICJkYXNoLWFycmF5
IiwgImRhc2gtb2Zmc2V0IiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWpvaW4iLCB7ICJsaW5l
LWpvaW4iIH0gfSwKKyAgICAgICAgeyAic2V0LW1pdGVyLWxpbWl0IiwgeyAibWl0cmUtbGltaXQi
IH0gfSwKKyAgICAgICAgeyAiY2xlYXItc2hhZG93IiwgeyB9IH0sCisgICAgICAgIHsgImNsaXAi
LCB7ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsaXAtb3V0IiwgeyAicmVjdCIgfSB9LAorICAg
ICAgICB7ICJjbGlwLW91dC10by1wYXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7ICJjbGlw
LXBhdGgiLCB7ICJwYXRoIiwgIndpbmQtcnVsZSIgfSB9LAorICAgICAgICB7ICJhcHBseS1zdHJv
a2UtcGF0dGVybiIsIHsgfSB9LAorICAgICAgICB7ICJhcHBseS1maWxsLXBhdHRlcm4iLCB7IH0g
fSwKKyAgICAgICAgeyAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciIsIHsgInNjYWxlLWZhY3Rv
ciIgfSB9LAorCisgICAgICAgIHsgImJlZ2luLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgIm9wYWNp
dHkiIH0gfSwKKyAgICAgICAgeyAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgfSB9LAorICAg
ICAgICB7ICJkcmF3LWdseXBocyIsIHsgImZvbnQiLCAiZ2x5cGgtYnVmZmVyIiwgImZyb20iLCAi
bnVtLWdseXBocyIsICJwb2ludCIsICJmb250LXNtb290aGluZyIgfSB9LAorICAgICAgICB7ICJk
cmF3LWltYWdlIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInNvdXJjZS1yZWN0IiwgImltYWdl
LXBhaW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAiZHJhdy10aWxlZC1pbWFnZSIsIHsg
ImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcG9pbnQiLCAidGlsZS1zaXplIiwgInNwYWNp
bmciLCAiaW1hZ2UtcGFpbnRpbmctb3B0aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LXRpbGVk
LXNjYWxlZC1pbWFnZSIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcmVjdCIsICJ0
aWxlLXNjYWxlZmFjdG9yIiwgImgtcnVsZSIsICJ2LXJ1bGUiLCAiaW1hZ2UtcGFpbnRpbmctb3B0
aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LW5hdGl2ZS1pbWFnZSIsIHsgImltYWdlIiwgInNl
bGYtc2l6ZSIsICJkZXN0LXJlY3QiLCAic291cmNlLXJlY3QiLCAiY29tcG9zaXRlLW9wZXJhdG9y
IiwgImJsZW5kLW1vZGUiLCAiaW1hZ2Utb3JpZW50YXRpb24iIH0gfSwKKyAgICAgICAgeyAiZHJh
dy1wYXR0ZXJuIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInRpbGUtcmVjdCIsICJwYXR0ZXJu
LXRyYW5zZm9ybSIsICJwaGFzZSIsICJzcGFjaW5nIiwgImNvbXBvc2l0ZS1vcGVyYXRvciIsICJi
bGVuZC1tb2RlIiB9IH0sCisgICAgICAgIHsgImRyYXctcmVjdCIsIHsgInJlY3QiLCAiYm9yZGVy
LXRoaWNrbmVzcyIgfSB9LAorICAgICAgICB7ICJkcmF3LWxpbmUiLCB7ICJwb2ludC0xIiwgInBv
aW50LTIiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1saW5lcy1mb3ItdGV4dCIsIHsgInBvaW50Iiwg
IndpZHRocyIsICJpcy1wcmludGluZyIsICJkb3VibGUtbGluZXMiLCAic3Ryb2tlLXN0eWxlIiB9
IH0sCisgICAgICAgIHsgImRyYXctbGluZS1mb3ItZG9jdW1lbnQtbWFya2VyIiwgeyAicG9pbnQi
LCAid2lkdGgiLCAiZG9jdW1lbnQtbWFya2VyLWxpbmUtc3R5bGUiIH0gfSwKKyAgICAgICAgeyAi
ZHJhdy1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXBhdGgiLCB7ICJw
YXRoIiB9IH0sCisgICAgICAgIHsgImRyYXctZm9jdXMtcmluZy1wYXRoIiwgeyAicGF0aCIsICJ3
aWR0aCIsICJvZmZzZXQiLCAiY29sb3IiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1mb2N1cy1yaW5n
LXJlY3RzIiwgeyAicmVjdHMiLCAid2lkdGgiLCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAg
ICAgIHsgImRyYXctaWNvbiIsIHsgImljb24iLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3
LXdpZGdldCIsIHsgIndpZGdldCIsICJyZWN0In0gfSwKKyAgICAgICAgeyAiZHJhdy1zY3JvbGxi
YXIiLCB7ICJzY3JvbGxiYXIiLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXRoZW1lIiwg
eyAidGhlbWUiLCAiY29udHJvbC1wYXJ0IiwgImNvbnRyb2wtc3RhdGVzIiwgInpvb21lZC1yZWN0
IiwgInpvb20tZmFjdG9yIiwgInNjcm9sbC12aWV3IiwgImRldmljZS1zY2FsZS1mYWN0b3IiLCAi
cGFnZS1zY2FsZS1mYWN0b3IiLCAidXNlLXN5c3RlbS1hcHBlYXJhbmNlIiwgInVzZS1kYXJrLWFw
cGVhcmFuY2UiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0IiwgeyAicmVjdCIgfSB9LAorICAg
ICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciIsIHsgInJlY3QiLCAiY29sb3IiIH0gfSwKKyAg
ICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiLCB7ICJyZWN0IiwgImdyYWRpZW50IiB9
IH0sCisgICAgICAgIHsgImZpbGwtY29tcG9zaXRlZC1yZWN0IiwgeyAicmVjdCIsICJjb2xvciIs
ICJjb21wb3NpdGUtb3BlcmF0b3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAgICB7ICJmaWxs
LXJvdW5kZWQtcmVjdCIsIHsgInJlY3QiLCAiY29sb3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAg
ICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiLCB7ICJyZWN0IiwgInJvdW5kZWQt
aG9sZS1yZWN0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsgImZpbGwtcGF0aCIsIHsgInBhdGgi
IH0gfSwKKyAgICAgICAgeyAiZmlsbC1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7
ICJzdHJva2UtcmVjdCIsIHsgInJlY3QiLCAibGluZS13aWR0aCIgfSB9LAorICAgICAgICB7ICJz
dHJva2UtcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAgICAgeyAic3Ryb2tlLWVsbGlwc2UiLCB7
ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsZWFyLXJlY3QiLCB7ICJyZWN0IiB9IH0KKyAgICB9
KTsKKworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KEl0ZW1UeXBlOjpNYXgpID09IGl0
ZW1zRGVzY3JpcHRvcnMuZ2V0KCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlwdG9y
czsKK30KKworc3RhdGljIGNvbnN0IEl0ZW1EZXNjcmlwdG9yJiBpdGVtRGVzY3JpcHRvcihJdGVt
VHlwZSBpdGVtVHlwZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtVHlw
ZSkgPCBpdGVtc0Rlc2NyaXB0b3JzKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlw
dG9ycygpW3N0YXRpY19jYXN0PHNpemVfdD4oaXRlbVR5cGUpXTsKIH0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBpdGVt
KQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAgaWYg
KGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAgICBl
bHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKICAgICAKLSAgICB0cy5lbmRHcm91cCgpOwot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTYXZlJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIGl0ZW0ucmVzdG9yZUluZGV4KCkpOwot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgVHJh
bnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVt
LnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5n
bGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgp
KTsKLQotICAgIHJldHVybiB0czsKLX0KLQotQ29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLXZv
aWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwot
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKLX0KLQot
dm9pZCBTZXRTdGF0ZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAg
IG1fc3RhdGUuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQotewot
ICAgIHRzIDw8IHN0YXRlLnN0YXRlKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExp
bmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rh
c2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpv
aW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGluZUpv
aW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGltaXQ6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNl
dE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJMaW1p
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7
Ci19Ci0KLXZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcCYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LmNsaXBPdXQobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXQmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
bGlwT3V0VG9QYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5jbGlwT3V0KG1fcGF0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUGF0aCYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJ3aW5kLXJ1bGUiLCBpdGVtLndpbmRSdWxlKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2Zv
bnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tM
b2NhdGlvbikKLSAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCi0gICAgLCBtX3Ntb290
aGluZ01vZGUoc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2dseXBocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGNvdW50KTsKLSAgICBtX2FkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291
bnQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IG1fZ2x5cGhzLnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICBtX2FkdmFuY2Vz
LnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7Ci0gICAgfQotICAgIGNvbXB1dGVCb3VuZHMo
KTsKLX0KLQotaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZm
ZXIoKSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hZGQobV9n
bHlwaHNbaV0sICZtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0pOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0
ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9v
dGhpbmdNb2RlKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgYWN0dWFsbHkgdGFrZSB0aGUgZXh0ZW50cyBv
ZiB0aGUgZ2x5cGhzIGludG8gY29uc2lkZXJhdGlvbi4gSXQgYXNzdW1lcyB0aGF0Ci0gICAgLy8g
dGhlIGdseXBoIGxpZXMgZW50aXJlbHkgd2l0aGluIGl0cyBbKGFzY2VudCArIGRlc2NlbnQpLCBh
ZHZhbmNlXSByZWN0LgotICAgIGZsb2F0IGFzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudCgpOwotICAgIGZsb2F0IGRlc2NlbnQgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCku
ZmxvYXREZXNjZW50KCk7Ci0gICAgRmxvYXRQb2ludCBjdXJyZW50ID0gdG9GbG9hdFBvaW50KGxv
Y2FsQW5jaG9yKCkpOwotICAgIHNpemVfdCBudW1HbHlwaHMgPSBtX2dseXBocy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07Ci0gICAgICAgIEZsb2F0UmVj
dCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNjZW50
LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOwotICAgICAgICBtX2JvdW5kcy51
bml0ZShnbHlwaFJlY3QpOwotCi0gICAgICAgIGN1cnJlbnQubW92ZShhZHZhbmNlLndpZHRoKCks
IGFkdmFuY2UuaGVpZ2h0KCkpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IERyYXdHbHlwaHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CitT
dHJpbmcgSXRlbTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0g
bV9ib3VuZHM7Ci0gICAgbG9jYWxCb3VuZHMubW92ZShtX2Jsb2NrTG9jYXRpb24ueCgpLCBtX2Js
b2NrTG9jYXRpb24ueSgpKTsKLSAgICByZXR1cm4gbG9jYWxCb3VuZHM7CisgICAgcmV0dXJuIGl0
ZW1EZXNjcmlwdG9yKG1fdHlwZSkubmFtZTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCitTdHJpbmcgSXRl
bTo6YXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29uc3QKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUg
c3R1ZmYuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tM
b2NhdGlvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9j
YWxBbmNob3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFu
Y2hvclBvaW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMo
KS5zaXplKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQotICAgICwgbV9pbWFn
ZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJj
ZShzb3VyY2UpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQotewotfQotCi12b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVz
dGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYg
aXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi1EcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBt
X3RpbGVTaXplKHRpbGVTaXplKQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX2lt
YWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi12b2lkIERy
YXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBt
X3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdUaWxlZEltYWdlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1h
Z2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2Nh
bGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1f
dlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotfQotCi12b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3Is
IG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotRHJhd05hdGl2ZUltYWdl
OjpEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwg
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3TmF0aXZlSW1hZ2UpCi0jaWYgVVNFKENHKQotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0
b3JlIGFuIGltYWdlIGZvciBDYWlyby4KLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0jZW5kaWYKLSAg
ICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3Qp
Ci0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgLCBtX29wKG9wKQot
ICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotI2VuZGlmCi0gICAgLCBtX29yaWVudGF0aW9u
KG9yaWVudGF0aW9uKQotewotI2lmICFVU0UoQ0cpCi0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsK
LSAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgIFVOVVNFRF9QQVJBTShibGVuZE1vZGUpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0jaWYgVVNFKENHKQotICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG1faW1hZ2UsIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBtX3NyY1JlY3QsIG1fb3AsIG1f
YmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBGSVhNRTogZHVtcCBtb3Jl
IHN0dWZmLgotICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLURyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd1BhdHRlcm4pCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wYXR0ZXJuVHJh
bnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCi0gICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQotICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKLSAgICAsIG1fcGhhc2UocGhhc2UpCi0gICAgLCBt
X3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCi17Ci19Ci0KLXZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwg
bV9zcGFjaW5nLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKLXsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
InBoYXNlIiwgaXRlbS5waGFzZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBp
dGVtLnNwYWNpbmcoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdSZWN0OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3UmVj
dChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQotewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVy
LXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZHM7Ci0gICAgYm91
bmRzLmZpdFRvUG9pbnRzKG1fcG9pbnQxLCBtX3BvaW50Mik7Ci0gICAgcmV0dXJuIGJvdW5kczsK
LX0KLQotdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuZHJhd0xpbmUobV9wb2ludDEsIG1fcG9pbnQyKTsKLX0KLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5l
JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0xIiwgaXRlbS5wb2ludDEoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJwb2ludC0yIiwgaXRlbS5wb2ludDIoKSk7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi12b2lkIERyYXdMaW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV93
aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZh
bHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgpIHJldHVybnMuCi0KLSAgICBpZiAo
IW1fd2lkdGhzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxv
YXRSZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9r
ZVdpZHRoKSk7Ci0gICAgcmVzdWx0LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNu
YXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhl
IENUTSBpbnRvIGFjY291bnQuCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQm
IGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0
aW9uKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFu
Y2hvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndpZHRocygpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50aW5nKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihtX3Bv
aW50LCBtX3dpZHRoLCBtX3N0eWxlKTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1
ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIoKSByZXR1cm5zLgotCi0gICAgRmxvYXRSZWN0IHJlc3VsdChtX3BvaW50
LCBGbG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOwotICAgIHJl
c3VsdC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZvciAi
bWlzc3BlbGxpbmcgZG90IiBzbmFwcGluZy4KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBv
aW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdFbGxpcHNlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSNpZiBVU0UoQ0cpCi0gICAgY29udGV4dC5kcmF3
UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7
IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZz
ZXQsIG1fY29sb3IpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmlu
Z1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAg
RmxvYXRSZWN0IHJlc3VsdCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgcmVzdWx0
LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdGb2N1c1JpbmdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBh
dGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgdHMuZHVtcFByb3Bl
cnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQi
LCBpdGVtLm9mZnNldCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9j
dXNSaW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgIGZv
ciAoYXV0byYgcmVjdCA6IG1fcmVjdHMpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0KTsKLSAg
ICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIs
IGl0ZW0ucmVjdHMoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgo
KSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkKLXsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdp
dGhDb2xvciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9ncmFkaWVu
dC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBsb2cgZ3Jh
ZGllbnQuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9j
b2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9w
ZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVu
ZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yb3VuZGVkUmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5j
b2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9k
ZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3Ip
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIs
IGl0ZW0ucm91bmRlZEhvbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBp
dGVtLmNvbG9yKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFBhdGgo
bV9wYXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5w
YXRoKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbEVsbGlwc2Uo
bV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17
Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKLSAgICBib3VuZHMuZXhwYW5kKG1fbGlu
ZVdpZHRoLCBtX2xpbmVXaWR0aCk7Ci0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotdm9pZCBTdHJv
a2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC5zdHJva2VSZWN0KG1fcmVjdCwgbV9saW5lV2lkdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkK
LXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8g
dGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhC
eVN0cm9raW5nUGF0aCgpLgotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5n
UmVjdCgpOwotICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25l
c3MpOwotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlUGF0aCht
X3BhdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0u
cGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBT
dHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlj
a25lc3MoKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Ci0gICAgYm91bmRzLmV4
cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgcmV0dXJuIGJvdW5k
czsKLX0KLQotdm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVjdCk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VF
bGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJS
ZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fb3BhY2l0eSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQotewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLX0KLQot
I2lmIFVTRShDRykKLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsK
LX0KLQotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Ci19Ci0jZW5kaWYK
LQotdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2Nh
bGVGYWN0b3IpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5z
bGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8
PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMg
PDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVD
YXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMgPDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFn
ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8
PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBicmVhazsKLSNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5h
dGl2ZS1pbWFnZSI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRl
cm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMtZm9yLXRleHQiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1m
b3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlw
c2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UGF0aDogdHMgPDwgImRyYXctcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdQYXRoOiB0cyA8PCAiZHJhdy1mb2N1cy1yaW5nLXBhdGgiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmct
cmVjdHMiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwt
cmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8
PCAiZmlsbC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21w
b3NpdGVkLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
IHRzIDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8ICJmaWxsLXBhdGgi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMgPDwgImZpbGwtZWxs
aXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHRzIDw8ICJzdHJv
a2UtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHRzIDw8ICJz
dHJva2UtcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHRz
IDw8ICJzdHJva2UtZWxsaXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDogdHMgPDwgImNsZWFyLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOiB0cyA8PCAiYmVnaW4tdHJhbnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJlbmQtdHJh
bnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5U3Ryb2tlUGF0dGVybjogdHMgPDwgImFwcGx5LXN0cm9rZS1wYXR0ZXJuIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwt
cGF0dGVybiI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBncm91cCh0cyk7Ci0gICAgdHMgPDwgaXRlbS50eXBlKCk7Ci0KLSAgICAvLyBGSVhNRTog
TWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJhdGlv
biBzd2l0Y2hlcwotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTYXZlPihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxUcmFuc2xhdGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxT
Y2FsZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KGl0
ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U2V0TGluZUpvaW4+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRo
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ltYWdlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TmF0aXZl
SW1hZ2U+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRo
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Q29sb3I+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PEZpbGxQYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9r
ZVBhdGg+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8g
SXRlbXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCi0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSNpZiBVU0UoQ0cp
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKKyAgICBBU1NFUlQo
aW5kZXggPCBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLmFyZ3VtZW50c05hbWVzLnNpemUoKSk7Cisg
ICAgcmV0dXJuIGl0ZW1EZXNjcmlwdG9yKG1fdHlwZSkuYXJndW1lbnRzTmFtZXNbaW5kZXhdOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCBmMDBlYTdlODVjYi4u
NjI0NGVkMGJiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwzMiArMzEs
MzIgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaGVtZS5oIgorI2luY2x1
ZGUgIlRoZW1lVHlwZXMuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNlbmRpZgogCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRl
eHRTdHJlYW07Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEltYWdlUGFpbnRp
bmdPcHRpb25zOwotCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCiBlbnVtIGNsYXNzIEl0ZW1U
eXBlIHsKLSAgICBTYXZlLAorICAgIE1pbiA9IDAsCisgICAgU2F2ZSA9IE1pbiwKICAgICBSZXN0
b3JlLAorICAgIFNldFN0YXRlLAogICAgIFRyYW5zbGF0ZSwKICAgICBSb3RhdGUsCiAgICAgU2Nh
bGUsCiAgICAgQ29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0U3RhdGUsCiAgICAgU2V0TGluZUNhcCwK
ICAgICBTZXRMaW5lRGFzaCwKICAgICBTZXRMaW5lSm9pbiwKQEAgLTY2LDEzICs2NiwxNyBAQCBl
bnVtIGNsYXNzIEl0ZW1UeXBlIHsKICAgICBDbGlwT3V0LAogICAgIENsaXBPdXRUb1BhdGgsCiAg
ICAgQ2xpcFBhdGgsCisgICAgQXBwbHlTdHJva2VQYXR0ZXJuLAorICAgIEFwcGx5RmlsbFBhdHRl
cm4sCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKKworICAgIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIsCisgICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIsCiAgICAgRHJhd0dseXBocywKICAgICBE
cmF3SW1hZ2UsCiAgICAgRHJhd1RpbGVkSW1hZ2UsCiAgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2Us
Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCiAgICAgRHJhd05hdGl2ZUltYWdlLAotI2VuZGlm
CiAgICAgRHJhd1BhdHRlcm4sCiAgICAgRHJhd1JlY3QsCiAgICAgRHJhd0xpbmUsCkBAIC04Miw2
ICs4NiwxMCBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIHsKICAgICBEcmF3UGF0aCwKICAgICBEcmF3
Rm9jdXNSaW5nUGF0aCwKICAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRHJhd0ljb24sCisg
ICAgRHJhd1dpZGdldCwKKyAgICBEcmF3U2Nyb2xsYmFyLAorICAgIERyYXdUaGVtZSwKICAgICBG
aWxsUmVjdCwKICAgICBGaWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVu
dCwKQEAgLTk0LDEyOTUgKzEwMiw5MzMgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgU3Ry
b2tlUGF0aCwKICAgICBTdHJva2VFbGxpcHNlLAogICAgIENsZWFyUmVjdCwKLSAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyLAotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAotI2lmIFVTRShDRykK
LSAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3Jk
ZWQgaXRlbS4KLSAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBh
IHJlY29yZGVkIGl0ZW0uCi0jZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFjdG9yLAorICAg
IE1heAogfTsKIAogY2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKIHB1Ymxp
YzoKLSAgICBJdGVtKCkgPSBkZWxldGU7Ci0KLSAgICBJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAg
ICAgIDogbV90eXBlKHR5cGUpCi0gICAgewotICAgIH0KLQogICAgIHZpcnR1YWwgfkl0ZW0oKSA9
IGRlZmF1bHQ7CiAKLSAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3R5cGU7Ci0gICAgfQotCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0ID0gMDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Rpc3BsYXlM
aXN0SXRlbSA9IHRydWU7CisgICAgdmlydHVhbCBib29sIGlzR2VvbWV0cnlJdGVtKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0
ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICAKLSAgICAvLyBBIHN0YXRlIGl0ZW0gaXMgb25lIHByZXNlcnZlZCBieSBT
YXZlL1Jlc3RvcmUuCi0gICAgYm9vbCBpc1N0YXRlSXRlbSgpIGNvbnN0CisgICAgdmlydHVhbCB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBpc1N0YXRlSXRlbVR5cGUobV90eXBlKTsKKyAgICAgICAgdHMgPDwgbmFtZSgpOwogICAgIH0K
IAotICAgIHN0YXRpYyBib29sIGlzU3RhdGVJdGVtVHlwZShJdGVtVHlwZSBpdGVtVHlwZSkKKyAg
ICBJdGVtVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgV1RGOjpDU3Ry
aW5nIGR1bXAoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEl0ZW0oSXRlbVR5cGUgdHlwZSkK
KyAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoaXRlbVR5cGUp
IHsKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFRyYW5zbGF0ZToKLSAgICAgICAgY2FzZSBJdGVt
VHlwZTo6IFJvdGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNjYWxlOgotICAgICAgICBj
YXNlIEl0ZW1UeXBlOjogQ29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBT
ZXRTdGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVDYXA6Ci0gICAgICAgIGNh
c2UgSXRlbVR5cGU6OiBTZXRMaW5lRGFzaDoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExp
bmVKb2luOgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IENsZWFyU2hhZG93OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxP
R19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlm
Ci0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVtJik7CisgICAgU3RyaW5n
IG5hbWUoKSBjb25zdDsKKyAgICBTdHJpbmcgYXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29u
c3Q7CiAKLXByaXZhdGU6CiAgICAgSXRlbVR5cGUgbV90eXBlOwogfTsKIAotY2xhc3MgRHJhd2lu
Z0l0ZW0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBHZW9tZXRyeUl0ZW0gOiBwdWJsaWMgSXRlbSB7
CiBwdWJsaWM6Ci0gICAgRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICAgICAgOiBJdGVt
KHR5cGUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVj
dCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGV4dGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQogICAgIGJvb2wgZXh0ZW50S25vd24o
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0KIAotICAgIC8v
IFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2NhbCBjb29yZGlu
YXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zvcm0sIHNoYWRv
dyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBt
X2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5z
Zm9ybXMgaW50byBhY2NvdW50LgotfTsKLQotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNhdmU+IGNyZWF0ZSgpCisgICAgdm9pZCBzZXRFeHRlbnQo
Y29uc3QgRmxvYXRSZWN0JiBleHRlbnQpIHsgbV9leHRlbnQgPSBleHRlbnQ7IH0KKyAgICBjb25z
dCBGbG9hdFJlY3QgZXh0ZW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNhdmUpOworICAgICAgICByZXR1cm4gbV9leHRlbnQudmFsdWVfb3IoRmxvYXRSZWN0
KCkpOwogICAgIH0KIAotICAgIC8vIEluZGV4IGluIHRoZSBkaXNwbGF5IGxpc3Qgb2YgdGhlIGNv
cnJlc3BvbmRpbmcgUmVzdG9yZSBpdGVtLiAwIGlmIHVubWF0Y2hlZC4KLSAgICBzaXplX3QgcmVz
dG9yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9yZXN0b3JlSW5kZXg7IH0KLSAgICB2b2lkIHNl
dFJlc3RvcmVJbmRleChzaXplX3QgaW5kZXgpIHsgbV9yZXN0b3JlSW5kZXggPSBpbmRleDsgfQot
Ci1wcml2YXRlOgotICAgIFNhdmUoKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0
OyB9CiAgICAgCi0gICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OwotfTsKLQotY2xhc3Mg
UmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+
IGNyZWF0ZSgpCitwcm90ZWN0ZWQ6CisgICAgR2VvbWV0cnlJdGVtKEl0ZW1UeXBlIHR5cGUpCisg
ICAgICAgIDogSXRlbSh0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UmVzdG9yZSk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIFJlc3RvcmUoKQotICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMp
IGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAg
dHMuc3RhcnRHcm91cCgpOworICAgICAgICB0cyA8PCAiZXh0ZW50ICI7CisgICAgICAgIGlmIChl
eHRlbnRLbm93bigpKQorICAgICAgICAgICAgdHMgPDwgZXh0ZW50KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHRzIDw8ICJ1bmtub3duIjsKKyAgICAgICAgdHMuZW5kR3JvdXAoKTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsKIH07CiAKLWNsYXNzIFRyYW5z
bGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4g
Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQXBwbGllciwgQXBw
bGllciBhcHBsaWVyLCBjbGFzcy4uLiBBcmd1bWVudHM+CitjbGFzcyBHcmFwaGljc0l0ZW0gewor
cHJvdGVjdGVkOgorICAgIEdyYXBoaWNzSXRlbShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwog
ICAgIH0KIAotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5
KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLXByaXZhdGU6Ci0gICAgVHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQotICAgICAg
ICAsIG1feCh4KQotICAgICAgICAsIG1feSh5KQorICAgIHRlbXBsYXRlPCBzdGQ6OnNpemVfdCBJ
PgorICAgIGNvbnN0IGF1dG8mIGFyZ3VtZW50KCkgY29uc3QKICAgICB7CisgICAgICAgIHJldHVy
biBzdGQ6OmdldDxJPihtX2FyZ3VtZW50cyk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1feDsKLSAgICBmbG9h
dCBtX3k7Ci19OwotCi1jbGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOworICAgICAgICBhcHBs
eShjb250ZXh0LCBzdGQ6OmluZGV4X3NlcXVlbmNlX2ZvcjxBcmd1bWVudHMuLi4+KCkpOwogICAg
IH0KIAotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi1wcml2
YXRlOgotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpS
b3RhdGUpCi0gICAgICAgICwgbV9hbmdsZShhbmdsZSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGl0ZXJhcnRlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogICAg
IHsKKyAgICAgICAgaXRlcmFydGUoV1RGTW92ZShmdW5jdG9yKSwgc3RkOjppbmRleF9zZXF1ZW5j
ZV9mb3I8QXJndW1lbnRzLi4uPigpKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFk
aWFucy4KLX07Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90Li4uIEluZGljZXM+CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SW5kaWNlcy4uLj4pIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7Cisg
ICAgICAgIChjb250ZXh0LiphcHBsaWVyKShzdGQ6OmdldDxJbmRpY2VzPihtX2FyZ3VtZW50cyku
Li4pOwogICAgIH0KIAotICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9Ci0KLXByaXZhdGU6Ci0gICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxlKQotICAgICAgICAsIG1fc2l6ZShzaXpl
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHN0ZDo6c2l6ZV90Li4uIEluZGljZXM+
CisgICAgdm9pZCBpdGVyYXJ0ZShGdW5jdG9yJiYgZnVuY3Rvciwgc3RkOjppbmRleF9zZXF1ZW5j
ZTxJbmRpY2VzLi4uPikgY29uc3QKICAgICB7CisgICAgICAgIHVzaW5nIHN3YWxsb3cgPSBpbnRb
XTsKKyAgICAgICAgKHZvaWQpc3dhbGxvdyB7IDEsIChmdW5jdG9yKEluZGljZXMsIHN0ZDo6Z2V0
PEluZGljZXM+KG1fYXJndW1lbnRzKSksIGludCB7IH0pLi4uIH07CiAgICAgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0U2l6
ZSBtX3NpemU7CisgICAgc3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+IG1fYXJndW1lbnRzOwogfTsK
IAotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7Cit0ZW1wbGF0ZSA8SXRlbVR5
cGUgaXRlbVR5cGUsIHR5cGVuYW1lIEFwcGxpZXIsIEFwcGxpZXIgYXBwbGllciwgY2xhc3MuLi4g
QXJndW1lbnRzPgorY2xhc3MgU2V0dGluZ0l0ZW0gOiBwdWJsaWMgSXRlbSwgcHVibGljIEdyYXBo
aWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bWF0cml4KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTSht
YXRyaXgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ0l0ZW0oYXJndW1l
bnRzLi4uKSk7CiAgICAgfQogCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi1wcml2YXRlOgotICAgIENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5z
Zm9ybTsKLX07Ci0KLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZjxJdGVtPiBjcmVhdGUoQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZjxTZWxmLCBUPjo6dmFsdWUsICJUaGlzIGZ1bmN0aW9uIHNob3VsZCBjcmVhdGUgY2xhc3Nl
cyBmcm9tIFNldHRpbmdJdGVtLiIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9Ci0gICAgCi0gICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQogCi0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHVzaW5n
IEdyYXBoaWNzSXRlbUJhc2UgPSBHcmFwaGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1l
bnRzLi4uPjsKIAotICAgIHZvaWQgYWNjdW11bGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNv
bnN0OwotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKLQotICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7Ci1wcml2YXRlOgotICAgIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAgICAgICwg
bV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgU2V0dGluZ0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICAgICAgOiBJdGVtKGl0ZW1UeXBlKQorICAgICAgICAsIEdyYXBoaWNzSXRlbUJh
c2Uoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKICAgICB7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7Ci19OwotCi1jbGFzcyBTZXRMaW5l
Q2FwIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUNhcD4g
Y3JlYXRlKExpbmVDYXAgbGluZUNhcCkKKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0
cykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dExpbmVDYXAobGluZUNhcCkpOworICAgICAgICBJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAgR3Jh
cGhpY3NJdGVtQmFzZTo6aXRlcmFydGUoW3RoaXMsICZ0c10oc2l6ZV90IGluZGV4LCBjb25zdCBh
dXRvJiBhcmd1bWVudFZhbHVlKSB7CisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkodGhpcy0+
YXJndW1lbnROYW1lKGluZGV4KSwgYXJndW1lbnRWYWx1ZSk7CisgICAgICAgIH0pOwogICAgIH0K
LSAgICAKLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0K
IAogcHJpdmF0ZToKLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTZXRMaW5lQ2FwKQotICAgICAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQor
ICAgIHVzaW5nIFNlbGYgPSBTZXR0aW5nSXRlbTxpdGVtVHlwZSwgQXBwbGllciwgYXBwbGllciwg
QXJndW1lbnRzLi4uPjsKKworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6YXBwbHko
Y29udGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIExpbmVDYXAgbV9saW5lQ2FwOworICAgIHNpemVfdCBzaXplSW5C
eXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHNpemVvZigqdGhpcyk7IH0KIH07CiAKLWNs
YXNzIFNldExpbmVEYXNoIDogcHVibGljIEl0ZW0gewordGVtcGxhdGUgPEl0ZW1UeXBlIGl0ZW1U
eXBlLCB0eXBlbmFtZSBBcHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIsIGNsYXNzLi4uIEFyZ3VtZW50
cz4KK2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEdlb21ldHJ5SXRlbSwgcHVibGljIEdyYXBo
aWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5
LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRM
aW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd2luZ0l0ZW0oc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikp
OwogICAgIH0KIAotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3QgeyByZXR1
cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9kYXNoT2Zmc2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0TGluZURhc2gpCi0gICAgICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAg
ICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFJlZjxJdGVtPiBjcmVhdGUoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKICAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPFNlbGYsIFQ+Ojp2YWx1ZSwg
IlRoaXMgZnVuY3Rpb24gc2hvdWxkIGNyZWF0ZSBjbGFzc2VzIGZyb20gRHJhd2luZ0l0ZW0uIik7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLikpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdXNpbmcgR3JhcGhpY3NJdGVtQmFzZSA9IEdyYXBoaWNz
SXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+OwogCi0gICAgRGFzaEFycmF5IG1f
ZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07CisgICAgLy8gU2hvdWxkIG1h
dGNoIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkKKyAgICBjb25zdGV4cHIg
c3RhdGljIGZsb2F0IGNvbnN0IHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7CiAKLWNsYXNz
IFNldExpbmVKb2luIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBEcmF3aW5nSXRlbShBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IEdlb21ldHJ5SXRlbShpdGVtVHlwZSkKKyAg
ICAgICAgLCBHcmFwaGljc0l0ZW1CYXNlKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihs
aW5lSm9pbikpOwogICAgIH0KLSAgICAKLSAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KIAogcHJpdmF0ZToKLSAgICBTZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKLSAgICAg
ICAgLCBtX2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIFNlbGYgPSBEcmF3
aW5nSXRlbTxpdGVtVHlwZSwgQXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAg
IExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGlj
IEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4gY3JlYXRlKGZs
b2F0IGxpbWl0KQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TWl0ZXJM
aW1pdChsaW1pdCkpOworICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjphcHBseShjb250ZXh0KTsK
ICAgICB9CiAKLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxp
bWl0OyB9CisgICAgYm9vbCBpc0dlb21ldHJ5SXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBzaXplb2YoKnRoaXMpOyB9CiAKLXByaXZhdGU6Ci0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBt
aXRlckxpbWl0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCi0gICAg
ICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0
cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBHZW9tZXRyeUl0ZW06OmR1
bXAodHMpOworICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjppdGVyYXJ0ZShbdGhpcywgJnRzXShz
aXplX3QgaW5kZXgsIGNvbnN0IGF1dG8mIGFyZ3VtZW50VmFsdWUpIHsKKyAgICAgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSh0aGlzLT5hcmd1bWVudE5hbWUoaW5kZXgpLCBhcmd1bWVudFZhbHVlKTsK
KyAgICAgICAgfSk7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKIH07CiAKLWNsYXNzIENs
ZWFyU2hhZG93IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJT
aGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVh
clNoYWRvdyk7Ci0gICAgfQordXNpbmcgU2F2ZUJhc2UgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6U2F2ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6c2F2ZQorPjsKIAotcHJpdmF0ZToKLSAgICBDbGVhclNoYWRvdygpCi0gICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi0vLyBGSVhN
RTogdHJlYXQgYXMgRHJhd2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworY2xh
c3MgU2F2ZSA6IHB1YmxpYyBTYXZlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlw
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ2xpcChyZWN0KSk7Ci0gICAgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0
byBjcmVhdGUgPSBTYXZlQmFzZTo6Y3JlYXRlPFNhdmU+OwogCi0gICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBs
aXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCisg
ICAgc2l6ZV90IHJlc3RvcmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9
CisgICAgdm9pZCBzZXRSZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4
ID0gaW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQotICAgICAgICAsIG1fcmVjdChyZWN0KQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHVzaW5nIFNhdmVCYXNlOjpTYXZlQmFzZTsKIAotICAgIEZsb2F0UmVjdCBt
X3JlY3Q7Ci19OwotCi1jbGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOworICAgICAgICBTYXZlQmFz
ZTo6ZHVtcCh0cyk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIG1f
cmVzdG9yZUluZGV4KTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQotCi1wcml2YXRlOgotICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgICAgICwgbV9yZWN0
KHJlY3QpCi0gICAgewotICAgIH0KKyAgICBzaXplX3QgbV9yZXN0b3JlSW5kZXggeyAwIH07Cit9
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK3Vz
aW5nIFJlc3RvcmUgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6UmVzdG9yZSwKKyAgICB2
b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZQorPjsKIAotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwordXNpbmcgU2V0U3RhdGVCYXNlID0g
U2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlNldFN0YXRlLAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdlLAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlCis+OwogCi1jbGFzcyBDbGlwT3V0VG9QYXRoIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0U3RhdGUgOiBwdWJsaWMgU2V0U3RhdGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAg
Y29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTZXRTdGF0ZUJhc2U6OmNyZWF0ZTxTZXRTdGF0ZT47Cisg
ICAgdXNpbmcgU2V0U3RhdGVCYXNlOjpTZXRTdGF0ZUJhc2U7CisgICAgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsg
fQorfTsKIAotcHJpdmF0ZToKLSAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0g
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAgICAgLCBtX3BhdGgo
cGF0aCkKLSAgICB7Ci0gICAgfQordXNpbmcgVHJhbnNsYXRlID0gU2V0dGluZ0l0ZW08CisgICAg
SXRlbVR5cGU6OlRyYW5zbGF0ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0
LCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlLAorICAgIGZsb2F0LCBm
bG9hdAorPjsKKwordXNpbmcgUm90YXRlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlJv
dGF0ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0KSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0Ojpyb3RhdGUsCisgICAgZmxvYXQKKz47CisKK3VzaW5nIFNjYWxlID0gU2V0dGlu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OlNjYWxlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoY29uc3QgRmxvYXRTaXplJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2NhbGUsCisgICAg
RmxvYXRTaXplCis+OworCit1c2luZyBDb25jYXRlbmF0ZUNUTSA9IFNldHRpbmdJdGVtPAorICAg
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENU
TSwKKyAgICBBZmZpbmVUcmFuc2Zvcm0KKz47CisKK3VzaW5nIFNldExpbmVDYXAgPSBTZXR0aW5n
SXRlbTwKKyAgICBJdGVtVHlwZTo6U2V0TGluZUNhcCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRl
eHQ6OiopKExpbmVDYXApLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAsCisgICAg
TGluZUNhcAorPjsKKwordXNpbmcgU2V0TGluZURhc2ggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6U2V0TGluZURhc2gsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gsCisg
ICAgRGFzaEFycmF5LCBmbG9hdAorPjsKKwordXNpbmcgU2V0TGluZUpvaW4gPSBTZXR0aW5nSXRl
bTwKKyAgICBJdGVtVHlwZTo6U2V0TGluZUpvaW4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShMaW5lSm9pbiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4sCisgICAg
TGluZUpvaW4KKz47CisKK3VzaW5nIFNldE1pdGVyTGltaXQgPSBTZXR0aW5nSXRlbTwKKyAgICBJ
dGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZs
b2F0KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0LAorICAgIGZsb2F0Cis+
OworCit1c2luZyBDbGVhclNoYWRvdyA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdywKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJTaGFkb3cKKz47CisKK3VzaW5nIENsaXAgPSBTZXR0aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6Q2xpcCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZs
b2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNsaXAsCisgICAgRmxvYXRSZWN0Cis+
OworCit1c2luZyBDbGlwT3V0ID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBPdXQs
CisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAm
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0LAorICAgIEZsb2F0UmVjdAorPjsKKwordXNpbmcgQ2xp
cE91dFRvUGF0aCA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoLAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQsCisgICAgY29uc3QgUGF0aAorPjsKKwordXNpbmcgQ2xpcFBhdGgg
PSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgsCisgICAgY29uc3QgUGF0aCwgV2luZFJ1bGUKKz47CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworI2lmIFVTRShDRykK
K3VzaW5nIEFwcGx5U3Ryb2tlUGF0dGVybiA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybgorPjsKKwordXNpbmcgQXBwbHlG
aWxsUGF0dGVybiA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJu
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjphcHBseUZpbGxQYXR0ZXJuCis+OworI2VuZGlmCiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsK
LX07Cit1c2luZyBBcHBseURldmljZVNjYWxlRmFjdG9yID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
ciwKKyAgICBmbG9hdAorPjsKIAotY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMgSXRlbSB7CisvLyBJ
cyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIg
aXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCit1c2luZyBCZWdpblRyYW5zcGFyZW5jeUxh
eWVyID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIs
CisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICBmbG9hdAorPjsKKwordXNpbmcgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyCis+OworCit1c2luZyBEcmF3R2x5cGhz
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3R2x5cGhzLAorICAgIHZvaWQg
KEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpLAor
ICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMsCisgICAgUmVmPGNvbnN0IEZvbnQ+LCBH
bHlwaEJ1ZmZlciwgdW5zaWduZWQsIHVuc2lnbmVkLCBGbG9hdFBvaW50LCBGb250U21vb3RoaW5n
TW9kZQorPjsKKworY2xhc3MgRHJhd0dseXBocyA6IHB1YmxpYyBEcmF3R2x5cGhzQmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHdpbmRSdWxlKQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKFJlZjxjb25z
dCBGb250PiYmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIGZvbnRTbW9vdGhpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOworICAgICAgICBhdXRvIHN1YkdseXBoQnVmZmVy
ID0gRHJhd0dseXBoczo6c3ViR2x5cGhCdWZmZXIoZm9udC5wdHIoKSwgYnVmZmVyLCBmcm9tLCBu
dW1HbHlwaHMpOworICAgICAgICByZXR1cm4gRHJhd0dseXBoc0Jhc2U6OmNyZWF0ZShXVEZNb3Zl
KGZvbnQpLCBXVEZNb3ZlKHN1YkdseXBoQnVmZmVyKSwgMCwgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZyk7CiAgICAgfQogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQotICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV93
aW5kUnVsZTsgfQotCiBwcml2YXRlOgotICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIHdpbmRSdWxlKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQotICAg
ICAgICAsIG1fcGF0aChwYXRoKQotICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKLSAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwot
fTsKKyAgICB1c2luZyBEcmF3R2x5cGhzQmFzZTo6RHJhd0dseXBoc0Jhc2U7CiAKLWNsYXNzIERy
YXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCisgICAgc3RhdGlj
IEdseXBoQnVmZmVyIHN1YkdseXBoQnVmZmVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2Rl
KSk7CisgICAgICAgIEdseXBoQnVmZmVyIHN1YkJ1ZmZlcjsKKyAgICAgICAgY29uc3QgYXV0byog
Z2x5cGhzID0gYnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICAgICAgY29uc3QgYXV0byogYWR2YW5j
ZXMgPSBidWZmZXIuYWR2YW5jZXMoZnJvbSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtR2x5cGhzOyArK2kpCisgICAgICAgICAgICBzdWJCdWZmZXIuYWRkKGdseXBoc1tpXSwg
Zm9udCwgYWR2YW5jZXNbaV0pOworICAgICAgICByZXR1cm4gc3ViQnVmZmVyOwogICAgIH0KIAot
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrTG9jYXRpb247IH0KLSAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9Ci0K
LSAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bEFuY2hvcjsgfQotCi0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxH
bHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczsg
fQotCi1wcml2YXRlOgotICAgIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBjb21wdXRlQm91bmRzKCk7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigp
IGNvbnN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29u
c3QgYXV0byYgZm9udCA9IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGZsb2F0IGFzY2VudCA9IGZv
bnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKKyAgICAgICAgZmxvYXQgZGVzY2VudCA9
IGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXREZXNjZW50KCk7CiAKLSAgICBSZWY8Rm9udD4gbV9m
b250OwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwotICAgIFZl
Y3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKLSAgICBGbG9hdFJlY3Qg
bV9ib3VuZHM7Ci0gICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247Ci0gICAgRmxvYXRTaXpl
IG1fbG9jYWxBbmNob3I7Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlOwot
fTsKKyAgICAgICAgY29uc3QgYXV0byYgZ2x5cGhCdWZmZXIgPSBhcmd1bWVudDwxPigpOworICAg
ICAgICBzaXplX3QgbnVtR2x5cGhzID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOworICAgICAgICBhdXRv
IGN1cnJlbnQgPSBhcmd1bWVudDw0PigpOwogCi1jbGFzcyBEcmF3SW1hZ2UgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlPiBjcmVhdGUoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgICAgICBGbG9h
dFJlY3QgYm91bmRzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsg
KytpKSB7CisgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IGdseXBoQnVm
ZmVyLmFkdmFuY2VBdChpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9h
dFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCks
IGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICAgICAgYm91bmRzLnVuaXRlKGdseXBoUmVjdCk7
CisgICAgICAgICAgICBjdXJyZW50Lm1vdmUoYWR2YW5jZS53aWR0aCgpLCBhZHZhbmNlLmhlaWdo
dCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KK307CiAKLSAg
ICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0g
ICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxv
YXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQordXNp
bmcgRHJhd0ltYWdlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3SW1hZ2Us
CisgICAgSW1hZ2VEcmF3UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxv
YXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitjbGFzcyBEcmF3
SW1hZ2UgOiBwdWJsaWMgRHJhd0ltYWdlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0
YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdJbWFnZUJhc2U6OmNyZWF0ZTxEcmF3SW1hZ2U+OworICAg
IHVzaW5nIERyYXdJbWFnZUJhc2U6OkRyYXdJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4g
bV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRp
b25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAg
RmxvYXRSZWN0IG1fZGVzdGluYXRpb247Ci0gICAgRmxvYXRSZWN0IG1fc291cmNlOwotICAgIElt
YWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7CisgICAgY29uc3Qgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLWNsYXNzIERy
YXdUaWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdUaWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
aXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBGbG9h
dFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0
IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgRmxv
YXRTaXplIHRpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQotICAgIEZsb2F0
U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9Cit1c2luZyBEcmF3VGls
ZWRJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2Us
CisgICAgSW1hZ2VEcmF3UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RpbGVkSW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0LCBGbG9hdFBv
aW50LCBGbG9hdFNpemUsIEZsb2F0U2l6ZSwgSW1hZ2VQYWludGluZ09wdGlvbnMKKz47CiAKK2Ns
YXNzIERyYXdUaWxlZEltYWdlIDogcHVibGljIERyYXdUaWxlZEltYWdlQmFzZSB7CitwdWJsaWM6
CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdUaWxlZEltYWdlQmFzZTo6
Y3JlYXRlPERyYXdUaWxlZEltYWdlPjsKKyAgICB1c2luZyBEcmF3VGlsZWRJbWFnZUJhc2U6OkRy
YXdUaWxlZEltYWdlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1F
OiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4g
VGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3Rp
bmF0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7Ci0gICAgRmxvYXRTaXplIG1fdGlsZVNp
emU7Ci0gICAgRmxvYXRTaXplIG1fc3BhY2luZzsKLSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBt
X2ltYWdlUGFpbnRpbmdPcHRpb25zOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Cit1c2luZyBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2Ug
PSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UsCisgICAg
SW1hZ2VEcmF3UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0
LCBGbG9hdFJlY3QsIEZsb2F0U2l6ZSwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6
IHB1YmxpYyBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2U6OmNyZWF0ZTxE
cmF3VGlsZWRTY2FsZWRJbWFnZT47CisgICAgdXNpbmcgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdUaWxlZFNjYWxl
ZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQot
Ci0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdl
cyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3Qg
aGF2ZSB0byBiZSBtdXRhYmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZs
b2F0UmVjdCBtX3NvdXJjZTsKLSAgICBGbG9hdFNpemUgbV90aWxlU2NhbGVGYWN0b3I7Ci0gICAg
SW1hZ2U6OlRpbGVSdWxlIG1faFJ1bGU7Ci0gICAgSW1hZ2U6OlRpbGVSdWxlIG1fdlJ1bGU7Ci0g
ICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotI2lm
IFVTRShDRykgfHwgVVNFKENBSVJPKQotY2xhc3MgRHJhd05hdGl2ZUltYWdlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdOYXRpdmVJbWFnZT4gY3Jl
YXRlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVu
ZE1vZGUsIG9yaWVudGF0aW9uKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQotICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkgfHwgVVNFKENBSVJPKQordXNpbmcgRHJhd05hdGl2ZUltYWdlQmFzZSA9IERyYXdpbmdJdGVt
PAorICAgIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250
ZXh0OjoqKShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb24pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFn
ZSwKKyAgICBOYXRpdmVJbWFnZVB0ciwgRmxvYXRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbgorPjsKIAorY2xh
c3MgRHJhd05hdGl2ZUltYWdlIDogcHVibGljIERyYXdOYXRpdmVJbWFnZUJhc2UgeworcHVibGlj
OgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TmF0aXZlSW1hZ2VCYXNl
OjpjcmVhdGU8RHJhd05hdGl2ZUltYWdlPjsKKyAgICB1c2luZyBEcmF3TmF0aXZlSW1hZ2VCYXNl
OjpEcmF3TmF0aXZlSW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TmF0aXZlSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pOwotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Ci0KLSNpZiBVU0UoQ0cpCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IG1faW1hZ2U7Ci0jZW5kaWYKLSAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7Ci0g
ICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Ci0gICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKLSNp
ZiBVU0UoQ0cpCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKLSAgICBCbGVuZE1vZGUgbV9i
bGVuZE1vZGU7Ci0jZW5kaWYKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247Cisg
ICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDI+KCk7IH0KIH07
CiAjZW5kaWYKIAotY2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpOwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBp
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5UcmFu
c2Zvcm07IH0KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RpbGVS
ZWN0OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQotICAgIEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9
Ci0gICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KK3Vz
aW5nIERyYXdQYXR0ZXJuQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybiwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUp
LAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuLAorICAgIFJlZjxJbWFnZT4sIEZs
b2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIEZsb2F0U2l6
ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZQorPjsKIAotcHJpdmF0ZToKLSAgICBEcmF3
UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZU5vcm1hbCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTog
RHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRo
aXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9w
YXR0ZXJuVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX3RpbGVSZWN0OwotICAgIEZsb2F0UmVj
dCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9waGFzZTsKLSAgICBGbG9hdFNpemUg
bV9zcGFjaW5nOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1f
YmxlbmRNb2RlOwotfTsKLQotLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0
aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgotY2xh
c3MgQmVnaW5UcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBE
cmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3UGF0dGVybkJhc2UgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9v
cGFjaXR5OyB9Ci0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1BhdHRl
cm5CYXNlOjpjcmVhdGU8RHJhd1BhdHRlcm4+OworICAgIHVzaW5nIERyYXdQYXR0ZXJuQmFzZTo6
RHJhd1BhdHRlcm5CYXNlOwogcHJpdmF0ZToKLSAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpCi0gICAgICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBmbG9hdCBtX29wYWNpdHk7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5j
eUxheWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KK3VzaW5nIERyYXdSZWN0QmFzZSA9IERyYXdpbmdJ
dGVtPEl0ZW1UeXBlOjpEcmF3UmVjdCwgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCksICZHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0LCBGbG9hdFJlY3Qs
IGZsb2F0PjsKIAorY2xhc3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd1JlY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1JlY3RCYXNlOjpjcmVh
dGU8RHJhd1JlY3Q+OworICAgIHVzaW5nIERyYXdSZWN0QmFzZTo6RHJhd1JlY3RCYXNlOwogcHJp
dmF0ZToKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3
UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3
UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1JlY3QocmVjdCwgYm9y
ZGVyVGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KLSAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVy
biBtX2JvcmRlclRoaWNrbmVzczsgfQordXNpbmcgRHJhd0xpbmVCYXNlID0gRHJhd2luZ0l0ZW08
CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6Kiko
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZSwKKyAgICBGbG9hdFBvaW50LCBGbG9hdFBvaW50Cis+OwogCitjbGFzcyBE
cmF3TGluZSA6IHB1YmxpYyBEcmF3TGluZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGluZUJhc2U6OmNyZWF0ZTxEcmF3TGluZT47CisgICAg
dXNpbmcgRHJhd0xpbmVCYXNlOjpEcmF3TGluZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgICAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkK
LSAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3QgYm91bmRzOworICAg
ICAgICBib3VuZHMuZml0VG9Qb2ludHMoYXJndW1lbnQ8MD4oKSwgYXJndW1lbnQ8MT4oKSk7Cisg
ICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIGZsb2F0IG1fYm9yZGVyVGhp
Y2tuZXNzOwogfTsKIAotY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7Ci0gICAgfQotCi0gICAgRmxv
YXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQotICAgIEZsb2F0UG9p
bnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDI7IH0KK3VzaW5nIERyYXdMaW5lc0Zv
clRleHRCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQs
CisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lc0ZvclRleHQsCisgICAgRmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBi
b29sLCBTdHJva2VTdHlsZQorPjsKIAorY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBE
cmF3TGluZXNGb3JUZXh0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IERyYXdMaW5lc0ZvclRleHRCYXNlOjpjcmVhdGU8RHJhd0xpbmVzRm9yVGV4dD47
CisgICAgdXNpbmcgRHJhd0xpbmVzRm9yVGV4dEJhc2U6OkRyYXdMaW5lc0ZvclRleHRCYXNlOwog
cHJpdmF0ZToKLSAgICBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xp
bmUpCi0gICAgICAgICwgbV9wb2ludDEocG9pbnQxKQotICAgICAgICAsIG1fcG9pbnQyKHBvaW50
MikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNs
b3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoKSByZXR1cm5zLgorICAgICAgICBpZiAoIWFyZ3VtZW50PDE+KCkuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRzKGFyZ3VtZW50PDA+KCksIEZsb2F0U2l6ZShhcmd1bWVudDwxPigpLmxhc3QoKSwgY29u
dGV4dC5zdHJva2VUaGlja25lc3MoKSkpOworICAgICAgICBib3VuZHMuaW5mbGF0ZSgxKTsgLy8g
QWNjb3VudCBmb3IgcGl4ZWwgc25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFz
IGl0IGRvZXNuJ3QgdGFrZSB0aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICAgICAgcmV0dXJuIGJv
dW5kczsKICAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0UG9pbnQgbV9wb2lu
dDE7Ci0gICAgRmxvYXRQb2ludCBtX3BvaW50MjsKIH07CiAKLWNsYXNzIERyYXdMaW5lc0ZvclRl
eHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xp
bmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwg
bG9jYWxBbmNob3IsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VXaWR0aCkp
OwotICAgIH0KLQotICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KLSAgICBj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xv
Y2F0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxBbmNob3I7IH0KLSAgICBGbG9hdFBvaW50IHBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja0xvY2F0aW9uICsgbV9sb2NhbEFuY2hvcjsgfQotICAgIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aHM7IH0KLSAgICBib29sIGlzUHJpbnRp
bmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9Ci0gICAgYm9vbCBkb3VibGVMaW5lcygp
IGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KK3VzaW5nIERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXJCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyLAorICAgIEZsb2F0UG9pbnQsIGZsb2F0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZQorPjsKIAorY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1h
cmtlciA6IHB1YmxpYyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyQmFzZSB7CitwdWJsaWM6Cisg
ICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXJCYXNlOjpjcmVhdGU8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj47CisgICAgdXNpbmcgRHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlckJhc2U6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNl
OwogcHJpdmF0ZToKLSAgICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0
aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKLSAg
ICAgICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKLSAgICAgICAgLCBtX2xvY2Fs
QW5jaG9yKGxvY2FsQW5jaG9yKQotICAgICAgICAsIG1fd2lkdGhzKHdpZHRocykKLSAgICAgICAg
LCBtX3N0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKQotICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRp
bmcpCi0gICAgICAgICwgbV9kb3VibGVMaW5lcyhkb3VibGVMaW5lcykKKyAgICBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8g
cmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKCkgcmV0dXJucy4KKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcyhhcmd1bWVudDwwPigpLCBGbG9hdFNpemUoYXJndW1lbnQ8MT4oKSwgY01pc3NwZWxs
aW5nTGluZVRoaWNrbmVzcykpOworICAgICAgICBib3VuZHMuaW5mbGF0ZShjTWlzc3BlbGxpbmdM
aW5lVGhpY2tuZXNzKTsgLy8gQWNjb3VudCBmb3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcu
CisgICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwotICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5j
aG9yOwotICAgIERhc2hBcnJheSBtX3dpZHRoczsKLSAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOwot
ICAgIGJvb2wgbV9wcmludGluZzsKLSAgICBib29sIG1fZG91YmxlTGluZXM7CiB9OwogCi1jbGFz
cyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihwb2ludCwgd2lkdGgsIHN0eWxlKSk7Ci0gICAgfQotCi0gICAgRmxvYXRQ
b2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KLSAgICBmbG9hdCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KK3VzaW5nIERyYXdFbGxpcHNlQmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bGxpcHNlLAorICAgIEZsb2F0UmVjdAorPjsKIAorY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMg
RHJhd0VsbGlwc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3Jl
YXRlID0gRHJhd0VsbGlwc2VCYXNlOjpjcmVhdGU8RHJhd0VsbGlwc2U+OworICAgIHVzaW5nIERy
YXdFbGxpcHNlQmFzZTo6RHJhd0VsbGlwc2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCi0gICAgICAgICwgbV9wb2ludChwb2ludCkK
LSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9pbnQ7
Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxl
OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9
CiB9OwogCi1jbGFzcyBEcmF3RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CisjaWYgVVNF
KENHKQordXNpbmcgRHJhd1BhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRy
YXdQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47CisKK2NsYXNz
IERyYXdQYXRoIDogcHVibGljIERyYXdQYXRoQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEcmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3Rl
eHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdQYXRoQmFzZTo6Y3JlYXRlPERyYXdQYXRoPjsK
KyAgICB1c2luZyBEcmF3UGF0aEJhc2U6OkRyYXdQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAg
fQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3Qg
bV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDww
PigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogfTsKKyNlbmRpZgogCi1jbGFzcyBEcmF3UGF0aCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4g
Y3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3UGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlID0gRHJh
d2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoLAorICAgIHZvaWQgKEdy
YXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nLAorICAgIGNvbnN0IFBhdGgs
IGZsb2F0LCBmbG9hdCwgQ29sb3IKKz47CiAKK2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVi
bGljIERyYXdGb2N1c1JpbmdQYXRoQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRp
YyBhdXRvIGNyZWF0ZSA9IERyYXdGb2N1c1JpbmdQYXRoQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1Jp
bmdQYXRoPjsKKyAgICB1c2luZyBEcmF3Rm9jdXNSaW5nUGF0aEJhc2U6OkRyYXdGb2N1c1JpbmdQ
YXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBh
dGgpCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJl
Y3QgYm91bmRzID0gYXJndW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJv
dW5kcy5pbmZsYXRlKHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgICAgIHJldHVybiBi
b3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJv
dW5kaW5nUmVjdCgpOyB9Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKIH07CiAKLWNsYXNzIERy
YXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Cit1c2luZyBEcmF3Rm9j
dXNSaW5nUmVjdHNCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0cywKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGb2N1c1JpbmcsCisgICAgVmVjdG9yPEZsb2F0UmVjdD4sIGZsb2F0LCBmbG9hdCwg
Q29sb3IKKz47CiAKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3Rm9jdXNS
aW5nUmVjdHNCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRl
ID0gRHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1JpbmdSZWN0cz47Cisg
ICAgdXNpbmcgRHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTo6RHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTsK
IHByaXZhdGU6Ci0gICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0
aCkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
LSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICAgICAgZm9yIChhdXRvJiByZWN0
IDogYXJndW1lbnQ8MD4oKSkKKyAgICAgICAgICAgIGJvdW5kcy51bml0ZShyZWN0KTsKKyAgICAg
ICAgYm91bmRzLmluZmxhdGUoc19wbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKKyAgICAgICAgcmV0
dXJuIGJvdW5kczsKICAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgUGF0
aCBtX3BhdGg7Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAgICBD
b2xvciBtX2NvbG9yOwogfTsKIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3VzaW5nIERyYXdJY29uQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1U
eXBlOjpEcmF3SWNvbiwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKEljb24mLCBjb25z
dCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNvbiwKKyAgICBSZWY8
SWNvbj4sIEZsb2F0UmVjdAorPjsKKyAgICAKK2NsYXNzIERyYXdJY29uIDogcHVibGljIERyYXdJ
Y29uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNy
ZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdHM7IH0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7
IH0KLSAgICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIGNv
bnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0
ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3SWNvbkJhc2U6OmNyZWF0ZTxEcmF3SWNvbj47
CisgICAgdXNpbmcgRHJhd0ljb25CYXNlOjpEcmF3SWNvbkJhc2U7CiBwcml2YXRlOgotICAgIERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzKQotICAgICAgICAsIG1fcmVjdHMocmVj
dHMpCi0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
Ci0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fcmVjdHM7Ci0gICAgZmxvYXQgbV93aWR0
aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBG
aWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Cit1c2luZyBEcmF3V2lkZ2V0QmFzZSA9IERy
YXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3V2lkZ2V0LAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdXaWRnZXQsCisgICAgUmVmPFdpZGdldD4sIEludFJlY3QKKz47CisgICAgCitjbGFz
cyBEcmF3V2lkZ2V0IDogcHVibGljIERyYXdXaWRnZXRCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOwotICAgIH0KLQotICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1dpZGdldEJhc2U6OmNyZWF0ZTxEcmF3V2lkZ2V0
PjsKKyAgICB1c2luZyBEcmF3V2lkZ2V0QmFzZTo6RHJhd1dpZGdldEJhc2U7CiBwcml2YXRlOgot
ICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RmlsbFJlY3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAg
IH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0
IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0
KGFyZ3VtZW50PDE+KCkpOyB9CiB9OwotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZy
b20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworICAgIAordXNpbmcgRHJhd1Njcm9sbGJhckJhc2UgPSBEcmF3aW5nSXRlbTwK
KyAgICBJdGVtVHlwZTo6RHJhd1Njcm9sbGJhciwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpk
cmF3U2Nyb2xsYmFyLAorICAgIFJlZjxTY3JvbGxiYXI+LCBJbnRSZWN0Cis+OworICAgIAorY2xh
c3MgRHJhd1Njcm9sbGJhciA6IHB1YmxpYyBEcmF3U2Nyb2xsYmFyQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
YXV0byBjcmVhdGUgPSBEcmF3U2Nyb2xsYmFyQmFzZTo6Y3JlYXRlPERyYXdTY3JvbGxiYXI+Owor
ICAgIHVzaW5nIERyYXdTY3JvbGxiYXJCYXNlOjpEcmF3U2Nyb2xsYmFyQmFzZTsKIHByaXZhdGU6
Ci0gICAgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAg
RmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoYXJndW1lbnQ8MT4oKSk7IH0KIH07Ci0KLWNs
YXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKKyAgICAKK3Vz
aW5nIERyYXdUaGVtZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RoZW1l
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoVGhlbWUmLCBDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0
LCBib29sLCBib29sKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUsCisgICAgVGhl
bWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEZsb2F0UmVjdCwgZmxvYXQsIHZvaWQq
LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wKKz47CisgICAgCitjbGFzcyBEcmF3VGhlbWUgOiBw
dWJsaWMgRHJhd1RoZW1lQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdp
dGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3Jh
ZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0
ZSA9IERyYXdUaGVtZUJhc2U6OmNyZWF0ZTxEcmF3VGhlbWU+OworICAgIHVzaW5nIERyYXdUaGVt
ZUJhc2U6OkRyYXdUaGVtZUJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCkKLSAgICAgICAgLCBtX3Jl
Y3QocmVjdCkKLSAgICAgICAgLCBtX2dyYWRpZW50KGdyYWRpZW50KQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7Ci0gICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtl
IHRoaXMgbm90IG11dGFibGUKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
YXJndW1lbnQ8Mz4oKTsgfQogfTsKIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGlj
IERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJs
ZW5kTW9kZSkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcDsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X2JsZW5kTW9kZTsgfQordXNpbmcgRmlsbFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxSZWN0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxv
YXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0
Cis+OwogCitjbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBGaWxsUmVjdEJhc2UgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdEJhc2U6OmNyZWF0ZTxG
aWxsUmVjdD47CisgICAgdXNpbmcgRmlsbFJlY3RCYXNlOjpGaWxsUmVjdEJhc2U7CiBwcml2YXRl
OgotICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0g
ICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAg
ICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1f
b3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAg
IEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVi
bGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSb3VuZGVkUmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7Ci0gICAgfQotCi0g
ICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
OyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2Rl
OyB9Cit1c2luZyBGaWxsUmVjdFdpdGhDb2xvckJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0LAorICAgIEZsb2F0UmVjdCwgQ29sb3IKKz47CiAKK2NsYXNzIEZpbGxSZWN0V2l0aENv
bG9yIDogcHVibGljIEZpbGxSZWN0V2l0aENvbG9yQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3Rl
eHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSZWN0V2l0aENvbG9yQmFzZTo6Y3JlYXRlPEZp
bGxSZWN0V2l0aENvbG9yPjsKKyAgICB1c2luZyBGaWxsUmVjdFdpdGhDb2xvckJhc2U6OkZpbGxS
ZWN0V2l0aENvbG9yQmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQot
ICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAg
ICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBj
b25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAot
Y2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikp
OwotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQordXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRC
YXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQm
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCwKKyAgICBGbG9hdFJlY3QsIFJlZjxH
cmFkaWVudD4KKz47CiAKK2NsYXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIEZpbGxS
ZWN0V2l0aEdyYWRpZW50QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50QmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aEdy
YWRpZW50PjsKKyAgICB1c2luZyBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2U6OkZpbGxSZWN0V2l0
aEdyYWRpZW50QmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAg
ICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQotICAgICAgICAsIG1fY29sb3Io
Y29sb3IpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRl
ZEhvbGVSZWN0OwotICAgIENvbG9yIG1fY29sb3I7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxQYXRoIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVh
dGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZpbGxQYXRoKHBhdGgpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9Cit1c2luZyBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICB2b2lkIChHcmFw
aGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisg
ICAgRmxvYXRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZQorPjsKIAor
Y2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIEZpbGxDb21wb3NpdGVkUmVjdEJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsQ29tcG9z
aXRlZFJlY3RCYXNlOjpjcmVhdGU8RmlsbENvbXBvc2l0ZWRSZWN0PjsKKyAgICB1c2luZyBGaWxs
Q29tcG9zaXRlZFJlY3RCYXNlOjpGaWxsQ29tcG9zaXRlZFJlY3RCYXNlOwogcHJpdmF0ZToKLSAg
ICBGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpGaWxsUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQotCi0g
ICAgY29uc3QgUGF0aCBtX3BhdGg7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmlsbEVsbGlwc2UocmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9Cit1c2luZyBGaWxsUm91bmRlZFJlY3RCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCwKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5k
TW9kZSksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0LAorICAgIEZsb2F0
Um91bmRlZFJlY3QsIENvbG9yLCBCbGVuZE1vZGUKKz47CiAKK2NsYXNzIEZpbGxSb3VuZGVkUmVj
dCA6IHB1YmxpYyBGaWxsUm91bmRlZFJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIg
c3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJvdW5kZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxSb3Vu
ZGVkUmVjdD47CisgICAgdXNpbmcgRmlsbFJvdW5kZWRSZWN0QmFzZTo6RmlsbFJvdW5kZWRSZWN0
QmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAgICAgLCBt
X3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCkucmVjdCgpOyB9CiB9OwogCi1jbGFzcyBTdHJv
a2VSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0
cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGlu
ZVdpZHRoKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICBmbG9hdCBsaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0
aDsgfQordXNpbmcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlID0gRHJhd2luZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUsCisgICAgRmxvYXRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0LCBDb2xvcgorPjsKIAorY2xhc3Mg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVC
YXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGVCYXNlOjpjcmVhdGU8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+Owor
ICAgIHVzaW5nIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFzZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGVCYXNlOwogcHJpdmF0ZToKLSAgICBTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJv
a2VSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fbGluZVdpZHRoKGxp
bmVXaWR0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJl
Y3QgbV9yZWN0OwotICAgIGZsb2F0IG1fbGluZVdpZHRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBTdHJva2VQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBh
dGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRmlsbFBhdGhCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoLAorICAg
IGNvbnN0IFBhdGgKKz47CiAKK2NsYXNzIEZpbGxQYXRoIDogcHVibGljIEZpbGxQYXRoQmFzZSB7
CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxQYXRoQmFz
ZTo6Y3JlYXRlPEZpbGxQYXRoPjsKKyAgICB1c2luZyBGaWxsUGF0aEJhc2U6OkZpbGxQYXRoQmFz
ZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgICAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRo
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IFBhdGggbV9w
YXRoOwotICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
fTsKIAotY2xhc3MgU3Ryb2tlRWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHJva2VFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShy
ZWN0KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KK3VzaW5nIEZpbGxFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBl
OjpGaWxsRWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0
UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlLAorICAgIEZsb2F0UmVj
dAorPjsKIAorY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRmlsbEVsbGlwc2VCYXNlIHsKK3B1
YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbEVsbGlwc2VCYXNl
OjpjcmVhdGU8RmlsbEVsbGlwc2U+OworICAgIHVzaW5nIEZpbGxFbGxpcHNlQmFzZTo6RmlsbEVs
bGlwc2VCYXNlOwogcHJpdmF0ZToKLSAgICBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKLSAg
ICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xlYXJSZWN0KHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQordXNpbmcgU3Ryb2tlUmVjdEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6U3Ryb2tlUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0
LAorICAgIEZsb2F0UmVjdCwgZmxvYXQKKz47CiAKK2NsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMg
U3Ryb2tlUmVjdEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVh
dGUgPSBTdHJva2VSZWN0QmFzZTo6Y3JlYXRlPFN0cm9rZVJlY3Q+OworICAgIHVzaW5nIFN0cm9r
ZVJlY3RCYXNlOjpTdHJva2VSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgQ2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJS
ZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAg
ICAgIGJvdW5kcy5leHBhbmQoYXJndW1lbnQ8MT4oKSwgYXJndW1lbnQ8MT4oKSk7CisgICAgICAg
IHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotI2lmIFVTRShDRykKLWNsYXNzIEFw
cGx5U3Ryb2tlUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEFwcGx5U3Ryb2tlUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEFwcGx5U3Ryb2tlUGF0dGVybik7Ci0gICAgfQordXNpbmcgU3Ryb2tlUGF0aEJh
c2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U3Ryb2tlUGF0aCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47CiAKK2NsYXNzIFN0cm9rZVBhdGggOiBwdWJs
aWMgU3Ryb2tlUGF0aEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBTdHJva2VQYXRoQmFzZTo6Y3JlYXRlPFN0cm9rZVBhdGg+OworICAgIHVzaW5nIFN0
cm9rZVBhdGhCYXNlOjpTdHJva2VQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlTdHJva2VQ
YXR0ZXJuKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCisg
ICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgfQorICAgICAg
ICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIHN0cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNv
cnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ryb2tpbmdQYXRoKCkuCisgICAgICAgIGZsb2F0IHN0cm9r
ZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBGbG9hdFJlY3QgYm91
bmRzID0gYXJndW1lbnQ8MD4oKS5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgYm91bmRzLmV4cGFu
ZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgICAgIHJldHVybiBib3Vu
ZHM7CisgICAgfQogfTsKIAotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9
Cit1c2luZyBTdHJva2VFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRS
ZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSwKKyAgICBGbG9hdFJl
Y3QKKz47CiAKK2NsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgU3Ryb2tlRWxsaXBzZUJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VFbGxp
cHNlQmFzZTo6Y3JlYXRlPFN0cm9rZUVsbGlwc2U+OworICAgIHVzaW5nIFN0cm9rZUVsbGlwc2VC
YXNlOjpTdHJva2VFbGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlGaWxsUGF0dGVybigp
Ci0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsKKyAgICAgICAgRmxvYXRSZWN0IGJv
dW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tu
ZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiB9OwotI2Vu
ZGlmCi0KLWNsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPiBjcmVhdGUoZmxvYXQg
c2NhbGVGYWN0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseURl
dmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7Ci0gICAgfQogCi0gICAgZmxvYXQgc2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlRmFjdG9yOyB9Cit1c2luZyBDbGVhclJlY3RC
YXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsZWFyUmVjdCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdCwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIENsZWFyUmVjdCA6IHB1
YmxpYyBDbGVhclJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
Y3JlYXRlID0gQ2xlYXJSZWN0QmFzZTo6Y3JlYXRlPENsZWFyUmVjdD47CisgICAgdXNpbmcgQ2xl
YXJSZWN0QmFzZTo6Q2xlYXJSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yKQotICAgICAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3Ip
Ci0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1XVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOworaW5saW5lIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVt
JiBpdGVtKQoreworICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgIGl0
ZW0uZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCitpbmxpbmUgV1RGOjpDU3RyaW5nIEl0
ZW06OmR1bXAoKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7
CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJl
ZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0
ZTsgfSBcCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfR0VPTUVU
UllJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCisgICAgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBp
dGVtKSB7IHJldHVybiBpdGVtLnByZWRpY2F0ZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0o
RHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfR0VPTUVUUllJVEVNKEdlb21ldHJ5SXRlbSwgaXNHZW9tZXRyeUl0ZW0oKSkKIAog
I2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5
cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKICAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5
cGVOYW1lOyB9IFwKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNj
YWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRl
Q1RNKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcE91dFRvUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGlwUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShEcmF3R2x5cGhzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KERyYXdJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
VGlsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
VGlsZWRTY2FsZWRJbWFnZSkKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi0jZW5kaWYKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50KQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVkUmVjdCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRlZFJlY3Qp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBh
dGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2Up
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIp
Ci0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFw
cGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVhMjczMjZiNTYxLi5mODU5YzY5YTBmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MiwyMSArNTIsMjIgQEAgUmVj
b3JkZXI6On5SZWNvcmRlcigpCiAKIHZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKGNvbnN0
IEl0ZW0mIGl0ZW0pCiB7Ci0gICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpCiAjaWYgVVNFKENH
KQotICAgICAgICB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
IHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4KKyAgICBpZiAo
IWlzPEdlb21ldHJ5SXRlbT4oaXRlbSkgJiYgaXRlbS50eXBlKCkgIT0gSXRlbVR5cGU6OkFwcGx5
U3Ryb2tlUGF0dGVybiAmJiBpdGVtLnR5cGUoKSAhPSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVy
bikKKyNlbHNlCisgICAgaWYgKCFpczxHZW9tZXRyeUl0ZW0+KGl0ZW0pKQogI2VuZGlmCi0gICAg
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMgPSBj
dXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0ZUNoYW5nZXMuY2hh
bmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlKTsKLSAgICAgICAg
aWYgKGNoYW5nZXNGcm9tTGFzdFN0YXRlKSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zy
b21MYXN0U3RhdGUpKTsKLSAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFNldFN0YXRl
OjpjcmVhdGUoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0g
ICAgICAgICAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IDA7Ci0gICAgICAgICAgICBj
dXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci0g
ICAgICAgIH0KLSAgICAgICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRyYXdpbmcgPSB0cnVl
OworICAgICAgICByZXR1cm47CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3Rh
dGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0
ZSk7CisgICAgaWYgKGNoYW5nZXNGcm9tTGFzdFN0YXRlKSB7CisgICAgICAgIExPR19XSVRIX1NU
UkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAi
IDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFu
Z2VzRnJvbUxhc3RTdGF0ZSkpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChTZXRTdGF0
ZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRl
LCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpKTsKKyAgICAgICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdl
RmxhZ3MgPSAwOworICAgICAgICBjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3Rh
dGVDaGFuZ2VzLm1fc3RhdGU7CiAgICAgfQorICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JE
cmF3aW5nID0gdHJ1ZTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBmbGFncykKQEAgLTk5LDQ0ICsxMDAsNDQgQEAgdm9pZCBSZWNvcmRlcjo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6
Y3JlYXRlKG1pdGVyTGltaXQpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3R2x5cGhzOjpjcmVh
dGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tKSwgbnVtR2x5cGhzLCBGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHN0YXJ0UG9pbnQpLCBz
bW9vdGhpbmdNb2RlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0
ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKG1ha2VSZWYoZm9udCksIGdseXBoQnVm
ZmVyLCBmcm9tLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIGZvbnRTbW9vdGhpbmcpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVy
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ltYWdlOjpjcmVhdGUobWFr
ZVJlZihpbWFnZSksIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkp
OwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jl
c3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdU
aWxlZEltYWdlOjpjcmVhdGUobWFrZVJlZihpbWFnZSksIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsK
IH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2Vv
bWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUobWFrZVJl
ZihpbWFnZSksIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZS
dWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAotI2lmIFVT
RShDRykgfHwgVVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0Uo
Q0FJUk8pCiB2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAg
ICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVt
KERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0g
ZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRl
KGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogI2VuZGlmCiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKERyYXdQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKSk7CisgICAg
YXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0
dGVybjo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgYmxlbmRNb2RlKSkpOwogICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKQEAgLTIwOSw3ICsyMTAsNyBAQCBBZmZpbmVUcmFuc2Zv
cm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkK
IAogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQog
ewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkpKSk7CisgICAgYXV0
byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShCZWdpblRyYW5z
cGFyZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCkBAIC0yMjAsMTIxICsyMjEsMTQ3IEBAIHZvaWQgUmVjb3JkZXI6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UmVjdDo6Y3JlYXRl
KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8
R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdSZWN0OjpjcmVhdGUocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmU6OmNyZWF0ZShwb2ludDEsIHBvaW50MikpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdM
aW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHBvaW50KSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNr
bmVzcykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBl
bmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShwb2ludCwgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lk
dGgsIHN0eWxlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHBvaW50LCB3aWR0
aCwgc3R5bGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIERyYXdp
bmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0Vs
bGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9t
ZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0VsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKKyNpZiBVU0UoQ0cpCiB2b2lkIFJlY29yZGVy
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1BhdGg6OmNyZWF0ZShwYXRo
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRHJhd1BhdGg6OmNyZWF0ZShwYXRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikp
KTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdpbmdJdGVtJiBu
ZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1Jl
Y3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIGF1dG8mIG5l
d0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1Jl
Y3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisgICAgCit2b2lkIFJlY29yZGVyOjpkcmF3SWNvbihJY29u
JiBpY29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3SWNvbjo6Y3JlYXRlKG1ha2VSZWYo
aWNvbiksIHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6ZHJhd1dpZGdldChXaWRnZXQmIHdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJ
dGVtKERyYXdXaWRnZXQ6OmNyZWF0ZShtYWtlUmVmKHdpZGdldCksIHJlY3QpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1Njcm9sbGJh
cihTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdTY3JvbGxi
YXI6OmNyZWF0ZShtYWtlUmVmKHNjcm9sbGJhciksIHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1RoZW1lKFRoZW1lJiB0aGVt
ZSwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVt
QXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBhdXRvJiBuZXdJdGVt
ID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdUaGVtZTo6Y3JlYXRlKHRo
ZW1lLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRl
dmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVz
ZURhcmtBcHBlYXJhbmNlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZp
bGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2Vv
bWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0
aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25j
YXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJl
Y3QsIGNvbG9yKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkp
KTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVt
KEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGllbnQpKSk7CiAgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0g
ZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVh
dGUocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0
ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkp
KTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVt
KEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpKTsK
KyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xv
cikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVy
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFBhdGg6OmNyZWF0ZShwYXRo
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRmlsbFBhdGg6OmNyZWF0ZShwYXRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKEZpbGxFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVt
ID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxFbGxpcHNlOjpjcmVhdGUo
cmVjdCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpKTsKKyAgICBhdXRvJiBu
ZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVJlY3Q6OmNy
ZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAg
IERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0o
U3Ryb2tlUGF0aDo6Y3JlYXRlKHBhdGgpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0
PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNyZWF0
ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFw
cGVuZEl0ZW0oU3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKENsZWFyUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYg
bmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShDbGVhclJlY3Q6OmNy
ZWF0ZShyZWN0KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKQEAgLTQw
Miw3ICs0MjksNyBAQCBJdGVtJiBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVt
KQogICAgIHJldHVybiBtX2Rpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYgaXRlbSkgY29uc3QK
K3ZvaWQgUmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoR2VvbWV0cnlJdGVtJiBpdGVtKSBjb25z
dAogewogICAgIGlmIChzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxC
b3VuZHMoZ3JhcGhpY3NDb250ZXh0KCkpKQogICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRG
cm9tTG9jYWxCb3VuZHMocmVjdC52YWx1ZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaAppbmRleCBjNWFjNzA5MTM5NS4uZDVhZTc0NjJlMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNDUsOCArNDUsNiBAQCBzdHJ1Y3QgSW1hZ2VQ
YWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdp
bmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6CkBAIC05NywxMyAr
OTUsMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CisjaWYgVVNFKENHKQogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRl
OworI2VuZGlmCiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdJY29uKElj
b24mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdXaWRnZXQoV2lk
Z2V0JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Njcm9sbGJhcihT
Y3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3VGhlbWUo
VGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJh
bmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2F2ZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwpAQCAtMTMzLDcgKzEzOCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAKICAg
ICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlSXRlbUV4dGVudChHZW9tZXRyeUl0ZW0mKSBjb25zdDsKICAgICAKICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xp
cEJvdW5kcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CmluZGV4IDhmZWFhMmY1ZDc1Li4wY2ZmZTZmOWM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNTUsOSArNTUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q+IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Ym9vbAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewogICAgICAg
ICBhdXRvJiBpdGVtID0gbV9kaXNwbGF5TGlzdC5saXN0KClbaV0uZ2V0KCk7CiAKLSAgICAgICAg
aWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxEcmF3aW5nSXRlbT4oaXRlbSkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IERyYXdpbmdJdGVtJiBkcmF3aW5nSXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihpdGVtKTsKLSAgICAgICAgICAgIGlmIChkcmF3aW5nSXRlbS5leHRlbnRLbm93bigp
ICYmICFkcmF3aW5nSXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgeworICAg
ICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGlzPEdlb21ldHJ5SXRlbT4oaXRlbSkp
IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdlb21ldHJ5SXRlbSA9IGRvd25jYXN0PEdlb21l
dHJ5SXRlbT4oaXRlbSk7CisgICAgICAgICAgICBpZiAoZ2VvbWV0cnlJdGVtLmV4dGVudEtub3du
KCkgJiYgIWdlb21ldHJ5SXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgewog
ICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAi
c2tpcHBpbmcgIiA8PCBpIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JY29uR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JY29uR3RrLmNwcAppbmRleCBhZjE4NWE1NGNkZC4uZjBhZTVjZmNhMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKQEAgLTEx
MywxMSArMTEzLDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgIHJldHVybiAwOwogfQogCi12b2lkIElj
b246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gVE9ETzogU2NhbGUvY2xpcCB0aGUg
aW1hZ2UgaWYgbmVjZXNzYXJ5LgogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KaW5kZXggY2VlNTE2ZTE0NDAuLmRiZDgz
ZDU3YzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
SWNvbklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNv
bklPUy5tbQpAQCAtNTUsMTEgKzU1LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25G
b3JJbWFnZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSWNvbihpbWFnZSkpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSWNvbjo6
cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CiAKICAgICBmbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX2NnSW1h
Z2UuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ljb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNv
bk1hYy5tbQppbmRleCA2MTQzYjUxZDQzNi4uZTg1MDMwOGQwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBAIC05MSwxMyArOTEsOSBA
QCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvclVUSShjb25zdCBTdHJpbmcmIFVUSSkK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaW1hZ2UpKTsKIH0KIAotdm9pZCBJY29uOjpw
YWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbEN1cnJlbnRHQyhjb250ZXh0KTsKLQogICAgIFttX25zSW1hZ2UgZHJhd0luUmVjdDpyZWN0
IGZyb21SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgW21fbnNJbWFnZSBzaXplXS53aWR0aCwgW21fbnNJ
bWFnZSBzaXplXS5oZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNl
T3ZlciBmcmFjdGlvbjoxLjBmXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCA5YTk1NGUyMmI5NC4uMDQwNjI3
NmFiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuY3BwCkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBmbG9h
dCBzdHJva2VUaGlja25lc3MpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQogewogICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBib29s
LCBDb2xvciwgZmxvYXQ+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0g
ZGVmYXVsdDsKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhcwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOworICAg
IFVOVVNFRF9QQVJBTShzdHJva2VTdHlsZSk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CkBAIC02OTEsMTAgKzY5MSw2IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsK
QEAgLTczNSw2ICs3MzEsMjYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNSaW5nPihyZWN0cywgd2lkdGgsIGNvbG9yKSk7CiB9CiAK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0
UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJbnRS
ZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAg
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaGVtZShUaGVtZSYsIENvbnRyb2xQ
YXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9h
dCwgZmxvYXQsIGJvb2wsIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQo
KTsKK30KKwogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKIHsKICAgICBzdHJ1
Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmlu
ZGV4IGRjNDg0OWU1Y2Y0Li44YzRlNTMwZmIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fp
cm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtNzIsMTMgKzcyLDE3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkm
LCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
LCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCwgV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJp
ZGU7CisgICAgCisgICAgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRy
b2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3Rv
cmUoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDAyOWQw
NzljYzFjLi4xYWJmNGZhYzEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCkBA
IC0xNzA4LDcgKzE3MDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoaXNSZWNvcmRpbmcoKSkgewotICAgICAgICBtX2Rpc3BsYXlMaXN0UmVj
b3JkZXItPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+
ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0
cm9rZVN0eWxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCmluZGV4IDc5OWUzNDc0MDM5Li4x
OGZlNmY3OTEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ljb25XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JY29uV2luLmNwcApAQCAtNzQsMTEgKzc0LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0
ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSWNvbihoSWNvbikpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByKQordm9pZCBJY29uOjpwbGF0
Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByKSBj
b25zdAogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5kb3dDb250ZXh0KGNvbnRleHQsIGVu
Y2xvc2luZ0ludFJlY3QocikpOwogICAgIERyYXdJY29uRXgod2luZG93Q29udGV4dC5oZGMoKSwg
ci54KCksIHIueSgpLCBtX2hJY29uLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDAsIDAsIERJX05P
Uk1BTCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
cGUvSWNvbldQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNv
bldQRS5jcHAKaW5kZXggNzZhMjFkYTM2ZjMuLjFlZGI3ZDlmNWM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCkBAIC0zMCw3ICszMCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSWNvbjo6fkljb24oKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQg
SWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBj
b25zdAogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lk
Z2V0R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmlu
ZGV4IDg3NDEyOTMzOTc5Li5mMzhhMGE0ZTE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1dpZGdldEd0ay5jcHAKQEAgLTgwLDcgKzgwLDEyIEBAIHZvaWQgV2lkZ2V0OjpoaWRlKCkK
ICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBsYXRmb3JtV2lkZ2V0KCkpOwogfQogCi12b2lkIFdp
ZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3Jp
Z2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQorewor
ICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0Ojpw
bGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQppbmRleCA4YjFlOGI1NGI1Yy4u
ZGNjNmE0OTA1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRn
ZXRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQpA
QCAtMTQxLDE0ICsxNDEsMTYgQEAgTlNWaWV3KiBXaWRnZXQ6OmdldE91dGVyVmlldygpIGNvbnN0
CiAgICAgcmV0dXJuIHZpZXc7CiB9CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRl
eHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lk
IFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQogewotICAgIGlmIChwLnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywg
cmVjdCk7Cit9CiAgICAgCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CiAgICAgTlNWaWV3ICp2aWV3ID0g
Z2V0T3V0ZXJWaWV3KCk7CiAKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcC5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICBO
U1JlY3Qgdmlld0ZyYW1lID0gW3ZpZXcgZnJhbWVdOwpAQCAtMTU2LDcgKzE1OCw3IEBAIHZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwg
dmlld0ZyYW1lLm9yaWdpbi54IC0gdmlld0JvdW5kcy5vcmlnaW4ueCwgdmlld0ZyYW1lLm9yaWdp
bi55IC0gdmlld0JvdW5kcy5vcmlnaW4ueSk7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7Ci0gICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVy
dFJlY3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6Y2dDb250ZXh0XTsK
KyAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpy
ZWN0IGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRdOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNnQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCmluZGV4IDQ5
MDI4ZjFiNDNjLi5lOWYzMDNkM2QxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgY29udHJvbFJlcXVp
cmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFydCBwYXJ0KSBjb25zdCBmaW5hbCB7IHJldHVybiBw
YXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9CiAKLSAgICB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBD
b250cm9sU3RhdGVzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
em9vbUZhY3RvciwgU2Nyb2xsVmlldyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBw
YWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgZmluYWw7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpIGZpbmFsOwogICAgIHZvaWQgaW5mbGF0ZUNvbnRyb2xQYWlu
dFJlY3QoQ29udHJvbFBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QmLCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgdXNlclByZWZlcnNSZWR1Y2Vk
TW90aW9uKCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMu
bW0KaW5kZXggNDgzMWZmZjRmODguLmQ5MjM4NTYwMTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLm1tCkBAIC0zODcsNyArMzg3LDcgQEAgc3RhdGljIGJvb2wgZHJhd0Nl
bGxGb2N1c1JpbmcoTlNDZWxsICpjZWxsLCBOU1JlY3QgY2VsbEZyYW1lLCBOU1ZpZXcgKmNvbnRy
b2xWaWUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlQnV0
dG9uKENvbnRyb2xQYXJ0IGJ1dHRvblR5cGUsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBm
bG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKQorc3RhdGljIHZvaWQgcGFpbnRUb2dnbGVC
dXR0b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sUGFydCBidXR0b25UeXBlLCBD
b250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3Qs
IGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCiAKQEAgLTUyMCw3ICs1MjAsNyBAQCBzdGF0aWMgTlNCdXR0b25DZWxsICpi
dXR0b24oQ29udHJvbFBhcnQgcGFydCwgY29uc3QgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRl
cwogICAgIHJldHVybiBjZWxsOwogfQogICAgIAotc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRlcywgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9h
dCBwYWdlU2NhbGVGYWN0b3IpCitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0
ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xs
Vmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvcikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAKQEAgLTU5
Niw3ICs1OTYsNyBAQCBzdGF0aWMgTlNDb250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JG
b250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQogICAgIHJldHVybiBOU0NvbnRyb2xTaXplTWlu
aTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRTdGVwcGVyKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZs
b2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqKQorc3RhdGljIHZvaWQgcGFpbnRTdGVwcGVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9h
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqKQogewogICAg
IC8vIFdlIGRvbid0IHVzZSBOU1N0ZXBwZXJDZWxsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHdheXMg
dG8gZHJhdyBhbgogICAgIC8vIE5TU3RlcHBlckNlbGwgd2l0aCB0aGUgdXAgYnV0dG9uIGhpZ2hs
aWdodGVkLgpAQCAtODQ4LDI1ICs4NDgsMjUgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRy
b2xQYWludFJlY3QoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgQ29udHJvbFN0YXRlcyYgc3QKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKLXZvaWQgVGhlbWVNYWM6OnBhaW50KENv
bnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNj
cm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSkKK3ZvaWQgVGhlbWVNYWM6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0
UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0
ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewogICAgIExvY2FsRGVmYXVs
dFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVz
ZURhcmtBcHBlYXJhbmNlKTsKIAogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENo
ZWNrYm94UGFydDoKLSAgICAgICAgICAgIHBhaW50VG9nZ2xlQnV0dG9uKHBhcnQsIHN0YXRlcywg
Y29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVG
YWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBwYWludFRvZ2dsZUJ1dHRvbihj
b250ZXh0LCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0
X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9sbFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNj
YWxlRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJhZGlvUGFydDoK
LSAgICAgICAgICAgIHBhaW50VG9nZ2xlQnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9v
bWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VT
Y2FsZUZhY3Rvcik7CisgICAgICAgICAgICBwYWludFRvZ2dsZUJ1dHRvbihjb250ZXh0LCBwYXJ0
LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xs
Vmlldyo+KHNjcm9sbFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAg
ICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAg
ICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKLSAgICAgICAgICAgIHBhaW50QnV0dG9uKHBhcnQs
IHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2
aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBwYWludEJ1dHRv
bihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJw
cmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9sbFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFn
ZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubmVyU3Bp
bkJ1dHRvblBhcnQ6Ci0gICAgICAgICAgICBwYWludFN0ZXBwZXIoc3RhdGVzLCBjb250ZXh0LCB6
b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3KTsKKyAgICAgICAgICAgIHBhaW50U3Rl
cHBlcihjb250ZXh0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0
X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9sbFZpZXcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dpZGdldE1hYy5tbQppbmRleCA5OTZjMTlkNTUwZi4uYjhhN2ZjOTMyMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQpAQCAtMTg2LDkgKzE4Niw5IEBAIE5T
VmlldyAqV2lkZ2V0OjpnZXRPdXRlclZpZXcoKSBjb25zdAogICAgIHJldHVybiB2aWV3OwogfQog
Ci12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiBy
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeSkKIHsKLSAgICBpZiAocC5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKGNvbnRl
eHQucGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgTlNWaWV3ICp2aWV3
ID0gZ2V0T3V0ZXJWaWV3KCk7CiAKQEAgLTIwMiwxMSArMjAyLDE3IEBAIHZvaWQgV2lkZ2V0Ojpw
YWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2lu
UGFpbnRQb2xpCiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAorICAgIGNv
bnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CisgICAgCit2b2lkIFdpZGdldDo6cGxh
dGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CiAgICAgLy8gVGFrZSBhIHJlZmVyZW5jZSB0byB0aGlzIFdpZGdldCwgYmVjYXVzZSBzZW5k
aW5nIG1lc3NhZ2VzIHRvIHRoZSB2aWV3cyBjYW4gaW52b2tlIGFyYml0cmFyeQogICAgIC8vIGNv
ZGUsIHdoaWNoIGNhbiBkZXJlZiBpdC4KICAgICBSZWY8V2lkZ2V0PiBwcm90ZWN0ZWRUaGlzKCp0
aGlzKTsKIAorICAgIE5TVmlldyAqdmlldyA9IGdldE91dGVyVmlldygpOwogICAgIE5TR3JhcGhp
Y3NDb250ZXh0ICpjdXJyZW50Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF07CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCkBAIC0yMTQsNyArMjIw
LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVj
dCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2Ugb2YgZHJhd2luZyBpbnRvIGEg
d2luZG93IG9yIGFuIGluY2x1c2l2ZSBsYXllciwgb3IgcHJpbnRpbmcuCiAgICAgICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmlu
Z09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXV07
CisgICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRS
ZWN0OnJlY3QgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV1dOwogICAgICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjM3LDcgKzI0Myw3
IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3Qm
IHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpCiAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gMDsK
ICAgICB9CiAKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcC5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBBU1NFUlQoY2dDb250
ZXh0ID09IFtjdXJyZW50Q29udGV4dCBncmFwaGljc1BvcnRdKTsKQEAgLTI1OSw3ICsyNjUsNyBA
QCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiBy
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0
ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBo
aWNzUG9ydDpjZ0NvbnRleHQgZmxpcHBlZDpOT107CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0gICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZl
cnRSZWN0OnIgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0Om5zQ29udGV4dF07
CisgICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRS
ZWN0OnJlY3QgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0Om5zQ29udGV4dF07
CiAgICAgfQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCmluZGV4IGY4Y2IzYmQyNjY3Li5lY2ZlMTdiYjIxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCkBAIC0yNSw2ICsyNSw4
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgVGV4dFJlbmRlcmluZ01vZGUgOiB1
aW50OF90IHsKQEAgLTQwLDYgKzQyLDEyIEBAIGVudW0gY2xhc3MgRm9udFNtb290aGluZ01vZGUg
OiB1aW50OF90IHsKICAgICBBbnRpYWxpYXNlZCwKICAgICBTdWJwaXhlbEFudGlhbGlhc2VkCiB9
OworICAgIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mIHRzLCBjb25zdCBGb250U21vb3RoaW5nTW9kZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAg
dGhlIEZvbnRTbW9vdGhpbmdNb2RlIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KIAogLy8gVGhpcyBzZXR0aW5nIGlzIHVzZWQgdG8gcHJvdmlkZSB3YXlzIG9mIHN3aXRjaGlu
ZyBiZXR3ZWVuIG11bHRpcGxlIHJlbmRlcmluZyBtb2RlcyB0aGF0IG1heSBoYXZlIGRpZmZlcmVu
dAogLy8gbWV0cmljcy4gSXQgaXMgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRl
eHQgb24gV2luZG93cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9X
aWRnZXRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAK
aW5kZXggOGJkYzAyM2E0MzcuLmE1MWU0ZjE3NTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vV2lkZ2V0V2luLmNwcApAQCAtNzUsNyArNzUsMTIgQEAgdm9pZCBXaWRnZXQ6OnNldEN1
cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKICAgICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1
cnNvcihjdXJzb3IpOwogfQogCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5KQoreworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywg
cmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9XaWRn
ZXRXUEUuY3BwCmluZGV4IDVmNjYzMzBjNTIzLi45NDUzMzg1ZDg3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHAKQEAgLTUyLDcgKzUyLDEyIEBAIEludFJlY3Qg
V2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1lOwogfQogCi12b2lk
IFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQor
eworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmNwcAppbmRleCA0Njg0NzJjNjg2NS4uNmJiOWU5MWU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgUmVuZGVyVGhl
bWU6OnBhaW50KGNvbnN0IFJlbmRlckJveCYgYm94LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3Rh
dGVzLCBjb25zCiAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9u
UGFydDoKICAgICAgICAgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGJveCwgY29udHJv
bFN0YXRlcyk7Ci0gICAgICAgIFRoZW1lOjpzaW5nbGV0b24oKS5wYWludChwYXJ0LCBjb250cm9s
U3RhdGVzLCBwYWludEluZm8uY29udGV4dCgpLCBkZXZpY2VQaXhlbFNuYXBwZWRSZWN0LCBib3gu
c3R5bGUoKS5lZmZlY3RpdmVab29tKCksICZib3gudmlldygpLmZyYW1lVmlldygpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCBib3gucGFnZSgpLnVzZVN5c3RlbUFwcGVhcmFu
Y2UoKSwgYm94LnBhZ2UoKS51c2VEYXJrQXBwZWFyYW5jZSgpKTsKKyAgICAgICAgVGhlbWU6OnNp
bmdsZXRvbigpLnBhaW50KHBhaW50SW5mby5jb250ZXh0KCksIHBhcnQsIGNvbnRyb2xTdGF0ZXMs
IGRldmljZVBpeGVsU25hcHBlZFJlY3QsIGJveC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJmJv
eC52aWV3KCkuZnJhbWVWaWV3KCksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3Is
IGJveC5wYWdlKCkudXNlU3lzdGVtQXBwZWFyYW5jZSgpLCBib3gucGFnZSgpLnVzZURhcmtBcHBl
YXJhbmNlKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345268</attachid>
            <date>2018-07-18 12:04:48 -0700</date>
            <delta_ts>2018-07-18 12:35:14 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>187765.patch</filename>
            <type>text/plain</type>
            <size>208432</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxZGU3MDU0ZGExNS4uZDMyNWFmMjdhZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAxOC0wNy0xNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIFRlbXBsYXRpemUgRGlzcGxheUxpc3RJdGVtcyBhbmQgdXNlIHN0ZDo6dHVwbGUg
dG8gc3RvcmUgdGhlIGFyZ3VtZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg3MDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmViYXNlbGluZSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAg
ICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMt
d2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6
CisKIDIwMTgtMDctMTcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5za2lwIExheW91dFRlc3QgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLWRpc3BsYXkvZGlzcGxheS1jb250ZW50cy1maXJzdC1sZXR0ZXItMDAyLmh0bWwuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlz
dC1leHBlY3RlZC50eHQKaW5kZXggYTg4M2U2ODUyZTEuLjdjN2E4OTRkZWIxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0CkBAIC0xLDEzICsxLDE1IEBACiAgCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAo
Y2hhbmdlLWZsYWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAjQzgwMDAwKSkpCiAoZmlsbC1yZWN0
CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNp
emUgNTV4NTApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29s
b3IgIzAwMDBDODdGKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDI1NikK
KyAgICAoZmlsbC1jb2xvciAjMDAwMEM4N0YpKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAo
MzAsMzApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNo
YWRvdy1leHBlY3RlZC50eHQKaW5kZXggZGU2OThhZTY0ZGIuLjk5ODdiYWUxYWE4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CkBAIC01LDE0ICs1LDE1IEBACiAoc2F2ZQogICAocmVzdG9yZS1p
bmRleCA0KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJs
dXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1m
bGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQog
KGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcp
CiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDg0OGIwNzc1NDVhLi4wNTRlMzRhNDUyOCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0yLDE5ICsyLDIwIEBACiAodHJhbnNs
YXRlCiAgICh4IDAuMDApCiAgICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCisoY29uY2F0
ZW5hdGUtY3RtCiAgIChjdG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwt
MTguMzApfSkpCiAoc2F2ZQogICAocmVzdG9yZS1pbmRleCA1KSkKIChzZXQtc3RhdGUKLSAgKGNo
YW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0
IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCisg
IChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1mbGFncyAxMDI0KQorICAgIChzaGFkb3ctYmx1
ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChl
eHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlv
biBzb3VyY2Utb3ZlcikKKyAgKGNvbXBvc2l0ZS1vcGVyYXRvciBzb3VyY2Utb3ZlcikKICAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSkKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYzVmNmFjNmIy
NWEuLjRhZjdlMTA5ZTkzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5
ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTYsMTMgKzYsMTQgQEAKICAgKGV4
dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDEw
NCkKICAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVy
KQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3Jt
YWwpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKLSAgKGZpbGwtY29sb3Ig
IzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQotICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKKyAg
KHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKKyAgICAoZmlsbC1jb2xv
ciAjMDAwMEZGKQorICAgIChzdHJva2Utc3R5bGUgMCkKKyAgICAoc2hvdWxkLWFudGlhbGlhcyAw
KSkpCiAoZHJhdy1yZWN0CiAgIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKICAgKHJlY3Qg
YXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmY3
ZWYyNzVmNjEuLjVlMWZjOTY4YjQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAt
Niw3ICs2LDcgQEAgcmVjb3JkZWQ6CiAgIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDAp
CiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Ig
c291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAKIHJlcGxheWVkOiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdr
MS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXgg
MjEwZTQ0YjA4NzcuLjExZTdlMDFlOTg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtNSwxNSArNSwxNiBAQAogKHNhdmUKICAg
KHJlc3RvcmUtaW5kZXggNCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQot
ICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0y
MCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1zdWJwaXhlbC1x
dWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDUy
NTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9
MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApCisgICAgKHNo
b3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QK
ICAgKGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQgKDUwLDUwKSBz
aXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKKyAgKGNvbXBvc2l0ZS1vcGVyYXRvciBzb3VyY2Utb3ZlcikKICAgKGJsZW5k
LW1vZGUgbm9ybWFsKSkKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NGU5ODEyOWRjLi5hZmNj
OGM0YTk0MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwyMCArMiwyMSBAQAogKHRyYW5zbGF0ZQogICAoeCAw
LjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQorKGNvbmNhdGVuYXRlLWN0bQog
ICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQog
KHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3Mg
NTI1MzEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEw
IGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1z
dWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdl
LWZsYWdzIDUyNTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZz
ZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDAp
CisgICAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3Np
dGVkLXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAg
IChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21w
b3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJj
ZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2UxOWQyYTE5ZjguLjAzMTkzOWUzYmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDc3IEBACisy
MDE4LTA3LTE4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsb3cgaWNvbiwgd2lkZ2V0LCBzY3JvbGxiYXIgYW5kIHRoZW1lIHRvIGJlIGRy
YXduIHRocm91Z2ggRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4Nzc2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIERyYXdpbmcgdGhlc2UgaXRlbXMgc2hvdWxkIGdvIHRocm91Z2ggR3Jh
cGhpY3NDb250ZXh0IHdoaWNoIHdpbGwgY3JlYXRlCisgICAgICAgIHNwZWNpYWwgRGlzcGxheUxp
c3RJdGVtcyBmb3IgZHJhd2luZyB0aGVtLiBUaGVzZSBEaXNwbGF5TGlzdEl0ZW1zIHdpbGwKKyAg
ICAgICAgc3RvcmUgYWxsIHRoZSBwYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2hlbiByZXBsYXlpbmcg
dGhlIERpc3BsYXlMaXN0IGJhY2suCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250cm9sU3RhdGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9UaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICog
cGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdJY29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SWNv
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RoZW1lKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2lvcy9JY29uSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1QYWludCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJ
Y29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ljb24pOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1dpZGdldCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3U2Nyb2xsYmFyKToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaGVtZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dwZS9J
Y29uV1BFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRUb2dnbGVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTdGVwcGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlRoZW1lTWFjOjpwYWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L1dpZGdldE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1RleHRGbGFncy5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAg
ICAgICogcGxhdGZvcm0vd3BlL1dpZGdldFdQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRn
ZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwYWludCk6CisKKzIwMTgtMDctMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBUZW1wbGF0aXplIERpc3BsYXlMaXN0SXRl
bXMgYW5kIHVzZSBzdGQ6OnR1cGxlIHRvIHN0b3JlIHRoZSBhcmd1bWVudHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzAwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0SXRlbXMgYXJl
IHNpbXBsZSBvYmplY3RzIHdoaWNoIHJlcHJlc2VudCBncmFwaGljcyBjb21tYW5kcyBhbmQKKyAg
ICAgICAgdGhlaXIgYXJndW1lbnRzLiBUaGUgYXJndW1lbnRzIGFyZSBzdG9yZWQgd2hpbGUgcmVj
b3JkaW5nIHRoZSBEaXNwbGF5TGlzdCAKKyAgICAgICAgYW5kIHVzZWQgd2hlbiByZXBsYXlpbmcg
aXQgYmFjay4gSW4gZmFjdCwgd2UgZG8gbm90IGNhcmUgbXVjaCBhYm91dCBrbm93aW5nCisgICAg
ICAgIHRoZXNlIGFyZ3VtZW50cyBleHBlY3Qgd2hlbiBkZWJ1Z2dpbmcgdGhlIERpc3BsYXlMaXN0
LiBTbyBhIG1lY2hhbmljYWwgd2F5CisgICAgICAgIHRvIHN0b3JlIHRoZSBhcmd1bWVudHMgYW5k
IHBhc3NpbmcgdGhlbSB0byBHcmFwaGljc0NvbnRleHQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCisg
ICAgICAgIFRoaXMgd2lsbCBtYWtlIGFkZGluZyBhIG5ldyBEaXNwbGF5TGlzdEl0ZW0gZWFzaWVy
IGFuZCBpbiBtYWtlcyB0aGUgY29kZQorICAgICAgICBhIGxvdCBzaG9ydGVyLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggdGVtcGxhdGl6ZXMgdGhlIERpc3BsYXlMaXN0SXRlbXMgY2xhc3NlcyBhbmQg
dXNlcyBzdGQ6OnR1cGxlIHRvCisgICAgICAgIHN0b3JlIHRoZSBhcmd1bWVudHMuIFRoZSBHcmFw
aGljc0NvbnRleHQgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IAorICAgICAgICB0
byB0aGUgdGVtcGxhdGUgYWxvbmcgd2l0aCB0aGUgdHlwZXMgb2YgdGhlIHN0ZDo6dHVwbGUgaXRl
bXMuIFRoZSBjbGFzcworICAgICAgICBoaWVyYXJjaHkgaXMgYSBsaXR0bGUgYml0IGRpZmZlcmVu
dCBmcm9tIHRoZSBvcmlnaW5hbCBvbmU6CisKKyAgICAgICAgLS0gSXRlbTogVGhpcyBpcyB0aGUg
YmFzZSBjbGFzcyBhbmQgdGhpcyBpcyB3aGF0IERpc3BsYXlMaXN0IHN0b3Jlcy4KKyAgICAgICAg
LS0gR2VvbXRyeUl0ZW06IEl0IGlzIGRlcml2ZWQgZnJvbSBJdGVtIGFuZCB0aGUgb25seSBkaWZm
ZXJlbmNlIGJldHdlZW4KKyAgICAgICAgaXQgYW5kIEl0ZW0gaXMgaXQga25vd3MgdGhlIGV4dGVu
dCBvZiB0aGUgSXRlbS4KKyAgICAgICAgLS0gR3JhcGhpY3NJdGVtOiBJdCdzIGEgdGVtcGxhdGUg
Y2xhc3Mgd2hpY2ggdGFrZXMgYSBwb2ludGVyIHRvIGEgR3JhcGhpY3NDb250ZXh0CisgICAgICAg
IGZ1bmN0aW9uLCBzZXQgb2YgYXJndW1lbnRzJyB0eXBlcy4gSXRzIGNvbnN0cnVjdG9yIHNhdmVz
IHRoZSBhcmd1bWVudHMgaW4KKyAgICAgICAgc3RkOjp0dXBsZS4gSXRzIGFwcGx5IG1ldGhvZCBj
YWxscyB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uIGJ5IHBhc3NpbmcKKyAgICAgICAgdGhl
IGFyZ3VtZW50cyBpdCBzdG9yZXMuCisgICAgICAgIC0tIFNldHRpbmdJdGVtOiBJdCBpcyBkZXJp
dmVkIGZyb20gSXRlbSBhbmQgR3JhcGhpY3NJdGVtLgorICAgICAgICAtLSBEcmF3aW5nSXRlbTog
SXQgaXMgZGVyaXZlZCBmcm9tIEdlb210cnlJdGVtIGFuZCBHcmFwaGljc0l0ZW0uCisKKyAgICAg
ICAgTm90ZXMgYW5kIHNvbWUgZHJhd2JhY2tzIG9mIHRoaXMgcGF0Y2ggYXJlOgorICAgICAgICAt
LSBUaGUgRGlzcGxheUxpc3QgcmVwbGF5aW5nIGJhY2sgZnVuY3Rpb24gc2hvdWxkIGJlIG1ldGhv
ZHMgb2YgR3JhcGhpY3NDb250ZXh0LgorICAgICAgICAtLSBUaGUgb3BlcmF0b3IgPDwgaGFzIHRv
IGJlIGRlZmluZWQgZm9yIGFsbCB0aGUgYXJndW1lbnRzJyB0eXBlcy4KKyAgICAgICAgLS0gV2hl
biBhbiBhcmd1bWVudHMgaXMgYSBSZWZDb3VudGVkIGFuZCB0aGUgR3JhcGhpY3NDb250ZXggZnVu
Y3Rpb24gdGFrZXMKKyAgICAgICAgYSByYXcgcG9pbnRlciBvciByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBpdHNlbGYsIHRoZSBHcmFwaGljc0l0ZW0gY2FuIHN0b3JlCisgICAgICAgIGEgUmVmIG9y
IGEgUmVmUHRyIHRvIHRoZSBvYmplY3QuIFRoZSBpbXBsaWNpdCBjYXN0aW5nIG9mIFJlZlB0ciBh
bmQgUmVmCisgICAgICAgIHdpbGwgZG8gdGhlIG1hZ2ljIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUg
cGFzc2VkIHRvIEdyYXBoaWNzQ29udGV4dC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0
ZUNoYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjppdGVtc0Rlc2Ny
aXB0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjppdGVtRGVzY3JpcHRvcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6bmFtZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6YXJndW1lbnROYW1lIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZXNjcmlwdGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6c2l6ZUluQnl0ZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Um90YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2NhbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmFw
cGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRT
dGF0ZTo6YWNjdW11bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFk
b3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OkRyYXdHbHlwaHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6Omdl
bmVyYXRlR2x5cGhCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdl
OjpEcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZl
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRp
dmVJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6YXBwbHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpsb2NhbEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZXNGb3JUZXh0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXI6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpsb2NhbEJvdW5kcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdGb2N1c1JpbmdQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVj
dHM6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVj
dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlw
c2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGVhclJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmFw
cGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eVN0cm9rZVBhdHRlcm46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbTo6aXNHZW9tZXRyeUl0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW06OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW06OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06Okl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21ldHJ5SXRlbTo6c2V0RXh0
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZW9tZXRyeUl0ZW06OmV4dGVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0cnlJdGVtOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0
cnlJdGVtOjpHZW9tZXRyeUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdy
YXBoaWNzSXRlbTo6R3JhcGhpY3NJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHcmFwaGljc0l0ZW06OmFyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpHcmFwaGljc0l0ZW06OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpHcmFwaGljc0l0ZW06Oml0ZXJhcnRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXR0aW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXR0aW5nSXRlbTo6U2V0dGluZ0l0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpEcmF3aW5nSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2F2ZTo6cmVzdG9yZUluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpzZXRSZXN0b3JlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpzdWJHbHlwaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNTdGF0ZUl0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzU3RhdGVJdGVtVHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OnNldEV4dGVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4
dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6U2F2ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpSZXN0b3JlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6
VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3Rh
dGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjphbmdsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVD
YXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoQXJyYXkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
RGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVKb2luOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6
Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpyZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OnJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBP
dXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1Bh
dGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xp
cE91dFRvUGF0aDo6cGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OnBhdGggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjp3aW5kUnVsZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNs
aXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5
cGhzOjpibG9ja0xvY2F0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpzZXRCbG9ja0xvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEFuY2hvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6YW5j
aG9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHM6OmdseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6aW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmRlc3RpbmF0aW9u
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGls
ZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3VGlsZWRJbWFnZTo6aW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpzb3VyY2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpkZXN0aW5hdGlv
biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U6OnRpbGVTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6c3BhY2luZyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVzdGluYXRp
b24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdO
YXRpdmVJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5hdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm46OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6cGF0dGVyblRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OnRpbGVSZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6ZGVzdFJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpwaGFzZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1BhdHRlcm46OnNwYWNpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cjo6b3BhY2l0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmJvcmRlclRoaWNrbmVz
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Jl
Y3Q6OkRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZTo6cG9pbnQxIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZTo6cG9pbnQyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6c2V0
QmxvY2tMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVzRm9yVGV4dDo6YmxvY2tMb2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxBbmNob3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ6OnBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TGluZXNGb3JUZXh0Ojp3aWR0aHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmlzUHJpbnRpbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQ6OmRvdWJsZUxpbmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5l
Rm9yRG9jdW1lbnRNYXJrZXI6OnBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjp3aWR0aCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcjo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OnJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3
RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Bh
dGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OnBhdGggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjp3
aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1BhdGg6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0Zv
Y3VzUmluZ1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OnJlY3RzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OndpZHRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHM6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNS
aW5nUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpyZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6
Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6
OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb21wb3NpdGVPcGVyYXRvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0Ojpyb3VuZGVkUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpibGVuZE1vZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVk
UmVjdDo6RmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6cmVjdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OnJvdW5kZWRIb2xlUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNvbG9yIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNl
OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6bGluZVdpZHRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRo
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZVBhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6cmVjdCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxs
aXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFy
UmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0
dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxs
UGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OnNjYWxlRmFjdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OndpbGxBcHBlbmRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpyZXBsYXkp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmg6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKwogMjAxOC0wNy0xNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gSW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGxl
bmd0aHMgd2l0aCBhbiAiYXV0byIgdmFsdWUgc2hvdWxkIGJlIGRpc2NyZXRlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKaW5kZXggMWRjZThiNzU4MDcuLjI5M2I3MTRjOWJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oCkBAIC0xMDMsNiArMTAz
LDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb250cm9sU3RhdGVzJikKK3sKKyAgICAvLyBGSVhN
RTogZHVtcCB0aGUgQ29udHJvbFN0YXRlcyBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAg
IHJldHVybiB0czsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwCmluZGV4IGY5ZTA1ZjU1Zjc1Li5kZTI4ZjAyNzRkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0xNjMsMTEgKzE2MywxNiBAQCB2b2lkIFNjcm9sbGJhcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
LCBXaWRnZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGNvbnRleHQucGFpbnRp
bmdEaXNhYmxlZCgpIHx8ICFmcmFtZVJlY3QoKS5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAg
IGlmICghZnJhbWVSZWN0KCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCF0aGVtZSgpLnBhaW50KCp0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0KSkK
LSAgICAgICAgV2lkZ2V0OjpwYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBjb250ZXh0
LmRyYXdTY3JvbGxiYXIoKnRoaXMsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFNjcm9sbGJhcjo6
cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKCF0aGVtZSgpLnBhaW50KCp0aGlzLCBjb250ZXh0LCByZWN0KSkKKyAg
ICAgICAgV2lkZ2V0OjpwYWludChjb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6
OmF1dG9zY3JvbGxUaW1lckZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5k
ZXggNjJmNTA0NGE4MzkuLmMwZDQzMGFkM2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGlu
dCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgV2lkZ2V0OjpTZWN1cml0eU9yaWdpblBh
aW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVj
dCYpOwogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CkBAIC0xODIsNiArMTgzLDEyIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1Njcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTY3JvbGxiYXImKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBTY3JvbGxiYXIg
bWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisgICAgCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0lER0VUKFNjcm9s
bGJhciwgaXNTY3JvbGxiYXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAppbmRleCBjMGFm
MTkyYjFkMS4uNjRiYjRmNzhkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKQEAgLTU3
LDcgKzU3LDEyIEBAIGJvb2wgVGhlbWU6OmNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29u
dHJvbFBhcnQpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRoZW1lOjpwYWlu
dChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0LCBTY3JvbGxWaWV3KiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKQor
dm9pZCBUaGVtZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sUGFydCBw
YXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwg
ZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNl
LCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGNvbnRleHQuZHJhd1RoZW1lKCp0aGlz
LCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmlj
ZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURh
cmtBcHBlYXJhbmNlKTsKK30KKwordm9pZCBUaGVtZTo6cGxhdGZvcm1QYWludChHcmFwaGljc0Nv
bnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKQogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuaAppbmRleCBlOGNlYzM1ZDU5MS4uZDYzMjU0YmNhZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
OCw3ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJl
V2hpdGVTcGFjZShDb250cm9sUGFydCkgY29uc3Q7CiAKICAgICAvLyBNZXRob2QgZm9yIHBhaW50
aW5nIGEgY29udHJvbC4gVGhlIHJlY3QgaXMgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgotICAgIHZp
cnR1YWwgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Ny
b2xsVmlldyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYs
IGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmll
dyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wg
dXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRy
b2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IHZvaWQqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOwogCiAgICAg
Ly8gU29tZSBjb250cm9scyBtYXkgc3BpbGwgb3V0IG9mIHRoZWlyIGNvbnRhaW5lcnMgKGUuZy4s
IHRoZSBjaGVjayBvbiBhbiBPUyBYIGNoZWNrYm94KS4gIFdoZW4gdGhlc2UgY29udHJvbHMgcmVw
YWludCwKICAgICAvLyB0aGUgdGhlbWUgbmVlZHMgdG8gY29tbXVuaWNhdGUgdGhpcyBpbmZsYXRl
ZCByZWN0IHRvIHRoZSBlbmdpbmUgc28gdGhhdCBpdCBjYW4gaW52YWxpZGF0ZSB0aGUgd2hvbGUg
Y29udHJvbC4KQEAgLTg4LDUgKzkwLDExIEBAIHByaXZhdGU6CiAgICAgVGhlbWUoY29uc3QgVGhl
bWUmKSA9IGRlbGV0ZTsKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUaGVtZSYpID0gZGVsZXRl
OwogfTsKKyAgICAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBUaGVtZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIFRoZW1lIG1lbWJlcnMg
dG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IGYzMWYyNDVhODBiLi45OWNkODNi
ZmNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTExNCw2
ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5IHsgQW55T3JpZ2luLCBBY2Nlc3NpYmxlT3JpZ2luT25seSB9OwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3Qm
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6
QW55T3JpZ2luKTsKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgaW52YWxpZGF0ZVJlY3QoYm91
bmRzUmVjdCgpKTsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRS
ZWN0JikgPSAwOwogCkBAIC0yNDQsNiArMjQ2LDEyIEBAIGlubGluZSB2b2lkIFdpZGdldDo6cmV0
YWluUGxhdGZvcm1XaWRnZXQoKQogCiAjZW5kaWYKIAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFdpZGdldCYpCit7CisgICAgLy8gRklYTUU6IGR1
bXAgdGhlIFdpZGdldCBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dJREdFVChUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDUyZWRiYWU5NDUzLi43MTg1OTg2YjIz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgpAQCAtMzcwLDYgKzM3MSwxMiBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IEZvbnQ6Ondp
ZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiAgICAgcmV0dXJuIHdpZHRoOwogfQogCitp
bmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZvbnQmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBGb250IG1lbWJlcnMgdG8gdGhl
IFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBGb250X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaEJ1ZmZlci5oCmluZGV4IDE3NTJkY2JkMDhlLi40NWYxN2ZhY2Q3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDxjbGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHR2VvbWV0cnkuaD4KQEAgLTIyOCw1ICsy
MjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBHbHlwaEJ1ZmZlciYpCit7Cisg
ICAgLy8gRklYTUU6IGR1bXAgdGhlIEdseXBoQnVmZmVyIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJl
YW0uCisgICAgcmV0dXJuIHRzOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCmluZGV4IGM3ZmM0YzZlMzY5Li43YmZiZmZhNDdjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFy
aWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29u
dGV4dFJlZjsKQEAgLTE1Niw0ICsxNTcsMTAgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybUdyYWRp
ZW50IG1fZ3JhZGllbnQ7CiB9OwogCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYWRpZW50JikKK3sKKyAgICAvLyBGSVhNRTog
ZHVtcCB0aGUgR3JhZGllbnQgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4g
dHM7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGM5NzMxYWE1MTk0Li5jYzcxMzNjNjc1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCkBAIC0zMSwxMCArMzEsMTQgQEAKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgi
CiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRoZW1lLmgiCisjaW5jbHVkZSAiV2lk
Z2V0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC04NDMsNiArODQ3LDUwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0
RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKICAgICBzZXRQbGF0Zm9ybVRl
eHREcmF3aW5nTW9kZShtb2RlKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJY29u
KEljb24mIGljb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBt
X2ltcGwtPmRyYXdJY29uKGljb24sIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgaWNvbi5wbGF0
Zm9ybVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdX
aWRnZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2ltcGwp
CisgICAgICAgIG1faW1wbC0+ZHJhd1dpZGdldCh3aWRnZXQsIHJlY3QpOworICAgIGVsc2UKKyAg
ICAgICAgd2lkZ2V0LnBsYXRmb3JtUGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5kcmF3U2Nyb2xsYmFy
KHNjcm9sbGJhciwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIucGxhdGZvcm1Q
YWludCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUo
VGhlbWUmIHRoZW1lLCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNv
bnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xs
VmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9v
bCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2ltcGwp
CisgICAgICAgIG1faW1wbC0+ZHJhd1RoZW1lKHRoZW1lLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJl
Y3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVG
YWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKKyAgICBlbHNl
CisgICAgICAgIHRoZW1lLnBsYXRmb3JtUGFpbnQoKnRoaXMsIHBhcnQsIHN0YXRlcywgem9vbWVk
UmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2Fs
ZUZhY3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UpOworfQorCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTExMjks
NiArMTE3NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
c3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKICAgICBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRz
KHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKIH0KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjphcHBseVN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0
ZSkKK3sKKyAgICBzdGF0ZS5hcHBseSgqdGhpcyk7Cit9CiAKIGZsb2F0IEdyYXBoaWNzQ29udGV4
dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgp
IGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCmluZGV4IGNjYzJkMDNlN2VhLi5mZWE5YTk2Mjc1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTI2
LDYgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb250cm9sU3RhdGVzLmgi
CiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5j
bHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC04MCwxNiArODIsMjAgQEAgY29uc3QgaW50IGNNaXNz
cGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwog
Y2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OworY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOworY2xhc3MgSWNvbjsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xh
c3MgSW50UmVjdDsKLWNsYXNzIFJvdW5kZWRSZWN0OwotY2xhc3MgVVJMOwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CiBjbGFzcyBQYXRoOworY2xhc3MgUm91bmRlZFJlY3Q7CitjbGFzcyBTY3Jv
bGxiYXI7CiBjbGFzcyBUZXh0UnVuOworY2xhc3MgVGhlbWU7CiBjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKK2NsYXNzIFVSTDsKK2NsYXNzIFdpZGdldDsKIAogZW51bSBUZXh0RHJhd2luZ01v
ZGUgewogICAgIFRleHRNb2RlRmlsbCA9IDEgPDwgMCwKQEAgLTExNiw2ICsxMjIsMTIgQEAgZW51
bSBjbGFzcyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSA6IHVpbnQ4X3QgewogICAgIEF1dG9jb3Jy
ZWN0aW9uUmVwbGFjZW1lbnQsCiAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCiB9OworICAgIAor
aW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBj
b25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhl
IEltYWdlUGFpbnRpbmdPcHRpb25zIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGNsYXNzIFJlY29yZGVyOwpAQCAtMjMzLDYg
KzI0NSwxMiBAQCBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnMgewogICAgIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbiBtX29yaWVudGF0aW9uRGVzY3JpcHRpb247CiAgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHkgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKIH07CisgICAgCitpbmxpbmUgV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgSW1hZ2VQYWludGlu
Z09wdGlvbnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiBzdHJ1Y3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlKCkgPSBkZWZhdWx0OwpAQCAtMjU1LDcgKzI3Myw2IEBAIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi0KIGNsYXNzIEdy
YXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MTIsNiArNDI5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKICAg
ICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICB2b2lk
IGFwcGx5U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAog
ICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgUm91bmRBbGxTaWRlcywKQEAgLTQ0OCw2
ICs0NjYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKTsKICNlbmRpZgogCisgICAgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZv
aWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqLCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFz
aE9mZnNldCk7CiAgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKaW5k
ZXggNmJjZjc2OGFkZmQuLjg0NjkyYzRkNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCwxMyArNzgs
MjAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyNpZiBVU0UoQ0cpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBh
cnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpv
b21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
Y29uLmgKaW5kZXggODYwZWE2OTZmZWIuLmUyNWNhODhlYzg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSWNvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEwICsyMSwxMiBAQAogI2lmbmRlZiBJY29uX2gKICNk
ZWZpbmUgSWNvbl9oCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiTmF0aXZlSW1h
Z2UuaCIKQEAgLTQ4LDcgKzUwLDEyIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIH5J
Y29uKCk7CiAKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBjb250ZXh0LmRyYXdJY29uKCp0aGlzLCByZWN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGljIFJl
ZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29u
KGhJY29uKSk7IH0KQEAgLTc5LDYgKzg2LDEyIEBAIHByaXZhdGU6CiAgICAgR2RrUGl4YnVmKiBt
X2ljb247CiAjZW5kaWYKIH07CisgICAgCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgSWNvbiYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIElj
b24gbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDhjZmIxZTkyMjU3Li5jMTY2ZjFiYjY4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzIwLDcgKzMyMCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgb3Jp
Z2luLCBmbG9hdCB3aWR0aCwgYm9vCiAgICAgZHJhd0xpbmVzRm9yVGV4dChvcmlnaW4sIERhc2hB
cnJheSB7IHdpZHRoLCAwIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTMyOSw3ICszMjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChw
b2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlVGhpY2tuZXNz
KCkpOworICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggZTA2ZTQw
MzFkODcuLjI1NTA4OGRiZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAKQEAgLTI5NCw5ICsyOTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaQogICAgIENhaXJv
OjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewotICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOworICAgIFVOVVNFRF9QQVJB
TShzdHJva2VTdHlsZSk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2lu
dCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CkBAIC0zMTIsMTAgKzMxMiw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
UGF0aChjb25zdCBQYXRoJikKLXsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAppbmRleCA5OTdjYmRkYTUxYy4uOTYxYTk2OTdj
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCkBAIC03OSwxMCArNzksOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKaW5kZXggZDI5NTA3MTc4Y2IuLmQ1YjIyMDk2ZmYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCkBAIC0xNTg3LDcgKzE1ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRo
aWNrbmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0
aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBhNDBmODlmNzY4OC4uYTZi
ZTFkYzJlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtMTE0LDggKzExNCw4IEBA
IHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiBzaXplX3QgRGlz
cGxheUxpc3Q6OnNpemVJbkJ5dGVzKCkgY29uc3QKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
LSAgICBmb3IgKGF1dG8mIHJlZiA6IG1fbGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNp
emVJbkJ5dGVzKHJlZik7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9saXN0KQorICAgICAgICBy
ZXN1bHQgKz0gaXRlbS0+c2l6ZUluQnl0ZXMoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IGQ0NDM3ZTNkNDFiLi5mODYyYjg3OGI1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTQxLDggKzQxLDYgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBJdGVtOwotCiBlbnVtIEFzVGV4
dEZsYWcgewogICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLAogICAgIElu
Y2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAgICAgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMWZjZWU4YjM4NDMuLjZjNDc2ZTljYzJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExMjEgKzI2LDkwIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogCi0jaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLS8vIFNob3VsZCBtYXRj
aCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCi1zdGF0aWMgY29uc3QgZmxv
YXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8
ICFMT0dfRElTQUJMRUQKLVdURjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17
Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICB0cyA8PCAqdGhpczsKLSAgICByZXR1cm4gdHMucmVs
ZWFzZSgpLnV0ZjgoKTsKLX0KLSNlbmRpZgotCi1zaXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29u
c3QgSXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3Rh
dGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVK
b2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PENsaXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBP
dXRUb1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBo
cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJ
bWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVt
KSk7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRpdmVJbWFn
ZT4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGlu
ZXNGb3JUZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0Pihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxs
Q29tcG9zaXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJl
Y3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RmlsbFBh
dHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKK3VzaW5nIEl0ZW1EZXNjcmlw
dG9yID0gc3RydWN0IHsKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcmd1
bWVudHNOYW1lczsKK307CisKK3N0YXRpYyBjb25zdCBWZWN0b3I8SXRlbURlc2NyaXB0b3I+JiBp
dGVtc0Rlc2NyaXB0b3JzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEl0
ZW1EZXNjcmlwdG9yPj4gaXRlbXNEZXNjcmlwdG9ycyA9IFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4o
eworICAgICAgICB7ICJzYXZlIiwgeyB9IH0sCisgICAgICAgIHsgInJlc3RvcmUiLCB7IH0gfSwK
KyAgICAgICAgeyAic2V0LXN0YXRlIiwgeyAic3RhdGUtY2hhbmdlIiB9IH0sCisgICAgICAgIHsg
InRyYW5zbGF0ZSIsIHsgIngiLCAieSIgfSB9LAorICAgICAgICB7ICJyb3RhdGUiLCB7ICJhbmds
ZSIgfSB9LAorICAgICAgICB7ICJzY2FsZSIsIHsgInNpemUiIH0gfSwKKyAgICAgICAgeyAiY29u
Y2F0ZW5hdGUtY3RtIiwgeyAiY3RtIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWNhcCIsIHsg
ImxpbmUtY2FwIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWRhc2giLCB7ICJkYXNoLWFycmF5
IiwgImRhc2gtb2Zmc2V0IiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWpvaW4iLCB7ICJsaW5l
LWpvaW4iIH0gfSwKKyAgICAgICAgeyAic2V0LW1pdGVyLWxpbWl0IiwgeyAibWl0cmUtbGltaXQi
IH0gfSwKKyAgICAgICAgeyAiY2xlYXItc2hhZG93IiwgeyB9IH0sCisgICAgICAgIHsgImNsaXAi
LCB7ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsaXAtb3V0IiwgeyAicmVjdCIgfSB9LAorICAg
ICAgICB7ICJjbGlwLW91dC10by1wYXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7ICJjbGlw
LXBhdGgiLCB7ICJwYXRoIiwgIndpbmQtcnVsZSIgfSB9LAorICAgICAgICB7ICJhcHBseS1zdHJv
a2UtcGF0dGVybiIsIHsgfSB9LAorICAgICAgICB7ICJhcHBseS1maWxsLXBhdHRlcm4iLCB7IH0g
fSwKKyAgICAgICAgeyAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciIsIHsgInNjYWxlLWZhY3Rv
ciIgfSB9LAorCisgICAgICAgIHsgImJlZ2luLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgIm9wYWNp
dHkiIH0gfSwKKyAgICAgICAgeyAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgfSB9LAorICAg
ICAgICB7ICJkcmF3LWdseXBocyIsIHsgImZvbnQiLCAiZ2x5cGgtYnVmZmVyIiwgImZyb20iLCAi
bnVtLWdseXBocyIsICJwb2ludCIsICJmb250LXNtb290aGluZyIgfSB9LAorICAgICAgICB7ICJk
cmF3LWltYWdlIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInNvdXJjZS1yZWN0IiwgImltYWdl
LXBhaW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAiZHJhdy10aWxlZC1pbWFnZSIsIHsg
ImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcG9pbnQiLCAidGlsZS1zaXplIiwgInNwYWNp
bmciLCAiaW1hZ2UtcGFpbnRpbmctb3B0aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LXRpbGVk
LXNjYWxlZC1pbWFnZSIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcmVjdCIsICJ0
aWxlLXNjYWxlZmFjdG9yIiwgImgtcnVsZSIsICJ2LXJ1bGUiLCAiaW1hZ2UtcGFpbnRpbmctb3B0
aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LW5hdGl2ZS1pbWFnZSIsIHsgImltYWdlIiwgInNl
bGYtc2l6ZSIsICJkZXN0LXJlY3QiLCAic291cmNlLXJlY3QiLCAiY29tcG9zaXRlLW9wZXJhdG9y
IiwgImJsZW5kLW1vZGUiLCAiaW1hZ2Utb3JpZW50YXRpb24iIH0gfSwKKyAgICAgICAgeyAiZHJh
dy1wYXR0ZXJuIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInRpbGUtcmVjdCIsICJwYXR0ZXJu
LXRyYW5zZm9ybSIsICJwaGFzZSIsICJzcGFjaW5nIiwgImNvbXBvc2l0ZS1vcGVyYXRvciIsICJi
bGVuZC1tb2RlIiB9IH0sCisgICAgICAgIHsgImRyYXctcmVjdCIsIHsgInJlY3QiLCAiYm9yZGVy
LXRoaWNrbmVzcyIgfSB9LAorICAgICAgICB7ICJkcmF3LWxpbmUiLCB7ICJwb2ludC0xIiwgInBv
aW50LTIiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1saW5lcy1mb3ItdGV4dCIsIHsgInBvaW50Iiwg
IndpZHRocyIsICJpcy1wcmludGluZyIsICJkb3VibGUtbGluZXMiLCAic3Ryb2tlLXN0eWxlIiB9
IH0sCisgICAgICAgIHsgImRyYXctbGluZS1mb3ItZG9jdW1lbnQtbWFya2VyIiwgeyAicG9pbnQi
LCAid2lkdGgiLCAiZG9jdW1lbnQtbWFya2VyLWxpbmUtc3R5bGUiIH0gfSwKKyAgICAgICAgeyAi
ZHJhdy1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXBhdGgiLCB7ICJw
YXRoIiB9IH0sCisgICAgICAgIHsgImRyYXctZm9jdXMtcmluZy1wYXRoIiwgeyAicGF0aCIsICJ3
aWR0aCIsICJvZmZzZXQiLCAiY29sb3IiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1mb2N1cy1yaW5n
LXJlY3RzIiwgeyAicmVjdHMiLCAid2lkdGgiLCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAg
ICAgIHsgImRyYXctaWNvbiIsIHsgImljb24iLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3
LXdpZGdldCIsIHsgIndpZGdldCIsICJyZWN0In0gfSwKKyAgICAgICAgeyAiZHJhdy1zY3JvbGxi
YXIiLCB7ICJzY3JvbGxiYXIiLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXRoZW1lIiwg
eyAidGhlbWUiLCAiY29udHJvbC1wYXJ0IiwgImNvbnRyb2wtc3RhdGVzIiwgInpvb21lZC1yZWN0
IiwgInpvb20tZmFjdG9yIiwgInNjcm9sbC12aWV3IiwgImRldmljZS1zY2FsZS1mYWN0b3IiLCAi
cGFnZS1zY2FsZS1mYWN0b3IiLCAidXNlLXN5c3RlbS1hcHBlYXJhbmNlIiwgInVzZS1kYXJrLWFw
cGVhcmFuY2UiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0IiwgeyAicmVjdCIgfSB9LAorICAg
ICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciIsIHsgInJlY3QiLCAiY29sb3IiIH0gfSwKKyAg
ICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiLCB7ICJyZWN0IiwgImdyYWRpZW50IiB9
IH0sCisgICAgICAgIHsgImZpbGwtY29tcG9zaXRlZC1yZWN0IiwgeyAicmVjdCIsICJjb2xvciIs
ICJjb21wb3NpdGUtb3BlcmF0b3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAgICB7ICJmaWxs
LXJvdW5kZWQtcmVjdCIsIHsgInJlY3QiLCAiY29sb3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAg
ICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiLCB7ICJyZWN0IiwgInJvdW5kZWQt
aG9sZS1yZWN0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsgImZpbGwtcGF0aCIsIHsgInBhdGgi
IH0gfSwKKyAgICAgICAgeyAiZmlsbC1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7
ICJzdHJva2UtcmVjdCIsIHsgInJlY3QiLCAibGluZS13aWR0aCIgfSB9LAorICAgICAgICB7ICJz
dHJva2UtcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAgICAgeyAic3Ryb2tlLWVsbGlwc2UiLCB7
ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsZWFyLXJlY3QiLCB7ICJyZWN0IiB9IH0KKyAgICB9
KTsKKworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KEl0ZW1UeXBlOjpNYXgpID09IGl0
ZW1zRGVzY3JpcHRvcnMuZ2V0KCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlwdG9y
czsKK30KKworc3RhdGljIGNvbnN0IEl0ZW1EZXNjcmlwdG9yJiBpdGVtRGVzY3JpcHRvcihJdGVt
VHlwZSBpdGVtVHlwZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtVHlw
ZSkgPCBpdGVtc0Rlc2NyaXB0b3JzKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlw
dG9ycygpW3N0YXRpY19jYXN0PHNpemVfdD4oaXRlbVR5cGUpXTsKIH0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBpdGVt
KQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAgaWYg
KGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAgICBl
bHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKICAgICAKLSAgICB0cy5lbmRHcm91cCgpOwot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTYXZlJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIGl0ZW0ucmVzdG9yZUluZGV4KCkpOwot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgVHJh
bnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVt
LnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5n
bGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgp
KTsKLQotICAgIHJldHVybiB0czsKLX0KLQotQ29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLXZv
aWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwot
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKLX0KLQot
dm9pZCBTZXRTdGF0ZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAg
IG1fc3RhdGUuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQotewot
ICAgIHRzIDw8IHN0YXRlLnN0YXRlKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExp
bmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rh
c2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpv
aW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGluZUpv
aW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGltaXQ6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNl
dE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJMaW1p
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7
Ci19Ci0KLXZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcCYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LmNsaXBPdXQobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXQmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
bGlwT3V0VG9QYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5jbGlwT3V0KG1fcGF0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUGF0aCYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJ3aW5kLXJ1bGUiLCBpdGVtLndpbmRSdWxlKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2Zv
bnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tM
b2NhdGlvbikKLSAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCi0gICAgLCBtX3Ntb290
aGluZ01vZGUoc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2dseXBocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGNvdW50KTsKLSAgICBtX2FkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291
bnQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IG1fZ2x5cGhzLnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICBtX2FkdmFuY2Vz
LnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7Ci0gICAgfQotICAgIGNvbXB1dGVCb3VuZHMo
KTsKLX0KLQotaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZm
ZXIoKSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hZGQobV9n
bHlwaHNbaV0sICZtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0pOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0
ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9v
dGhpbmdNb2RlKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgYWN0dWFsbHkgdGFrZSB0aGUgZXh0ZW50cyBv
ZiB0aGUgZ2x5cGhzIGludG8gY29uc2lkZXJhdGlvbi4gSXQgYXNzdW1lcyB0aGF0Ci0gICAgLy8g
dGhlIGdseXBoIGxpZXMgZW50aXJlbHkgd2l0aGluIGl0cyBbKGFzY2VudCArIGRlc2NlbnQpLCBh
ZHZhbmNlXSByZWN0LgotICAgIGZsb2F0IGFzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudCgpOwotICAgIGZsb2F0IGRlc2NlbnQgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCku
ZmxvYXREZXNjZW50KCk7Ci0gICAgRmxvYXRQb2ludCBjdXJyZW50ID0gdG9GbG9hdFBvaW50KGxv
Y2FsQW5jaG9yKCkpOwotICAgIHNpemVfdCBudW1HbHlwaHMgPSBtX2dseXBocy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07Ci0gICAgICAgIEZsb2F0UmVj
dCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNjZW50
LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOwotICAgICAgICBtX2JvdW5kcy51
bml0ZShnbHlwaFJlY3QpOwotCi0gICAgICAgIGN1cnJlbnQubW92ZShhZHZhbmNlLndpZHRoKCks
IGFkdmFuY2UuaGVpZ2h0KCkpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IERyYXdHbHlwaHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CitT
dHJpbmcgSXRlbTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0g
bV9ib3VuZHM7Ci0gICAgbG9jYWxCb3VuZHMubW92ZShtX2Jsb2NrTG9jYXRpb24ueCgpLCBtX2Js
b2NrTG9jYXRpb24ueSgpKTsKLSAgICByZXR1cm4gbG9jYWxCb3VuZHM7CisgICAgcmV0dXJuIGl0
ZW1EZXNjcmlwdG9yKG1fdHlwZSkubmFtZTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCitTdHJpbmcgSXRl
bTo6YXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29uc3QKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUg
c3R1ZmYuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tM
b2NhdGlvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9j
YWxBbmNob3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFu
Y2hvclBvaW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMo
KS5zaXplKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQotICAgICwgbV9pbWFn
ZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJj
ZShzb3VyY2UpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQotewotfQotCi12b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVz
dGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYg
aXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi1EcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBt
X3RpbGVTaXplKHRpbGVTaXplKQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX2lt
YWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi12b2lkIERy
YXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBt
X3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdUaWxlZEltYWdlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1h
Z2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2Nh
bGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1f
dlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotfQotCi12b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3Is
IG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotRHJhd05hdGl2ZUltYWdl
OjpEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwg
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3TmF0aXZlSW1hZ2UpCi0jaWYgVVNFKENHKQotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0
b3JlIGFuIGltYWdlIGZvciBDYWlyby4KLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0jZW5kaWYKLSAg
ICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3Qp
Ci0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgLCBtX29wKG9wKQot
ICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotI2VuZGlmCi0gICAgLCBtX29yaWVudGF0aW9u
KG9yaWVudGF0aW9uKQotewotI2lmICFVU0UoQ0cpCi0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsK
LSAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgIFVOVVNFRF9QQVJBTShibGVuZE1vZGUpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0jaWYgVVNFKENHKQotICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG1faW1hZ2UsIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBtX3NyY1JlY3QsIG1fb3AsIG1f
YmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBGSVhNRTogZHVtcCBtb3Jl
IHN0dWZmLgotICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLURyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd1BhdHRlcm4pCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wYXR0ZXJuVHJh
bnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCi0gICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQotICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKLSAgICAsIG1fcGhhc2UocGhhc2UpCi0gICAgLCBt
X3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCi17Ci19Ci0KLXZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwg
bV9zcGFjaW5nLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKLXsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
InBoYXNlIiwgaXRlbS5waGFzZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBp
dGVtLnNwYWNpbmcoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdSZWN0OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3UmVj
dChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQotewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVy
LXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZHM7Ci0gICAgYm91
bmRzLmZpdFRvUG9pbnRzKG1fcG9pbnQxLCBtX3BvaW50Mik7Ci0gICAgcmV0dXJuIGJvdW5kczsK
LX0KLQotdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuZHJhd0xpbmUobV9wb2ludDEsIG1fcG9pbnQyKTsKLX0KLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5l
JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0xIiwgaXRlbS5wb2ludDEoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJwb2ludC0yIiwgaXRlbS5wb2ludDIoKSk7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi12b2lkIERyYXdMaW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV93
aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZh
bHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgpIHJldHVybnMuCi0KLSAgICBpZiAo
IW1fd2lkdGhzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxv
YXRSZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9r
ZVdpZHRoKSk7Ci0gICAgcmVzdWx0LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNu
YXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhl
IENUTSBpbnRvIGFjY291bnQuCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQm
IGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0
aW9uKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFu
Y2hvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndpZHRocygpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50aW5nKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihtX3Bv
aW50LCBtX3dpZHRoLCBtX3N0eWxlKTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1
ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIoKSByZXR1cm5zLgotCi0gICAgRmxvYXRSZWN0IHJlc3VsdChtX3BvaW50
LCBGbG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOwotICAgIHJl
c3VsdC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZvciAi
bWlzc3BlbGxpbmcgZG90IiBzbmFwcGluZy4KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBv
aW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdFbGxpcHNlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSNpZiBVU0UoQ0cpCi0gICAgY29udGV4dC5kcmF3
UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7
IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZz
ZXQsIG1fY29sb3IpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmlu
Z1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAg
RmxvYXRSZWN0IHJlc3VsdCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgcmVzdWx0
LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdGb2N1c1JpbmdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBh
dGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgdHMuZHVtcFByb3Bl
cnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQi
LCBpdGVtLm9mZnNldCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9j
dXNSaW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgIGZv
ciAoYXV0byYgcmVjdCA6IG1fcmVjdHMpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0KTsKLSAg
ICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIs
IGl0ZW0ucmVjdHMoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgo
KSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkKLXsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdp
dGhDb2xvciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9ncmFkaWVu
dC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBsb2cgZ3Jh
ZGllbnQuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9j
b2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9w
ZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVu
ZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yb3VuZGVkUmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5j
b2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9k
ZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3Ip
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIs
IGl0ZW0ucm91bmRlZEhvbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBp
dGVtLmNvbG9yKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFBhdGgo
bV9wYXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5w
YXRoKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbEVsbGlwc2Uo
bV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17
Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKLSAgICBib3VuZHMuZXhwYW5kKG1fbGlu
ZVdpZHRoLCBtX2xpbmVXaWR0aCk7Ci0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotdm9pZCBTdHJv
a2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC5zdHJva2VSZWN0KG1fcmVjdCwgbV9saW5lV2lkdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkK
LXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8g
dGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhC
eVN0cm9raW5nUGF0aCgpLgotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5n
UmVjdCgpOwotICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25l
c3MpOwotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlUGF0aCht
X3BhdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0u
cGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBT
dHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlj
a25lc3MoKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Ci0gICAgYm91bmRzLmV4
cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgcmV0dXJuIGJvdW5k
czsKLX0KLQotdm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVjdCk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VF
bGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJS
ZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fb3BhY2l0eSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQotewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLX0KLQot
I2lmIFVTRShDRykKLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsK
LX0KLQotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Ci19Ci0jZW5kaWYK
LQotdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2Nh
bGVGYWN0b3IpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5z
bGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8
PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMg
PDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVD
YXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMgPDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFn
ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8
PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBicmVhazsKLSNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5h
dGl2ZS1pbWFnZSI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRl
cm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMtZm9yLXRleHQiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1m
b3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlw
c2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UGF0aDogdHMgPDwgImRyYXctcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdQYXRoOiB0cyA8PCAiZHJhdy1mb2N1cy1yaW5nLXBhdGgiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmct
cmVjdHMiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwt
cmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8
PCAiZmlsbC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21w
b3NpdGVkLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
IHRzIDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8ICJmaWxsLXBhdGgi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMgPDwgImZpbGwtZWxs
aXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHRzIDw8ICJzdHJv
a2UtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHRzIDw8ICJz
dHJva2UtcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHRz
IDw8ICJzdHJva2UtZWxsaXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDogdHMgPDwgImNsZWFyLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOiB0cyA8PCAiYmVnaW4tdHJhbnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJlbmQtdHJh
bnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5U3Ryb2tlUGF0dGVybjogdHMgPDwgImFwcGx5LXN0cm9rZS1wYXR0ZXJuIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwt
cGF0dGVybiI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBncm91cCh0cyk7Ci0gICAgdHMgPDwgaXRlbS50eXBlKCk7Ci0KLSAgICAvLyBGSVhNRTog
TWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJhdGlv
biBzd2l0Y2hlcwotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTYXZlPihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxUcmFuc2xhdGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxT
Y2FsZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KGl0
ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U2V0TGluZUpvaW4+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRo
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ltYWdlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TmF0aXZl
SW1hZ2U+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRo
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Q29sb3I+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PEZpbGxQYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9r
ZVBhdGg+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8g
SXRlbXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCi0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSNpZiBVU0UoQ0cp
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKKyAgICBBU1NFUlQo
aW5kZXggPCBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLmFyZ3VtZW50c05hbWVzLnNpemUoKSk7Cisg
ICAgcmV0dXJuIGl0ZW1EZXNjcmlwdG9yKG1fdHlwZSkuYXJndW1lbnRzTmFtZXNbaW5kZXhdOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCBmMDBlYTdlODVjYi4u
NjI0NGVkMGJiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwzMiArMzEs
MzIgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaGVtZS5oIgorI2luY2x1
ZGUgIlRoZW1lVHlwZXMuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNlbmRpZgogCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRl
eHRTdHJlYW07Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEltYWdlUGFpbnRp
bmdPcHRpb25zOwotCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCiBlbnVtIGNsYXNzIEl0ZW1U
eXBlIHsKLSAgICBTYXZlLAorICAgIE1pbiA9IDAsCisgICAgU2F2ZSA9IE1pbiwKICAgICBSZXN0
b3JlLAorICAgIFNldFN0YXRlLAogICAgIFRyYW5zbGF0ZSwKICAgICBSb3RhdGUsCiAgICAgU2Nh
bGUsCiAgICAgQ29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0U3RhdGUsCiAgICAgU2V0TGluZUNhcCwK
ICAgICBTZXRMaW5lRGFzaCwKICAgICBTZXRMaW5lSm9pbiwKQEAgLTY2LDEzICs2NiwxNyBAQCBl
bnVtIGNsYXNzIEl0ZW1UeXBlIHsKICAgICBDbGlwT3V0LAogICAgIENsaXBPdXRUb1BhdGgsCiAg
ICAgQ2xpcFBhdGgsCisgICAgQXBwbHlTdHJva2VQYXR0ZXJuLAorICAgIEFwcGx5RmlsbFBhdHRl
cm4sCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKKworICAgIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIsCisgICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIsCiAgICAgRHJhd0dseXBocywKICAgICBE
cmF3SW1hZ2UsCiAgICAgRHJhd1RpbGVkSW1hZ2UsCiAgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2Us
Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCiAgICAgRHJhd05hdGl2ZUltYWdlLAotI2VuZGlm
CiAgICAgRHJhd1BhdHRlcm4sCiAgICAgRHJhd1JlY3QsCiAgICAgRHJhd0xpbmUsCkBAIC04Miw2
ICs4NiwxMCBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIHsKICAgICBEcmF3UGF0aCwKICAgICBEcmF3
Rm9jdXNSaW5nUGF0aCwKICAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRHJhd0ljb24sCisg
ICAgRHJhd1dpZGdldCwKKyAgICBEcmF3U2Nyb2xsYmFyLAorICAgIERyYXdUaGVtZSwKICAgICBG
aWxsUmVjdCwKICAgICBGaWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVu
dCwKQEAgLTk0LDEyOTUgKzEwMiw5MzMgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgU3Ry
b2tlUGF0aCwKICAgICBTdHJva2VFbGxpcHNlLAogICAgIENsZWFyUmVjdCwKLSAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyLAotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAotI2lmIFVTRShDRykK
LSAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3Jk
ZWQgaXRlbS4KLSAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBh
IHJlY29yZGVkIGl0ZW0uCi0jZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFjdG9yLAorICAg
IE1heAogfTsKIAogY2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKIHB1Ymxp
YzoKLSAgICBJdGVtKCkgPSBkZWxldGU7Ci0KLSAgICBJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAg
ICAgIDogbV90eXBlKHR5cGUpCi0gICAgewotICAgIH0KLQogICAgIHZpcnR1YWwgfkl0ZW0oKSA9
IGRlZmF1bHQ7CiAKLSAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3R5cGU7Ci0gICAgfQotCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0ID0gMDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Rpc3BsYXlM
aXN0SXRlbSA9IHRydWU7CisgICAgdmlydHVhbCBib29sIGlzR2VvbWV0cnlJdGVtKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0
ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICAKLSAgICAvLyBBIHN0YXRlIGl0ZW0gaXMgb25lIHByZXNlcnZlZCBieSBT
YXZlL1Jlc3RvcmUuCi0gICAgYm9vbCBpc1N0YXRlSXRlbSgpIGNvbnN0CisgICAgdmlydHVhbCB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBpc1N0YXRlSXRlbVR5cGUobV90eXBlKTsKKyAgICAgICAgdHMgPDwgbmFtZSgpOwogICAgIH0K
IAotICAgIHN0YXRpYyBib29sIGlzU3RhdGVJdGVtVHlwZShJdGVtVHlwZSBpdGVtVHlwZSkKKyAg
ICBJdGVtVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgV1RGOjpDU3Ry
aW5nIGR1bXAoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEl0ZW0oSXRlbVR5cGUgdHlwZSkK
KyAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoaXRlbVR5cGUp
IHsKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFRyYW5zbGF0ZToKLSAgICAgICAgY2FzZSBJdGVt
VHlwZTo6IFJvdGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNjYWxlOgotICAgICAgICBj
YXNlIEl0ZW1UeXBlOjogQ29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBT
ZXRTdGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVDYXA6Ci0gICAgICAgIGNh
c2UgSXRlbVR5cGU6OiBTZXRMaW5lRGFzaDoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExp
bmVKb2luOgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IENsZWFyU2hhZG93OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxP
R19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlm
Ci0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVtJik7CisgICAgU3RyaW5n
IG5hbWUoKSBjb25zdDsKKyAgICBTdHJpbmcgYXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29u
c3Q7CiAKLXByaXZhdGU6CiAgICAgSXRlbVR5cGUgbV90eXBlOwogfTsKIAotY2xhc3MgRHJhd2lu
Z0l0ZW0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBHZW9tZXRyeUl0ZW0gOiBwdWJsaWMgSXRlbSB7
CiBwdWJsaWM6Ci0gICAgRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICAgICAgOiBJdGVt
KHR5cGUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVj
dCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGV4dGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQogICAgIGJvb2wgZXh0ZW50S25vd24o
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0KIAotICAgIC8v
IFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2NhbCBjb29yZGlu
YXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zvcm0sIHNoYWRv
dyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBt
X2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5z
Zm9ybXMgaW50byBhY2NvdW50LgotfTsKLQotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNhdmU+IGNyZWF0ZSgpCisgICAgdm9pZCBzZXRFeHRlbnQo
Y29uc3QgRmxvYXRSZWN0JiBleHRlbnQpIHsgbV9leHRlbnQgPSBleHRlbnQ7IH0KKyAgICBjb25z
dCBGbG9hdFJlY3QgZXh0ZW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNhdmUpOworICAgICAgICByZXR1cm4gbV9leHRlbnQudmFsdWVfb3IoRmxvYXRSZWN0
KCkpOwogICAgIH0KIAotICAgIC8vIEluZGV4IGluIHRoZSBkaXNwbGF5IGxpc3Qgb2YgdGhlIGNv
cnJlc3BvbmRpbmcgUmVzdG9yZSBpdGVtLiAwIGlmIHVubWF0Y2hlZC4KLSAgICBzaXplX3QgcmVz
dG9yZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9yZXN0b3JlSW5kZXg7IH0KLSAgICB2b2lkIHNl
dFJlc3RvcmVJbmRleChzaXplX3QgaW5kZXgpIHsgbV9yZXN0b3JlSW5kZXggPSBpbmRleDsgfQot
Ci1wcml2YXRlOgotICAgIFNhdmUoKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0
OyB9CiAgICAgCi0gICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OwotfTsKLQotY2xhc3Mg
UmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+
IGNyZWF0ZSgpCitwcm90ZWN0ZWQ6CisgICAgR2VvbWV0cnlJdGVtKEl0ZW1UeXBlIHR5cGUpCisg
ICAgICAgIDogSXRlbSh0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UmVzdG9yZSk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIFJlc3RvcmUoKQotICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMp
IGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAg
dHMuc3RhcnRHcm91cCgpOworICAgICAgICB0cyA8PCAiZXh0ZW50ICI7CisgICAgICAgIGlmIChl
eHRlbnRLbm93bigpKQorICAgICAgICAgICAgdHMgPDwgZXh0ZW50KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHRzIDw8ICJ1bmtub3duIjsKKyAgICAgICAgdHMuZW5kR3JvdXAoKTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsKIH07CiAKLWNsYXNzIFRyYW5z
bGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4g
Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQXBwbGllciwgQXBw
bGllciBhcHBsaWVyLCBjbGFzcy4uLiBBcmd1bWVudHM+CitjbGFzcyBHcmFwaGljc0l0ZW0gewor
cHJvdGVjdGVkOgorICAgIEdyYXBoaWNzSXRlbShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IG1fYXJndW1lbnRzKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwog
ICAgIH0KIAotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5
KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLXByaXZhdGU6Ci0gICAgVHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQotICAgICAg
ICAsIG1feCh4KQotICAgICAgICAsIG1feSh5KQorICAgIHRlbXBsYXRlPCBzdGQ6OnNpemVfdCBJ
PgorICAgIGNvbnN0IGF1dG8mIGFyZ3VtZW50KCkgY29uc3QKICAgICB7CisgICAgICAgIHJldHVy
biBzdGQ6OmdldDxJPihtX2FyZ3VtZW50cyk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1feDsKLSAgICBmbG9h
dCBtX3k7Ci19OwotCi1jbGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOworICAgICAgICBhcHBs
eShjb250ZXh0LCBzdGQ6OmluZGV4X3NlcXVlbmNlX2ZvcjxBcmd1bWVudHMuLi4+KCkpOwogICAg
IH0KIAotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi1wcml2
YXRlOgotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpS
b3RhdGUpCi0gICAgICAgICwgbV9hbmdsZShhbmdsZSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGl0ZXJhcnRlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogICAg
IHsKKyAgICAgICAgaXRlcmFydGUoV1RGTW92ZShmdW5jdG9yKSwgc3RkOjppbmRleF9zZXF1ZW5j
ZV9mb3I8QXJndW1lbnRzLi4uPigpKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFk
aWFucy4KLX07Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90Li4uIEluZGljZXM+CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SW5kaWNlcy4uLj4pIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7Cisg
ICAgICAgIChjb250ZXh0LiphcHBsaWVyKShzdGQ6OmdldDxJbmRpY2VzPihtX2FyZ3VtZW50cyku
Li4pOwogICAgIH0KIAotICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9Ci0KLXByaXZhdGU6Ci0gICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxlKQotICAgICAgICAsIG1fc2l6ZShzaXpl
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHN0ZDo6c2l6ZV90Li4uIEluZGljZXM+
CisgICAgdm9pZCBpdGVyYXJ0ZShGdW5jdG9yJiYgZnVuY3Rvciwgc3RkOjppbmRleF9zZXF1ZW5j
ZTxJbmRpY2VzLi4uPikgY29uc3QKICAgICB7CisgICAgICAgIHVzaW5nIHN3YWxsb3cgPSBpbnRb
XTsKKyAgICAgICAgKHZvaWQpc3dhbGxvdyB7IDEsIChmdW5jdG9yKEluZGljZXMsIHN0ZDo6Z2V0
PEluZGljZXM+KG1fYXJndW1lbnRzKSksIGludCB7IH0pLi4uIH07CiAgICAgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0U2l6
ZSBtX3NpemU7CisgICAgc3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+IG1fYXJndW1lbnRzOwogfTsK
IAotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7Cit0ZW1wbGF0ZSA8SXRlbVR5
cGUgaXRlbVR5cGUsIHR5cGVuYW1lIEFwcGxpZXIsIEFwcGxpZXIgYXBwbGllciwgY2xhc3MuLi4g
QXJndW1lbnRzPgorY2xhc3MgU2V0dGluZ0l0ZW0gOiBwdWJsaWMgSXRlbSwgcHVibGljIEdyYXBo
aWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bWF0cml4KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTSht
YXRyaXgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ0l0ZW0oYXJndW1l
bnRzLi4uKSk7CiAgICAgfQogCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi1wcml2YXRlOgotICAgIENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5z
Zm9ybTsKLX07Ci0KLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZjxJdGVtPiBjcmVhdGUoQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dFN0YXRlKHN0YXRlLCBmbGFncykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFz
ZV9vZjxTZWxmLCBUPjo6dmFsdWUsICJUaGlzIGZ1bmN0aW9uIHNob3VsZCBjcmVhdGUgY2xhc3Nl
cyBmcm9tIFNldHRpbmdJdGVtLiIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9Ci0gICAgCi0gICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQogCi0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHVzaW5n
IEdyYXBoaWNzSXRlbUJhc2UgPSBHcmFwaGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1l
bnRzLi4uPjsKIAotICAgIHZvaWQgYWNjdW11bGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNv
bnN0OwotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKLQotICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7Ci1wcml2YXRlOgotICAgIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAgICAgICwg
bV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgU2V0dGluZ0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICAgICAgOiBJdGVtKGl0ZW1UeXBlKQorICAgICAgICAsIEdyYXBoaWNzSXRlbUJh
c2Uoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKICAgICB7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7Ci19OwotCi1jbGFzcyBTZXRMaW5l
Q2FwIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUNhcD4g
Y3JlYXRlKExpbmVDYXAgbGluZUNhcCkKKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0
cykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dExpbmVDYXAobGluZUNhcCkpOworICAgICAgICBJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAgR3Jh
cGhpY3NJdGVtQmFzZTo6aXRlcmFydGUoW3RoaXMsICZ0c10oc2l6ZV90IGluZGV4LCBjb25zdCBh
dXRvJiBhcmd1bWVudFZhbHVlKSB7CisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkodGhpcy0+
YXJndW1lbnROYW1lKGluZGV4KSwgYXJndW1lbnRWYWx1ZSk7CisgICAgICAgIH0pOwogICAgIH0K
LSAgICAKLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0K
IAogcHJpdmF0ZToKLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTZXRMaW5lQ2FwKQotICAgICAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQor
ICAgIHVzaW5nIFNlbGYgPSBTZXR0aW5nSXRlbTxpdGVtVHlwZSwgQXBwbGllciwgYXBwbGllciwg
QXJndW1lbnRzLi4uPjsKKworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6YXBwbHko
Y29udGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIExpbmVDYXAgbV9saW5lQ2FwOworICAgIHNpemVfdCBzaXplSW5C
eXRlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHNpemVvZigqdGhpcyk7IH0KIH07CiAKLWNs
YXNzIFNldExpbmVEYXNoIDogcHVibGljIEl0ZW0gewordGVtcGxhdGUgPEl0ZW1UeXBlIGl0ZW1U
eXBlLCB0eXBlbmFtZSBBcHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIsIGNsYXNzLi4uIEFyZ3VtZW50
cz4KK2NsYXNzIERyYXdpbmdJdGVtIDogcHVibGljIEdlb21ldHJ5SXRlbSwgcHVibGljIEdyYXBo
aWNzSXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5
LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRM
aW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd2luZ0l0ZW0oc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikp
OwogICAgIH0KIAotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3QgeyByZXR1
cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9kYXNoT2Zmc2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0TGluZURhc2gpCi0gICAgICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAg
ICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFJlZjxJdGVtPiBjcmVhdGUoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKICAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPFNlbGYsIFQ+Ojp2YWx1ZSwg
IlRoaXMgZnVuY3Rpb24gc2hvdWxkIGNyZWF0ZSBjbGFzc2VzIGZyb20gRHJhd2luZ0l0ZW0uIik7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLikpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdXNpbmcgR3JhcGhpY3NJdGVtQmFzZSA9IEdyYXBoaWNz
SXRlbTxBcHBsaWVyLCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+OwogCi0gICAgRGFzaEFycmF5IG1f
ZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07CisgICAgLy8gU2hvdWxkIG1h
dGNoIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkKKyAgICBjb25zdGV4cHIg
c3RhdGljIGZsb2F0IGNvbnN0IHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7CiAKLWNsYXNz
IFNldExpbmVKb2luIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBEcmF3aW5nSXRlbShBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IEdlb21ldHJ5SXRlbShpdGVtVHlwZSkKKyAg
ICAgICAgLCBHcmFwaGljc0l0ZW1CYXNlKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihs
aW5lSm9pbikpOwogICAgIH0KLSAgICAKLSAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KIAogcHJpdmF0ZToKLSAgICBTZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKLSAgICAg
ICAgLCBtX2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIFNlbGYgPSBEcmF3
aW5nSXRlbTxpdGVtVHlwZSwgQXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAg
IExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGlj
IEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4gY3JlYXRlKGZs
b2F0IGxpbWl0KQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TWl0ZXJM
aW1pdChsaW1pdCkpOworICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjphcHBseShjb250ZXh0KTsK
ICAgICB9CiAKLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxp
bWl0OyB9CisgICAgYm9vbCBpc0dlb21ldHJ5SXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBzaXplb2YoKnRoaXMpOyB9CiAKLXByaXZhdGU6Ci0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBt
aXRlckxpbWl0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCi0gICAg
ICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0
cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBHZW9tZXRyeUl0ZW06OmR1
bXAodHMpOworICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjppdGVyYXJ0ZShbdGhpcywgJnRzXShz
aXplX3QgaW5kZXgsIGNvbnN0IGF1dG8mIGFyZ3VtZW50VmFsdWUpIHsKKyAgICAgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSh0aGlzLT5hcmd1bWVudE5hbWUoaW5kZXgpLCBhcmd1bWVudFZhbHVlKTsK
KyAgICAgICAgfSk7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKIH07CiAKLWNsYXNzIENs
ZWFyU2hhZG93IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJT
aGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVh
clNoYWRvdyk7Ci0gICAgfQordXNpbmcgU2F2ZUJhc2UgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6U2F2ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6c2F2ZQorPjsKIAotcHJpdmF0ZToKLSAgICBDbGVhclNoYWRvdygpCi0gICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi0vLyBGSVhN
RTogdHJlYXQgYXMgRHJhd2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworY2xh
c3MgU2F2ZSA6IHB1YmxpYyBTYXZlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlw
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ2xpcChyZWN0KSk7Ci0gICAgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0
byBjcmVhdGUgPSBTYXZlQmFzZTo6Y3JlYXRlPFNhdmU+OwogCi0gICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBs
aXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCisg
ICAgc2l6ZV90IHJlc3RvcmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9
CisgICAgdm9pZCBzZXRSZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4
ID0gaW5kZXg7IH0KIAogcHJpdmF0ZToKLSAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQotICAgICAgICAsIG1fcmVjdChyZWN0KQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHVzaW5nIFNhdmVCYXNlOjpTYXZlQmFzZTsKIAotICAgIEZsb2F0UmVjdCBt
X3JlY3Q7Ci19OwotCi1jbGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOworICAgICAgICBTYXZlQmFz
ZTo6ZHVtcCh0cyk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIG1f
cmVzdG9yZUluZGV4KTsKICAgICB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQotCi1wcml2YXRlOgotICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgICAgICwgbV9yZWN0
KHJlY3QpCi0gICAgewotICAgIH0KKyAgICBzaXplX3QgbV9yZXN0b3JlSW5kZXggeyAwIH07Cit9
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK3Vz
aW5nIFJlc3RvcmUgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6UmVzdG9yZSwKKyAgICB2
b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZQorPjsKIAotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwordXNpbmcgU2V0U3RhdGVCYXNlID0g
U2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlNldFN0YXRlLAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdlLAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlCis+OwogCi1jbGFzcyBDbGlwT3V0VG9QYXRoIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0U3RhdGUgOiBwdWJsaWMgU2V0U3RhdGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAg
Y29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTZXRTdGF0ZUJhc2U6OmNyZWF0ZTxTZXRTdGF0ZT47Cisg
ICAgdXNpbmcgU2V0U3RhdGVCYXNlOjpTZXRTdGF0ZUJhc2U7CisgICAgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsg
fQorfTsKIAotcHJpdmF0ZToKLSAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0g
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAgICAgLCBtX3BhdGgo
cGF0aCkKLSAgICB7Ci0gICAgfQordXNpbmcgVHJhbnNsYXRlID0gU2V0dGluZ0l0ZW08CisgICAg
SXRlbVR5cGU6OlRyYW5zbGF0ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0
LCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlLAorICAgIGZsb2F0LCBm
bG9hdAorPjsKKwordXNpbmcgUm90YXRlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlJv
dGF0ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0KSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0Ojpyb3RhdGUsCisgICAgZmxvYXQKKz47CisKK3VzaW5nIFNjYWxlID0gU2V0dGlu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OlNjYWxlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoY29uc3QgRmxvYXRTaXplJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2NhbGUsCisgICAg
RmxvYXRTaXplCis+OworCit1c2luZyBDb25jYXRlbmF0ZUNUTSA9IFNldHRpbmdJdGVtPAorICAg
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENU
TSwKKyAgICBBZmZpbmVUcmFuc2Zvcm0KKz47CisKK3VzaW5nIFNldExpbmVDYXAgPSBTZXR0aW5n
SXRlbTwKKyAgICBJdGVtVHlwZTo6U2V0TGluZUNhcCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRl
eHQ6OiopKExpbmVDYXApLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAsCisgICAg
TGluZUNhcAorPjsKKwordXNpbmcgU2V0TGluZURhc2ggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6U2V0TGluZURhc2gsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gsCisg
ICAgRGFzaEFycmF5LCBmbG9hdAorPjsKKwordXNpbmcgU2V0TGluZUpvaW4gPSBTZXR0aW5nSXRl
bTwKKyAgICBJdGVtVHlwZTo6U2V0TGluZUpvaW4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShMaW5lSm9pbiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4sCisgICAg
TGluZUpvaW4KKz47CisKK3VzaW5nIFNldE1pdGVyTGltaXQgPSBTZXR0aW5nSXRlbTwKKyAgICBJ
dGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZs
b2F0KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0LAorICAgIGZsb2F0Cis+
OworCit1c2luZyBDbGVhclNoYWRvdyA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdywKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJTaGFkb3cKKz47CisKK3VzaW5nIENsaXAgPSBTZXR0aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6Q2xpcCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZs
b2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNsaXAsCisgICAgRmxvYXRSZWN0Cis+
OworCit1c2luZyBDbGlwT3V0ID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBPdXQs
CisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAm
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0LAorICAgIEZsb2F0UmVjdAorPjsKKwordXNpbmcgQ2xp
cE91dFRvUGF0aCA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoLAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQsCisgICAgY29uc3QgUGF0aAorPjsKKwordXNpbmcgQ2xpcFBhdGgg
PSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgsCisgICAgY29uc3QgUGF0aCwgV2luZFJ1bGUKKz47CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworI2lmIFVTRShDRykK
K3VzaW5nIEFwcGx5U3Ryb2tlUGF0dGVybiA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybgorPjsKKwordXNpbmcgQXBwbHlG
aWxsUGF0dGVybiA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJu
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjphcHBseUZpbGxQYXR0ZXJuCis+OworI2VuZGlmCiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsK
LX07Cit1c2luZyBBcHBseURldmljZVNjYWxlRmFjdG9yID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
ciwKKyAgICBmbG9hdAorPjsKIAotY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMgSXRlbSB7CisvLyBJ
cyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIg
aXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCit1c2luZyBCZWdpblRyYW5zcGFyZW5jeUxh
eWVyID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIs
CisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICBmbG9hdAorPjsKKwordXNpbmcgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyCis+OworCit1c2luZyBEcmF3R2x5cGhz
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3R2x5cGhzLAorICAgIHZvaWQg
KEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpLAor
ICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMsCisgICAgUmVmPGNvbnN0IEZvbnQ+LCBH
bHlwaEJ1ZmZlciwgdW5zaWduZWQsIHVuc2lnbmVkLCBGbG9hdFBvaW50LCBGb250U21vb3RoaW5n
TW9kZQorPjsKKworY2xhc3MgRHJhd0dseXBocyA6IHB1YmxpYyBEcmF3R2x5cGhzQmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHdpbmRSdWxlKQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKFJlZjxjb25z
dCBGb250PiYmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIGZvbnRTbW9vdGhpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOworICAgICAgICBhdXRvIHN1YkdseXBoQnVmZmVy
ID0gRHJhd0dseXBoczo6c3ViR2x5cGhCdWZmZXIoZm9udC5wdHIoKSwgYnVmZmVyLCBmcm9tLCBu
dW1HbHlwaHMpOworICAgICAgICByZXR1cm4gRHJhd0dseXBoc0Jhc2U6OmNyZWF0ZShXVEZNb3Zl
KGZvbnQpLCBXVEZNb3ZlKHN1YkdseXBoQnVmZmVyKSwgMCwgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZyk7CiAgICAgfQogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQotICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV93
aW5kUnVsZTsgfQotCiBwcml2YXRlOgotICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIHdpbmRSdWxlKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQotICAg
ICAgICAsIG1fcGF0aChwYXRoKQotICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKLSAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwot
fTsKKyAgICB1c2luZyBEcmF3R2x5cGhzQmFzZTo6RHJhd0dseXBoc0Jhc2U7CiAKLWNsYXNzIERy
YXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCisgICAgc3RhdGlj
IEdseXBoQnVmZmVyIHN1YkdseXBoQnVmZmVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2Rl
KSk7CisgICAgICAgIEdseXBoQnVmZmVyIHN1YkJ1ZmZlcjsKKyAgICAgICAgY29uc3QgYXV0byog
Z2x5cGhzID0gYnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICAgICAgY29uc3QgYXV0byogYWR2YW5j
ZXMgPSBidWZmZXIuYWR2YW5jZXMoZnJvbSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtR2x5cGhzOyArK2kpCisgICAgICAgICAgICBzdWJCdWZmZXIuYWRkKGdseXBoc1tpXSwg
Zm9udCwgYWR2YW5jZXNbaV0pOworICAgICAgICByZXR1cm4gc3ViQnVmZmVyOwogICAgIH0KIAot
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrTG9jYXRpb247IH0KLSAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9Ci0K
LSAgICBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bEFuY2hvcjsgfQotCi0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxH
bHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczsg
fQotCi1wcml2YXRlOgotICAgIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBjb21wdXRlQm91bmRzKCk7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigp
IGNvbnN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29u
c3QgYXV0byYgZm9udCA9IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGZsb2F0IGFzY2VudCA9IGZv
bnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKKyAgICAgICAgZmxvYXQgZGVzY2VudCA9
IGZvbnQtPmZvbnRNZXRyaWNzKCkuZmxvYXREZXNjZW50KCk7CiAKLSAgICBSZWY8Rm9udD4gbV9m
b250OwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwotICAgIFZl
Y3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKLSAgICBGbG9hdFJlY3Qg
bV9ib3VuZHM7Ci0gICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247Ci0gICAgRmxvYXRTaXpl
IG1fbG9jYWxBbmNob3I7Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlOwot
fTsKKyAgICAgICAgY29uc3QgYXV0byYgZ2x5cGhCdWZmZXIgPSBhcmd1bWVudDwxPigpOworICAg
ICAgICBzaXplX3QgbnVtR2x5cGhzID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOworICAgICAgICBhdXRv
IGN1cnJlbnQgPSBhcmd1bWVudDw0PigpOwogCi1jbGFzcyBEcmF3SW1hZ2UgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlPiBjcmVhdGUoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgICAgICBGbG9h
dFJlY3QgYm91bmRzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsg
KytpKSB7CisgICAgICAgICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IGdseXBoQnVm
ZmVyLmFkdmFuY2VBdChpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9h
dFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCks
IGFzY2VudCArIGRlc2NlbnQpOworICAgICAgICAgICAgYm91bmRzLnVuaXRlKGdseXBoUmVjdCk7
CisgICAgICAgICAgICBjdXJyZW50Lm1vdmUoYWR2YW5jZS53aWR0aCgpLCBhZHZhbmNlLmhlaWdo
dCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KK307CiAKLSAg
ICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0g
ICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxv
YXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQordXNp
bmcgRHJhd0ltYWdlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3SW1hZ2Us
CisgICAgSW1hZ2VEcmF3UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxv
YXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitjbGFzcyBEcmF3
SW1hZ2UgOiBwdWJsaWMgRHJhd0ltYWdlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0
YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdJbWFnZUJhc2U6OmNyZWF0ZTxEcmF3SW1hZ2U+OworICAg
IHVzaW5nIERyYXdJbWFnZUJhc2U6OkRyYXdJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4g
bV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRp
b25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAg
RmxvYXRSZWN0IG1fZGVzdGluYXRpb247Ci0gICAgRmxvYXRSZWN0IG1fc291cmNlOwotICAgIElt
YWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7CisgICAgY29uc3Qgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLWNsYXNzIERy
YXdUaWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdUaWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
aXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBGbG9h
dFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0
IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgRmxv
YXRTaXplIHRpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQotICAgIEZsb2F0
U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9Cit1c2luZyBEcmF3VGls
ZWRJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2Us
CisgICAgSW1hZ2VEcmF3UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RpbGVkSW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0LCBGbG9hdFBv
aW50LCBGbG9hdFNpemUsIEZsb2F0U2l6ZSwgSW1hZ2VQYWludGluZ09wdGlvbnMKKz47CiAKK2Ns
YXNzIERyYXdUaWxlZEltYWdlIDogcHVibGljIERyYXdUaWxlZEltYWdlQmFzZSB7CitwdWJsaWM6
CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdUaWxlZEltYWdlQmFzZTo6
Y3JlYXRlPERyYXdUaWxlZEltYWdlPjsKKyAgICB1c2luZyBEcmF3VGlsZWRJbWFnZUJhc2U6OkRy
YXdUaWxlZEltYWdlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1F
OiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4g
VGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3Rp
bmF0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7Ci0gICAgRmxvYXRTaXplIG1fdGlsZVNp
emU7Ci0gICAgRmxvYXRTaXplIG1fc3BhY2luZzsKLSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBt
X2ltYWdlUGFpbnRpbmdPcHRpb25zOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Cit1c2luZyBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2Ug
PSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UsCisgICAg
SW1hZ2VEcmF3UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0
LCBGbG9hdFJlY3QsIEZsb2F0U2l6ZSwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6
IHB1YmxpYyBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2U6OmNyZWF0ZTxE
cmF3VGlsZWRTY2FsZWRJbWFnZT47CisgICAgdXNpbmcgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdUaWxlZFNjYWxl
ZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQot
Ci0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdl
cyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3Qg
aGF2ZSB0byBiZSBtdXRhYmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZs
b2F0UmVjdCBtX3NvdXJjZTsKLSAgICBGbG9hdFNpemUgbV90aWxlU2NhbGVGYWN0b3I7Ci0gICAg
SW1hZ2U6OlRpbGVSdWxlIG1faFJ1bGU7Ci0gICAgSW1hZ2U6OlRpbGVSdWxlIG1fdlJ1bGU7Ci0g
ICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotI2lm
IFVTRShDRykgfHwgVVNFKENBSVJPKQotY2xhc3MgRHJhd05hdGl2ZUltYWdlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdOYXRpdmVJbWFnZT4gY3Jl
YXRlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVu
ZE1vZGUsIG9yaWVudGF0aW9uKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQotICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkgfHwgVVNFKENBSVJPKQordXNpbmcgRHJhd05hdGl2ZUltYWdlQmFzZSA9IERyYXdpbmdJdGVt
PAorICAgIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250
ZXh0OjoqKShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb24pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFn
ZSwKKyAgICBOYXRpdmVJbWFnZVB0ciwgRmxvYXRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbgorPjsKIAorY2xh
c3MgRHJhd05hdGl2ZUltYWdlIDogcHVibGljIERyYXdOYXRpdmVJbWFnZUJhc2UgeworcHVibGlj
OgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TmF0aXZlSW1hZ2VCYXNl
OjpjcmVhdGU8RHJhd05hdGl2ZUltYWdlPjsKKyAgICB1c2luZyBEcmF3TmF0aXZlSW1hZ2VCYXNl
OjpEcmF3TmF0aXZlSW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TmF0aXZlSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pOwotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9Ci0KLSNpZiBVU0UoQ0cpCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IG1faW1hZ2U7Ci0jZW5kaWYKLSAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7Ci0g
ICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247Ci0gICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKLSNp
ZiBVU0UoQ0cpCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKLSAgICBCbGVuZE1vZGUgbV9i
bGVuZE1vZGU7Ci0jZW5kaWYKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247Cisg
ICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDI+KCk7IH0KIH07
CiAjZW5kaWYKIAotY2xhc3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpOwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBp
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5UcmFu
c2Zvcm07IH0KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RpbGVS
ZWN0OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQotICAgIEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9
Ci0gICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KK3Vz
aW5nIERyYXdQYXR0ZXJuQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybiwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUp
LAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuLAorICAgIFJlZjxJbWFnZT4sIEZs
b2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIEZsb2F0U2l6
ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZQorPjsKIAotcHJpdmF0ZToKLSAgICBEcmF3
UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZU5vcm1hbCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTog
RHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRo
aXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9w
YXR0ZXJuVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX3RpbGVSZWN0OwotICAgIEZsb2F0UmVj
dCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9waGFzZTsKLSAgICBGbG9hdFNpemUg
bV9zcGFjaW5nOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1f
YmxlbmRNb2RlOwotfTsKLQotLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0
aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgotY2xh
c3MgQmVnaW5UcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBE
cmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3UGF0dGVybkJhc2UgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9v
cGFjaXR5OyB9Ci0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1BhdHRl
cm5CYXNlOjpjcmVhdGU8RHJhd1BhdHRlcm4+OworICAgIHVzaW5nIERyYXdQYXR0ZXJuQmFzZTo6
RHJhd1BhdHRlcm5CYXNlOwogcHJpdmF0ZToKLSAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpCi0gICAgICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBmbG9hdCBtX29wYWNpdHk7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5j
eUxheWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KK3VzaW5nIERyYXdSZWN0QmFzZSA9IERyYXdpbmdJ
dGVtPEl0ZW1UeXBlOjpEcmF3UmVjdCwgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCksICZHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0LCBGbG9hdFJlY3Qs
IGZsb2F0PjsKIAorY2xhc3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd1JlY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1JlY3RCYXNlOjpjcmVh
dGU8RHJhd1JlY3Q+OworICAgIHVzaW5nIERyYXdSZWN0QmFzZTo6RHJhd1JlY3RCYXNlOwogcHJp
dmF0ZToKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3
UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3
UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1JlY3QocmVjdCwgYm9y
ZGVyVGhpY2tuZXNzKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KLSAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVy
biBtX2JvcmRlclRoaWNrbmVzczsgfQordXNpbmcgRHJhd0xpbmVCYXNlID0gRHJhd2luZ0l0ZW08
CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6Kiko
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZSwKKyAgICBGbG9hdFBvaW50LCBGbG9hdFBvaW50Cis+OwogCitjbGFzcyBE
cmF3TGluZSA6IHB1YmxpYyBEcmF3TGluZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGluZUJhc2U6OmNyZWF0ZTxEcmF3TGluZT47CisgICAg
dXNpbmcgRHJhd0xpbmVCYXNlOjpEcmF3TGluZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgICAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkK
LSAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3QgYm91bmRzOworICAg
ICAgICBib3VuZHMuZml0VG9Qb2ludHMoYXJndW1lbnQ8MD4oKSwgYXJndW1lbnQ8MT4oKSk7Cisg
ICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIGZsb2F0IG1fYm9yZGVyVGhp
Y2tuZXNzOwogfTsKIAotY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7Ci0gICAgfQotCi0gICAgRmxv
YXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQotICAgIEZsb2F0UG9p
bnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDI7IH0KK3VzaW5nIERyYXdMaW5lc0Zv
clRleHRCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQs
CisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lc0ZvclRleHQsCisgICAgRmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBi
b29sLCBTdHJva2VTdHlsZQorPjsKIAorY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBE
cmF3TGluZXNGb3JUZXh0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IERyYXdMaW5lc0ZvclRleHRCYXNlOjpjcmVhdGU8RHJhd0xpbmVzRm9yVGV4dD47
CisgICAgdXNpbmcgRHJhd0xpbmVzRm9yVGV4dEJhc2U6OkRyYXdMaW5lc0ZvclRleHRCYXNlOwog
cHJpdmF0ZToKLSAgICBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xp
bmUpCi0gICAgICAgICwgbV9wb2ludDEocG9pbnQxKQotICAgICAgICAsIG1fcG9pbnQyKHBvaW50
MikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNs
b3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoKSByZXR1cm5zLgorICAgICAgICBpZiAoIWFyZ3VtZW50PDE+KCkuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRzKGFyZ3VtZW50PDA+KCksIEZsb2F0U2l6ZShhcmd1bWVudDwxPigpLmxhc3QoKSwgY29u
dGV4dC5zdHJva2VUaGlja25lc3MoKSkpOworICAgICAgICBib3VuZHMuaW5mbGF0ZSgxKTsgLy8g
QWNjb3VudCBmb3IgcGl4ZWwgc25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFz
IGl0IGRvZXNuJ3QgdGFrZSB0aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICAgICAgcmV0dXJuIGJv
dW5kczsKICAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0UG9pbnQgbV9wb2lu
dDE7Ci0gICAgRmxvYXRQb2ludCBtX3BvaW50MjsKIH07CiAKLWNsYXNzIERyYXdMaW5lc0ZvclRl
eHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xp
bmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwg
bG9jYWxBbmNob3IsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VXaWR0aCkp
OwotICAgIH0KLQotICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KLSAgICBj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xv
Y2F0aW9uOyB9Ci0gICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYWxBbmNob3I7IH0KLSAgICBGbG9hdFBvaW50IHBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja0xvY2F0aW9uICsgbV9sb2NhbEFuY2hvcjsgfQotICAgIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aHM7IH0KLSAgICBib29sIGlzUHJpbnRp
bmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9Ci0gICAgYm9vbCBkb3VibGVMaW5lcygp
IGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KK3VzaW5nIERyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXJCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyLAorICAgIEZsb2F0UG9pbnQsIGZsb2F0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZQorPjsKIAorY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1h
cmtlciA6IHB1YmxpYyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyQmFzZSB7CitwdWJsaWM6Cisg
ICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXJCYXNlOjpjcmVhdGU8RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj47CisgICAgdXNpbmcgRHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlckJhc2U6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNl
OwogcHJpdmF0ZToKLSAgICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0
aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKLSAg
ICAgICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKLSAgICAgICAgLCBtX2xvY2Fs
QW5jaG9yKGxvY2FsQW5jaG9yKQotICAgICAgICAsIG1fd2lkdGhzKHdpZHRocykKLSAgICAgICAg
LCBtX3N0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKQotICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRp
bmcpCi0gICAgICAgICwgbV9kb3VibGVMaW5lcyhkb3VibGVMaW5lcykKKyAgICBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8g
cmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKCkgcmV0dXJucy4KKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcyhhcmd1bWVudDwwPigpLCBGbG9hdFNpemUoYXJndW1lbnQ8MT4oKSwgY01pc3NwZWxs
aW5nTGluZVRoaWNrbmVzcykpOworICAgICAgICBib3VuZHMuaW5mbGF0ZShjTWlzc3BlbGxpbmdM
aW5lVGhpY2tuZXNzKTsgLy8gQWNjb3VudCBmb3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcu
CisgICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwotICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5j
aG9yOwotICAgIERhc2hBcnJheSBtX3dpZHRoczsKLSAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOwot
ICAgIGJvb2wgbV9wcmludGluZzsKLSAgICBib29sIG1fZG91YmxlTGluZXM7CiB9OwogCi1jbGFz
cyBEcmF3TGluZUZvckRvY3VtZW50TWFya2VyIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihwb2ludCwgd2lkdGgsIHN0eWxlKSk7Ci0gICAgfQotCi0gICAgRmxvYXRQ
b2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KLSAgICBmbG9hdCB3aWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KK3VzaW5nIERyYXdFbGxpcHNlQmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bGxpcHNlLAorICAgIEZsb2F0UmVjdAorPjsKIAorY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMg
RHJhd0VsbGlwc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3Jl
YXRlID0gRHJhd0VsbGlwc2VCYXNlOjpjcmVhdGU8RHJhd0VsbGlwc2U+OworICAgIHVzaW5nIERy
YXdFbGxpcHNlQmFzZTo6RHJhd0VsbGlwc2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCi0gICAgICAgICwgbV9wb2ludChwb2ludCkK
LSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9pbnQ7
Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxl
OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9
CiB9OwogCi1jbGFzcyBEcmF3RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CisjaWYgVVNF
KENHKQordXNpbmcgRHJhd1BhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRy
YXdQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47CisKK2NsYXNz
IERyYXdQYXRoIDogcHVibGljIERyYXdQYXRoQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEcmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3Rl
eHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdQYXRoQmFzZTo6Y3JlYXRlPERyYXdQYXRoPjsK
KyAgICB1c2luZyBEcmF3UGF0aEJhc2U6OkRyYXdQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAg
fQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3Qg
bV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDww
PigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogfTsKKyNlbmRpZgogCi1jbGFzcyBEcmF3UGF0aCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4g
Y3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3UGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlID0gRHJh
d2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoLAorICAgIHZvaWQgKEdy
YXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nLAorICAgIGNvbnN0IFBhdGgs
IGZsb2F0LCBmbG9hdCwgQ29sb3IKKz47CiAKK2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVi
bGljIERyYXdGb2N1c1JpbmdQYXRoQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRp
YyBhdXRvIGNyZWF0ZSA9IERyYXdGb2N1c1JpbmdQYXRoQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1Jp
bmdQYXRoPjsKKyAgICB1c2luZyBEcmF3Rm9jdXNSaW5nUGF0aEJhc2U6OkRyYXdGb2N1c1JpbmdQ
YXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBh
dGgpCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJl
Y3QgYm91bmRzID0gYXJndW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJv
dW5kcy5pbmZsYXRlKHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgICAgIHJldHVybiBi
b3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJv
dW5kaW5nUmVjdCgpOyB9Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKIH07CiAKLWNsYXNzIERy
YXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Cit1c2luZyBEcmF3Rm9j
dXNSaW5nUmVjdHNCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0cywKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGb2N1c1JpbmcsCisgICAgVmVjdG9yPEZsb2F0UmVjdD4sIGZsb2F0LCBmbG9hdCwg
Q29sb3IKKz47CiAKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3Rm9jdXNS
aW5nUmVjdHNCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRl
ID0gRHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1JpbmdSZWN0cz47Cisg
ICAgdXNpbmcgRHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTo6RHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTsK
IHByaXZhdGU6Ci0gICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0
aCkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
LSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICAgICAgZm9yIChhdXRvJiByZWN0
IDogYXJndW1lbnQ8MD4oKSkKKyAgICAgICAgICAgIGJvdW5kcy51bml0ZShyZWN0KTsKKyAgICAg
ICAgYm91bmRzLmluZmxhdGUoc19wbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKKyAgICAgICAgcmV0
dXJuIGJvdW5kczsKICAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgUGF0
aCBtX3BhdGg7Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAgICBD
b2xvciBtX2NvbG9yOwogfTsKIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3VzaW5nIERyYXdJY29uQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1U
eXBlOjpEcmF3SWNvbiwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKEljb24mLCBjb25z
dCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNvbiwKKyAgICBSZWY8
SWNvbj4sIEZsb2F0UmVjdAorPjsKKyAgICAKK2NsYXNzIERyYXdJY29uIDogcHVibGljIERyYXdJ
Y29uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNy
ZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdHM7IH0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7
IH0KLSAgICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIGNv
bnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0
ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3SWNvbkJhc2U6OmNyZWF0ZTxEcmF3SWNvbj47
CisgICAgdXNpbmcgRHJhd0ljb25CYXNlOjpEcmF3SWNvbkJhc2U7CiBwcml2YXRlOgotICAgIERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzKQotICAgICAgICAsIG1fcmVjdHMocmVj
dHMpCi0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
Ci0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fcmVjdHM7Ci0gICAgZmxvYXQgbV93aWR0
aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBG
aWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Cit1c2luZyBEcmF3V2lkZ2V0QmFzZSA9IERy
YXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3V2lkZ2V0LAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdXaWRnZXQsCisgICAgUmVmPFdpZGdldD4sIEludFJlY3QKKz47CisgICAgCitjbGFz
cyBEcmF3V2lkZ2V0IDogcHVibGljIERyYXdXaWRnZXRCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOwotICAgIH0KLQotICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1dpZGdldEJhc2U6OmNyZWF0ZTxEcmF3V2lkZ2V0
PjsKKyAgICB1c2luZyBEcmF3V2lkZ2V0QmFzZTo6RHJhd1dpZGdldEJhc2U7CiBwcml2YXRlOgot
ICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RmlsbFJlY3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAg
IH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0
IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0
KGFyZ3VtZW50PDE+KCkpOyB9CiB9OwotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZy
b20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworICAgIAordXNpbmcgRHJhd1Njcm9sbGJhckJhc2UgPSBEcmF3aW5nSXRlbTwK
KyAgICBJdGVtVHlwZTo6RHJhd1Njcm9sbGJhciwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpk
cmF3U2Nyb2xsYmFyLAorICAgIFJlZjxTY3JvbGxiYXI+LCBJbnRSZWN0Cis+OworICAgIAorY2xh
c3MgRHJhd1Njcm9sbGJhciA6IHB1YmxpYyBEcmF3U2Nyb2xsYmFyQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
YXV0byBjcmVhdGUgPSBEcmF3U2Nyb2xsYmFyQmFzZTo6Y3JlYXRlPERyYXdTY3JvbGxiYXI+Owor
ICAgIHVzaW5nIERyYXdTY3JvbGxiYXJCYXNlOjpEcmF3U2Nyb2xsYmFyQmFzZTsKIHByaXZhdGU6
Ci0gICAgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAg
RmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoYXJndW1lbnQ8MT4oKSk7IH0KIH07Ci0KLWNs
YXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKKyAgICAKK3Vz
aW5nIERyYXdUaGVtZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RoZW1l
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoVGhlbWUmLCBDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0
LCBib29sLCBib29sKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUsCisgICAgVGhl
bWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEZsb2F0UmVjdCwgZmxvYXQsIHZvaWQq
LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wKKz47CisgICAgCitjbGFzcyBEcmF3VGhlbWUgOiBw
dWJsaWMgRHJhd1RoZW1lQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdp
dGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3Jh
ZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0
ZSA9IERyYXdUaGVtZUJhc2U6OmNyZWF0ZTxEcmF3VGhlbWU+OworICAgIHVzaW5nIERyYXdUaGVt
ZUJhc2U6OkRyYXdUaGVtZUJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCkKLSAgICAgICAgLCBtX3Jl
Y3QocmVjdCkKLSAgICAgICAgLCBtX2dyYWRpZW50KGdyYWRpZW50KQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7Ci0gICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtl
IHRoaXMgbm90IG11dGFibGUKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
YXJndW1lbnQ8Mz4oKTsgfQogfTsKIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGlj
IERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJs
ZW5kTW9kZSkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcDsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X2JsZW5kTW9kZTsgfQordXNpbmcgRmlsbFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxSZWN0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxv
YXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0
Cis+OwogCitjbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBGaWxsUmVjdEJhc2UgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdEJhc2U6OmNyZWF0ZTxG
aWxsUmVjdD47CisgICAgdXNpbmcgRmlsbFJlY3RCYXNlOjpGaWxsUmVjdEJhc2U7CiBwcml2YXRl
OgotICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0g
ICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAg
ICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1f
b3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAg
IEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVi
bGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSb3VuZGVkUmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7Ci0gICAgfQotCi0g
ICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
OyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2Rl
OyB9Cit1c2luZyBGaWxsUmVjdFdpdGhDb2xvckJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0LAorICAgIEZsb2F0UmVjdCwgQ29sb3IKKz47CiAKK2NsYXNzIEZpbGxSZWN0V2l0aENv
bG9yIDogcHVibGljIEZpbGxSZWN0V2l0aENvbG9yQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3Rl
eHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSZWN0V2l0aENvbG9yQmFzZTo6Y3JlYXRlPEZp
bGxSZWN0V2l0aENvbG9yPjsKKyAgICB1c2luZyBGaWxsUmVjdFdpdGhDb2xvckJhc2U6OkZpbGxS
ZWN0V2l0aENvbG9yQmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQot
ICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAg
ICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBj
b25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAot
Y2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikp
OwotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQotICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQordXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRC
YXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQm
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCwKKyAgICBGbG9hdFJlY3QsIFJlZjxH
cmFkaWVudD4KKz47CiAKK2NsYXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIEZpbGxS
ZWN0V2l0aEdyYWRpZW50QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50QmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aEdy
YWRpZW50PjsKKyAgICB1c2luZyBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2U6OkZpbGxSZWN0V2l0
aEdyYWRpZW50QmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAg
ICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQotICAgICAgICAsIG1fY29sb3Io
Y29sb3IpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRl
ZEhvbGVSZWN0OwotICAgIENvbG9yIG1fY29sb3I7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxQYXRoIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVh
dGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZpbGxQYXRoKHBhdGgpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9Cit1c2luZyBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICB2b2lkIChHcmFw
aGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisg
ICAgRmxvYXRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZQorPjsKIAor
Y2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIEZpbGxDb21wb3NpdGVkUmVjdEJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsQ29tcG9z
aXRlZFJlY3RCYXNlOjpjcmVhdGU8RmlsbENvbXBvc2l0ZWRSZWN0PjsKKyAgICB1c2luZyBGaWxs
Q29tcG9zaXRlZFJlY3RCYXNlOjpGaWxsQ29tcG9zaXRlZFJlY3RCYXNlOwogcHJpdmF0ZToKLSAg
ICBGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpGaWxsUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQotCi0g
ICAgY29uc3QgUGF0aCBtX3BhdGg7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRmlsbEVsbGlwc2UocmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9Cit1c2luZyBGaWxsUm91bmRlZFJlY3RCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCwKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5k
TW9kZSksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0LAorICAgIEZsb2F0
Um91bmRlZFJlY3QsIENvbG9yLCBCbGVuZE1vZGUKKz47CiAKK2NsYXNzIEZpbGxSb3VuZGVkUmVj
dCA6IHB1YmxpYyBGaWxsUm91bmRlZFJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIg
c3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJvdW5kZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxSb3Vu
ZGVkUmVjdD47CisgICAgdXNpbmcgRmlsbFJvdW5kZWRSZWN0QmFzZTo6RmlsbFJvdW5kZWRSZWN0
QmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAgICAgLCBt
X3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCkucmVjdCgpOyB9CiB9OwogCi1jbGFzcyBTdHJv
a2VSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0
cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGlu
ZVdpZHRoKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICBmbG9hdCBsaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0
aDsgfQordXNpbmcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlID0gRHJhd2luZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAorICAgIHZvaWQgKEdyYXBoaWNz
Q29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUsCisgICAgRmxvYXRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0LCBDb2xvcgorPjsKIAorY2xhc3Mg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVC
YXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGVCYXNlOjpjcmVhdGU8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+Owor
ICAgIHVzaW5nIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFzZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGVCYXNlOwogcHJpdmF0ZToKLSAgICBTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJv
a2VSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fbGluZVdpZHRoKGxp
bmVXaWR0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJl
Y3QgbV9yZWN0OwotICAgIGZsb2F0IG1fbGluZVdpZHRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBTdHJva2VQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBh
dGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRmlsbFBhdGhCYXNlID0gRHJhd2lu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoLAorICAg
IGNvbnN0IFBhdGgKKz47CiAKK2NsYXNzIEZpbGxQYXRoIDogcHVibGljIEZpbGxQYXRoQmFzZSB7
CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxQYXRoQmFz
ZTo6Y3JlYXRlPEZpbGxQYXRoPjsKKyAgICB1c2luZyBGaWxsUGF0aEJhc2U6OkZpbGxQYXRoQmFz
ZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgICAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRo
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IFBhdGggbV9w
YXRoOwotICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
fTsKIAotY2xhc3MgU3Ryb2tlRWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHJva2VFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShy
ZWN0KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KK3VzaW5nIEZpbGxFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBl
OjpGaWxsRWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0
UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlLAorICAgIEZsb2F0UmVj
dAorPjsKIAorY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRmlsbEVsbGlwc2VCYXNlIHsKK3B1
YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbEVsbGlwc2VCYXNl
OjpjcmVhdGU8RmlsbEVsbGlwc2U+OworICAgIHVzaW5nIEZpbGxFbGxpcHNlQmFzZTo6RmlsbEVs
bGlwc2VCYXNlOwogcHJpdmF0ZToKLSAgICBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKLSAg
ICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xlYXJSZWN0KHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQordXNpbmcgU3Ryb2tlUmVjdEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6U3Ryb2tlUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0
LAorICAgIEZsb2F0UmVjdCwgZmxvYXQKKz47CiAKK2NsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMg
U3Ryb2tlUmVjdEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVh
dGUgPSBTdHJva2VSZWN0QmFzZTo6Y3JlYXRlPFN0cm9rZVJlY3Q+OworICAgIHVzaW5nIFN0cm9r
ZVJlY3RCYXNlOjpTdHJva2VSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgQ2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJS
ZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAg
ICAgIGJvdW5kcy5leHBhbmQoYXJndW1lbnQ8MT4oKSwgYXJndW1lbnQ8MT4oKSk7CisgICAgICAg
IHJldHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotI2lmIFVTRShDRykKLWNsYXNzIEFw
cGx5U3Ryb2tlUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEFwcGx5U3Ryb2tlUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEFwcGx5U3Ryb2tlUGF0dGVybik7Ci0gICAgfQordXNpbmcgU3Ryb2tlUGF0aEJh
c2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U3Ryb2tlUGF0aCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47CiAKK2NsYXNzIFN0cm9rZVBhdGggOiBwdWJs
aWMgU3Ryb2tlUGF0aEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBTdHJva2VQYXRoQmFzZTo6Y3JlYXRlPFN0cm9rZVBhdGg+OworICAgIHVzaW5nIFN0
cm9rZVBhdGhCYXNlOjpTdHJva2VQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlTdHJva2VQ
YXR0ZXJuKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCisg
ICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgfQorICAgICAg
ICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIHN0cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNv
cnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ryb2tpbmdQYXRoKCkuCisgICAgICAgIGZsb2F0IHN0cm9r
ZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBGbG9hdFJlY3QgYm91
bmRzID0gYXJndW1lbnQ8MD4oKS5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgYm91bmRzLmV4cGFu
ZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgICAgIHJldHVybiBib3Vu
ZHM7CisgICAgfQogfTsKIAotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9
Cit1c2luZyBTdHJva2VFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRS
ZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSwKKyAgICBGbG9hdFJl
Y3QKKz47CiAKK2NsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgU3Ryb2tlRWxsaXBzZUJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VFbGxp
cHNlQmFzZTo6Y3JlYXRlPFN0cm9rZUVsbGlwc2U+OworICAgIHVzaW5nIFN0cm9rZUVsbGlwc2VC
YXNlOjpTdHJva2VFbGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlGaWxsUGF0dGVybigp
Ci0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsKKyAgICAgICAgRmxvYXRSZWN0IGJv
dW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tu
ZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiB9OwotI2Vu
ZGlmCi0KLWNsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPiBjcmVhdGUoZmxvYXQg
c2NhbGVGYWN0b3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseURl
dmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7Ci0gICAgfQogCi0gICAgZmxvYXQgc2NhbGVG
YWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlRmFjdG9yOyB9Cit1c2luZyBDbGVhclJlY3RC
YXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsZWFyUmVjdCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdCwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIENsZWFyUmVjdCA6IHB1
YmxpYyBDbGVhclJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
Y3JlYXRlID0gQ2xlYXJSZWN0QmFzZTo6Y3JlYXRlPENsZWFyUmVjdD47CisgICAgdXNpbmcgQ2xl
YXJSZWN0QmFzZTo6Q2xlYXJSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yKQotICAgICAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3Ip
Ci0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1XVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOworaW5saW5lIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVt
JiBpdGVtKQoreworICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgIGl0
ZW0uZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCitpbmxpbmUgV1RGOjpDU3RyaW5nIEl0
ZW06OmR1bXAoKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7
CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJl
ZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0
ZTsgfSBcCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfR0VPTUVU
UllJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCisgICAgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBp
dGVtKSB7IHJldHVybiBpdGVtLnByZWRpY2F0ZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0o
RHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfR0VPTUVUUllJVEVNKEdlb21ldHJ5SXRlbSwgaXNHZW9tZXRyeUl0ZW0oKSkKIAog
I2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5
cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKICAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJu
IGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5
cGVOYW1lOyB9IFwKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNj
YWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRl
Q1RNKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcE91dFRvUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGlwUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShEcmF3R2x5cGhzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KERyYXdJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
VGlsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
VGlsZWRTY2FsZWRJbWFnZSkKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi0jZW5kaWYKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50KQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVkUmVjdCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRlZFJlY3Qp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBh
dGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2Up
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIp
Ci0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFw
cGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVhMjczMjZiNTYxLi5mODU5YzY5YTBmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MiwyMSArNTIsMjIgQEAgUmVj
b3JkZXI6On5SZWNvcmRlcigpCiAKIHZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKGNvbnN0
IEl0ZW0mIGl0ZW0pCiB7Ci0gICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpCiAjaWYgVVNFKENH
KQotICAgICAgICB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
IHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4KKyAgICBpZiAo
IWlzPEdlb21ldHJ5SXRlbT4oaXRlbSkgJiYgaXRlbS50eXBlKCkgIT0gSXRlbVR5cGU6OkFwcGx5
U3Ryb2tlUGF0dGVybiAmJiBpdGVtLnR5cGUoKSAhPSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVy
bikKKyNlbHNlCisgICAgaWYgKCFpczxHZW9tZXRyeUl0ZW0+KGl0ZW0pKQogI2VuZGlmCi0gICAg
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMgPSBj
dXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0ZUNoYW5nZXMuY2hh
bmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlKTsKLSAgICAgICAg
aWYgKGNoYW5nZXNGcm9tTGFzdFN0YXRlKSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zy
b21MYXN0U3RhdGUpKTsKLSAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFNldFN0YXRl
OjpjcmVhdGUoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0g
ICAgICAgICAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IDA7Ci0gICAgICAgICAgICBj
dXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci0g
ICAgICAgIH0KLSAgICAgICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRyYXdpbmcgPSB0cnVl
OworICAgICAgICByZXR1cm47CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3Rh
dGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0
ZSk7CisgICAgaWYgKGNoYW5nZXNGcm9tTGFzdFN0YXRlKSB7CisgICAgICAgIExPR19XSVRIX1NU
UkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAi
IDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFu
Z2VzRnJvbUxhc3RTdGF0ZSkpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChTZXRTdGF0
ZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRl
LCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpKTsKKyAgICAgICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdl
RmxhZ3MgPSAwOworICAgICAgICBjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3Rh
dGVDaGFuZ2VzLm1fc3RhdGU7CiAgICAgfQorICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JE
cmF3aW5nID0gdHJ1ZTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBmbGFncykKQEAgLTk5LDQ0ICsxMDAsNDQgQEAgdm9pZCBSZWNvcmRlcjo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6
Y3JlYXRlKG1pdGVyTGltaXQpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3R2x5cGhzOjpjcmVh
dGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tKSwgbnVtR2x5cGhzLCBGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHN0YXJ0UG9pbnQpLCBz
bW9vdGhpbmdNb2RlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0
ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKG1ha2VSZWYoZm9udCksIGdseXBoQnVm
ZmVyLCBmcm9tLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIGZvbnRTbW9vdGhpbmcpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVy
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ltYWdlOjpjcmVhdGUobWFr
ZVJlZihpbWFnZSksIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkp
OwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jl
c3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdU
aWxlZEltYWdlOjpjcmVhdGUobWFrZVJlZihpbWFnZSksIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsK
IH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2Vv
bWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUobWFrZVJl
ZihpbWFnZSksIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZS
dWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAotI2lmIFVT
RShDRykgfHwgVVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0Uo
Q0FJUk8pCiB2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAg
ICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVt
KERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0g
ZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRl
KGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlLCBvcmll
bnRhdGlvbikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogI2VuZGlmCiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKERyYXdQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKSk7CisgICAg
YXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0
dGVybjo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgYmxlbmRNb2RlKSkpOwogICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKQEAgLTIwOSw3ICsyMTAsNyBAQCBBZmZpbmVUcmFuc2Zv
cm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkK
IAogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQog
ewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkpKSk7CisgICAgYXV0
byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShCZWdpblRyYW5z
cGFyZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCkBAIC0yMjAsMTIxICsyMjEsMTQ3IEBAIHZvaWQgUmVjb3JkZXI6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UmVjdDo6Y3JlYXRl
KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8
R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdSZWN0OjpjcmVhdGUocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmU6OmNyZWF0ZShwb2ludDEsIHBvaW50MikpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdM
aW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHBvaW50KSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNr
bmVzcykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBl
bmRJdGVtKERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShwb2ludCwgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVt
PihhcHBlbmRJdGVtKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lk
dGgsIHN0eWxlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHBvaW50LCB3aWR0
aCwgc3R5bGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIERyYXdp
bmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0Vs
bGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9t
ZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0VsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKKyNpZiBVU0UoQ0cpCiB2b2lkIFJlY29yZGVy
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1BhdGg6OmNyZWF0ZShwYXRo
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRHJhd1BhdGg6OmNyZWF0ZShwYXRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikp
KTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdpbmdJdGVtJiBu
ZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1Jl
Y3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIGF1dG8mIG5l
d0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3VzUmluZ1Jl
Y3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkpOworICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisgICAgCit2b2lkIFJlY29yZGVyOjpkcmF3SWNvbihJY29u
JiBpY29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3SWNvbjo6Y3JlYXRlKG1ha2VSZWYo
aWNvbiksIHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6ZHJhd1dpZGdldChXaWRnZXQmIHdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJ
dGVtKERyYXdXaWRnZXQ6OmNyZWF0ZShtYWtlUmVmKHdpZGdldCksIHJlY3QpKSk7CisgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1Njcm9sbGJh
cihTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdTY3JvbGxi
YXI6OmNyZWF0ZShtYWtlUmVmKHNjcm9sbGJhciksIHJlY3QpKSk7CisgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKK30KKwordm9pZCBSZWNvcmRlcjo6ZHJhd1RoZW1lKFRoZW1lJiB0aGVt
ZSwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVt
QXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBhdXRvJiBuZXdJdGVt
ID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdUaGVtZTo6Y3JlYXRlKHRo
ZW1lLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRl
dmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVz
ZURhcmtBcHBlYXJhbmNlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZp
bGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2Vv
bWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0OjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3aW5nSXRl
bSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0
aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25j
YXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJl
Y3QsIGNvbG9yKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkp
KTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVt
KEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGllbnQpKSk7CiAgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0g
ZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVh
dGUocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0
ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkp
KTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVt
KEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpKTsK
KyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xv
cikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVy
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFBhdGg6OmNyZWF0ZShwYXRo
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRmlsbFBhdGg6OmNyZWF0ZShwYXRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKEZpbGxFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVt
ID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxFbGxpcHNlOjpjcmVhdGUo
cmVjdCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVu
ZEl0ZW0oU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpKTsKKyAgICBhdXRvJiBu
ZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVJlY3Q6OmNy
ZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAg
IERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0o
U3Ryb2tlUGF0aDo6Y3JlYXRlKHBhdGgpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0
PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZUVsbGlwc2U6OmNyZWF0
ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFw
cGVuZEl0ZW0oU3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKENsZWFyUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYg
bmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShDbGVhclJlY3Q6OmNy
ZWF0ZShyZWN0KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKQEAgLTQw
Miw3ICs0MjksNyBAQCBJdGVtJiBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVt
KQogICAgIHJldHVybiBtX2Rpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYgaXRlbSkgY29uc3QK
K3ZvaWQgUmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoR2VvbWV0cnlJdGVtJiBpdGVtKSBjb25z
dAogewogICAgIGlmIChzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxC
b3VuZHMoZ3JhcGhpY3NDb250ZXh0KCkpKQogICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRG
cm9tTG9jYWxCb3VuZHMocmVjdC52YWx1ZSgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaAppbmRleCBjNWFjNzA5MTM5NS4uZDVhZTc0NjJlMjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNDUsOCArNDUsNiBAQCBzdHJ1Y3QgSW1hZ2VQ
YWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdp
bmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6CkBAIC05NywxMyAr
OTUsMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CisjaWYgVVNFKENHKQogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRl
OworI2VuZGlmCiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdJY29uKElj
b24mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdXaWRnZXQoV2lk
Z2V0JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Njcm9sbGJhcihT
Y3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3VGhlbWUo
VGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJh
bmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2F2ZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwpAQCAtMTMzLDcgKzEzOCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAKICAg
ICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlSXRlbUV4dGVudChHZW9tZXRyeUl0ZW0mKSBjb25zdDsKICAgICAKICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xp
cEJvdW5kcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CmluZGV4IDhmZWFhMmY1ZDc1Li4wY2ZmZTZmOWM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNTUsOSArNTUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q+IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Ym9vbAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewogICAgICAg
ICBhdXRvJiBpdGVtID0gbV9kaXNwbGF5TGlzdC5saXN0KClbaV0uZ2V0KCk7CiAKLSAgICAgICAg
aWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxEcmF3aW5nSXRlbT4oaXRlbSkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IERyYXdpbmdJdGVtJiBkcmF3aW5nSXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihpdGVtKTsKLSAgICAgICAgICAgIGlmIChkcmF3aW5nSXRlbS5leHRlbnRLbm93bigp
ICYmICFkcmF3aW5nSXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgeworICAg
ICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGlzPEdlb21ldHJ5SXRlbT4oaXRlbSkp
IHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdlb21ldHJ5SXRlbSA9IGRvd25jYXN0PEdlb21l
dHJ5SXRlbT4oaXRlbSk7CisgICAgICAgICAgICBpZiAoZ2VvbWV0cnlJdGVtLmV4dGVudEtub3du
KCkgJiYgIWdlb21ldHJ5SXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgewog
ICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAi
c2tpcHBpbmcgIiA8PCBpIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JY29uR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JY29uR3RrLmNwcAppbmRleCBhZjE4NWE1NGNkZC4uZjBhZTVjZmNhMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKQEAgLTEx
MywxMSArMTEzLDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgIHJldHVybiAwOwogfQogCi12b2lkIElj
b246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gVE9ETzogU2NhbGUvY2xpcCB0aGUg
aW1hZ2UgaWYgbmVjZXNzYXJ5LgogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0KaW5kZXggY2VlNTE2ZTE0NDAuLmRiZDgz
ZDU3YzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
SWNvbklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNv
bklPUy5tbQpAQCAtNTUsMTEgKzU1LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25G
b3JJbWFnZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSWNvbihpbWFnZSkpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSWNvbjo6
cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CiAKICAgICBmbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX2NnSW1h
Z2UuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0ljb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNv
bk1hYy5tbQppbmRleCA2MTQzYjUxZDQzNi4uZTg1MDMwOGQwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBAIC05MSwxMyArOTEsOSBA
QCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvclVUSShjb25zdCBTdHJpbmcmIFVUSSkK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaW1hZ2UpKTsKIH0KIAotdm9pZCBJY29uOjpw
YWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbEN1cnJlbnRHQyhjb250ZXh0KTsKLQogICAgIFttX25zSW1hZ2UgZHJhd0luUmVjdDpyZWN0
IGZyb21SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgW21fbnNJbWFnZSBzaXplXS53aWR0aCwgW21fbnNJ
bWFnZSBzaXplXS5oZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNl
T3ZlciBmcmFjdGlvbjoxLjBmXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCA5YTk1NGUyMmI5NC4uMDQwNjI3
NmFiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuY3BwCkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBmbG9h
dCBzdHJva2VUaGlja25lc3MpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQogewogICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBib29s
LCBDb2xvciwgZmxvYXQ+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0g
ZGVmYXVsdDsKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhcwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOworICAg
IFVOVVNFRF9QQVJBTShzdHJva2VTdHlsZSk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CkBAIC02OTEsMTAgKzY5MSw2IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsK
QEAgLTczNSw2ICs3MzEsMjYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNSaW5nPihyZWN0cywgd2lkdGgsIGNvbG9yKSk7CiB9CiAK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0
UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJbnRS
ZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAg
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdUaGVtZShUaGVtZSYsIENvbnRyb2xQ
YXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9h
dCwgZmxvYXQsIGJvb2wsIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQo
KTsKK30KKwogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKIHsKICAgICBzdHJ1
Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmlu
ZGV4IGRjNDg0OWU1Y2Y0Li40ODc4Y2EyODg2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fp
cm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtNzIsMTMgKzcyLDE3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkm
LCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
LCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCwgV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJp
ZGU7CisgICAgCisgICAgdm9pZCBkcmF3SWNvbihXZWJDb3JlOjpJY29uJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdlYkNvcmU6Oldp
ZGdldCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdT
Y3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd1RoZW1lKFdlYkNvcmU6OlRoZW1lJiwgV2ViQ29yZTo6Q29u
dHJvbFBhcnQsIFdlYkNvcmU6OkNvbnRyb2xTdGF0ZXMmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVt
QXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDAyOWQwNzljYzFjLi4xYWJmNGZhYzEzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCkBAIC0xNzA4LDcgKzE3MDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNSZWNvcmRp
bmcoKSkgewotICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmRyYXdMaW5lc0ZvclRleHQo
cG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7
CisgICAgICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ljb25XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ljb25XaW4uY3BwCmluZGV4IDc5OWUzNDc0MDM5Li4xOGZlNmY3OTEyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcApAQCAtNzQsMTEg
Kzc0LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihoSWNv
bikpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiByKQordm9pZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByKSBjb25zdAogewotICAgIGlmIChjb250ZXh0
LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgTG9jYWxXaW5kb3dz
Q29udGV4dCB3aW5kb3dDb250ZXh0KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QocikpOwogICAg
IERyYXdJY29uRXgod2luZG93Q29udGV4dC5oZGMoKSwgci54KCksIHIueSgpLCBtX2hJY29uLCBy
LndpZHRoKCksIHIuaGVpZ2h0KCksIDAsIDAsIERJX05PUk1BTCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAKaW5kZXggNzZhMjFkYTM2
ZjMuLjFlZGI3ZDlmNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93cGUvSWNvbldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3BlL0ljb25XUEUuY3BwCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogSWNvbjo6fkljb24oKSA9IGRlZmF1bHQ7CiAKLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmluZGV4IDg3NDEyOTMzOTc5Li5mMzhhMGE0
ZTE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKQEAgLTgw
LDcgKzgwLDEyIEBAIHZvaWQgV2lkZ2V0OjpoaWRlKCkKICAgICAgICAgZ3RrX3dpZGdldF9oaWRl
KHBsYXRmb3JtV2lkZ2V0KCkpOwogfQogCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdp
ZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQoreworICAgIGNvbnRleHQuZHJhd1dpZGdldCgq
dGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1dpZGdldElPUy5tbQppbmRleCA4YjFlOGI1NGI1Yy4uZGNjNmE0OTA1MjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQpAQCAtMTQxLDE0ICsxNDEsMTYgQEAgTlNW
aWV3KiBXaWRnZXQ6OmdldE91dGVyVmlldygpIGNvbnN0CiAgICAgcmV0dXJuIHZpZXc7CiB9CiAK
LXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIs
IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50
UG9saWN5KQogewotICAgIGlmIChwLnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CiAgICAgCit2b2lkIFdp
ZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CiAgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CiAKLSAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNnQ29udGV4dCk7CiAKICAgICBOU1JlY3Qgdmlld0ZyYW1lID0gW3ZpZXcg
ZnJhbWVdOwpAQCAtMTU2LDcgKzE1OCw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0Nv
bnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpCiAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNnQ29udGV4dCwgdmlld0ZyYW1lLm9yaWdpbi54IC0gdmll
d0JvdW5kcy5vcmlnaW4ueCwgdmlld0ZyYW1lLm9yaWdpbi55IC0gdmlld0JvdW5kcy5vcmlnaW4u
eSk7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW3ZpZXcgZGlzcGxh
eVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6ciBmcm9tVmlldzpbdmlldyBz
dXBlcnZpZXddXSBpbkNvbnRleHQ6Y2dDb250ZXh0XTsKKyAgICBbdmlldyBkaXNwbGF5UmVjdEln
bm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Olt2aWV3IHN1cGVy
dmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCmluZGV4IDQ5MDI4ZjFiNDNjLi5lOWYzMDNkM2QxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKQEAgLTUzLDcgKzUzLDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9s
UGFydCBwYXJ0KSBjb25zdCBmaW5hbCB7IHJldHVybiBwYXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9
CiAKLSAgICB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyos
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNl
U3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgZmluYWw7CisgICAgdm9p
ZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3Rh
dGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lk
KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFj
dG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIGZp
bmFsOwogICAgIHZvaWQgaW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQsIGNvbnN0
IENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCBmaW5h
bDsKIAogICAgIGJvb2wgdXNlclByZWZlcnNSZWR1Y2VkTW90aW9uKCkgY29uc3QgZmluYWw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KaW5kZXggNDgzMWZmZjRmODguLmQ5
MjM4NTYwMTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCkBAIC0z
ODcsNyArMzg3LDcgQEAgc3RhdGljIGJvb2wgZHJhd0NlbGxGb2N1c1JpbmcoTlNDZWxsICpjZWxs
LCBOU1JlY3QgY2VsbEZyYW1lLCBOU1ZpZXcgKmNvbnRyb2xWaWUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlQnV0dG9uKENvbnRyb2xQYXJ0IGJ1dHRvblR5
cGUsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxW
aWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKQorc3RhdGljIHZvaWQgcGFpbnRUb2dnbGVCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDb250cm9sUGFydCBidXR0b25UeXBlLCBDb250cm9sU3RhdGVzJiBjb250cm9sU3Rh
dGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9s
bFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKQEAgLTUyMCw3
ICs1MjAsNyBAQCBzdGF0aWMgTlNCdXR0b25DZWxsICpidXR0b24oQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRlcwogICAgIHJldHVybiBjZWxsOwogfQog
ICAgIAotc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0
YXRlcyYgY29udHJvbFN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZp
ZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCitzdGF0
aWMgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcikKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAKQEAgLTU5Niw3ICs1OTYsNyBAQCBzdGF0aWMgTlND
b250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KQogICAgIHJldHVybiBOU0NvbnRyb2xTaXplTWluaTsKIH0KIAotc3RhdGljIHZvaWQgcGFp
bnRTdGVwcGVyKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZp
ZXcqKQorc3RhdGljIHZvaWQgcGFpbnRTdGVwcGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Q29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0
IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBOU1N0ZXBw
ZXJDZWxsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHdheXMgdG8gZHJhdyBhbgogICAgIC8vIE5TU3Rl
cHBlckNlbGwgd2l0aCB0aGUgdXAgYnV0dG9uIGhpZ2hsaWdodGVkLgpAQCAtODQ4LDI1ICs4NDgs
MjUgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgQ29udHJvbFN0YXRlcyYgc3QKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKLXZvaWQgVGhlbWVNYWM6OnBhaW50KENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xT
dGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lz
dGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3ZvaWQgVGhlbWVNYWM6OnBs
YXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sUGFydCBwYXJ0LCBD
b250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQg
em9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURh
cmtBcHBlYXJhbmNlKQogewogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxB
cHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKIAogICAg
IHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgICAg
IHBhaW50VG9nZ2xlQnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9v
bUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7
CisgICAgICAgICAgICBwYWludFRvZ2dsZUJ1dHRvbihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9s
bFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgICAgIHBhaW50VG9nZ2xl
QnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Ny
b2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAg
ICBwYWludFRvZ2dsZUJ1dHRvbihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpv
b21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9sbFZpZXcpLCBkZXZp
Y2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0
OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKLSAgICAgICAgICAgIHBhaW50QnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVk
UmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2Fs
ZUZhY3Rvcik7CisgICAgICAgICAgICBwYWludEJ1dHRvbihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMs
IHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNj
cm9sbFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6Ci0gICAgICAgICAg
ICBwYWludFN0ZXBwZXIoc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBz
Y3JvbGxWaWV3KTsKKyAgICAgICAgICAgIHBhaW50U3RlcHBlcihjb250ZXh0LCBzdGF0ZXMsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9s
bFZpZXcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQppbmRleCA5
OTZjMTlkNTUwZi4uYjhhN2ZjOTMyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XaWRnZXRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dp
ZGdldE1hYy5tbQpAQCAtMTg2LDkgKzE4Niw5IEBAIE5TVmlldyAqV2lkZ2V0OjpnZXRPdXRlclZp
ZXcoKSBjb25zdAogICAgIHJldHVybiB2aWV3OwogfQogCi12b2lkIFdpZGdldDo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKIHsKLSAgICBpZiAocC5w
YWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CiAKQEAg
LTIwMiwxMSArMjAyLDE3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAs
IGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpCiAjZW5kaWYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLQorICAgIAorICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywg
cmVjdCk7Cit9CisgICAgCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CiAgICAgLy8gVGFrZSBhIHJlZmVy
ZW5jZSB0byB0aGlzIFdpZGdldCwgYmVjYXVzZSBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSB2aWV3
cyBjYW4gaW52b2tlIGFyYml0cmFyeQogICAgIC8vIGNvZGUsIHdoaWNoIGNhbiBkZXJlZiBpdC4K
ICAgICBSZWY8V2lkZ2V0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAorICAgIE5TVmlldyAqdmll
dyA9IGdldE91dGVyVmlldygpOwogICAgIE5TR3JhcGhpY3NDb250ZXh0ICpjdXJyZW50Q29udGV4
dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCkBAIC0yMTQsNyArMjIwLDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgY29tbW9uIGNhc2Ugb2YgZHJhd2luZyBpbnRvIGEgd2luZG93IG9yIGFuIGluY2x1c2l2ZSBs
YXllciwgb3IgcHJpbnRpbmcuCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJl
Y3Q6ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXV07CisgICAgICAgIFt2aWV3IGRpc3BsYXlS
ZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6W3ZpZXcg
c3VwZXJ2aWV3XV1dOwogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjM3LDcgKzI0Myw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChH
cmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFpbnRQ
b2xpCiAgICAgICAgICAgICBzY3JvbGxWaWV3ID0gMDsKICAgICB9CiAKLSAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gcC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVk
LWRlY2xhcmF0aW9ucyIKICAgICBBU1NFUlQoY2dDb250ZXh0ID09IFtjdXJyZW50Q29udGV4dCBn
cmFwaGljc1BvcnRdKTsKQEAgLTI1OSw3ICsyNjUsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJh
dGlvbnMiCiAgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjZ0NvbnRleHQgZmxpcHBl
ZDpOT107CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIFt2aWV3IGRpc3Bs
YXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnIgZnJvbVZpZXc6W3ZpZXcg
c3VwZXJ2aWV3XV0gaW5Db250ZXh0Om5zQ29udGV4dF07CisgICAgICAgIFt2aWV3IGRpc3BsYXlS
ZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6W3ZpZXcg
c3VwZXJ2aWV3XV0gaW5Db250ZXh0Om5zQ29udGV4dF07CiAgICAgfQogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEZsYWdzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5o
CmluZGV4IGY4Y2IzYmQyNjY3Li5lY2ZlMTdiYjIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRGbGFncy5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGVudW0gY2xhc3MgVGV4dFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsKQEAgLTQwLDYgKzQyLDEy
IEBAIGVudW0gY2xhc3MgRm9udFNtb290aGluZ01vZGUgOiB1aW50OF90IHsKICAgICBBbnRpYWxp
YXNlZCwKICAgICBTdWJwaXhlbEFudGlhbGlhc2VkCiB9OworICAgIAoraW5saW5lIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBGb250U21vb3Ro
aW5nTW9kZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIEZvbnRTbW9vdGhpbmdNb2RlIHRv
IHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KIAogLy8gVGhpcyBzZXR0aW5nIGlz
IHVzZWQgdG8gcHJvdmlkZSB3YXlzIG9mIHN3aXRjaGluZyBiZXR3ZWVuIG11bHRpcGxlIHJlbmRl
cmluZyBtb2RlcyB0aGF0IG1heSBoYXZlIGRpZmZlcmVudAogLy8gbWV0cmljcy4gSXQgaXMgdXNl
ZCB0byBzd2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24gV2luZG93cy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAKaW5kZXggOGJkYzAyM2E0MzcuLmE1MWU0
ZjE3NTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcApAQCAt
NzUsNyArNzUsMTIgQEAgdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNv
cikKICAgICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1cnNvcihjdXJzb3IpOwogfQogCi12b2lk
IFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQor
eworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9XaWRnZXRXUEUuY3BwCmluZGV4IDVmNjYzMzBj
NTIzLi45NDUzMzg1ZDg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3Bl
L1dpZGdldFdQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1dpZGdldFdQ
RS5jcHAKQEAgLTUyLDcgKzUyLDEyIEBAIEludFJlY3QgV2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25z
dAogICAgIHJldHVybiBtX2ZyYW1lOwogfQogCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lk
IFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQoreworICAgIGNvbnRleHQuZHJhd1dpZGdl
dCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCA0Njg0NzJjNjg2NS4u
NmJiOWU5MWU5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApA
QCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50KGNvbnN0IFJlbmRlckJv
eCYgYm94LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBjb25zCiAgICAgY2FzZSBCdXR0
b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKICAgICAgICAgdXBkYXRlQ29u
dHJvbFN0YXRlc0ZvclJlbmRlcmVyKGJveCwgY29udHJvbFN0YXRlcyk7Ci0gICAgICAgIFRoZW1l
OjpzaW5nbGV0b24oKS5wYWludChwYXJ0LCBjb250cm9sU3RhdGVzLCBwYWludEluZm8uY29udGV4
dCgpLCBkZXZpY2VQaXhlbFNuYXBwZWRSZWN0LCBib3guc3R5bGUoKS5lZmZlY3RpdmVab29tKCks
ICZib3gudmlldygpLmZyYW1lVmlldygpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFj
dG9yLCBib3gucGFnZSgpLnVzZVN5c3RlbUFwcGVhcmFuY2UoKSwgYm94LnBhZ2UoKS51c2VEYXJr
QXBwZWFyYW5jZSgpKTsKKyAgICAgICAgVGhlbWU6OnNpbmdsZXRvbigpLnBhaW50KHBhaW50SW5m
by5jb250ZXh0KCksIHBhcnQsIGNvbnRyb2xTdGF0ZXMsIGRldmljZVBpeGVsU25hcHBlZFJlY3Qs
IGJveC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJmJveC52aWV3KCkuZnJhbWVWaWV3KCksIGRl
dmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIGJveC5wYWdlKCkudXNlU3lzdGVtQXBw
ZWFyYW5jZSgpLCBib3gucGFnZSgpLnVzZURhcmtBcHBlYXJhbmNlKCkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345270</attachid>
            <date>2018-07-18 12:35:17 -0700</date>
            <delta_ts>2018-07-18 13:59:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187765-20180718123516.patch</filename>
            <type>text/plain</type>
            <size>211509</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UxOWQyYTE5Zjg0YjUx
ODQxMGNiMDQ2NGZjOTNiZmRkZmExNTBmOC4uMDMxOTM5ZTNiYjVmZjlhZjc5MTM3N2M0ZTI2Yjli
ZWI4ODZmNjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3NyBAQAorMjAxOC0wNy0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGljb24sIHdpZGdldCwgc2Nyb2xsYmFyIGFuZCB0aGVtZSB0byBiZSBkcmF3biB0aHJvdWdoIERp
c3BsYXlMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODc3NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEcmF3aW5nIHRoZXNlIGl0ZW1zIHNob3VsZCBnbyB0aHJvdWdoIEdyYXBoaWNzQ29udGV4dCB3
aGljaCB3aWxsIGNyZWF0ZQorICAgICAgICBzcGVjaWFsIERpc3BsYXlMaXN0SXRlbXMgZm9yIGRy
YXdpbmcgdGhlbS4gVGhlc2UgRGlzcGxheUxpc3RJdGVtcyB3aWxsCisgICAgICAgIHN0b3JlIGFs
bCB0aGUgcGFyYW1ldGVycyB0byBiZSB1c2VkIHdoZW4gcmVwbGF5aW5nIHRoZSBEaXNwbGF5TGlz
dCBiYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1Ro
ZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZTo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZvcm0vVGhlbWUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdl
dC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ljb24pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3V2lkZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdUaGVtZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBh
aW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1Q
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdJY29uKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdXaWRnZXQpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3VGhlbWUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lk
Z2V0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mv
V2lkZ2V0SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9UaGVtZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhaW50VG9nZ2xlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3RlcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZU1hYzo6cGxhdGZvcm1QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1h
Yzo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3Mu
aDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9XaWRnZXRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L3dwZS9XaWRnZXRXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFp
bnQpOgorCisyMDE4LTA3LTE3ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBEaXNwbGF5TGlzdEl0ZW1zIGFuZCB1c2Ugc3Rk
Ojp0dXBsZSB0byBzdG9yZSB0aGUgYXJndW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcwMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBEaXNwbGF5TGlzdEl0ZW1zIGFyZSBzaW1wbGUgb2JqZWN0
cyB3aGljaCByZXByZXNlbnQgZ3JhcGhpY3MgY29tbWFuZHMgYW5kCisgICAgICAgIHRoZWlyIGFy
Z3VtZW50cy4gVGhlIGFyZ3VtZW50cyBhcmUgc3RvcmVkIHdoaWxlIHJlY29yZGluZyB0aGUgRGlz
cGxheUxpc3QgCisgICAgICAgIGFuZCB1c2VkIHdoZW4gcmVwbGF5aW5nIGl0IGJhY2suIEluIGZh
Y3QsIHdlIGRvIG5vdCBjYXJlIG11Y2ggYWJvdXQga25vd2luZworICAgICAgICB0aGVzZSBhcmd1
bWVudHMgZXhwZWN0IHdoZW4gZGVidWdnaW5nIHRoZSBEaXNwbGF5TGlzdC4gU28gYSBtZWNoYW5p
Y2FsIHdheQorICAgICAgICB0byBzdG9yZSB0aGUgYXJndW1lbnRzIGFuZCBwYXNzaW5nIHRoZW0g
dG8gR3JhcGhpY3NDb250ZXh0IHNob3VsZCBiZSBzdWZmaWNpZW50LgorICAgICAgICBUaGlzIHdp
bGwgbWFrZSBhZGRpbmcgYSBuZXcgRGlzcGxheUxpc3RJdGVtIGVhc2llciBhbmQgaW4gbWFrZXMg
dGhlIGNvZGUKKyAgICAgICAgYSBsb3Qgc2hvcnRlci4KKworICAgICAgICBUaGlzIHBhdGNoIHRl
bXBsYXRpemVzIHRoZSBEaXNwbGF5TGlzdEl0ZW1zIGNsYXNzZXMgYW5kIHVzZXMgc3RkOjp0dXBs
ZSB0bworICAgICAgICBzdG9yZSB0aGUgYXJndW1lbnRzLiBUaGUgR3JhcGhpY3NDb250ZXh0IGZ1
bmN0aW9uIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCAKKyAgICAgICAgdG8gdGhlIHRlbXBsYXRl
IGFsb25nIHdpdGggdGhlIHR5cGVzIG9mIHRoZSBzdGQ6OnR1cGxlIGl0ZW1zLiBUaGUgY2xhc3MK
KyAgICAgICAgaGllcmFyY2h5IGlzIGEgbGl0dGxlIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgb3Jp
Z2luYWwgb25lOgorCisgICAgICAgIC0tIEl0ZW06IFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgYW5k
IHRoaXMgaXMgd2hhdCBEaXNwbGF5TGlzdCBzdG9yZXMuCisgICAgICAgIC0tIEdlb210cnlJdGVt
OiBJdCBpcyBkZXJpdmVkIGZyb20gSXRlbSBhbmQgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVu
CisgICAgICAgIGl0IGFuZCBJdGVtIGlzIGl0IGtub3dzIHRoZSBleHRlbnQgb2YgdGhlIEl0ZW0u
CisgICAgICAgIC0tIEdyYXBoaWNzSXRlbTogSXQncyBhIHRlbXBsYXRlIGNsYXNzIHdoaWNoIHRh
a2VzIGEgcG9pbnRlciB0byBhIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBmdW5jdGlvbiwgc2V0
IG9mIGFyZ3VtZW50cycgdHlwZXMuIEl0cyBjb25zdHJ1Y3RvciBzYXZlcyB0aGUgYXJndW1lbnRz
IGluCisgICAgICAgIHN0ZDo6dHVwbGUuIEl0cyBhcHBseSBtZXRob2QgY2FsbHMgdGhlIEdyYXBo
aWNzQ29udGV4dCBmdW5jdGlvbiBieSBwYXNzaW5nCisgICAgICAgIHRoZSBhcmd1bWVudHMgaXQg
c3RvcmVzLgorICAgICAgICAtLSBTZXR0aW5nSXRlbTogSXQgaXMgZGVyaXZlZCBmcm9tIEl0ZW0g
YW5kIEdyYXBoaWNzSXRlbS4KKyAgICAgICAgLS0gRHJhd2luZ0l0ZW06IEl0IGlzIGRlcml2ZWQg
ZnJvbSBHZW9tdHJ5SXRlbSBhbmQgR3JhcGhpY3NJdGVtLgorCisgICAgICAgIE5vdGVzIGFuZCBz
b21lIGRyYXdiYWNrcyBvZiB0aGlzIHBhdGNoIGFyZToKKyAgICAgICAgLS0gVGhlIERpc3BsYXlM
aXN0IHJlcGxheWluZyBiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBtZXRob2RzIG9mIEdyYXBoaWNz
Q29udGV4dC4KKyAgICAgICAgLS0gVGhlIG9wZXJhdG9yIDw8IGhhcyB0byBiZSBkZWZpbmVkIGZv
ciBhbGwgdGhlIGFyZ3VtZW50cycgdHlwZXMuCisgICAgICAgIC0tIFdoZW4gYW4gYXJndW1lbnRz
IGlzIGEgUmVmQ291bnRlZCBhbmQgdGhlIEdyYXBoaWNzQ29udGV4IGZ1bmN0aW9uIHRha2VzCisg
ICAgICAgIGEgcmF3IHBvaW50ZXIgb3IgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaXRzZWxmLCB0
aGUgR3JhcGhpY3NJdGVtIGNhbiBzdG9yZQorICAgICAgICBhIFJlZiBvciBhIFJlZlB0ciB0byB0
aGUgb2JqZWN0LiBUaGUgaW1wbGljaXQgY2FzdGluZyBvZiBSZWZQdHIgYW5kIFJlZgorICAgICAg
ICB3aWxsIGRvIHRoZSBtYWdpYyB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBHcmFw
aGljc0NvbnRleHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXRlbXNEZXNjcmlwdG9ycyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXRlbURlc2NyaXB0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06Om5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW06OmFyZ3VtZW50TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbTo6ZGVzY3JpcHRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OnNpemVJbkJ5dGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6YXBwbHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6YXBwbHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjphcHBseSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmFjY3VtdWxh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6YXBwbHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVm
ZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGls
ZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNj
YWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
dGVybjo6RHJhd1BhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXR0ZXJuOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9y
VGV4dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmVGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5n
UGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1JlY3RzOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6YXBwbHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxFbGxpcHNlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjps
b2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjphcHBseSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJu
OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlGaWxsUGF0dGVybjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzR2VvbWV0
cnlJdGVtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjp0eXBlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZW9tZXRyeUl0ZW06OnNldEV4dGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0cnlJdGVtOjpleHRlbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21ldHJ5SXRlbTo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21ldHJ5SXRlbTo6R2VvbWV0
cnlJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHcmFwaGljc0l0ZW06Okdy
YXBoaWNzSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVt
Ojphcmd1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R3JhcGhp
Y3NJdGVtOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R3Jh
cGhpY3NJdGVtOjppdGVyYXJ0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0dGluZ0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0dGluZ0l0ZW06OlNldHRpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3aW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNhdmU6OnJlc3RvcmVJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2F2ZTo6c2V0UmVzdG9yZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZTo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBoczo6c3ViR2x5cGhCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzRHJh
d2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06OmlzU3RhdGVJdGVtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtOjppc1N0YXRlSXRlbVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpzZXRFeHRlbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpleHRlbnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpleHRl
bnRLbm93biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0l0ZW06OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNhdmU6OlNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6UmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5nbGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1v
dW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2Fs
ZTo6U2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNh
dGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpsaW5lQ2FwIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2Fw
OjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaE9mZnNldCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9p
bjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjptaXRlckxpbWl0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Q2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlwT3V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OnBh
dGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6d2luZFJ1bGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpDbGlwUGF0aCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6YmxvY2tMb2Nh
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBoczo6c2V0QmxvY2tMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxBbmNob3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFuY2hvclBvaW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpn
bHlwaHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3SW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OnNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpkZXN0aW5hdGlvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1h
Z2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3VGlsZWRJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZGVzdGluYXRpb24gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjp0aWxl
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1RpbGVkSW1hZ2U6OnNwYWNpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjppbWFnZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U6OnNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlc3RpbmF0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2
ZUltYWdlOjpzb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVzdGluYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjppbWFnZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46
OnBhdHRlcm5UcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjp0aWxlUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmRlc3RSZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6cGhhc2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0
ZXJuOjpzcGFjaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Om9wYWNpdHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OjpFbmRUcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1JlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1JlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0Ojpib3JkZXJUaGlja25lc3MgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpEcmF3UmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OnBv
aW50MSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmU6OnBvaW50MiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OnNldEJsb2NrTG9jYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQ6OmJsb2NrTG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQW5jaG9yIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojpwb2ludCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVz
Rm9yVGV4dDo6d2lkdGhzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojppc1ByaW50aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojpkb3VibGVMaW5l
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyOjpwb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OkRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpwYXRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6
RHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdG
b2N1c1JpbmdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6d2lkdGggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRo
OjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdGb2N1c1JpbmdQYXRoOjpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVj
dHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1JlY3RzOjpyZWN0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjp3aWR0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpvZmZz
ZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdG
b2N1c1JpbmdSZWN0czo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmluZ1JlY3RzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6cmVjdCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6
OkZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UmVjdFdpdGhDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OmNvbG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xv
cjo6RmlsbFJlY3RXaXRoQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpyZWN0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OnJlY3QgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVk
UmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Ymxl
bmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6cm91bmRl
ZFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3Vu
ZGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OnJlY3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
Ojpyb3VuZGVkSG9sZVJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjb2xvciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6cGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6cmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZp
bGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmxpbmVXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpwYXRoIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRo
OjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUVsbGlwc2U6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6
Q2xlYXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0
dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpzY2FsZUZh
Y3RvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp3aWxsQXBw
ZW5kSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3VGlsZWRJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6cmVwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdM
aW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRGbGFncy5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisK
IDIwMTgtMDctMTcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbV2ViIEFuaW1hdGlvbnNdIEludGVycG9sYXRpb24gYmV0d2VlbiBsZW5ndGhzIHdpdGggYW4g
ImF1dG8iIHZhbHVlIHNob3VsZCBiZSBkaXNjcmV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29u
dHJvbFN0YXRlcy5oCmluZGV4IDFkY2U4Yjc1ODA3ZjBkZGY3YzVhYjFmMTllNzUzOWJjNzI4ZDY5
NzEuLmZlOTZhZmRjYmFkYjQwNTdmZDYxMDUyNjIyM2U5NWYwZGJkZWYxMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2lmbmRlZiBf
X09CSkNfXwpAQCAtMTAzLDYgKzEwNCwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxp
bmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29udHJvbFN0
YXRlcyYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIENvbnRyb2xTdGF0ZXMgbWVtYmVycyB0
byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBmOWUwNWY1NWY3NTY4YWVlMjFjYTg0
OTY2NGJjM2Q2ZTU3ZTExYmVmLi5kZTI4ZjAyNzRkNmUzYjI0NGIyODczYzBiOWU3NmI3YjA4MDlh
MTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTE2MywxMSArMTYz
LDE2IEBAIHZvaWQgU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFdpZGdlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkgfHwgIWZyYW1lUmVjdCgpLmludGVy
c2VjdHMoZGFtYWdlUmVjdCkpCisgICAgaWYgKCFmcmFtZVJlY3QoKS5pbnRlcnNlY3RzKGRhbWFn
ZVJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXRoZW1lKCkucGFpbnQoKnRoaXMs
IGNvbnRleHQsIGRhbWFnZVJlY3QpKQotICAgICAgICBXaWRnZXQ6OnBhaW50KGNvbnRleHQsIGRh
bWFnZVJlY3QpOworICAgIGNvbnRleHQuZHJhd1Njcm9sbGJhcigqdGhpcywgZGFtYWdlUmVjdCk7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXRoZW1lKCkucGFpbnQoKnRo
aXMsIGNvbnRleHQsIHJlY3QpKQorICAgICAgICBXaWRnZXQ6OnBhaW50KGNvbnRleHQsIHJlY3Qp
OwogfQogCiB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFRpbWVyRmlyZWQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuaAppbmRleCA2MmY1MDQ0YTgzOTNiZTY0ZWViYmM2NDc1NDc1ZThi
MmUyZDcyMDI0Li5jMGQ0MzBhZDNkYjMzOTllNmUzNzVlZmU4YzM3OWVjNzhhN2UwMjdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApAQCAtODQsNiArODQsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KIAogICAg
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwg
V2lkZ2V0OjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeTo6QW55T3JpZ2luKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmFibGVkOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCk7
CkBAIC0xODIsNiArMTgzLDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1Njcm9sbGJhcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKK2lubGluZSBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxiYXImKQoreworICAgIC8vIEZJ
WE1FOiBkdW1wIHRoZSBTY3JvbGxiYXIgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICBy
ZXR1cm4gdHM7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0lER0VUKFNjcm9sbGJhciwgaXNTY3JvbGxiYXIoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RoZW1lLmNwcAppbmRleCBjMGFmMTkyYjFkMTUyNWIwNWFkM2FmNWZjODA5NDg3YzdiMjYx
MGUyLi42NGJiNGY3OGRiZjg3NGEwMWZjMWIyY2MyMThkZjU2NzcxOTA4ZWY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCkBAIC01Nyw3ICs1NywxMiBAQCBib29sIFRoZW1lOjpjb250cm9s
UmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBUaGVtZTo6cGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgU2Nyb2xsVmlldyosIGZs
b2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKK3ZvaWQgVGhlbWU6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNj
cm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAg
ICBjb250ZXh0LmRyYXdUaGVtZSgqdGhpcywgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1
c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Cit9CisKK3ZvaWQgVGhlbWU6
OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0
ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwg
Ym9vbCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKaW5kZXggZThjZWMzNWQ1OTE2YmNk
ZWIxZGUzOTg4YWEzNjliNWJlMjQ0ZTAzMi4uZDYzMjU0YmNhZjM4NDZmNzIyNTU5ZWVlYTJlNWNl
NzkzYTk0NTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDcgKzY5LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdDsK
IAogICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRpbmcgYSBjb250cm9sLiBUaGUgcmVjdCBpcyBpbiB6
b29tZWQgY29vcmRpbmF0ZXMuCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBD
b250cm9sU3RhdGVzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRS
ZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29s
IHVzZURhcmtBcHBlYXJhbmNlKTsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIENv
bnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBm
bG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURh
cmtBcHBlYXJhbmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1QYWludChHcmFwaGljc0Nv
bnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
LCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSk7CiAKICAgICAvLyBTb21lIGNvbnRyb2xzIG1heSBzcGlsbCBvdXQg
b2YgdGhlaXIgY29udGFpbmVycyAoZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9TIFggY2hlY2tib3gp
LiAgV2hlbiB0aGVzZSBjb250cm9scyByZXBhaW50LAogICAgIC8vIHRoZSB0aGVtZSBuZWVkcyB0
byBjb21tdW5pY2F0ZSB0aGlzIGluZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2luZSBzbyB0aGF0IGl0
IGNhbiBpbnZhbGlkYXRlIHRoZSB3aG9sZSBjb250cm9sLgpAQCAtODgsNSArOTAsMTEgQEAgcHJp
dmF0ZToKICAgICBUaGVtZShjb25zdCBUaGVtZSYpID0gZGVsZXRlOwogICAgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFRoZW1lJikgPSBkZWxldGU7CiB9OworICAgIAoraW5saW5lIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRoZW1lJikKK3sKKyAgICAvLyBGSVhN
RTogZHVtcCB0aGUgVGhlbWUgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4g
dHM7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1dpZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgK
aW5kZXggZjMxZjI0NWE4MGJiZDcwYWNjZTYyMTE4NTQ5Y2QyZDQwMGFjMjFmMy4uOTljZDgzYmZj
YjA2M2Y1ZGQxMDJhZDQ0MjAwZTczOGIyYmUzYmZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTExNCw2ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBj
bGFzcyBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHsgQW55T3JpZ2luLCBBY2Nlc3NpYmxlT3Jp
Z2luT25seSB9OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0g
U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luKTsKKyAgICB2b2lkIHBsYXRmb3Jt
UGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZvaWQgaW52YWxp
ZGF0ZSgpIHsgaW52YWxpZGF0ZVJlY3QoYm91bmRzUmVjdCgpKTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JikgPSAwOwogCkBAIC0yNDQsNiArMjQ2LDEy
IEBAIGlubGluZSB2b2lkIFdpZGdldDo6cmV0YWluUGxhdGZvcm1XaWRnZXQoKQogCiAjZW5kaWYK
IAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFdp
ZGdldCYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIFdpZGdldCBtZW1iZXJzIHRvIHRoZSBU
ZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dJREdFVChUb1ZhbHVlVHlwZU5h
bWUsIHByZWRpY2F0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmlu
ZGV4IDUyZWRiYWU5NDUzN2ZhNzIwZDQ3MTRiMTgxZWQyNmY3MjdiNmUyYmUuLjcxODU5ODZiMjMw
YTM1MTdmY2Q2Y2E5Nzg1NmJiMmU2MjhmN2JjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTM3MCw2ICszNzEsMTIgQEAg
QUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAogICAgIHJldHVybiB3aWR0aDsKIH0KIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBGb250JikKK3sKKyAgICAvLyBGSVhNRTog
ZHVtcCB0aGUgRm9udCBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRm9udF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAppbmRleCAxNzUyZGNi
ZDA4ZThmNmNjNzk5YmU0NTYzN2NjY2ZjYzUyZTc4YzNjLi40NWYxN2ZhY2Q3YjBlMWRhMmY1Y2Zj
OTE1MGViYjJmZDVhZjY1MzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoQnVmZmVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJHbHlwaC5oIgog
I2luY2x1ZGUgPGNsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShDRykKICNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dHZW9tZXRyeS5oPgpAQCAtMjI4LDUgKzIyOSwxMSBAQCBwcml2YXRlOgogI2VuZGlmCiB9
OwogCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEdseXBoQnVmZmVyJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgR2x5cGhC
dWZmZXIgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKaW5k
ZXggYzdmYzRjNmUzNjkzODBhNWU5YTc3MzEyNGY3NDBhNjNmZGI1MTAwYi4uN2JmYmZmYTQ3Y2Qy
NDBlZDc3NmExMWUxOTIzNmJjZGMwMGRmY2RlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBVU0UoQ0cpCiB0
eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsKQEAgLTE1Niw0ICsxNTcsMTAg
QEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3JhZGllbnQ7CiB9OwogCitpbmxp
bmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEdyYWRpZW50JikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgR3JhZGllbnQgbWVtYmVycyB0
byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGM5
NzMxYWE1MTk0ODY2Y2YzZmJhNWUwMzNjYzE4ZDczYzU4NjM3ZmEuLmNjNzEzM2M2NzViMmQ4YmI0
ZThjNWE4NzFmMjhlZDRhMTZmNTQzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzEsMTAgKzMxLDE0IEBACiAj
aW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSb3VuZGVk
UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNp
bmNsdWRlICJUaGVtZS5oIgorI2luY2x1ZGUgIldpZGdldC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODQzLDYgKzg0Nyw1MCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9k
ZUZsYWdzIG1vZGUpCiAgICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNvbihJY29uJiBpY29uLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5kcmF3SWNvbihpY29uLCByZWN0
KTsKKyAgICBlbHNlCisgICAgICAgIGljb24ucGxhdGZvcm1QYWludCgqdGhpcywgcmVjdCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2lkZ2V0KFdpZGdldCYgd2lkZ2V0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRyYXdXaWRn
ZXQod2lkZ2V0LCByZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHdpZGdldC5wbGF0Zm9ybVBhaW50
KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTY3JvbGxiYXIo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2ltcGwp
CisgICAgICAgIG1faW1wbC0+ZHJhd1Njcm9sbGJhcihzY3JvbGxiYXIsIHJlY3QpOworICAgIGVs
c2UKKyAgICAgICAgc2Nyb2xsYmFyLnBsYXRmb3JtUGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lKFRoZW1lJiB0aGVtZSwgQ29udHJvbFBhcnQg
cGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3Qs
IGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRyYXdUaGVt
ZSh0aGVtZSwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3
LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNl
LCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgZWxzZQorICAgICAgICB0aGVtZS5wbGF0Zm9ybVBh
aW50KCp0aGlzLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZp
ZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIHVzZVN5c3RlbUFwcGVhcmFu
Y2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0xMTI5LDYgKzExNzcsMTEgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQog
ICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiAg
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7
CiB9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUpCit7CisgICAgc3RhdGUuYXBwbHkoKnRo
aXMpOworfQogCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZv
clN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBjY2MyZDAz
ZTdlYWYxZmJiZWMyYTEyMWY1ODM1OTRiNjkwMTRlMTJjLi5mZWE5YTk2Mjc1N2MzNDE5NDY3ODMw
MzY3ZWMwNTkwMDQ4YzFhNDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMjYsNiArMjYsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKICNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgpAQCAtMzQs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlv
bi5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJUaGVtZVR5cGVzLmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAg
LTgwLDE2ICs4MiwyMCBAQCBjb25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5HYXBXaWR0
aCA9IDE7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0Owog
Y2xhc3MgR3JhZGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CitjbGFz
cyBJY29uOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgUm91bmRl
ZFJlY3Q7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFBhdGg7
CitjbGFzcyBSb3VuZGVkUmVjdDsKK2NsYXNzIFNjcm9sbGJhcjsKIGNsYXNzIFRleHRSdW47Citj
bGFzcyBUaGVtZTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgVVJMOworY2xh
c3MgV2lkZ2V0OwogCiBlbnVtIFRleHREcmF3aW5nTW9kZSB7CiAgICAgVGV4dE1vZGVGaWxsID0g
MSA8PCAwLApAQCAtMTE2LDYgKzEyMiwxMiBAQCBlbnVtIGNsYXNzIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIDogdWludDhfdCB7CiAgICAgQXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKICAgICBE
aWN0YXRpb25BbHRlcm5hdGl2ZXMKIH07CisgICAgCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0
eWxlJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgSW1hZ2VQYWludGluZ09wdGlvbnMgdG8g
dGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewogY2xhc3MgUmVjb3JkZXI7CkBAIC0yMzMsNiArMjQ1LDEyIEBAIHN0cnVjdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyB7CiAgICAgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIG1fb3JpZW50
YXRpb25EZXNjcmlwdGlvbjsKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRp
b25RdWFsaXR5OwogfTsKKyAgICAKK2lubGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQoreworICAg
IC8vIEZJWE1FOiBkdW1wIHRoZSBJbWFnZVBhaW50aW5nT3B0aW9ucyB0byB0aGUgVGV4dFN0cmVh
bS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9IGRlZmF1bHQ7CkBAIC0yNTUs
NyArMjczLDYgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsKIAogV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQxMiw2ICs0MjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAogICAgIHZvaWQgYXBwbHlTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCiAgICAgZW51bSBSb3VuZGluZ01vZGUgewog
ICAgICAgICBSb3VuZEFsbFNpZGVzLApAQCAtNDQ4LDYgKzQ2NiwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwogI2VuZGlmCiAKKyAgICB2
b2lkIGRyYXdJY29uKEljb24mLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdXaWRn
ZXQoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgZHJhd1Njcm9sbGJhcihTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcmF3VGhlbWUoVGhlbWUmLCBDb250
cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxv
YXQgem9vbUZhY3Rvciwgdm9pZCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSk7CisKICAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7CiAgICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KTsKICAgICB2b2lkIHNldExp
bmVKb2luKExpbmVKb2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCA2YmNmNzY4YWRmZDg5ZWUwYjE5NmEz
ZWE2MmVlMDY4MGM4YWQxOGVlLi44NDY5MmM0ZDczMjg5OTM1MWU5MzcwYzFlMDRhOTJhYTZjOTA3
NmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCwxMyArNzgsMjAgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyNpZiBV
U0UoQ0cpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CisjZW5k
aWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3
SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZp
ZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wg
dXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgPSAwOwogCiAgICAg
dmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKaW5kZXggODYwZWE2OTZmZWI0
ODViYWJhMzRmZWZjMDQxZDJlYzM4ODczNGI4My4uZTI1Y2E4OGVjODQ2MWFjMDYwNWE2ZDI2NzVh
YWFjNWNjOGFjZmZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MSwxMCArMjEsMTIgQEAKICNpZm5kZWYgSWNvbl9oCiAjZGVmaW5lIEljb25faAogCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYg
UExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCkBAIC00OCw3ICs1MCwxMiBA
QCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB+SWNvbigpOwogCi0gICAgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHsKKyAg
ICAgICAgY29udGV4dC5kcmF3SWNvbigqdGhpcywgcmVjdCk7CisgICAgfQorCisgICAgdm9pZCBw
bGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Owog
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBSZWZQdHI8SWNvbj4gY3JlYXRlKEhJQ09O
IGhJY29uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihoSWNvbikpOyB9CkBAIC03OSw2ICs4
NiwxMiBAQCBwcml2YXRlOgogICAgIEdka1BpeGJ1ZiogbV9pY29uOwogI2VuZGlmCiB9OworICAg
IAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IElj
b24mKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBJY29uIG1lbWJlcnMgdG8gdGhlIFRleHRT
dHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAppbmRleCA4Y2ZiMWU5MjI1N2U0MzI1MjcwNmFlYTU0NWI0MjYzOTRmZTk5ZmQ2Li5jMTY2
ZjFiYjY4NzMwNGEwY2JkODQwNDI3NjQ4YzIxOTA3M2FhMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBib28K
ICAgICBkcmF3TGluZXNGb3JUZXh0KG9yaWdpbiwgRGFzaEFycmF5IHsgd2lkdGgsIDAgfSwgcHJp
bnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIG1faW1wbC0+
ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5l
cywgc3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcAppbmRleCBlMDZlNDAzMWQ4NzlkMTkwMzY5YWFjODM4NzY4
MDQ5ODRjNjVhN2NkLi4yNTUwODhkYmRlZTdhMGVmYWI5OTFkYTgzYjU3ZjMxOTdkNjY1M2Y4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTI5NCw5ICsyOTQsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaQogICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3Jt
Q29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQogewotICAgIFVOVVNFRF9QQVJB
TShzdHJva2VUaGlja25lc3MpOworICAgIFVOVVNFRF9QQVJBTShzdHJva2VTdHlsZSk7CiAgICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3
TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CiB9CkBAIC0zMTIsMTAgKzMxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgQ2Fpcm86OmRyYXdFbGxp
cHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsK
LX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaAppbmRleCA5OTdjYmRkYTUxYzNmMWMwYzUyZDUwZmNjZWE0ZTU4NTk1YjhhNzliLi45
NjFhOTY5N2M3NWNhZjljZDQyNjQ4MWNkYzI4YWYwMzQxNGVhOGY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtNzksMTAgKzc5LDkgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFy
cmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ry
b2tlU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGQy
OTUwNzE3OGNiMDBlNTY5ZGYxYjFjNjZiOTlmZGE3OWFkMjQ3Y2YuLmQ1YjIyMDk2ZmYwMDg2ZGI4
Y2ViZTRhODE2NTZhODY2YzkxMzMxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTE1ODcsNyAr
MTU4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhpY2tuZXNzKCkpOworICAgICAg
ICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZUxpbmVzLCBzdHJva2VTdHlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuY3BwCmluZGV4IGE0MGY4OWY3Njg4NTRlODA0NDkyYjBjMWE1YzNhMGZjYjZk
ZTc4NmYuLmE2YmUxZGMyZTY3YTk4ZGQxMzg3NzBmZGJmMWUzMmEyMjVkMDVlZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtMTE0LDggKzExNCw4IEBAIHZvaWQgRGlzcGxheUxpc3Q6
OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiBzaXplX3QgRGlzcGxheUxpc3Q6OnNpemVJbkJ5
dGVzKCkgY29uc3QKIHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8mIHJl
ZiA6IG1fbGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNpemVJbkJ5dGVzKHJlZik7Cisg
ICAgZm9yIChhdXRvJiBpdGVtIDogbV9saXN0KQorICAgICAgICByZXN1bHQgKz0gaXRlbS0+c2l6
ZUluQnl0ZXMoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CmluZGV4IGQ0NDM3ZTNkNDFiZTEyMmNjODkwNjUyNDdjOTIyMjZlNzgxZGM3N2IuLmY4NjJiODc4
YjUwNGEwZDRlMmRkYjgxMGNlOGZmYTg2MmJlMDRjNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CkBAIC00MSw4ICs0MSw2IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAogbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKIAotY2xhc3MgSXRlbTsKLQogZW51bSBBc1RleHRGbGFnIHsKICAgICBOb25l
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKICAgICBJbmNsdWRlc1BsYXRmb3JtT3Bl
cmF0aW9ucyAgICAgID0gMSA8PCAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CmluZGV4IDFmY2VlOGIzODQzNzMwMzZkMjNmMDkxMTJhYjYzZTc5Njk1ZWMwNDMuLjZjNDc2ZTlj
YzJkZDIxMWFmOGMyYThkMzIwODM2MjlhNjBhZmMzNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsMTEyMSArMjYsOTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotLy8gU2hvdWxkIG1hdGNoIFJlbmRlclRoZW1lOjpw
bGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkKLXN0YXRpYyBjb25zdCBmbG9hdCBwbGF0Zm9ybUZvY3Vz
UmluZ1dpZHRoID0gMzsKLQotI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAot
V1RGOjpDU3RyaW5nIEl0ZW06OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBUZXh0U3RyZWFt
IHRzOwotICAgIHRzIDw8ICp0aGlzOwotICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOwot
fQotI2VuZGlmCi0KLXNpemVfdCBJdGVtOjpzaXplSW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQot
ewotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNhdmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFJlc3RvcmU+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90
YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFJvdGF0ZT4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNj
YWxlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRT
dGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVE
YXNoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldE1p
dGVyTGltaXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVhclNoYWRvdz4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PENsaXBQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PERyYXdJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pKTsKLSNpZiBVU0UoQ0cp
IHx8IFVTRShDQUlSTykKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKSk7Ci0jZW5k
aWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdS
ZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdSZWN0PihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd0xpbmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxEcmF3RWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXRoPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJh
d0ZvY3VzUmluZ1JlY3RzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VFbGxpcHNlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxCZWdp
blRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJl
bmN5TGF5ZXI+KGl0ZW0pKTsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlT
dHJva2VQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tl
UGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oaXRlbSkpOwot
I2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKSk7
Ci0gICAgfQotICAgIHJldHVybiAwOwordXNpbmcgSXRlbURlc2NyaXB0b3IgPSBzdHJ1Y3Qgewor
ICAgIFN0cmluZyBuYW1lOworICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50c05hbWVzOworfTsK
Kworc3RhdGljIGNvbnN0IFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4mIGl0ZW1zRGVzY3JpcHRvcnMo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8SXRlbURlc2NyaXB0b3I+PiBp
dGVtc0Rlc2NyaXB0b3JzID0gVmVjdG9yPEl0ZW1EZXNjcmlwdG9yPih7CisgICAgICAgIHsgInNh
dmUiLCB7IH0gfSwKKyAgICAgICAgeyAicmVzdG9yZSIsIHsgfSB9LAorICAgICAgICB7ICJzZXQt
c3RhdGUiLCB7ICJzdGF0ZS1jaGFuZ2UiIH0gfSwKKyAgICAgICAgeyAidHJhbnNsYXRlIiwgeyAi
eCIsICJ5IiB9IH0sCisgICAgICAgIHsgInJvdGF0ZSIsIHsgImFuZ2xlIiB9IH0sCisgICAgICAg
IHsgInNjYWxlIiwgeyAic2l6ZSIgfSB9LAorICAgICAgICB7ICJjb25jYXRlbmF0ZS1jdG0iLCB7
ICJjdG0iIH0gfSwKKyAgICAgICAgeyAic2V0LWxpbmUtY2FwIiwgeyAibGluZS1jYXAiIH0gfSwK
KyAgICAgICAgeyAic2V0LWxpbmUtZGFzaCIsIHsgImRhc2gtYXJyYXkiLCAiZGFzaC1vZmZzZXQi
IH0gfSwKKyAgICAgICAgeyAic2V0LWxpbmUtam9pbiIsIHsgImxpbmUtam9pbiIgfSB9LAorICAg
ICAgICB7ICJzZXQtbWl0ZXItbGltaXQiLCB7ICJtaXRyZS1saW1pdCIgfSB9LAorICAgICAgICB7
ICJjbGVhci1zaGFkb3ciLCB7IH0gfSwKKyAgICAgICAgeyAiY2xpcCIsIHsgInJlY3QiIH0gfSwK
KyAgICAgICAgeyAiY2xpcC1vdXQiLCB7ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsaXAtb3V0
LXRvLXBhdGgiLCB7ICJwYXRoIiB9IH0sCisgICAgICAgIHsgImNsaXAtcGF0aCIsIHsgInBhdGgi
LCAid2luZC1ydWxlIiB9IH0sCisgICAgICAgIHsgImFwcGx5LXN0cm9rZS1wYXR0ZXJuIiwgeyB9
IH0sCisgICAgICAgIHsgImFwcGx5LWZpbGwtcGF0dGVybiIsIHsgfSB9LAorICAgICAgICB7ICJh
cHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIiwgeyAic2NhbGUtZmFjdG9yIiB9IH0sCisKKyAgICAg
ICAgeyAiYmVnaW4tdHJhbnNwYXJlbmN5LWxheWVyIiwgeyAib3BhY2l0eSIgfSB9LAorICAgICAg
ICB7ICJlbmQtdHJhbnNwYXJlbmN5LWxheWVyIiwgeyB9IH0sCisgICAgICAgIHsgImRyYXctZ2x5
cGhzIiwgeyAiZm9udCIsICJnbHlwaC1idWZmZXIiLCAiZnJvbSIsICJudW0tZ2x5cGhzIiwgInBv
aW50IiwgImZvbnQtc21vb3RoaW5nIiB9IH0sCisgICAgICAgIHsgImRyYXctaW1hZ2UiLCB7ICJp
bWFnZSIsICJkZXN0LXJlY3QiLCAic291cmNlLXJlY3QiLCAiaW1hZ2UtcGFpbnRpbmctb3B0aW9u
cyIgfSB9LAorICAgICAgICB7ICJkcmF3LXRpbGVkLWltYWdlIiwgeyAiaW1hZ2UiLCAiZGVzdC1y
ZWN0IiwgInNvdXJjZS1wb2ludCIsICJ0aWxlLXNpemUiLCAic3BhY2luZyIsICJpbWFnZS1wYWlu
dGluZy1vcHRpb25zIiB9IH0sCisgICAgICAgIHsgImRyYXctdGlsZWQtc2NhbGVkLWltYWdlIiwg
eyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInNvdXJjZS1yZWN0IiwgInRpbGUtc2NhbGVmYWN0b3Ii
LCAiaC1ydWxlIiwgInYtcnVsZSIsICJpbWFnZS1wYWludGluZy1vcHRpb25zIiB9IH0sCisgICAg
ICAgIHsgImRyYXctbmF0aXZlLWltYWdlIiwgeyAiaW1hZ2UiLCAic2VsZi1zaXplIiwgImRlc3Qt
cmVjdCIsICJzb3VyY2UtcmVjdCIsICJjb21wb3NpdGUtb3BlcmF0b3IiLCAiYmxlbmQtbW9kZSIs
ICJpbWFnZS1vcmllbnRhdGlvbiIgfSB9LAorICAgICAgICB7ICJkcmF3LXBhdHRlcm4iLCB7ICJp
bWFnZSIsICJkZXN0LXJlY3QiLCAidGlsZS1yZWN0IiwgInBhdHRlcm4tdHJhbnNmb3JtIiwgInBo
YXNlIiwgInNwYWNpbmciLCAiY29tcG9zaXRlLW9wZXJhdG9yIiwgImJsZW5kLW1vZGUiIH0gfSwK
KyAgICAgICAgeyAiZHJhdy1yZWN0IiwgeyAicmVjdCIsICJib3JkZXItdGhpY2tuZXNzIiB9IH0s
CisgICAgICAgIHsgImRyYXctbGluZSIsIHsgInBvaW50LTEiLCAicG9pbnQtMiIgfSB9LAorICAg
ICAgICB7ICJkcmF3LWxpbmVzLWZvci10ZXh0IiwgeyAicG9pbnQiLCAid2lkdGhzIiwgImlzLXBy
aW50aW5nIiwgImRvdWJsZS1saW5lcyIsICJzdHJva2Utc3R5bGUiIH0gfSwKKyAgICAgICAgeyAi
ZHJhdy1saW5lLWZvci1kb2N1bWVudC1tYXJrZXIiLCB7ICJwb2ludCIsICJ3aWR0aCIsICJkb2N1
bWVudC1tYXJrZXItbGluZS1zdHlsZSIgfSB9LAorICAgICAgICB7ICJkcmF3LWVsbGlwc2UiLCB7
ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImRyYXctcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAg
ICAgeyAiZHJhdy1mb2N1cy1yaW5nLXBhdGgiLCB7ICJwYXRoIiwgIndpZHRoIiwgIm9mZnNldCIs
ICJjb2xvciIgfSB9LAorICAgICAgICB7ICJkcmF3LWZvY3VzLXJpbmctcmVjdHMiLCB7ICJyZWN0
cyIsICJ3aWR0aCIsICJvZmZzZXQiLCAiY29sb3IiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1pY29u
IiwgeyAiaWNvbiIsICJyZWN0IiB9IH0sCisgICAgICAgIHsgImRyYXctd2lkZ2V0IiwgeyAid2lk
Z2V0IiwgInJlY3QifSB9LAorICAgICAgICB7ICJkcmF3LXNjcm9sbGJhciIsIHsgInNjcm9sbGJh
ciIsICJyZWN0IiB9IH0sCisgICAgICAgIHsgImRyYXctdGhlbWUiLCB7ICJ0aGVtZSIsICJjb250
cm9sLXBhcnQiLCAiY29udHJvbC1zdGF0ZXMiLCAiem9vbWVkLXJlY3QiLCAiem9vbS1mYWN0b3Ii
LCAic2Nyb2xsLXZpZXciLCAiZGV2aWNlLXNjYWxlLWZhY3RvciIsICJwYWdlLXNjYWxlLWZhY3Rv
ciIsICJ1c2Utc3lzdGVtLWFwcGVhcmFuY2UiLCAidXNlLWRhcmstYXBwZWFyYW5jZSIgfSB9LAor
ICAgICAgICB7ICJmaWxsLXJlY3QiLCB7ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImZpbGwtcmVj
dC13aXRoLWNvbG9yIiwgeyAicmVjdCIsICJjb2xvciIgfSB9LAorICAgICAgICB7ICJmaWxsLXJl
Y3Qtd2l0aC1ncmFkaWVudCIsIHsgInJlY3QiLCAiZ3JhZGllbnQiIH0gfSwKKyAgICAgICAgeyAi
ZmlsbC1jb21wb3NpdGVkLXJlY3QiLCB7ICJyZWN0IiwgImNvbG9yIiwgImNvbXBvc2l0ZS1vcGVy
YXRvciIsICJibGVuZC1tb2RlIiB9IH0sCisgICAgICAgIHsgImZpbGwtcm91bmRlZC1yZWN0Iiwg
eyAicmVjdCIsICJjb2xvciIsICJibGVuZC1tb2RlIiB9IH0sCisgICAgICAgIHsgImZpbGwtcmVj
dC13aXRoLXJvdW5kZWQtaG9sZSIsIHsgInJlY3QiLCAicm91bmRlZC1ob2xlLXJlY3QiLCAiY29s
b3IiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1wYXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7
ICJmaWxsLWVsbGlwc2UiLCB7ICJyZWN0IiB9IH0sCisgICAgICAgIHsgInN0cm9rZS1yZWN0Iiwg
eyAicmVjdCIsICJsaW5lLXdpZHRoIiB9IH0sCisgICAgICAgIHsgInN0cm9rZS1wYXRoIiwgeyAi
cGF0aCIgfSB9LAorICAgICAgICB7ICJzdHJva2UtZWxsaXBzZSIsIHsgInJlY3QiIH0gfSwKKyAg
ICAgICAgeyAiY2xlYXItcmVjdCIsIHsgInJlY3QiIH0gfQorICAgIH0pOworCisgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4oSXRlbVR5cGU6Ok1heCkgPT0gaXRlbXNEZXNjcmlwdG9ycy5n
ZXQoKS5zaXplKCkpOworICAgIHJldHVybiBpdGVtc0Rlc2NyaXB0b3JzOworfQorCitzdGF0aWMg
Y29uc3QgSXRlbURlc2NyaXB0b3ImIGl0ZW1EZXNjcmlwdG9yKEl0ZW1UeXBlIGl0ZW1UeXBlKQor
eworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW1UeXBlKSA8IGl0ZW1zRGVzY3Jp
cHRvcnMoKS5zaXplKCkpOworICAgIHJldHVybiBpdGVtc0Rlc2NyaXB0b3JzKClbc3RhdGljX2Nh
c3Q8c2l6ZV90PihpdGVtVHlwZSldOwogfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2luZ0l0ZW0mIGl0ZW0pCi17Ci0gICAgdHMuc3Rh
cnRHcm91cCgpOwotICAgIHRzIDw8ICJleHRlbnQgIjsKLSAgICBpZiAoaXRlbS5leHRlbnRLbm93
bigpKQotICAgICAgICB0cyA8PCBpdGVtLmV4dGVudCgpOwotICAgIGVsc2UKLSAgICAgICAgdHMg
PDwgInVua25vd24iOwogICAgIAotICAgIHRzLmVuZEdyb3VwKCk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi12b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LnNhdmUoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNhdmUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJyZXN0b3JlLWluZGV4IiwgaXRlbS5yZXN0b3JlSW5kZXgoKSk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi12b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLX0KLQotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSht
X3gsIG1feSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4Iiwg
aXRlbS54KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkK
LXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAotewotICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJu
IHRzOwotfQotCi1Db25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkK
LSAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLXsKLX0KLQotdm9pZCBDb25jYXRlbmF0ZUNU
TTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
Y29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQotewotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQpOwotfQotCi12b2lkIFNldFN0YXRlOjph
Y2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgbV9zdGF0ZS5hY2N1bXVs
YXRlKHN0YXRlLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCi17Ci0gICAgdHMgPDwgc3RhdGUu
c3RhdGUoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcCht
X2xpbmVDYXApOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lRGFzaCYgbGluZURhc2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5Iiwg
bGluZURhc2guZGFzaEFycmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQi
LCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRM
aW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNv
bnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21p
dGVyTGltaXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQotdm9pZCBDbGlw
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5j
bGlwKG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIs
IGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xpcE91dDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xpcE91dCht
X3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsaXBPdXRUb1BhdGg6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsaXBP
dXQobV9wYXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBDbGlwUGF0
aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
Y2xpcFBhdGgobV9wYXRoLCBtX3dpbmRSdWxlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQotewotICAgIHRz
LmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
IndpbmQtcnVsZSIsIGl0ZW0ud2luZFJ1bGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3
R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0dseXBocykKLSAgICAsIG1fZm9udChjb25zdF9jYXN0PEZv
bnQmPihmb250KSkKLSAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQotICAgICwg
bV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKLSAgICAsIG1fc21vb3RoaW5nTW9kZShzbW9vdGhp
bmdNb2RlKQotewotICAgIG1fZ2x5cGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwot
ICAgIG1fYWR2YW5jZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgbV9nbHlwaHMudW5jaGVj
a2VkQXBwZW5kKGdseXBoc1tpXSk7Ci0gICAgICAgIG1fYWR2YW5jZXMudW5jaGVja2VkQXBwZW5k
KGFkdmFuY2VzW2ldKTsKLSAgICB9Ci0gICAgY29tcHV0ZUJvdW5kcygpOwotfQotCi1pbmxpbmUg
R2x5cGhCdWZmZXIgRHJhd0dseXBoczo6Z2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0Ci17Ci0g
ICAgR2x5cGhCdWZmZXIgcmVzdWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbHlw
aHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgJm1fZm9u
dC5nZXQoKSwgbV9hZHZhbmNlc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuZHJhd0dseXBocyhtX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwg
MCwgbV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOwotfQot
Ci12b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQotewotICAgIC8vIEZJWE1FOiBUaGlz
IGNvZGUgZG9lc24ndCBhY3R1YWxseSB0YWtlIHRoZSBleHRlbnRzIG9mIHRoZSBnbHlwaHMgaW50
byBjb25zaWRlcmF0aW9uLiBJdCBhc3N1bWVzIHRoYXQKLSAgICAvLyB0aGUgZ2x5cGggbGllcyBl
bnRpcmVseSB3aXRoaW4gaXRzIFsoYXNjZW50ICsgZGVzY2VudCksIGFkdmFuY2VdIHJlY3QuCi0g
ICAgZmxvYXQgYXNjZW50ID0gbV9mb250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7Ci0g
ICAgZmxvYXQgZGVzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdERlc2NlbnQoKTsK
LSAgICBGbG9hdFBvaW50IGN1cnJlbnQgPSB0b0Zsb2F0UG9pbnQobG9jYWxBbmNob3IoKSk7Ci0g
ICAgc2l6ZV90IG51bUdseXBocyA9IG1fZ2x5cGhzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIEdseXBoQnVmZmVyQWR2YW5jZSBh
ZHZhbmNlID0gbV9hZHZhbmNlc1tpXTsKLSAgICAgICAgRmxvYXRSZWN0IGdseXBoUmVjdCA9IEZs
b2F0UmVjdChjdXJyZW50LngoKSwgY3VycmVudC55KCkgLSBhc2NlbnQsIGFkdmFuY2Uud2lkdGgo
KSwgYXNjZW50ICsgZGVzY2VudCk7Ci0gICAgICAgIG1fYm91bmRzLnVuaXRlKGdseXBoUmVjdCk7
Ci0KLSAgICAgICAgY3VycmVudC5tb3ZlKGFkdmFuY2Uud2lkdGgoKSwgYWR2YW5jZS5oZWlnaHQo
KSk7Ci0gICAgfQotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0dseXBoczo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK1N0cmluZyBJdGVtOjpuYW1l
KCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBtX2JvdW5kczsKLSAgICBs
b2NhbEJvdW5kcy5tb3ZlKG1fYmxvY2tMb2NhdGlvbi54KCksIG1fYmxvY2tMb2NhdGlvbi55KCkp
OwotICAgIHJldHVybiBsb2NhbEJvdW5kczsKKyAgICByZXR1cm4gaXRlbURlc2NyaXB0b3IobV90
eXBlKS5uYW1lOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKK1N0cmluZyBJdGVtOjphcmd1bWVudE5hbWUo
c2l6ZV90IGluZGV4KSBjb25zdAogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7Ci0gICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KLSAgICB0cy5k
dW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9uKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hvcigpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImFuY2hvci1wb2ludCIsIGl0ZW0uYW5jaG9yUG9pbnQoKSk7Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJsZW5ndGgiLCBpdGVtLmdseXBocygpLnNpemUoKSk7Ci0KLSAg
ICByZXR1cm4gdHM7Ci19Ci0KLURyYXdJbWFnZTo6RHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwg
bV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAs
IG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLXZv
aWQgRHJhd0ltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3Vy
Y2UsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlJiBpdGVtKQotewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3Vy
Y2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0
IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLURyYXdUaWxlZElt
YWdlOjpEcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1Rp
bGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0
aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGlsZVNpemUodGlsZVNp
emUpCi0gICAgLCBtX3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlv
bnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLXZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdU
aWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVT
aXplLCBtX3NwYWNpbmcsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkSW1hZ2Um
IGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoInNvdXJjZS1wb2ludCIsIGl0ZW0uc291cmNlKCkpOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoInRpbGUtc2l6ZSIsIGl0ZW0udGlsZVNpemUoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJzcGFjaW5nIiwgaXRlbS5zcGFjaW5nKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotRHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdl
KQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24p
Ci0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTY2FsZUZhY3Rvcih0aWxlU2Nh
bGVGYWN0b3IpCi0gICAgLCBtX2hSdWxlKGhSdWxlKQotICAgICwgbV92UnVsZSh2UnVsZSkKLSAg
ICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0K
LXZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1f
ZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTY2FsZUZhY3RvciwgbV9oUnVsZSwgbV92UnVs
ZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRTY2FsZWRJbWFnZSYgaXRlbSkK
LXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi0j
aWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi1EcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRpdmVJbWFn
ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFn
ZSkKLSNpZiBVU0UoQ0cpCi0gICAgLy8gRklYTUU6IE5lZWQgdG8gc3RvcmUgYW4gaW1hZ2UgZm9y
IENhaXJvLgotICAgICwgbV9pbWFnZShpbWFnZSkKLSNlbmRpZgotICAgICwgbV9pbWFnZVNpemUo
aW1hZ2VTaXplKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKLSAgICAsIG1fc3JjUmVj
dChzcmNSZWN0KQotI2lmIFVTRShDRykKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9k
ZShibGVuZE1vZGUpCi0jZW5kaWYKLSAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24pCi17
Ci0jaWYgIVVTRShDRykKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2UpOwotICAgIFVOVVNFRF9QQVJB
TShvcCk7Ci0gICAgVU5VU0VEX1BBUkFNKGJsZW5kTW9kZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBE
cmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSNpZiBVU0UoQ0cpCi0gICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFnZSwgbV9pbWFn
ZVNpemUsIG1fZGVzdGluYXRpb24sIG1fc3JjUmVjdCwgbV9vcCwgbV9ibGVuZE1vZGUsIG1fb3Jp
ZW50YXRpb24pOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdOYXRpdmVJbWFnZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCi0gICAgdHMu
ZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0jZW5kaWYKLQotRHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UGF0dGVybikK
LSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX3BhdHRlcm5UcmFuc2Zvcm0ocGF0dGVyblRy
YW5zZm9ybSkKLSAgICAsIG1fdGlsZVJlY3QodGlsZVJlY3QpCi0gICAgLCBtX2Rlc3RpbmF0aW9u
KGRlc3RSZWN0KQotICAgICwgbV9waGFzZShwaGFzZSkKLSAgICAsIG1fc3BhY2luZyhzcGFjaW5n
KQotICAgICwgbV9vcChvcCkKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLXsKLX0KLQot
dm9pZCBEcmF3UGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuZHJhd1BhdHRlcm4obV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwg
bV90aWxlUmVjdCwgbV9wYXR0ZXJuVHJhbnNmb3JtLCBtX3BoYXNlLCBtX3NwYWNpbmcsIG1fb3As
IG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFn
ZSIsIGl0ZW0uaW1hZ2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuLXRyYW5zZm9y
bSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInRpbGUt
cmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3Qi
LCBpdGVtLmRlc3RSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGhhc2UiLCBpdGVtLnBo
YXNlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdSZWN0KG1fcmVjdCwgbV9ib3Jk
ZXJUaGlja25lc3MpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRHJhd1JlY3QmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJib3JkZXItdGhpY2tuZXNzIiwgaXRl
bS5ib3JkZXJUaGlja25lc3MoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gRHJhd0xpbmU6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGJvdW5kczsKLSAgICBib3VuZHMuZml0VG9Qb2ludHMo
bV9wb2ludDEsIG1fcG9pbnQyKTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi12b2lkIERyYXdM
aW5lOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5kcmF3TGluZShtX3BvaW50MSwgbV9wb2ludDIpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmUmIGl0ZW0pCi17Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBvaW50MSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
InBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJh
d0xpbmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3dpZHRocywgbV9wcmludGlu
ZywgbV9kb3VibGVMaW5lcyk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGlu
ZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAotewot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3Ig
ZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KLQotICAgIGlmICghbV93aWR0aHMuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVzdWx0KHBv
aW50KCksIEZsb2F0U2l6ZShtX3dpZHRocy5sYXN0KCksIG1fc3Ryb2tlV2lkdGgpKTsKLSAgICBy
ZXN1bHQuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3IgcGl4ZWwgc25hcHBpbmcuIEZJWE1FOiBU
aGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3QgdGFrZSB0aGUgQ1RNIGludG8gYWNjb3Vu
dC4KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkKLXsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoIndp
ZHRocyIsIGl0ZW0ud2lkdGhzKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiaXMtcHJpbnRpbmci
LCBpdGVtLmlzUHJpbnRpbmcoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkb3VibGUiLCBpdGVt
LmRvdWJsZUxpbmVzKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5kcmF3TGluZUZvckRvY3VtZW50TWFya2VyKG1fcG9pbnQsIG1fd2lkdGgsIG1f
c3R5bGUpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZhbHVlIGVxdWFsIHRvIG9yIGVu
Y2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigp
IHJldHVybnMuCi0KLSAgICBGbG9hdFJlY3QgcmVzdWx0KG1fcG9pbnQsIEZsb2F0U2l6ZShtX3dp
ZHRoLCBjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKSk7Ci0gICAgcmVzdWx0LmluZmxhdGUoY01p
c3NwZWxsaW5nTGluZVRoaWNrbmVzcyk7IC8vIEFjY291bnQgZm9yICJtaXNzcGVsbGluZyBkb3Qi
IHNuYXBwaW5nLgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludCIsIGl0ZW0ucG9pbnQoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci12b2lkIERyYXdFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgY29udGV4dC5kcmF3RWxsaXBzZShtX3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0p
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAotewotI2lmIFVTRShDRykKLSAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmIGl0ZW0p
Ci17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLS8v
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFkZCBs
b2dnaW5nIGZvciBwYXRocy4KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0ZvY3VzUmlu
Z1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7Ci19
Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0
ID0gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9y
bUZvY3VzUmluZ1dpZHRoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgm
IGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKLS8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6
IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KLSAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRl
bS53aWR0aCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkp
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywg
bV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3IpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAotewotICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAgZm9yIChhdXRvJiByZWN0IDog
bV9yZWN0cykKLSAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3QpOwotICAgIHJlc3VsdC5pbmZsYXRl
KHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNS
aW5nUmVjdHMmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3RzIiwgaXRlbS5yZWN0cygpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKLSAgICB0cy5kdW1w
UHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsUmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
ZmlsbFJlY3QobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsUmVjdFdpdGhD
b2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRl
eHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKQot
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxs
UmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsKLX0KLQot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxS
ZWN0V2l0aEdyYWRpZW50JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgLy8gRklYTUU6IGxvZyBncmFkaWVudC4KLSAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2Js
ZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29s
b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgaXRlbS5j
b21wb3NpdGVPcGVyYXRvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91
bmRlZFJlY3QmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUobV9yZWN0LCBtX3JvdW5kZWRIb2xlUmVjdCwgbV9jb2xvcik7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9s
ZVJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUGF0aChtX3BhdGgpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFBh
dGgmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCi12b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVs
bGlwc2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUmVjdDo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3Qg
Ym91bmRzID0gbV9yZWN0OwotICAgIGJvdW5kcy5leHBhbmQobV9saW5lV2lkdGgsIG1fbGluZVdp
ZHRoKTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi12b2lkIFN0cm9rZVJlY3Q6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnN0cm9rZVJlY3Qo
bV9yZWN0LCBtX2xpbmVXaWR0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VSZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS13aWR0aCIs
IGl0ZW0ubGluZVdpZHRoKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IFN0cm9rZVBhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIHN0cm9rZSB0aGlj
a25lc3MgaW50byBhY2NvdW50IGNvcnJlY3RseSwgdmlhIENHUGF0aEJ5U3Ryb2tpbmdQYXRoKCku
Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsK
LQotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3BhdGguYm91bmRpbmdSZWN0KCk7Ci0gICAgYm91
bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgcmV0dXJu
IGJvdW5kczsKLX0KLQotdm9pZCBTdHJva2VQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zdHJva2VQYXRoKG1fcGF0aCk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VQ
YXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZUVsbGlwc2U6Omxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBm
bG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwotCi0gICAg
RmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKLSAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNr
bmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICByZXR1cm4gYm91bmRzOwotfQotCi12b2lkIFN0
cm9rZUVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAg
ICBjb250ZXh0LnN0cm9rZUVsbGlwc2UobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVsbGlwc2UmIGl0ZW0pCi17
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci12b2lkIENsZWFyUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuY2xlYXJSZWN0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCi17Ci0g
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9vcGFjaXR5
KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXImIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoIm9wYWNp
dHkiLCBpdGVtLm9wYWNpdHkoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIEVuZFRyYW5z
cGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotfQotCi0jaWYgVVNFKENHKQotdm9p
ZCBBcHBseVN0cm9rZVBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LmFwcGx5U3Ryb2tlUGF0dGVybigpOwotfQotCi12b2lkIEFwcGx5
RmlsbFBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAg
ICBjb250ZXh0LmFwcGx5RmlsbFBhdHRlcm4oKTsKLX0KLSNlbmRpZgotCi12b2lkIEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBBcHBs
eURldmljZVNjYWxlRmFjdG9yJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2NhbGUt
ZmFjdG9yIiwgaXRlbS5zY2FsZUZhY3RvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYg
dHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0
cyA8PCAic2F2ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJy
ZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJh
bnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB0cyA8PCAicm90YXRl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50YXRl
LWN0bSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0cyA8PCAic2V0LXN0
YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogdHMgPDwgInNldC1s
aW5lLWNhcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB0cyA8PCAi
c2V0LWxpbmUtZGFzaCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB0
cyA8PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
IHRzIDw8ICJjbGlwLW91dCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6IHRzIDw8ICJjbGlwLW91dC10by1wYXRoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFBhdGg6IHRzIDw8ICJjbGlwLXBhdGgiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3R2x5cGhzOiB0cyA8PCAiZHJhdy1nbHlwaHMiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2U6IHRzIDw8ICJkcmF3LWltYWdlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1RpbGVkSW1hZ2U6IHRzIDw8ICJkcmF3LXRpbGVkLWltYWdlIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHRzIDw8ICJkcmF3LXRpbGVkLXNj
YWxlZC1pbWFnZSI7IGJyZWFrOwotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTogdHMgPDwgImRyYXctbmF0aXZlLWltYWdlIjsgYnJl
YWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogdHMgPDwgImRyYXct
cGF0dGVybiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB0cyA8PCAiZHJh
dy1yZWN0IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHRzIDw8ICJkcmF3
LWxpbmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB0cyA8
PCAiZHJhdy1saW5lcy1mb3ItdGV4dCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXI6IHRzIDw8ICJkcmF3LWxpbmVzLWZvci1kb2N1bWVudC1tYXJr
ZXIiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTogdHMgPDwgImRyYXct
ZWxsaXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB0cyA8PCAiZHJh
dy1wYXRoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHRz
IDw8ICJkcmF3LWZvY3VzLXJpbmctcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdSZWN0czogdHMgPDwgImRyYXctZm9jdXMtcmluZy1yZWN0cyI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0
aC1jb2xvciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50
OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91
bmRlZC1yZWN0IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogdHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0IjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogdHMgPDwgInN0cm9rZS1wYXRoIjsgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogdHMgPDwgInN0cm9rZS1lbGxp
cHNlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB0cyA8PCAiY2xlYXIt
cmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
IHRzIDw8ICJiZWdpbi10cmFuc3BhcmVuY3ktbGF5ZXIiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogdHMgPDwgImVuZC10cmFuc3BhcmVuY3ktbGF5ZXIi
OyBicmVhazsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0
ZXJuOiB0cyA8PCAiYXBwbHktc3Ryb2tlLXBhdHRlcm4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsgYnJlYWs7
Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB0cyA8
PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93IjsgYnJlYWs7Ci0gICAgfQotICAgIHJl
dHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgSXRlbSYgaXRlbSkKLXsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsK
LSAgICB0cyA8PCBpdGVtLnR5cGUoKTsKLQotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8gd2hp
Y2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCi0gICAg
c3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PFNhdmU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8Um90YXRlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldFN0
YXRlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KGl0ZW0pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlw
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENs
aXBPdXRUb1BhdGg+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZl
SW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERy
YXdSZWN0PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lPihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0VsbGlwc2U+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4o
aXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ogot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+
KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxTdHJva2VSZWN0PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFy
UmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURl
dmljZVNjYWxlRmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxl
RmFjdG9yPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvLyBJdGVtcyB3aXRoIG5vIGFk
ZGl0aW9uYWwgZGF0YS4KLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjoKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOworICAgIEFTU0VSVChpbmRleCA8IGl0ZW1EZXNj
cmlwdG9yKG1fdHlwZSkuYXJndW1lbnRzTmFtZXMuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbURl
c2NyaXB0b3IobV90eXBlKS5hcmd1bWVudHNOYW1lc1tpbmRleF07CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGYwMGVhN2U4NWNiMWNkNTI0NjliZTE1ODhkMDEx
ZTgzODQ3M2MxM2MuLjYyNDRlZDBiYjcyNzBkMzIyZjUwNzFmYjI5ODg3ZGQzZTE4NTgwYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwzMiArMzEsMzIgQEAKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRl
ICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaGVtZS5oIgorI2luY2x1ZGUgIlRoZW1lVHlwZXMu
aCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCIKICNlbmRpZgogCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwotCiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogCiBlbnVtIGNsYXNzIEl0ZW1UeXBlIHsKLSAgICBTYXZl
LAorICAgIE1pbiA9IDAsCisgICAgU2F2ZSA9IE1pbiwKICAgICBSZXN0b3JlLAorICAgIFNldFN0
YXRlLAogICAgIFRyYW5zbGF0ZSwKICAgICBSb3RhdGUsCiAgICAgU2NhbGUsCiAgICAgQ29uY2F0
ZW5hdGVDVE0sCi0gICAgU2V0U3RhdGUsCiAgICAgU2V0TGluZUNhcCwKICAgICBTZXRMaW5lRGFz
aCwKICAgICBTZXRMaW5lSm9pbiwKQEAgLTY2LDEzICs2NiwxNyBAQCBlbnVtIGNsYXNzIEl0ZW1U
eXBlIHsKICAgICBDbGlwT3V0LAogICAgIENsaXBPdXRUb1BhdGgsCiAgICAgQ2xpcFBhdGgsCisg
ICAgQXBwbHlTdHJva2VQYXR0ZXJuLAorICAgIEFwcGx5RmlsbFBhdHRlcm4sCisgICAgQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvciwKKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIsCiAgICAgRHJhd0dseXBocywKICAgICBEcmF3SW1hZ2UsCiAgICAg
RHJhd1RpbGVkSW1hZ2UsCiAgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UsCi0jaWYgVVNFKENHKSB8
fCBVU0UoQ0FJUk8pCiAgICAgRHJhd05hdGl2ZUltYWdlLAotI2VuZGlmCiAgICAgRHJhd1BhdHRl
cm4sCiAgICAgRHJhd1JlY3QsCiAgICAgRHJhd0xpbmUsCkBAIC04Miw2ICs4NiwxMCBAQCBlbnVt
IGNsYXNzIEl0ZW1UeXBlIHsKICAgICBEcmF3UGF0aCwKICAgICBEcmF3Rm9jdXNSaW5nUGF0aCwK
ICAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRHJhd0ljb24sCisgICAgRHJhd1dpZGdldCwK
KyAgICBEcmF3U2Nyb2xsYmFyLAorICAgIERyYXdUaGVtZSwKICAgICBGaWxsUmVjdCwKICAgICBG
aWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKQEAgLTk0LDEyOTUg
KzEwMiw5MzMgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgU3Ryb2tlUGF0aCwKICAgICBT
dHJva2VFbGxpcHNlLAogICAgIENsZWFyUmVjdCwKLSAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVy
LAotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAotI2lmIFVTRShDRykKLSAgICBBcHBseVN0cm9r
ZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KLSAgICBB
cHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0u
Ci0jZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFjdG9yLAorICAgIE1heAogfTsKIAogY2xh
c3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKIHB1YmxpYzoKLSAgICBJdGVtKCkg
PSBkZWxldGU7Ci0KLSAgICBJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgICAgIDogbV90eXBlKHR5
cGUpCi0gICAgewotICAgIH0KLQogICAgIHZpcnR1YWwgfkl0ZW0oKSA9IGRlZmF1bHQ7CiAKLSAg
ICBJdGVtVHlwZSB0eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0g
ICAgfQotCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0g
MDsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Rpc3BsYXlMaXN0SXRlbSA9IHRydWU7
CisgICAgdmlydHVhbCBib29sIGlzR2VvbWV0cnlJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0ID0gMDsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAK
LSAgICAvLyBBIHN0YXRlIGl0ZW0gaXMgb25lIHByZXNlcnZlZCBieSBTYXZlL1Jlc3RvcmUuCi0g
ICAgYm9vbCBpc1N0YXRlSXRlbSgpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIGR1bXAoV1RGOjpU
ZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc1N0YXRlSXRlbVR5
cGUobV90eXBlKTsKKyAgICAgICAgdHMgPDwgbmFtZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyBi
b29sIGlzU3RhdGVJdGVtVHlwZShJdGVtVHlwZSBpdGVtVHlwZSkKKyAgICBJdGVtVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgV1RGOjpDU3RyaW5nIGR1bXAoKSBjb25z
dDsKKworcHJvdGVjdGVkOgorICAgIEl0ZW0oSXRlbVR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5
cGUodHlwZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoaXRlbVR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBJdGVtVHlwZTo6IFRyYW5zbGF0ZToKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFJvdGF0ZToK
LSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNjYWxlOgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjog
Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRTdGF0ZToKLSAgICAg
ICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVDYXA6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBT
ZXRMaW5lRGFzaDoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldExpbmVKb2luOgotICAgICAg
ICBjYXNlIEl0ZW1UeXBlOjogU2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6
IENsZWFyU2hhZG93OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotICAg
IFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0gICAgc3RhdGljIHNp
emVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVtJik7CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsK
KyAgICBTdHJpbmcgYXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29uc3Q7CiAKLXByaXZhdGU6
CiAgICAgSXRlbVR5cGUgbV90eXBlOwogfTsKIAotY2xhc3MgRHJhd2luZ0l0ZW0gOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBHZW9tZXRyeUl0ZW0gOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6Ci0gICAg
RHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICAgICAgOiBJdGVtKHR5cGUpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVu
dCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXh0ZW50LnZhbHVlKCk7IH0KLQogICAgIGJvb2wgZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0KIAotICAgIC8vIFJldHVybiBib3VuZHMg
b2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBE
b2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0
YXRlLgotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4g
YmFzZSBjb29yZGluYXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2Nv
dW50LgotfTsKLQotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNhdmU+IGNyZWF0ZSgpCisgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgRmxvYXRSZWN0
JiBleHRlbnQpIHsgbV9leHRlbnQgPSBleHRlbnQ7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QgZXh0
ZW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwor
ICAgICAgICByZXR1cm4gbV9leHRlbnQudmFsdWVfb3IoRmxvYXRSZWN0KCkpOwogICAgIH0KIAot
ICAgIC8vIEluZGV4IGluIHRoZSBkaXNwbGF5IGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgUmVz
dG9yZSBpdGVtLiAwIGlmIHVubWF0Y2hlZC4KLSAgICBzaXplX3QgcmVzdG9yZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9yZXN0b3JlSW5kZXg7IH0KLSAgICB2b2lkIHNldFJlc3RvcmVJbmRleChz
aXplX3QgaW5kZXgpIHsgbV9yZXN0b3JlSW5kZXggPSBpbmRleDsgfQotCi1wcml2YXRlOgotICAg
IFNhdmUoKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgCi0gICAg
c2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OwotfTsKLQotY2xhc3MgUmVzdG9yZSA6IHB1Ymxp
YyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgpCitwcm90
ZWN0ZWQ6CisgICAgR2VvbWV0cnlJdGVtKEl0ZW1UeXBlIHR5cGUpCisgICAgICAgIDogSXRlbSh0
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzdG9yZSk7CiAgICAg
fQogCi1wcml2YXRlOgotICAgIFJlc3RvcmUoKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlJl
c3RvcmUpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRl
CiAgICAgeworICAgICAgICBJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAgdHMuc3RhcnRHcm91cCgp
OworICAgICAgICB0cyA8PCAiZXh0ZW50ICI7CisgICAgICAgIGlmIChleHRlbnRLbm93bigpKQor
ICAgICAgICAgICAgdHMgPDwgZXh0ZW50KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRz
IDw8ICJ1bmtub3duIjsKKyAgICAgICAgdHMuZW5kR3JvdXAoKTsKICAgICB9CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBtX2V4dGVudDsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZSA6IHB1YmxpYyBJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4gY3JlYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQXBwbGllciwgQXBwbGllciBhcHBsaWVyLCBj
bGFzcy4uLiBBcmd1bWVudHM+CitjbGFzcyBHcmFwaGljc0l0ZW0geworcHJvdGVjdGVkOgorICAg
IEdyYXBoaWNzSXRlbShBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1fYXJndW1l
bnRzKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwogICAgIH0KIAotICAgIGZs
b2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1
cm4gbV95OyB9Ci0KLXByaXZhdGU6Ci0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0g
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQotICAgICAgICAsIG1feCh4KQotICAg
ICAgICAsIG1feSh5KQorICAgIHRlbXBsYXRlPCBzdGQ6OnNpemVfdCBJPgorICAgIGNvbnN0IGF1
dG8mIGFyZ3VtZW50KCkgY29uc3QKICAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxJPiht
X2FyZ3VtZW50cyk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1feDsKLSAgICBmbG9hdCBtX3k7Ci19OwotCi1j
bGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSb3Rh
dGU+IGNyZWF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOworICAgICAgICBhcHBseShjb250ZXh0LCBzdGQ6
OmluZGV4X3NlcXVlbmNlX2ZvcjxBcmd1bWVudHMuLi4+KCkpOwogICAgIH0KIAotICAgIGZsb2F0
IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi1wcml2YXRlOgotICAgIFJvdGF0
ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCi0gICAgICAg
ICwgbV9hbmdsZShhbmdsZSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGl0ZXJhcnRlKEZ1bmN0b3ImJiBmdW5jdG9yKSBjb25zdAogICAgIHsKKyAgICAgICAgaXRl
cmFydGUoV1RGTW92ZShmdW5jdG9yKSwgc3RkOjppbmRleF9zZXF1ZW5jZV9mb3I8QXJndW1lbnRz
Li4uPigpKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFkaWFucy4KLX07Ci0KLWNs
YXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHN0
ZDo6c2l6ZV90Li4uIEluZGljZXM+CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SW5kaWNlcy4uLj4pIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTY2FsZShzaXplKSk7CisgICAgICAgIChjb250ZXh0
LiphcHBsaWVyKShzdGQ6OmdldDxJbmRpY2VzPihtX2FyZ3VtZW50cykuLi4pOwogICAgIH0KIAot
ICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0K
LXByaXZhdGU6Ci0gICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgICAgICA6IEl0
ZW0oSXRlbVR5cGU6OlNjYWxlKQotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3IsIHN0ZDo6c2l6ZV90Li4uIEluZGljZXM+CisgICAgdm9pZCBpdGVy
YXJ0ZShGdW5jdG9yJiYgZnVuY3Rvciwgc3RkOjppbmRleF9zZXF1ZW5jZTxJbmRpY2VzLi4uPikg
Y29uc3QKICAgICB7CisgICAgICAgIHVzaW5nIHN3YWxsb3cgPSBpbnRbXTsKKyAgICAgICAgKHZv
aWQpc3dhbGxvdyB7IDEsIChmdW5jdG9yKEluZGljZXMsIHN0ZDo6Z2V0PEluZGljZXM+KG1fYXJn
dW1lbnRzKSksIGludCB7IH0pLi4uIH07CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0U2l6ZSBtX3NpemU7CisgICAg
c3RkOjp0dXBsZTxBcmd1bWVudHMuLi4+IG1fYXJndW1lbnRzOwogfTsKIAotY2xhc3MgQ29uY2F0
ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7Cit0ZW1wbGF0ZSA8SXRlbVR5cGUgaXRlbVR5cGUsIHR5
cGVuYW1lIEFwcGxpZXIsIEFwcGxpZXIgYXBwbGllciwgY2xhc3MuLi4gQXJndW1lbnRzPgorY2xh
c3MgU2V0dGluZ0l0ZW0gOiBwdWJsaWMgSXRlbSwgcHVibGljIEdyYXBoaWNzSXRlbTxBcHBsaWVy
LCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb25j
YXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHN0
YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTShtYXRyaXgpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ0l0ZW0oYXJndW1lbnRzLi4uKSk7CiAgICAg
fQogCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3RyYW5zZm9ybTsgfQotCi1wcml2YXRlOgotICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNs
YXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RhdGljIFJlZjxJdGVtPiBjcmVhdGUoQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBm
bGFncykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxTZWxmLCBUPjo6
dmFsdWUsICJUaGlzIGZ1bmN0aW9uIHNob3VsZCBjcmVhdGUgY2xhc3NlcyBmcm9tIFNldHRpbmdJ
dGVtLiIpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9Ci0gICAgCi0gICAgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogCi0g
ICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIHVzaW5nIEdyYXBoaWNzSXRlbUJh
c2UgPSBHcmFwaGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAg
IHZvaWQgYWNjdW11bGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OwotCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAg
IHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7Ci1wcml2YXRlOgotICAgIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAgICAgICwgbV9zdGF0ZShzdGF0ZSwg
ZmxhZ3MpCisgICAgU2V0dGluZ0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBJdGVtKGl0ZW1UeXBlKQorICAgICAgICAsIEdyYXBoaWNzSXRlbUJhc2Uoc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlIG1fc3RhdGU7Ci19OwotCi1jbGFzcyBTZXRMaW5lQ2FwIDogcHVibGljIEl0
ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUNhcD4gY3JlYXRlKExpbmVDYXAg
bGluZUNhcCkKKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGluZUNh
cCkpOworICAgICAgICBJdGVtOjpkdW1wKHRzKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6
aXRlcmFydGUoW3RoaXMsICZ0c10oc2l6ZV90IGluZGV4LCBjb25zdCBhdXRvJiBhcmd1bWVudFZh
bHVlKSB7CisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkodGhpcy0+YXJndW1lbnROYW1lKGlu
ZGV4KSwgYXJndW1lbnRWYWx1ZSk7CisgICAgICAgIH0pOwogICAgIH0KLSAgICAKLSAgICBMaW5l
Q2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KIAogcHJpdmF0ZToKLSAg
ICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwKQotICAgICAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQorICAgIHVzaW5nIFNlbGYg
PSBTZXR0aW5nSXRlbTxpdGVtVHlwZSwgQXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsK
KworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVycmlk
ZQogICAgIHsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6YXBwbHkoY29udGV4dCk7CiAgICAg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIExpbmVDYXAgbV9saW5lQ2FwOworICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHNpemVvZigqdGhpcyk7IH0KIH07CiAKLWNsYXNzIFNldExpbmVEYXNo
IDogcHVibGljIEl0ZW0gewordGVtcGxhdGUgPEl0ZW1UeXBlIGl0ZW1UeXBlLCB0eXBlbmFtZSBB
cHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIsIGNsYXNzLi4uIEFyZ3VtZW50cz4KK2NsYXNzIERyYXdp
bmdJdGVtIDogcHVibGljIEdlb21ldHJ5SXRlbSwgcHVibGljIEdyYXBoaWNzSXRlbTxBcHBsaWVy
LCBhcHBsaWVyLCBBcmd1bWVudHMuLi4+ICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRM
aW5lRGFzaD4gY3JlYXRlKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zm
c2V0KQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNoQXJy
YXksIGRhc2hPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd2luZ0l0
ZW0oc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwogICAgIH0KIAotICAg
IGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7
IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9
Ci0KLXByaXZhdGU6Ci0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gp
Ci0gICAgICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAgICAsIG1fZGFzaE9mZnNl
dChkYXNoT2Zmc2V0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZjxJ
dGVtPiBjcmVhdGUoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKICAgICB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19iYXNlX29mPFNlbGYsIFQ+Ojp2YWx1ZSwgIlRoaXMgZnVuY3Rpb24g
c2hvdWxkIGNyZWF0ZSBjbGFzc2VzIGZyb20gRHJhd2luZ0l0ZW0uIik7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikp
OwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdXNpbmcgR3JhcGhpY3NJdGVtQmFzZSA9IEdyYXBoaWNzSXRlbTxBcHBsaWVyLCBh
cHBsaWVyLCBBcmd1bWVudHMuLi4+OwogCi0gICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OwotICAg
IGZsb2F0IG1fZGFzaE9mZnNldDsKLX07CisgICAgLy8gU2hvdWxkIG1hdGNoIFJlbmRlclRoZW1l
OjpwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkKKyAgICBjb25zdGV4cHIgc3RhdGljIGZsb2F0IGNv
bnN0IHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7CiAKLWNsYXNzIFNldExpbmVKb2luIDog
cHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNyZWF0
ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBEcmF3aW5nSXRlbShBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IEdlb21ldHJ5SXRlbShpdGVtVHlwZSkKKyAgICAgICAgLCBHcmFwaGlj
c0l0ZW1CYXNlKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5lSm9pbikpOwogICAg
IH0KLSAgICAKLSAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpv
aW47IH0KIAogcHJpdmF0ZToKLSAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAg
ICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKLSAgICAgICAgLCBtX2xpbmVKb2lu
KGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIFNlbGYgPSBEcmF3aW5nSXRlbTxpdGVtVHlw
ZSwgQXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAgIExpbmVKb2luIG1fbGlu
ZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGljIEl0ZW0gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4gY3JlYXRlKGZsb2F0IGxpbWl0KQorICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TWl0ZXJMaW1pdChsaW1pdCkpOwor
ICAgICAgICBHcmFwaGljc0l0ZW1CYXNlOjphcHBseShjb250ZXh0KTsKICAgICB9CiAKLSAgICBm
bG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CisgICAgYm9v
bCBpc0dlb21ldHJ5SXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBz
aXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzaXplb2YoKnRoaXMp
OyB9CiAKLXByaXZhdGU6Ci0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCi0gICAgICAgICwgbV9taXRlckxp
bWl0KG1pdGVyTGltaXQpCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0
IG92ZXJyaWRlCiAgICAgeworICAgICAgICBHZW9tZXRyeUl0ZW06OmR1bXAodHMpOworICAgICAg
ICBHcmFwaGljc0l0ZW1CYXNlOjppdGVyYXJ0ZShbdGhpcywgJnRzXShzaXplX3QgaW5kZXgsIGNv
bnN0IGF1dG8mIGFyZ3VtZW50VmFsdWUpIHsKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSh0
aGlzLT5hcmd1bWVudE5hbWUoaW5kZXgpLCBhcmd1bWVudFZhbHVlKTsKKyAgICAgICAgfSk7CiAg
ICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKIH07CiAKLWNsYXNzIENsZWFyU2hhZG93IDogcHVi
bGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclNoYWRvdyk7Ci0gICAg
fQordXNpbmcgU2F2ZUJhc2UgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U2F2ZSwKKyAg
ICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2F2
ZQorPjsKIAotcHJpdmF0ZToKLSAgICBDbGVhclNoYWRvdygpCi0gICAgICAgIDogSXRlbShJdGVt
VHlwZTo6Q2xlYXJTaGFkb3cpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi0vLyBGSVhNRTogdHJlYXQgYXMgRHJh
d2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworY2xhc3MgU2F2ZSA6IHB1Ymxp
YyBTYXZlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xp
cChyZWN0KSk7Ci0gICAgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTYXZl
QmFzZTo6Y3JlYXRlPFNhdmU+OwogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KKyAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBjb3Jy
ZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCisgICAgc2l6ZV90IHJlc3Rv
cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9CisgICAgdm9pZCBzZXRS
ZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5kZXg7IH0KIAog
cHJpdmF0ZToKLSAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDbGlwKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVz
aW5nIFNhdmVCYXNlOjpTYXZlQmFzZTsKIAotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwotCi1j
bGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xp
cE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB2b2lkIGR1bXAoV1RGOjpU
ZXh0U3RyZWFtJiB0cykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENsaXBPdXQocmVjdCkpOworICAgICAgICBTYXZlQmFzZTo6ZHVtcCh0cyk7Cisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIG1fcmVzdG9yZUluZGV4KTsK
ICAgICB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQot
Ci1wcml2YXRlOgotICAgIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewot
ICAgIH0KKyAgICBzaXplX3QgbV9yZXN0b3JlSW5kZXggeyAwIH07Cit9OwogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKK3VzaW5nIFJlc3RvcmUgPSBT
ZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6UmVzdG9yZSwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZQorPjsKIAotICAgIEZs
b2F0UmVjdCBtX3JlY3Q7Ci19OwordXNpbmcgU2V0U3RhdGVCYXNlID0gU2V0dGluZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OlNldFN0YXRlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0YXRlQ2hhbmdlLAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlCis+OwogCi1j
bGFzcyBDbGlwT3V0VG9QYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0U3RhdGUgOiBwdWJs
aWMgU2V0U3RhdGVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBPdXRUb1BhdGg+
IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBTZXRTdGF0ZUJhc2U6OmNyZWF0ZTxTZXRTdGF0ZT47CisgICAgdXNpbmcgU2V0U3Rh
dGVCYXNlOjpTZXRTdGF0ZUJhc2U7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQorfTsKIAotcHJpdmF0
ZToKLSAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICB7Ci0g
ICAgfQordXNpbmcgVHJhbnNsYXRlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlRyYW5z
bGF0ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0LCBmbG9hdCksCisgICAg
JkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlLAorICAgIGZsb2F0LCBmbG9hdAorPjsKKwordXNp
bmcgUm90YXRlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlJvdGF0ZSwKKyAgICB2b2lk
IChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpyb3Rh
dGUsCisgICAgZmxvYXQKKz47CisKK3VzaW5nIFNjYWxlID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OlNjYWxlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRT
aXplJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2NhbGUsCisgICAgRmxvYXRTaXplCis+Owor
Cit1c2luZyBDb25jYXRlbmF0ZUNUTSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSwKKyAgICBBZmZpbmVU
cmFuc2Zvcm0KKz47CisKK3VzaW5nIFNldExpbmVDYXAgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6U2V0TGluZUNhcCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKExpbmVDYXAp
LAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAsCisgICAgTGluZUNhcAorPjsKKwor
dXNpbmcgU2V0TGluZURhc2ggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U2V0TGluZURh
c2gsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gsCisgICAgRGFzaEFycmF5LCBm
bG9hdAorPjsKKwordXNpbmcgU2V0TGluZUpvaW4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlw
ZTo6U2V0TGluZUpvaW4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShMaW5lSm9pbiks
CisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4sCisgICAgTGluZUpvaW4KKz47CisK
K3VzaW5nIFNldE1pdGVyTGltaXQgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGZsb2F0KSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0LAorICAgIGZsb2F0Cis+OworCit1c2luZyBDbGVh
clNoYWRvdyA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGVhclNoYWRvdywKKyAgICB2
b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJT
aGFkb3cKKz47CisKK3VzaW5nIENsaXAgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xp
cCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAg
ICZHcmFwaGljc0NvbnRleHQ6OmNsaXAsCisgICAgRmxvYXRSZWN0Cis+OworCit1c2luZyBDbGlw
T3V0ID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBPdXQsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0LAorICAgIEZsb2F0UmVjdAorPjsKKwordXNpbmcgQ2xpcE91dFRvUGF0aCA9IFNl
dHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoLAorICAgIHZvaWQgKEdyYXBo
aWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQsCisgICAgY29uc3QgUGF0aAorPjsKKwordXNpbmcgQ2xpcFBhdGggPSBTZXR0aW5nSXRlbTwK
KyAgICBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgsCisgICAgY29uc3QgUGF0aCwgV2luZFJ1bGUKKz47CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworI2lmIFVTRShDRykKK3VzaW5nIEFwcGx5U3Ry
b2tlUGF0dGVybiA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRl
cm4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5U3Ryb2tlUGF0dGVybgorPjsKKwordXNpbmcgQXBwbHlGaWxsUGF0dGVybiA9IFNl
dHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuLAorICAgIHZvaWQgKEdy
YXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuCis+OworI2VuZGlmCiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKLX07Cit1c2luZyBBcHBs
eURldmljZVNjYWxlRmFjdG9yID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisg
ICAgJkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKKyAgICBmbG9hdAor
PjsKIAotY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMgSXRlbSB7CisvLyBJcyBEcmF3aW5nSXRlbSBi
ZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0
aGUgY2xpcCBib3VuZHMuCit1c2luZyBCZWdpblRyYW5zcGFyZW5jeUxheWVyID0gRHJhd2luZ0l0
ZW08CisgICAgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllciwKKyAgICBmbG9hdAorPjsKKwordXNpbmcgRW5kVHJhbnNwYXJlbmN5TGF5
ZXIgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIsCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyCis+OworCit1c2luZyBEcmF3R2x5cGhzQmFzZSA9IERyYXdpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3R2x5cGhzLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVk
LCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpLAorICAgICZHcmFwaGljc0Nv
bnRleHQ6OmRyYXdHbHlwaHMsCisgICAgUmVmPGNvbnN0IEZvbnQ+LCBHbHlwaEJ1ZmZlciwgdW5z
aWduZWQsIHVuc2lnbmVkLCBGbG9hdFBvaW50LCBGb250U21vb3RoaW5nTW9kZQorPjsKKworY2xh
c3MgRHJhd0dseXBocyA6IHB1YmxpYyBEcmF3R2x5cGhzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxDbGlwUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKFJlZjxjb25zdCBGb250PiYmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9v
dGhpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0aChwYXRo
LCB3aW5kUnVsZSkpOworICAgICAgICBhdXRvIHN1YkdseXBoQnVmZmVyID0gRHJhd0dseXBoczo6
c3ViR2x5cGhCdWZmZXIoZm9udC5wdHIoKSwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMpOworICAg
ICAgICByZXR1cm4gRHJhd0dseXBoc0Jhc2U6OmNyZWF0ZShXVEZNb3ZlKGZvbnQpLCBXVEZNb3Zl
KHN1YkdseXBoQnVmZmVyKSwgMCwgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZyk7CiAg
ICAgfQogCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQot
ICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kUnVsZTsgfQotCiBw
cml2YXRlOgotICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQotICAgICAgICAsIG1fcGF0aChw
YXRoKQotICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBjb25z
dCBQYXRoIG1fcGF0aDsKLSAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwotfTsKKyAgICB1c2luZyBE
cmF3R2x5cGhzQmFzZTo6RHJhd0dseXBoc0Jhc2U7CiAKLWNsYXNzIERyYXdHbHlwaHMgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3Jl
YXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCisgICAgc3RhdGljIEdseXBoQnVmZmVyIHN1
YkdseXBoQnVmZmVyKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocykKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQs
IGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKSk7CisgICAgICAgIEds
eXBoQnVmZmVyIHN1YkJ1ZmZlcjsKKyAgICAgICAgY29uc3QgYXV0byogZ2x5cGhzID0gYnVmZmVy
LmdseXBocyhmcm9tKTsKKyAgICAgICAgY29uc3QgYXV0byogYWR2YW5jZXMgPSBidWZmZXIuYWR2
YW5jZXMoZnJvbSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyAr
K2kpCisgICAgICAgICAgICBzdWJCdWZmZXIuYWRkKGdseXBoc1tpXSwgZm9udCwgYWR2YW5jZXNb
aV0pOworICAgICAgICByZXR1cm4gc3ViQnVmZmVyOwogICAgIH0KIAotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb247IH0K
LSAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
bikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9Ci0KLSAgICBjb25zdCBGbG9h
dFNpemUmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQotCi0g
ICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlv
biArIG1fbG9jYWxBbmNob3I7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBo
LCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczsgfQotCi1wcml2YXRlOgot
ICAgIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYg
YmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgRm9udFNtb290aGlu
Z01vZGUpOwotCi0gICAgdm9pZCBjb21wdXRlQm91bmRzKCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OworICAgIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byYgZm9udCA9
IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGZsb2F0IGFzY2VudCA9IGZvbnQtPmZvbnRNZXRyaWNz
KCkuZmxvYXRBc2NlbnQoKTsKKyAgICAgICAgZmxvYXQgZGVzY2VudCA9IGZvbnQtPmZvbnRNZXRy
aWNzKCkuZmxvYXREZXNjZW50KCk7CiAKLSAgICBSZWY8Rm9udD4gbV9mb250OwotICAgIFZlY3Rv
cjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwotICAgIFZlY3RvcjxHbHlwaEJ1ZmZl
ckFkdmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKLSAgICBGbG9hdFJlY3QgbV9ib3VuZHM7Ci0gICAg
RmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247Ci0gICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7
Ci0gICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlOwotfTsKKyAgICAgICAgY29u
c3QgYXV0byYgZ2x5cGhCdWZmZXIgPSBhcmd1bWVudDwxPigpOworICAgICAgICBzaXplX3QgbnVt
R2x5cGhzID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOworICAgICAgICBhdXRvIGN1cnJlbnQgPSBhcmd1
bWVudDw0PigpOwogCi1jbGFzcyBEcmF3SW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAg
ICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChp
KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54
KCksIGN1cnJlbnQueSgpIC0gYXNjZW50LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2Nl
bnQpOworICAgICAgICAgICAgYm91bmRzLnVuaXRlKGdseXBoUmVjdCk7CisgICAgICAgICAgICBj
dXJyZW50Lm1vdmUoYWR2YW5jZS53aWR0aCgpLCBhZHZhbmNlLmhlaWdodCgpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KK307CiAKLSAgICBjb25zdCBJbWFnZSYg
aW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgRmxvYXRSZWN0IHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQordXNpbmcgRHJhd0ltYWdlQmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3SW1hZ2UsCisgICAgSW1hZ2VEcmF3
UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0LCBGbG9hdFJl
Y3QsIEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitjbGFzcyBEcmF3SW1hZ2UgOiBwdWJsaWMg
RHJhd0ltYWdlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0
ZSA9IERyYXdJbWFnZUJhc2U6OmNyZWF0ZTxEcmF3SW1hZ2U+OworICAgIHVzaW5nIERyYXdJbWFn
ZUJhc2U6OkRyYXdJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uOyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklY
TUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNz
LiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAgRmxvYXRSZWN0IG1fZGVz
dGluYXRpb247Ci0gICAgRmxvYXRSZWN0IG1fc291cmNlOwotICAgIEltYWdlUGFpbnRpbmdPcHRp
b25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLWNsYXNzIERyYXdUaWxlZEltYWdlIDog
cHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdUaWxlZElt
YWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1Rp
bGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBpbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBGbG9hdFBvaW50IHNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgRmxvYXRTaXplIHRpbGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQotICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9Cit1c2luZyBEcmF3VGlsZWRJbWFnZUJhc2UgPSBE
cmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2UsCisgICAgSW1hZ2VEcmF3
UmVzdWx0IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVk
SW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0LCBGbG9hdFBvaW50LCBGbG9hdFNpemUs
IEZsb2F0U2l6ZSwgSW1hZ2VQYWludGluZ09wdGlvbnMKKz47CiAKK2NsYXNzIERyYXdUaWxlZElt
YWdlIDogcHVibGljIERyYXdUaWxlZEltYWdlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHBy
IHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdUaWxlZEltYWdlQmFzZTo6Y3JlYXRlPERyYXdUaWxl
ZEltYWdlPjsKKyAgICB1c2luZyBEcmF3VGlsZWRJbWFnZUJhc2U6OkRyYXdUaWxlZEltYWdlQmFz
ZTsKIHByaXZhdGU6Ci0gICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQot
Ci0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdl
cyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3Qg
aGF2ZSB0byBiZSBtdXRhYmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZs
b2F0UG9pbnQgbV9zb3VyY2U7Ci0gICAgRmxvYXRTaXplIG1fdGlsZVNpemU7Ci0gICAgRmxvYXRT
aXplIG1fc3BhY2luZzsKLSAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdP
cHRpb25zOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwx
PigpOyB9CiB9OwogCi1jbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gY3Jl
YXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6
VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykp
OwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2UuZ2V0KCk7IH0KLSAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2U7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9Cit1c2luZyBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwK
KyAgICBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UsCisgICAgSW1hZ2VEcmF3UmVzdWx0
IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RpbGVkSW1hZ2UsCisgICAgUmVmPEltYWdlPiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEZs
b2F0U2l6ZSwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlUGFpbnRpbmdP
cHRpb25zCis+OwogCitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6IHB1YmxpYyBEcmF3VGls
ZWRTY2FsZWRJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBEcmF3VGlsZWRTY2FsZWRJbWFnZUJhc2U6OmNyZWF0ZTxEcmF3VGlsZWRTY2FsZWRJ
bWFnZT47CisgICAgdXNpbmcgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlOjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIElt
YWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJsZSBS
ZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhl
aXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRh
YmxlLgotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3NvdXJj
ZTsKLSAgICBGbG9hdFNpemUgbV90aWxlU2NhbGVGYWN0b3I7Ci0gICAgSW1hZ2U6OlRpbGVSdWxl
IG1faFJ1bGU7Ci0gICAgSW1hZ2U6OlRpbGVSdWxlIG1fdlJ1bGU7Ci0gICAgSW1hZ2VQYWludGlu
Z09wdGlvbnMgbV9pbWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotI2lmIFVTRShDRykgfHwgVVNF
KENBSVJPKQotY2xhc3MgRHJhd05hdGl2ZUltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdOYXRpdmVJbWFnZT4gY3JlYXRlKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TmF0aXZlSW1hZ2UoaW1h
Z2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0
aW9uKSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3JjUmVjdDsgfQotICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzdGluYXRpb247IH0KKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJP
KQordXNpbmcgRHJhd05hdGl2ZUltYWdlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBl
OjpEcmF3TmF0aXZlSW1hZ2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBO
YXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRp
b24pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSwKKyAgICBOYXRpdmVJ
bWFnZVB0ciwgRmxvYXRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbgorPjsKIAorY2xhc3MgRHJhd05hdGl2ZUlt
YWdlIDogcHVibGljIERyYXdOYXRpdmVJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TmF0aXZlSW1hZ2VCYXNlOjpjcmVhdGU8RHJhd05h
dGl2ZUltYWdlPjsKKyAgICB1c2luZyBEcmF3TmF0aXZlSW1hZ2VCYXNlOjpEcmF3TmF0aXZlSW1h
Z2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb24pOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9Ci0KLSNpZiBVU0UoQ0cpCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1faW1h
Z2U7Ci0jZW5kaWYKLSAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7Ci0gICAgRmxvYXRSZWN0IG1f
ZGVzdGluYXRpb247Ci0gICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKLSNpZiBVU0UoQ0cpCi0gICAg
Q29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Ci0jZW5k
aWYKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CisgICAgY29uc3Qgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDI+KCk7IH0KIH07CiAjZW5kaWYKIAotY2xh
c3MgRHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0dGVybihpbWFnZSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3As
IGJsZW5kTW9kZSkpOwotICAgIH0KLQotICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07IH0KLSAgICBG
bG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3RpbGVSZWN0OyB9Ci0gICAgRmxv
YXRSZWN0IGRlc3RSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotICAgIEZs
b2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9Ci0gICAgRmxvYXRTaXpl
IHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KK3VzaW5nIERyYXdQYXR0ZXJu
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3UGF0dGVybiwKKyAgICB2b2lk
IChHcmFwaGljc0NvbnRleHQ6OiopKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpLAorICAgICZHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQYXR0ZXJuLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVjdCwgRmxvYXRS
ZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIEZsb2F0U2l6ZSwgQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZQorPjsKIAotcHJpdmF0ZToKLSAgICBEcmF3UGF0dGVybihJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5v
cm1hbCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQot
ICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMg
Y2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhh
dmUgdG8gYmUgbXV0YWJsZS4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9wYXR0ZXJuVHJhbnNmb3Jt
OwotICAgIEZsb2F0UmVjdCBtX3RpbGVSZWN0OwotICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9u
OwotICAgIEZsb2F0UG9pbnQgbV9waGFzZTsKLSAgICBGbG9hdFNpemUgbV9zcGFjaW5nOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwotfTsK
LQotLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5
IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgotY2xhc3MgQmVnaW5UcmFuc3Bh
cmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0dGVybiA6IHB1
YmxpYyBEcmF3UGF0dGVybkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QmVnaW5UcmFu
c3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpKTsKLSAgICB9
Ci0KLSAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0KKyAg
ICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1BhdHRlcm5CYXNlOjpjcmVhdGU8
RHJhd1BhdHRlcm4+OworICAgIHVzaW5nIERyYXdQYXR0ZXJuQmFzZTo6RHJhd1BhdHRlcm5CYXNl
OwogcHJpdmF0ZToKLSAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0g
ICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi0g
ICAgICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX29wYWNp
dHk7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7
IH0KIH07CiAKLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVt
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5kVHJhbnNwYXJlbmN5TGF5
ZXIpOwotICAgIH0KK3VzaW5nIERyYXdSZWN0QmFzZSA9IERyYXdpbmdJdGVtPEl0ZW1UeXBlOjpE
cmF3UmVjdCwgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCksICZHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0LCBGbG9hdFJlY3QsIGZsb2F0PjsKIAorY2xh
c3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd1JlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1JlY3RCYXNlOjpjcmVhdGU8RHJhd1JlY3Q+Owor
ICAgIHVzaW5nIERyYXdSZWN0QmFzZTo6RHJhd1JlY3RCYXNlOwogcHJpdmF0ZToKLSAgICBFbmRU
cmFuc3BhcmVuY3lMYXllcigpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkVuZFRy
YW5zcGFyZW5jeUxheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7
Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
LSAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNr
bmVzczsgfQordXNpbmcgRHJhd0xpbmVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6
OkRyYXdMaW5lLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSwK
KyAgICBGbG9hdFBvaW50LCBGbG9hdFBvaW50Cis+OwogCitjbGFzcyBEcmF3TGluZSA6IHB1Ymxp
YyBEcmF3TGluZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVh
dGUgPSBEcmF3TGluZUJhc2U6OmNyZWF0ZTxEcmF3TGluZT47CisgICAgdXNpbmcgRHJhd0xpbmVC
YXNlOjpEcmF3TGluZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2Jv
cmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3QgYm91bmRzOworICAgICAgICBib3VuZHMuZml0
VG9Qb2ludHMoYXJndW1lbnQ8MD4oKSwgYXJndW1lbnQ8MT4oKSk7CisgICAgICAgIHJldHVybiBi
b3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAg
ICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIGZsb2F0IG1fYm9yZGVyVGhpY2tuZXNzOwogfTsKIAot
Y2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBwb2ludDEo
KSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQotICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29u
c3QgeyByZXR1cm4gbV9wb2ludDI7IH0KK3VzaW5nIERyYXdMaW5lc0ZvclRleHRCYXNlID0gRHJh
d2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9v
bCwgYm9vbCwgU3Ryb2tlU3R5bGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQsCisgICAgRmxvYXRQb2ludCwgRGFzaEFycmF5LCBib29sLCBib29sLCBTdHJva2VTdHls
ZQorPjsKIAorY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3TGluZXNGb3JUZXh0
QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdM
aW5lc0ZvclRleHRCYXNlOjpjcmVhdGU8RHJhd0xpbmVzRm9yVGV4dD47CisgICAgdXNpbmcgRHJh
d0xpbmVzRm9yVGV4dEJhc2U6OkRyYXdMaW5lc0ZvclRleHRCYXNlOwogcHJpdmF0ZToKLSAgICBE
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmUpCi0gICAgICAgICwg
bV9wb2ludDEocG9pbnQxKQotICAgICAgICAsIG1fcG9pbnQyKHBvaW50MikKKyAgICBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlv
biBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
KSByZXR1cm5zLgorICAgICAgICBpZiAoIWFyZ3VtZW50PDE+KCkuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzKGFyZ3VtZW50
PDA+KCksIEZsb2F0U2l6ZShhcmd1bWVudDwxPigpLmxhc3QoKSwgY29udGV4dC5zdHJva2VUaGlj
a25lc3MoKSkpOworICAgICAgICBib3VuZHMuaW5mbGF0ZSgxKTsgLy8gQWNjb3VudCBmb3IgcGl4
ZWwgc25hcHBpbmcuIEZJWE1FOiBUaGlzIGlzbid0IHBlcmZlY3QsIGFzIGl0IGRvZXNuJ3QgdGFr
ZSB0aGUgQ1RNIGludG8gYWNjb3VudC4KKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7Ci0gICAgRmxvYXRQ
b2ludCBtX3BvaW50MjsKIH07CiAKLWNsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4dD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9j
YWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VXaWR0aCkpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7
IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KLSAgICBjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9Ci0gICAg
Y29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNo
b3I7IH0KLSAgICBGbG9hdFBvaW50IHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0
aW9uICsgbV9sb2NhbEFuY2hvcjsgfQotICAgIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aHM7IH0KLSAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3ByaW50aW5nOyB9Ci0gICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJu
IG1fZG91YmxlTGluZXM7IH0KK3VzaW5nIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlID0g
RHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIsCisg
ICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyLAorICAgIEZsb2F0UG9pbnQsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZQorPjsKIAorY2xhc3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBE
cmF3TGluZUZvckRvY3VtZW50TWFya2VyQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0
YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOjpjcmVhdGU8
RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcj47CisgICAgdXNpbmcgRHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlckJhc2U6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOwogcHJpdmF0ZToKLSAg
ICBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VXaWR0aCkKLSAgICAgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKLSAgICAgICAgLCBtX2Jsb2Nr
TG9jYXRpb24oYmxvY2tMb2NhdGlvbikKLSAgICAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5j
aG9yKQotICAgICAgICAsIG1fd2lkdGhzKHdpZHRocykKLSAgICAgICAgLCBtX3N0cm9rZVdpZHRo
KHN0cm9rZVdpZHRoKQotICAgICAgICAsIG1fcHJpbnRpbmcocHJpbnRpbmcpCi0gICAgICAgICwg
bV9kb3VibGVMaW5lcyhkb3VibGVMaW5lcykKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUg
ZXF1YWwgdG8gb3IgZW5jbG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyKCkgcmV0dXJucy4KKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyhhcmd1bWVu
dDwwPigpLCBGbG9hdFNpemUoYXJndW1lbnQ8MT4oKSwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVz
cykpOworICAgICAgICBib3VuZHMuaW5mbGF0ZShjTWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKTsg
Ly8gQWNjb3VudCBmb3IgIm1pc3NwZWxsaW5nIGRvdCIgc25hcHBpbmcuCisgICAgICAgIHJldHVy
biBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZsb2F0UG9pbnQg
bV9ibG9ja0xvY2F0aW9uOwotICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwotICAgIERhc2hB
cnJheSBtX3dpZHRoczsKLSAgICBmbG9hdCBtX3N0cm9rZVdpZHRoOwotICAgIGJvb2wgbV9wcmlu
dGluZzsKLSAgICBib29sIG1fZG91YmxlTGluZXM7CiB9OwogCi1jbGFzcyBEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihw
b2ludCwgd2lkdGgsIHN0eWxlKSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBwb2ludCgpIGNv
bnN0IHsgcmV0dXJuIG1fcG9pbnQ7IH0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2lkdGg7IH0KK3VzaW5nIERyYXdFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0
IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlLAorICAgIEZs
b2F0UmVjdAorPjsKIAorY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd0VsbGlwc2VCYXNl
IHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0VsbGlw
c2VCYXNlOjpjcmVhdGU8RHJhd0VsbGlwc2U+OworICAgIHVzaW5nIERyYXdFbGxpcHNlQmFzZTo6
RHJhd0VsbGlwc2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUgc3R5bGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIpCi0gICAgICAgICwgbV9wb2ludChwb2ludCkKLSAgICAgICAgLCBtX3dp
ZHRoKHdpZHRoKQotICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9pbnQ7Ci0gICAgZmxvYXQgbV93
aWR0aDsKLSAgICBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBE
cmF3RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CisjaWYgVVNFKENHKQordXNpbmcgRHJh
d1BhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdQYXRoLAorICAgIHZv
aWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0aCYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47CisKK2NsYXNzIERyYXdQYXRoIDogcHVi
bGljIERyYXdQYXRoQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3RWxsaXBzZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IERyYXdQYXRoQmFzZTo6Y3JlYXRlPERyYXdQYXRoPjsKKyAgICB1c2luZyBEcmF3
UGF0aEJhc2U6OkRyYXdQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3RWxs
aXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLmZhc3RCb3VuZGlu
Z1JlY3QoKTsgfQogfTsKKyNlbmRpZgogCi1jbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRlKGNvbnN0IFBh
dGgmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0aChw
YXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aDsgfQordXNpbmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAg
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nLAorICAgIGNvbnN0IFBhdGgsIGZsb2F0LCBmbG9hdCwg
Q29sb3IKKz47CiAKK2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdGb2N1c1Jp
bmdQYXRoQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9
IERyYXdGb2N1c1JpbmdQYXRoQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1JpbmdQYXRoPjsKKyAgICB1
c2luZyBEcmF3Rm9jdXNSaW5nUGF0aEJhc2U6OkRyYXdGb2N1c1JpbmdQYXRoQmFzZTsKIHByaXZh
dGU6Ci0gICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBhdGgpCisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gYXJn
dW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJvdW5kcy5pbmZsYXRlKHNf
cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgICAgIHJldHVybiBib3VuZHM7CiAgICAgfQot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9
Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKIH07CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdGb2N1
c1JpbmdQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0g
ICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgZmxvYXQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Cit1c2luZyBEcmF3Rm9jdXNSaW5nUmVjdHNCYXNl
ID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cywKKyAgICB2
b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcsCisgICAgVmVjdG9yPEZsb2F0UmVjdD4sIGZsb2F0LCBmbG9hdCwgQ29sb3IKKz47CiAKK2Ns
YXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3Rm9jdXNSaW5nUmVjdHNCYXNlIHsK
K3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0ZvY3VzUmlu
Z1JlY3RzQmFzZTo6Y3JlYXRlPERyYXdGb2N1c1JpbmdSZWN0cz47CisgICAgdXNpbmcgRHJhd0Zv
Y3VzUmluZ1JlY3RzQmFzZTo6RHJhd0ZvY3VzUmluZ1JlY3RzQmFzZTsKIHByaXZhdGU6Ci0gICAg
RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3Rm9jdXNSaW5nUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICAgICAgLCBt
X3dpZHRoKHdpZHRoKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX2Nv
bG9yKGNvbG9yKQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAg
RmxvYXRSZWN0IGJvdW5kczsKKyAgICAgICAgZm9yIChhdXRvJiByZWN0IDogYXJndW1lbnQ8MD4o
KSkKKyAgICAgICAgICAgIGJvdW5kcy51bml0ZShyZWN0KTsKKyAgICAgICAgYm91bmRzLmluZmxh
dGUoc19wbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAg
ICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAg
ZmxvYXQgbV93aWR0aDsKLSAgICBmbG9hdCBtX29mZnNldDsKLSAgICBDb2xvciBtX2NvbG9yOwog
fTsKIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK3Vz
aW5nIERyYXdJY29uQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3SWNvbiwK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKEljb24mLCBjb25zdCBGbG9hdFJlY3QmKSwK
KyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNvbiwKKyAgICBSZWY8SWNvbj4sIEZsb2F0UmVj
dAorPjsKKyAgICAKK2NsYXNzIERyYXdJY29uIDogcHVibGljIERyYXdJY29uQmFzZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1
c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdHM7IH0K
LSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICBmbG9hdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0
byBjcmVhdGUgPSBEcmF3SWNvbkJhc2U6OmNyZWF0ZTxEcmF3SWNvbj47CisgICAgdXNpbmcgRHJh
d0ljb25CYXNlOjpEcmF3SWNvbkJhc2U7CiBwcml2YXRlOgotICAgIERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1JlY3RzKQotICAgICAgICAsIG1fcmVjdHMocmVjdHMpCi0gICAgICAgICwg
bV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9j
b2xvcihjb2xvcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IG1fcmVjdHM7Ci0gICAgZmxvYXQgbV93aWR0aDsKLSAgICBmbG9hdCBt
X29mZnNldDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsUmVjdCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7Cit1c2luZyBEcmF3V2lkZ2V0QmFzZSA9IERyYXdpbmdJdGVtPAorICAg
IEl0ZW1UeXBlOjpEcmF3V2lkZ2V0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoV2lk
Z2V0JiwgY29uc3QgSW50UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRnZXQs
CisgICAgUmVmPFdpZGdldD4sIEludFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3V2lkZ2V0IDog
cHVibGljIERyYXdXaWRnZXRCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
Y3JlYXRlID0gRHJhd1dpZGdldEJhc2U6OmNyZWF0ZTxEcmF3V2lkZ2V0PjsKKyAgICB1c2luZyBE
cmF3V2lkZ2V0QmFzZTo6RHJhd1dpZGdldEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Rmls
bFJlY3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBj
b25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KGFyZ3VtZW50PDE+KCkp
OyB9CiB9OwotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3QgcHJv
cGVyLgotY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworICAg
IAordXNpbmcgRHJhd1Njcm9sbGJhckJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6
RHJhd1Njcm9sbGJhciwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3U2Nyb2xsYmFyLAor
ICAgIFJlZjxTY3JvbGxiYXI+LCBJbnRSZWN0Cis+OworICAgIAorY2xhc3MgRHJhd1Njcm9sbGJh
ciA6IHB1YmxpYyBEcmF3U2Nyb2xsYmFyQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
aWxsUmVjdFdpdGhDb2xvcj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RX
aXRoQ29sb3IocmVjdCwgY29sb3IpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29sb3I7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBE
cmF3U2Nyb2xsYmFyQmFzZTo6Y3JlYXRlPERyYXdTY3JvbGxiYXI+OworICAgIHVzaW5nIERyYXdT
Y3JvbGxiYXJCYXNlOjpEcmF3U2Nyb2xsYmFyQmFzZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJlY3RX
aXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAg
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQotICAgICAgICAs
IG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVj
dDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBGbG9hdFJlY3QoYXJndW1lbnQ8MT4oKSk7IH0KIH07Ci0KLWNsYXNzIEZpbGxSZWN0V2l0
aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKKyAgICAKK3VzaW5nIERyYXdUaGVtZUJh
c2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1RoZW1lLAorICAgIHZvaWQgKEdy
YXBoaWNzQ29udGV4dDo6KikoVGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKSwK
KyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUsCisgICAgVGhlbWUmLCBDb250cm9sUGFy
dCwgQ29udHJvbFN0YXRlcyYsIEZsb2F0UmVjdCwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQs
IGJvb2wsIGJvb2wKKz47CisgICAgCitjbGFzcyBEcmF3VGhlbWUgOiBwdWJsaWMgRHJhd1RoZW1l
QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3Jh
ZGllbnQpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdUaGVtZUJh
c2U6OmNyZWF0ZTxEcmF3VGhlbWU+OworICAgIHVzaW5nIERyYXdUaGVtZUJhc2U6OkRyYXdUaGVt
ZUJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAg
ICAgLCBtX2dyYWRpZW50KGdyYWRpZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgbXV0YWJs
ZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11dGFi
bGUKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8Mz4oKTsg
fQogfTsKIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwotICAg
IH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAg
Y29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQot
ICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQor
dXNpbmcgRmlsbFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAg
JkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0Cis+OwogCitjbGFzcyBG
aWxsUmVjdCA6IHB1YmxpYyBGaWxsUmVjdEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdEJhc2U6OmNyZWF0ZTxGaWxsUmVjdD47CisgICAg
dXNpbmcgRmlsbFJlY3RCYXNlOjpGaWxsUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxDb21w
b3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVj
dCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fb3Aob3ApCi0gICAgICAg
ICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3Ig
bV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2Js
ZW5kTW9kZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8
MD4oKTsgfQogfTsKIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVt
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSb3VuZGVkUmVjdD4gY3JlYXRlKGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSb3VuZGVk
UmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBj
b25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRN
b2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Cit1c2luZyBGaWxs
UmVjdFdpdGhDb2xvckJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3IsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAorICAgIEZs
b2F0UmVjdCwgQ29sb3IKKz47CiAKK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIEZp
bGxSZWN0V2l0aENvbG9yQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IEZpbGxSZWN0V2l0aENvbG9yQmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aENvbG9y
PjsKKyAgICB1c2luZyBGaWxsUmVjdFdpdGhDb2xvckJhc2U6OkZpbGxSZWN0V2l0aENvbG9yQmFz
ZTsKIHByaXZhdGU6Ci0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQotICAgICAgICAsIG1fcmVj
dChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9ibGVuZE1vZGUo
YmxlbmRNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3QucmVjdCgpOyB9Ci0KLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBt
X2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwotICAgIH0KLQotICAg
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cm91bmRlZEhvbGVSZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQordXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRCYXNlID0gRHJhd2luZ0l0
ZW08CisgICAgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAorICAgIHZvaWQgKEdyYXBo
aWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdCwKKyAgICBGbG9hdFJlY3QsIFJlZjxHcmFkaWVudD4KKz47CiAK
K2NsYXNzIEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIEZpbGxSZWN0V2l0aEdyYWRpZW50
QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxS
ZWN0V2l0aEdyYWRpZW50QmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aEdyYWRpZW50PjsKKyAgICB1
c2luZyBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2U6OkZpbGxSZWN0V2l0aEdyYWRpZW50QmFzZTsK
IHByaXZhdGU6Ci0gICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9yb3VuZGVkSG9s
ZVJlY3Qocm91bmRlZEhvbGVSZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRS
ZWN0IG1fcmVjdDsKLSAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OwotICAg
IENvbG9yIG1fY29sb3I7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFy
Z3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJdGVt
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYg
cGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgp
KTsKLSAgICB9Ci0KLSAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRo
OyB9Cit1c2luZyBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0LCBD
b2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZQorPjsKIAorY2xhc3MgRmlsbENvbXBv
c2l0ZWRSZWN0IDogcHVibGljIEZpbGxDb21wb3NpdGVkUmVjdEJhc2UgeworcHVibGljOgorICAg
IGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlOjpj
cmVhdGU8RmlsbENvbXBvc2l0ZWRSZWN0PjsKKyAgICB1c2luZyBGaWxsQ29tcG9zaXRlZFJlY3RC
YXNlOjpGaWxsQ29tcG9zaXRlZFJlY3RCYXNlOwogcHJpdmF0ZToKLSAgICBGaWxsUGF0aChjb25z
dCBQYXRoJiBwYXRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkK
LSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQotCi0gICAgY29uc3QgUGF0aCBt
X3BhdGg7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+
KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2Uo
cmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9Cit1c2luZyBGaWxsUm91bmRlZFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0LAorICAgIEZsb2F0Um91bmRlZFJlY3QsIENv
bG9yLCBCbGVuZE1vZGUKKz47CiAKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCA6IHB1YmxpYyBGaWxs
Um91bmRlZFJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3Jl
YXRlID0gRmlsbFJvdW5kZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxSb3VuZGVkUmVjdD47CisgICAg
dXNpbmcgRmlsbFJvdW5kZWRSZWN0QmFzZTo6RmlsbFJvdW5kZWRSZWN0QmFzZTsKIHByaXZhdGU6
Ci0gICAgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAg
IEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGFyZ3VtZW50PDA+KCkucmVjdCgpOyB9CiB9OwogCi1jbGFzcyBTdHJva2VSZWN0IDogcHVibGlj
IERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKSk7Ci0gICAg
fQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBm
bG9hdCBsaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0aDsgfQordXNpbmcgRmls
bFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiksCisg
ICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisgICAgRmxvYXRS
ZWN0LCBGbG9hdFJvdW5kZWRSZWN0LCBDb2xvcgorPjsKIAorY2xhc3MgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUgOiBwdWJsaWMgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlIHsKK3B1YmxpYzoK
KyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGVCYXNlOjpjcmVhdGU8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+OworICAgIHVzaW5nIEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlQmFzZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGVCYXNlOwogcHJp
dmF0ZToKLSAgICBTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQotICAgICAg
ICAsIG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLSAgICB7
Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAg
IGZsb2F0IG1fbGluZVdpZHRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdp
bmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25z
dCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tl
UGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQordXNpbmcgRmlsbFBhdGhCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxQYXRoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgUGF0
aCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoLAorICAgIGNvbnN0IFBhdGgKKz47
CiAKK2NsYXNzIEZpbGxQYXRoIDogcHVibGljIEZpbGxQYXRoQmFzZSB7CitwdWJsaWM6CisgICAg
Y29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxQYXRoQmFzZTo6Y3JlYXRlPEZpbGxQ
YXRoPjsKKyAgICB1c2luZyBGaWxsUGF0aEJhc2U6OkZpbGxQYXRoQmFzZTsKIHByaXZhdGU6Ci0g
ICAgU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRoKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IFBhdGggbV9wYXRoOwotICAgIEZsb2F0
UG9pbnQgbV9ibG9ja0xvY2F0aW9uOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwwPigpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogfTsKIAotY2xhc3MgU3Ry
b2tlRWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxTdHJva2VFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShyZWN0KSk7Ci0gICAgfQot
Ci0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KK3VzaW5nIEZp
bGxFbGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSwK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlLAorICAgIEZsb2F0UmVjdAorPjsKIAorY2xhc3Mg
RmlsbEVsbGlwc2UgOiBwdWJsaWMgRmlsbEVsbGlwc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25z
dGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbEVsbGlwc2VCYXNlOjpjcmVhdGU8RmlsbEVs
bGlwc2U+OworICAgIHVzaW5nIEZpbGxFbGxpcHNlQmFzZTo6RmlsbEVsbGlwc2VCYXNlOwogcHJp
dmF0ZToKLSAgICBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3Qo
cmVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qg
bV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDww
PigpOyB9CiB9OwogCi1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJSZWN0KHJlY3Qp
KTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQordXNpbmcgU3Ryb2tlUmVjdEJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U3Ry
b2tlUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0LAorICAgIEZsb2F0UmVj
dCwgZmxvYXQKKz47CiAKK2NsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgU3Ryb2tlUmVjdEJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VSZWN0
QmFzZTo6Y3JlYXRlPFN0cm9rZVJlY3Q+OworICAgIHVzaW5nIFN0cm9rZVJlY3RCYXNlOjpTdHJv
a2VSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQotICAgICAgICAs
IG1fcmVjdChyZWN0KQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCk7CisgICAgICAgIGJvdW5kcy5leHBh
bmQoYXJndW1lbnQ8MT4oKSwgYXJndW1lbnQ8MT4oKSk7CisgICAgICAgIHJldHVybiBib3VuZHM7
CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9h
dFJlY3QgbV9yZWN0OwogfTsKIAotI2lmIFVTRShDRykKLWNsYXNzIEFwcGx5U3Ryb2tlUGF0dGVy
biA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5U3Ryb2tlUGF0
dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5
U3Ryb2tlUGF0dGVybik7Ci0gICAgfQordXNpbmcgU3Ryb2tlUGF0aEJhc2UgPSBEcmF3aW5nSXRl
bTwKKyAgICBJdGVtVHlwZTo6U3Ryb2tlUGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoLAorICAg
IGNvbnN0IFBhdGgKKz47CiAKK2NsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMgU3Ryb2tlUGF0aEJh
c2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VQ
YXRoQmFzZTo6Y3JlYXRlPFN0cm9rZVBhdGg+OworICAgIHVzaW5nIFN0cm9rZVBhdGhCYXNlOjpT
dHJva2VQYXRoQmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCisgICAgY29uc3Qgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgfQorICAgICAgICAvLyBGSVhNRTogTmVl
ZCB0byB0YWtlIHN0cm9rZSB0aGlja25lc3MgaW50byBhY2NvdW50IGNvcnJlY3RseSwgdmlhIENH
UGF0aEJ5U3Ryb2tpbmdQYXRoKCkuCisgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNv
bnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gYXJndW1lbnQ8
MD4oKS5ib3VuZGluZ1JlY3QoKTsKKyAgICAgICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlja25l
c3MsIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgICAgIHJldHVybiBib3VuZHM7CisgICAgfQogfTsK
IAotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9Cit1c2luZyBTdHJva2VF
bGxpcHNlQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlLAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNz
IFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgU3Ryb2tlRWxsaXBzZUJhc2UgeworcHVibGljOgorICAg
IGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBTdHJva2VFbGxpcHNlQmFzZTo6Y3JlYXRl
PFN0cm9rZUVsbGlwc2U+OworICAgIHVzaW5nIFN0cm9rZUVsbGlwc2VCYXNlOjpTdHJva2VFbGxp
cHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlGaWxsUGF0dGVybigpCi0gICAgICAgIDogSXRl
bShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4
dC5zdHJva2VUaGlja25lc3MoKTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGFyZ3VtZW50
PDA+KCk7CisgICAgICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlj
a25lc3MpOworICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiB9OwotI2VuZGlmCi0KLWNsYXNzIEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPiBjcmVhdGUoZmxvYXQgc2NhbGVGYWN0b3IpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseURldmljZVNjYWxlRmFjdG9y
KHNjYWxlRmFjdG9yKSk7Ci0gICAgfQogCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IoKSBjb25zdCB7
IHJldHVybiBtX3NjYWxlRmFjdG9yOyB9Cit1c2luZyBDbGVhclJlY3RCYXNlID0gRHJhd2luZ0l0
ZW08CisgICAgSXRlbVR5cGU6OkNsZWFyUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKGNvbnN0IEZsb2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCwK
KyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBDbGVhclJlY3RC
YXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gQ2xlYXJS
ZWN0QmFzZTo6Y3JlYXRlPENsZWFyUmVjdD47CisgICAgdXNpbmcgQ2xlYXJSZWN0QmFzZTo6Q2xl
YXJSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBz
Y2FsZUZhY3RvcikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFj
dG9yKQotICAgICAgICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBmbG9hdCBtX3NjYWxlRmFjdG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOworaW5saW5lIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQoreworICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgIGl0ZW0uZHVtcCh0cyk7Cisg
ICAgcmV0dXJuIHRzOworfQorCitpbmxpbmUgV1RGOjpDU3RyaW5nIEl0ZW06OmR1bXAoKSBjb25z
dAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7CisgICAgcmV0dXJuIHRz
LnJlbGVhc2UoKS51dGY4KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlw
ZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCisjZGVmaW5l
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfR0VPTUVUUllJVEVNKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCisgICAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBp
dGVtLnByZWRpY2F0ZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlz
RHJhd2luZ0l0ZW0oKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfR0VPTUVU
UllJVEVNKEdlb21ldHJ5SXRlbSwgaXNHZW9tZXRyeUl0ZW0oKSkKIAogI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlw
ZU5hbWUpIFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgpID09
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUcmFu
c2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRlKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNjYWxlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVuYXRlQ1RNKQogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShDbGlwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKENsaXBPdXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xp
cE91dFRvUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlw
UGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3R2x5cGhz
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRJbWFnZSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJbWFn
ZSkKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi0jZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3TGluZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1JlY3RzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50KQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi0jaWYgVVNFKENHKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVy
bikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0
ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShDbGVhclNoYWRvdykKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwCmluZGV4IGVhMjczMjZiNTYxZjE5ZGUyMjQ3M2UzYmFjODNmNDRmYWEwOTJmZmQuLmY4NTlj
NjlhMGY0ZTBkMWVlMjllYjdlNTk0ZjJiZjdjMzMzN2ZlZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsMjEgKzUyLDIyIEBAIFJlY29yZGVyOjp+UmVjb3Jk
ZXIoKQogCiB2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQog
ewotICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKQogI2lmIFVTRShDRykKLSAgICAgICAgfHwg
aXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybiB8fCBpdGVtLnR5cGUo
KSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuCisgICAgaWYgKCFpczxHZW9tZXRyeUl0
ZW0+KGl0ZW0pICYmIGl0ZW0udHlwZSgpICE9IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4g
JiYgaXRlbS50eXBlKCkgIT0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCisjZWxzZQorICAg
IGlmICghaXM8R2VvbWV0cnlJdGVtPihpdGVtKSkKICNlbmRpZgotICAgICkgewotICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCku
c3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUo
Y3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7Ci0gICAgICAgIGlmIChjaGFuZ2VzRnJv
bUxhc3RTdGF0ZSkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywg
c3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2aW5nIHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7
Ci0gICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRl
Q2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgICAgICAgICAgc3Rh
dGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSAwOwotICAgICAgICAgICAgY3VycmVudFN0YXRlKCku
bGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwotICAgICAgICB9Ci0gICAg
ICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMg
PSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFu
Z2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOworICAgIGlmIChj
aGFuZ2VzRnJvbUxhc3RTdGF0ZSkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxp
c3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3Rh
dGUpKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3RhdGU6OmNyZWF0ZShHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21M
YXN0U3RhdGUpKSk7CisgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKKyAg
ICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0
YXRlOwogICAgIH0KKyAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
CkBAIC05OSw0NCArMTAwLDQ0IEBAIHZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQg
bWl0ZXJMaW1pdCkKICAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRlckxp
bWl0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBo
cywgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShzdGFydFBvaW50KSwgc21vb3RoaW5nTW9kZSkp
KTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVt
KERyYXdHbHlwaHM6OmNyZWF0ZShtYWtlUmVmKGZvbnQpLCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVt
R2x5cGhzLCBzdGFydFBvaW50LCBmb250U21vb3RoaW5nKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihh
cHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2Vv
bWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdJbWFnZTo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJ
dGVtRXh0ZW50KG5ld0l0ZW0pOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29y
ZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0g
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgYXV0byYgbmV3SXRl
bSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGlsZWRJbWFnZTo6Y3Jl
YXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2lu
ZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKIEltYWdlRHJh
d1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRT
aXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVS
dWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlv
biwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKG1ha2VSZWYoaW1hZ2UpLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKICAgICByZXR1
cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJPKQogdm9pZCBS
ZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7Ci0gICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1h
Z2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5k
TW9kZSwgb3JpZW50YXRpb24pKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21l
dHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VT
aXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pKSk7CiAg
ICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KICNlbmRpZgogCiB2b2lkIFJlY29yZGVy
OjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3
UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcCwgYmxlbmRNb2RlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1BhdHRlcm46OmNyZWF0ZSht
YWtlUmVmKGltYWdlKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOwogfQogCkBAIC0yMDksNyArMjEwLDcgQEAgQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpn
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3Jk
ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBk
b3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6
Y3JlYXRlKG9wYWNpdHkpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIApA
QCAtMjIwLDEyMSArMjIxLDE0NyBAQCB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXll
cigpCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJU
aGlja25lc3MpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4o
YXBwZW5kSXRlbShEcmF3UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRlclRoaWNrbmVzcykpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsK
LSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKSk7CisgICAgYXV0byYgbmV3SXRl
bSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZTo6Y3JlYXRlKHBv
aW50MSwgcG9pbnQyKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBm
bG9hdCBzdHJva2VUaGlja25lc3MpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShE
cmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCks
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MpKSk7CisgICAg
YXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3TGlu
ZXNGb3JUZXh0OjpjcmVhdGUocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBz
dHJva2VTdHlsZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShE
cmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocG9pbnQsIHdpZHRoLCBzdHlsZSkpKTsK
KyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShwb2ludCwgd2lkdGgsIHN0eWxlKSkpOwog
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUo
cmVjdCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBl
bmRJdGVtKERyYXdFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50
KG5ld0l0ZW0pOwogfQogCisjaWYgVVNFKENHKQogdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdQYXRoOjpj
cmVhdGUocGF0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQorI2VuZGlm
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdpbmdJ
dGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ZvY3Vz
UmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1Jp
bmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKSk7CiAgICAgdXBkYXRl
SXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25j
YXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNh
c3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOworfQorICAgIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ljb24oSWNvbiYgaWNvbiwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRy
eUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ljb246OmNyZWF0ZShtYWtlUmVmKGljb24pLCByZWN0KSkp
OworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdXaWRnZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgYXV0
byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3V2lkZ2V0
OjpjcmVhdGUobWFrZVJlZih3aWRnZXQpLCByZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRv
d25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3U2Nyb2xsYmFyOjpjcmVhdGUobWFr
ZVJlZihzY3JvbGxiYXIpLCByZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdUaGVtZShUaGVtZSYgdGhlbWUsIENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdl
b21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGhlbWU6OmNyZWF0ZSh0aGVtZSwgcGFydCwgc3Rh
dGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3Rv
ciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5j
ZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRl
KHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChu
ZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRl
KHJlY3QsIGNvbG9yKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0
ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZShyZWN0LCBjb2xvcikpKTsK
ICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBE
cmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZp
bGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGllbnQpKSk7CisgICAgYXV0byYg
bmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhH
cmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdp
bmdJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9y
LCBvcCwgYmxlbmRNb2RlKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRy
eUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3Is
IG9wLCBibGVuZE1vZGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBEcmF3
aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxS
b3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKSk7CisgICAgYXV0byYg
bmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUm91bmRlZFJl
Y3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKSk7CisgICAgYXV0byYgbmV3
SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKSk7CiAgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxQYXRoOjpj
cmVhdGUocGF0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lk
IFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxs
RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdl
b21ldHJ5SXRlbT4oYXBwZW5kSXRlbShGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBEcmF3aW5n
SXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVJl
Y3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25j
YXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShTdHJva2VSZWN0OjpjcmVhdGUocmVjdCwgbGlu
ZVdpZHRoKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVBhdGg6OmNy
ZWF0ZShwYXRoKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+
KGFwcGVuZEl0ZW0oU3Ryb2tlUGF0aDo6Y3JlYXRlKHBhdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4
dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKFN0cm9r
ZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3du
Y2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpKTsK
ICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCkBAIC00MDIsNyArNDI5LDcgQEAg
SXRlbSYgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKICAgICByZXR1cm4g
bV9kaXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6
OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Cit2b2lkIFJlY29yZGVy
Ojp1cGRhdGVJdGVtRXh0ZW50KEdlb21ldHJ5SXRlbSYgaXRlbSkgY29uc3QKIHsKICAgICBpZiAo
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNz
Q29udGV4dCgpKSkKICAgICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91bmRz
KHJlY3QudmFsdWUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5k
ZXggYzVhYzcwOTEzOTVmYTRmZTgzYTMxZDJjODhkYjFlODhhN2FkYTNlNC4uZDVhZTc0NjJlMjFj
NmFjODJhOWVlMDFlMDgxYWIyNjc5OTc3NzY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCkBAIC00NSw4ICs0NSw2IEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9u
czsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW07Ci0KIGNs
YXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKQEAgLTk3LDEzICs5NSwyMCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJva2VUaGlja25lc3MpIG92ZXJyaWRlOworICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyNpZiBVU0Uo
Q0cpCiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CisjZW5kaWYKIAog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdUaGVtZShUaGVtZSYsIENvbnRy
b2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvciwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CkBAIC0xMzMsNyArMTM4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKIAogICAgIEZsb2F0UmVjdCBl
eHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCB1
cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVJdGVt
RXh0ZW50KEdlb21ldHJ5SXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggOGZlYWEy
ZjVkNzUzMjhlNDM2YmY5ZDg4YjhkYzA1YmFjMWMyZTFmMy4uMGNmZmU2ZjljNjg1MjFjMGI5MDgx
OWYwYmVkZWQxZDVlNjc5NWJmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcApAQCAtNTUsOSArNTUsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJl
cGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewogICAgICAgICBhdXRvJiBpdGVt
ID0gbV9kaXNwbGF5TGlzdC5saXN0KClbaV0uZ2V0KCk7CiAKLSAgICAgICAgaWYgKCFpbml0aWFs
Q2xpcC5pc1plcm8oKSAmJiBpczxEcmF3aW5nSXRlbT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGNv
bnN0IERyYXdpbmdJdGVtJiBkcmF3aW5nSXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihpdGVt
KTsKLSAgICAgICAgICAgIGlmIChkcmF3aW5nSXRlbS5leHRlbnRLbm93bigpICYmICFkcmF3aW5n
SXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgeworICAgICAgICBpZiAoIWlu
aXRpYWxDbGlwLmlzWmVybygpICYmIGlzPEdlb21ldHJ5SXRlbT4oaXRlbSkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIGdlb21ldHJ5SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oaXRl
bSk7CisgICAgICAgICAgICBpZiAoZ2VvbWV0cnlJdGVtLmV4dGVudEtub3duKCkgJiYgIWdlb21l
dHJ5SXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgewogICAgICAgICAgICAg
ICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8
PCBpIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
Y29uR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3Rr
LmNwcAppbmRleCBhZjE4NWE1NGNkZDQ5ZDIwNDY4NjVlNjkzYzVhNzNjOTRjNThiMDRiLi5mMGFl
NWNmY2ExOWFiYmZjYjk0MDBkODEzNWIzNGM4ZjMxN2MzMDNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCkBAIC0xMTMsMTEgKzExMyw4
IEBAIFJlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcykKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBJY29uOjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgSWNv
bjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIC8vIFRPRE86IFNjYWxlL2NsaXAgdGhlIGltYWdlIGlmIG5l
Y2Vzc2FyeS4KICAgICBjYWlyb190KiBjciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNy
KCk7CiAgICAgY2Fpcm9fc2F2ZShjcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2lvcy9JY29uSU9TLm1tCmluZGV4IGNlZTUxNmUxNDQwZTc4ZWI1NDM3MzlhYjJhMDM4
ZDg3MzYyZjdkNDQuLmRiZDgzZDU3YzBlNjU4N2FmMjIyZDdjN2E3NWRiZjQ0YWRhMDg5OTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCkBA
IC01NSwxMSArNTUsOCBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckltYWdlKGNv
bnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJY29uKGltYWdlKSk7CiB9CiAKLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBJY29uOjpwbGF0Zm9ybVBh
aW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkg
Y29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0
KTsKIAogICAgIGZsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJbWFnZS5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCmlu
ZGV4IDYxNDNiNTFkNDM2NDVkNWFkNDhjMzk1YWY3YzRlYTI2NDMzZDdjNGEuLmU4NTAzMDhkMGJj
ODU3MjdiOTUwYzY2YzE2NmFmN2Q1NGFkOTQyZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCkBAIC05MSwxMyArOTEsOSBAQCBSZWZQdHI8
SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvclVUSShjb25zdCBTdHJpbmcmIFVUSSkKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEljb24oaW1hZ2UpKTsKIH0KIAotdm9pZCBJY29uOjpwYWludChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgSWNvbjo6
cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbEN1cnJl
bnRHQyhjb250ZXh0KTsKLQogICAgIFttX25zSW1hZ2UgZHJhd0luUmVjdDpyZWN0IGZyb21SZWN0
Ok5TTWFrZVJlY3QoMCwgMCwgW21fbnNJbWFnZSBzaXplXS53aWR0aCwgW21fbnNJbWFnZSBzaXpl
XS5oZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNlT3ZlciBmcmFj
dGlvbjoxLjBmXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWly
b09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCA5YTk1NGUyMmI5NGJiYWU5Y2IxNzVmZWFmYzA0
MmZmZmViNWFmZTFkLi4wNDA2Mjc2YWJiYzc1MThhNTM3ZGVkNjdlZDNhNmE3MDdkNWMzMWZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJv
L05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcApAQCAtNjMxLDcgKzYzMSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
IHsKICAgICBzdHJ1Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3Is
IGZsb2F0PiB7CiAgICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7
CkBAIC02NDcsNyArNjQ3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXMKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBVTlVTRURfUEFSQU0oc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBVTlVTRURf
UEFSQU0oc3Ryb2tlU3R5bGUpOwogICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2lu
dCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQpAQCAtNjkxLDEwICs2OTEsNiBAQCB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmlsbENv
bG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKGNv
bnN0IFBhdGgmKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5nIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENvbG9yPiB7CkBAIC03MzUs
NiArNzMxLDI2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0ZvY3VzUmluZz4ocmVjdHMsIHdpZHRoLCBjb2xvcikpOwogfQogCit2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJY29uKEljb24mLCBjb25zdCBGbG9hdFJlY3QmKQor
eworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdXaWRnZXQoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpCit7
CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3VGhlbWUoVGhlbWUmLCBDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0
LCBib29sLCBib29sKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisK
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgc3RydWN0IFNhdmUg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCBkYzQ4
NDllNWNmNGE4Y2E5MmYzOWEyNjVjZDk5YzE0M2E5OGNkNTMwLi40ODc4Y2EyODg2MGJhYzg4NDIz
MWQxNjQ4YzFmNDQzMDA4Y2UwYzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC03MiwxMyArNzIsMTcgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92
ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2ws
IGJvb2wsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNv
cmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0LCBXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBX
ZWJDb3JlOjpQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRS
ZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAg
ICAKKyAgICB2b2lkIGRyYXdJY29uKFdlYkNvcmU6Okljb24mLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdXaWRnZXQoV2ViQ29yZTo6V2lkZ2V0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Njcm9sbGJh
cihXZWJDb3JlOjpTY3JvbGxiYXImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3VGhlbWUoV2ViQ29yZTo6VGhlbWUmLCBXZWJDb3JlOjpDb250cm9sUGFy
dCwgV2ViQ29yZTo6Q29udHJvbFN0YXRlcyYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJh
bmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2F2ZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAKaW5kZXggMDI5ZDA3OWNjMWMyMDAzOThhNzgxMWU2NmYzZTMzZTc5Mzk2
MWJhYy4uMWFiZjRmYWMxM2IwYWRhMjNhZGJkZjAwNGIxMWIzOGE4MmMyMmI1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERp
cmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCkBAIC0xNzA4LDcgKzE3MDgsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgRGFzaEFycmF5JgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXNSZWNvcmRpbmcoKSkg
ewotICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmRyYXdMaW5lc0ZvclRleHQocG9pbnQs
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAg
ICAgIG1fZGlzcGxheUxpc3RSZWNvcmRlci0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ljb25XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25X
aW4uY3BwCmluZGV4IDc5OWUzNDc0MDM5NDA2MzUxMGU5NTRiNmFmMzA5OThlN2QyNWUyYWQuLjE4
ZmU2Zjc5MTI3NWVhZDU5YzAzNDIzYmFkOGM3ZDRhODJkOWNmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKQEAgLTc0LDExICs3NCw4
IEBAIFJlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcykKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oaEljb24pKTsK
IH0KIAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcikKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKIHsKLSAgICBpZiAoY29udGV4dC5wYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExvY2FsV2luZG93c0NvbnRl
eHQgd2luZG93Q29udGV4dChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHIpKTsKICAgICBEcmF3
SWNvbkV4KHdpbmRvd0NvbnRleHQuaGRjKCksIHIueCgpLCByLnkoKSwgbV9oSWNvbiwgci53aWR0
aCgpLCByLmhlaWdodCgpLCAwLCAwLCBESV9OT1JNQUwpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCmluZGV4IDc2YTIxZGEzNmYzNmVm
OTFhYTE3ODg5YjhmYzExOWIyMjJlNzI1YmUuLjFlZGI3ZDlmNWM2ZDEzOWFlOGY2NzUxYzFjY2Ez
MjVkMjk0ZTI3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dwZS9JY29uV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
cGUvSWNvbldQRS5jcHAKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJ
Y29uOjp+SWNvbigpID0gZGVmYXVsdDsKIAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBJY29uOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKaW5kZXggODc0MTI5MzM5NzkzYWQyZTZiM2RhZDlm
NzE5ZmEwNjA1YjQ1MjBhZC4uZjM4YTBhNGUxNWNiMTlkZDVjMTM4YjljM2ExYzVhMmUzYWU5NjY1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKQEAgLTgwLDcg
KzgwLDEyIEBAIHZvaWQgV2lkZ2V0OjpoaWRlKCkKICAgICAgICAgZ3RrX3dpZGdldF9oaWRlKHBs
YXRmb3JtV2lkZ2V0KCkpOwogfQogCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UmVjdCYsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdl
dDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQoreworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhp
cywgcmVjdCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dp
ZGdldElPUy5tbQppbmRleCA4YjFlOGI1NGI1Y2UyNzBmMjQ4ZGFlY2VkNTI0Zjc3MmExNTRlOWVi
Li5kY2M2YTQ5MDUyMDk5NGFhNDU3MDIxMmNlNGJjMmRkYmI3MWVmNjFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KQEAgLTE0MSwxNCArMTQxLDE2IEBAIE5TVmll
dyogV2lkZ2V0OjpnZXRPdXRlclZpZXcoKSBjb25zdAogICAgIHJldHVybiB2aWV3OwogfQogCi12
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeSkKIHsKLSAgICBpZiAocC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBjb250ZXh0LmRyYXdXaWRnZXQoKnRoaXMsIHJlY3QpOworfQogICAgIAordm9pZCBXaWRn
ZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQorewogICAgIE5TVmlldyAqdmlldyA9IGdldE91dGVyVmlldygpOwogCi0gICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IHAucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0
U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOwogCiAgICAgTlNSZWN0IHZpZXdGcmFtZSA9IFt2aWV3IGZy
YW1lXTsKQEAgLTE1Niw3ICsxNTgsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9saQogICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIHZpZXdGcmFtZS5vcmlnaW4ueCAtIHZpZXdC
b3VuZHMub3JpZ2luLngsIHZpZXdGcmFtZS5vcmlnaW4ueSAtIHZpZXdCb3VuZHMub3JpZ2luLnkp
OwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFt2aWV3IGRpc3BsYXlS
ZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnIgZnJvbVZpZXc6W3ZpZXcgc3Vw
ZXJ2aWV3XV0gaW5Db250ZXh0OmNnQ29udGV4dF07CisgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25v
cmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpbdmlldyBzdXBlcnZp
ZXddXSBpbkNvbnRleHQ6Y2dDb250ZXh0XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAppbmRleCA0OTAyOGYxYjQzYzczYzM1Y2MzMTM3MGE3ZGY0
ZTk4NDE0ZmRjNjI2Li5lOWYzMDNkM2QxYmZhZGYxN2I2N2Q4ZDM2ZTVlOGIyMTU3NGQ2ZjFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaApAQCAtNTMsNyArNTMsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQ
YXJ0IHBhcnQpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQ7IH0K
IAotICAgIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3Kiwg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VT
eXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKSBmaW5hbDsKKyAgICB2b2lk
IHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0
ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQq
IHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgZmlu
YWw7CiAgICAgdm9pZCBpbmZsYXRlQ29udHJvbFBhaW50UmVjdChDb250cm9sUGFydCwgY29uc3Qg
Q29udHJvbFN0YXRlcyYsIEZsb2F0UmVjdCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IGZpbmFs
OwogCiAgICAgYm9vbCB1c2VyUHJlZmVyc1JlZHVjZWRNb3Rpb24oKSBjb25zdCBmaW5hbDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQppbmRleCA0ODMxZmZmNGY4OGFjZTE0
Y2ZkMGZlZjNlYTdiODFiNzg0Mzc3ZDdhLi5kOTIzODU2MDE5NmRkMzY5ZTQ4NzhmYjI3ZTI2MjY5
ZjM0MmY1ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCkBAIC0z
ODcsNyArMzg3LDcgQEAgc3RhdGljIGJvb2wgZHJhd0NlbGxGb2N1c1JpbmcoTlNDZWxsICpjZWxs
LCBOU1JlY3QgY2VsbEZyYW1lLCBOU1ZpZXcgKmNvbnRyb2xWaWUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlQnV0dG9uKENvbnRyb2xQYXJ0IGJ1dHRvblR5
cGUsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxW
aWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKQorc3RhdGljIHZvaWQgcGFpbnRUb2dnbGVCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDb250cm9sUGFydCBidXR0b25UeXBlLCBDb250cm9sU3RhdGVzJiBjb250cm9sU3Rh
dGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9s
bFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2Nh
bGVGYWN0b3IpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAKQEAgLTUyMCw3
ICs1MjAsNyBAQCBzdGF0aWMgTlNCdXR0b25DZWxsICpidXR0b24oQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgQ29udHJvbFN0YXRlcyYgY29udHJvbFN0YXRlcwogICAgIHJldHVybiBjZWxsOwogfQog
ICAgIAotc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0
YXRlcyYgY29udHJvbFN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZp
ZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCitzdGF0
aWMgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcikKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAKQEAgLTU5Niw3ICs1OTYsNyBAQCBzdGF0aWMgTlND
b250cm9sU2l6ZSBzdGVwcGVyQ29udHJvbFNpemVGb3JGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KQogICAgIHJldHVybiBOU0NvbnRyb2xTaXplTWluaTsKIH0KIAotc3RhdGljIHZvaWQgcGFp
bnRTdGVwcGVyKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZp
ZXcqKQorc3RhdGljIHZvaWQgcGFpbnRTdGVwcGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Q29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0
IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBOU1N0ZXBw
ZXJDZWxsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHdheXMgdG8gZHJhdyBhbgogICAgIC8vIE5TU3Rl
cHBlckNlbGwgd2l0aCB0aGUgdXAgYnV0dG9uIGhpZ2hsaWdodGVkLgpAQCAtODQ4LDI1ICs4NDgs
MjUgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgQ29udHJvbFN0YXRlcyYgc3QKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCiB9CiAKLXZvaWQgVGhlbWVNYWM6OnBhaW50KENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xT
dGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lz
dGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3ZvaWQgVGhlbWVNYWM6OnBs
YXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sUGFydCBwYXJ0LCBD
b250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQg
em9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURh
cmtBcHBlYXJhbmNlKQogewogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxB
cHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKIAogICAg
IHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgICAg
IHBhaW50VG9nZ2xlQnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9v
bUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7
CisgICAgICAgICAgICBwYWludFRvZ2dsZUJ1dHRvbihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9s
bFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgICAgIHBhaW50VG9nZ2xl
QnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Ny
b2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CisgICAgICAgICAg
ICBwYWludFRvZ2dsZUJ1dHRvbihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpv
b21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9sbFZpZXcpLCBkZXZp
Y2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0
OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKLSAgICAgICAgICAgIHBhaW50QnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVk
UmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2Fs
ZUZhY3Rvcik7CisgICAgICAgICAgICBwYWludEJ1dHRvbihjb250ZXh0LCBwYXJ0LCBzdGF0ZXMs
IHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNj
cm9sbFZpZXcpLCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6Ci0gICAgICAgICAg
ICBwYWludFN0ZXBwZXIoc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBz
Y3JvbGxWaWV3KTsKKyAgICAgICAgICAgIHBhaW50U3RlcHBlcihjb250ZXh0LCBzdGF0ZXMsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHNjcm9s
bFZpZXcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQppbmRleCA5
OTZjMTlkNTUwZjkxMzFmYTAyMzYwYjY1N2Y4OGJlOWY5ZTY2NmJiLi5iOGE3ZmM5MzIwNjZjODE5
MmFiMmJjOGVlMzcwNTk3OGY5ZTA4NWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
aWRnZXRNYWMubW0KQEAgLTE4Niw5ICsxODYsOSBAQCBOU1ZpZXcgKldpZGdldDo6Z2V0T3V0ZXJW
aWV3KCkgY29uc3QKICAgICByZXR1cm4gdmlldzsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCiB7Ci0gICAgaWYgKHAu
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIE5TVmlldyAqdmlldyA9IGdldE91dGVyVmlldygpOwogCkBA
IC0yMDIsMTEgKzIwMiwxNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBw
LCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9saQogI2VuZGlmCiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKKyAgICBjb250ZXh0LmRyYXdXaWRnZXQoKnRoaXMs
IHJlY3QpOworfQorICAgIAordm9pZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewogICAgIC8vIFRha2UgYSByZWZl
cmVuY2UgdG8gdGhpcyBXaWRnZXQsIGJlY2F1c2Ugc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgdmll
d3MgY2FuIGludm9rZSBhcmJpdHJhcnkKICAgICAvLyBjb2RlLCB3aGljaCBjYW4gZGVyZWYgaXQu
CiAgICAgUmVmPFdpZGdldD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKKyAgICBOU1ZpZXcgKnZp
ZXcgPSBnZXRPdXRlclZpZXcoKTsKICAgICBOU0dyYXBoaWNzQ29udGV4dCAqY3VycmVudENvbnRl
eHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwogI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJl
Y2F0ZWQtZGVjbGFyYXRpb25zIgpAQCAtMjE0LDcgKzIyMCw3IEBAIHZvaWQgV2lkZ2V0OjpwYWlu
dChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2luUGFp
bnRQb2xpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIGNvbW1vbiBjYXNlIG9mIGRyYXdpbmcgaW50byBhIHdpbmRvdyBvciBhbiBpbmNsdXNpdmUg
bGF5ZXIsIG9yIHByaW50aW5nLgogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRS
ZWN0OnIgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV1dOworICAgICAgICBbdmlldyBkaXNwbGF5
UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Olt2aWV3
IHN1cGVydmlld11dXTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTIzNyw3ICsyNDMsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50
UG9saQogICAgICAgICAgICAgc2Nyb2xsVmlldyA9IDA7CiAgICAgfQogCi0gICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IHAucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiCiAgICAgQVNTRVJUKGNnQ29udGV4dCA9PSBbY3VycmVudENvbnRleHQg
Z3JhcGhpY3NQb3J0XSk7CkBAIC0yNTksNyArMjY1LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFy
YXRpb25zIgogICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0gW05TR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y2dDb250ZXh0IGZsaXBw
ZWQ6Tk9dOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotICAgICAgICBbdmlldyBkaXNw
bGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3
IHN1cGVydmlld11dIGluQ29udGV4dDpuc0NvbnRleHRdOworICAgICAgICBbdmlldyBkaXNwbGF5
UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Olt2aWV3
IHN1cGVydmlld11dIGluQ29udGV4dDpuc0NvbnRleHRdOwogICAgIH0KICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRGbGFncy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3Mu
aAppbmRleCBmOGNiM2JkMjY2NzQ2NTFlNmFjZTA2ODJkYjBhZjhlYmQ1Zjg5ZjM1Li5lY2ZlMTdi
YjIxOTM1ZmRmNWRkZmNmNmFiMjY4ZDE3ZjZhZjJlOWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEZsYWdzLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogZW51bSBjbGFzcyBUZXh0UmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgewpAQCAtNDAsNiArNDIs
MTIgQEAgZW51bSBjbGFzcyBGb250U21vb3RoaW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIEFudGlh
bGlhc2VkLAogICAgIFN1YnBpeGVsQW50aWFsaWFzZWQKIH07CisgICAgCitpbmxpbmUgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZvbnRTbW9v
dGhpbmdNb2RlJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgRm9udFNtb290aGluZ01vZGUg
dG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiAvLyBUaGlzIHNldHRpbmcg
aXMgdXNlZCB0byBwcm92aWRlIHdheXMgb2Ygc3dpdGNoaW5nIGJldHdlZW4gbXVsdGlwbGUgcmVu
ZGVyaW5nIG1vZGVzIHRoYXQgbWF5IGhhdmUgZGlmZmVyZW50CiAvLyBtZXRyaWNzLiBJdCBpcyB1
c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIENHIGFuZCBHREkgdGV4dCBvbiBXaW5kb3dzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAppbmRleCA4YmRjMDIzYTQzNzY2ZDQ1
ZjNjMWE5ZmNhOGNlMDkzZWY5MzVkN2I5Li5hNTFlNGYxNzU5NDJkOGJiZTg0ZTdhMzdlMTliYWQ2
ODI2OTFlM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcApA
QCAtNzUsNyArNzUsMTIgQEAgdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1
cnNvcikKICAgICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1cnNvcihjdXJzb3IpOwogfQogCi12
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
KQoreworICAgIGNvbnRleHQuZHJhd1dpZGdldCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKQogewog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9XaWRnZXRXUEUuY3BwCmluZGV4IDVmNjYz
MzBjNTIzOTg3YTY3MDg1MDAwNGIzOTg5Y2NhYzY0MGZiNWQuLjk0NTMzODVkODdhZWFjZDExYzA3
YTE5OTQyNzg5YzNiMzUyYjc5YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dwZS9XaWRnZXRXUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9XaWRn
ZXRXUEUuY3BwCkBAIC01Miw3ICs1MiwxMiBAQCBJbnRSZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkg
Y29uc3QKICAgICByZXR1cm4gbV9mcmFtZTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQor
dm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0LmRyYXdX
aWRnZXQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggNDY4NDcyYzY4
NjViZjY3MTZiOWIyZjg4YmJiYWUxNTVkZjNlMzYwYS4uNmJiOWU5MWU5NjVhMThlYTliMGEyNDU1
ZTNjYjNmZTRiMGZlYWI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoY29uc3QgUmVu
ZGVyQm94JiBib3gsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIGNvbnMKICAgICBjYXNl
IEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgogICAgICAgICB1cGRh
dGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoYm94LCBjb250cm9sU3RhdGVzKTsKLSAgICAgICAg
VGhlbWU6OnNpbmdsZXRvbigpLnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0ZXMsIHBhaW50SW5mby5j
b250ZXh0KCksIGRldmljZVBpeGVsU25hcHBlZFJlY3QsIGJveC5zdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKSwgJmJveC52aWV3KCkuZnJhbWVWaWV3KCksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2Nh
bGVGYWN0b3IsIGJveC5wYWdlKCkudXNlU3lzdGVtQXBwZWFyYW5jZSgpLCBib3gucGFnZSgpLnVz
ZURhcmtBcHBlYXJhbmNlKCkpOworICAgICAgICBUaGVtZTo6c2luZ2xldG9uKCkucGFpbnQocGFp
bnRJbmZvLmNvbnRleHQoKSwgcGFydCwgY29udHJvbFN0YXRlcywgZGV2aWNlUGl4ZWxTbmFwcGVk
UmVjdCwgYm94LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpLCAmYm94LnZpZXcoKS5mcmFtZVZpZXco
KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3RvciwgYm94LnBhZ2UoKS51c2VTeXN0
ZW1BcHBlYXJhbmNlKCksIGJveC5wYWdlKCkudXNlRGFya0FwcGVhcmFuY2UoKSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZGU3
MDU0ZGExNWFlZWFiZjkwMzhmNWUyMzA5MDg1YjA4OTQwYTBhLi5kMzI1YWYyN2FkMDE1OTFiMTJj
MjIxNzhlNWY3NzA4NzlhMmJkYmRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTgtMDctMTcg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBU
ZW1wbGF0aXplIERpc3BsYXlMaXN0SXRlbXMgYW5kIHVzZSBzdGQ6OnR1cGxlIHRvIHN0b3JlIHRo
ZSBhcmd1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NzAwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlYmFzZWxpbmUgZXhpc3RpbmcgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3Bs
YXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBk
aXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorCiAyMDE4LTA3
LTE3ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVuc2tp
cCBMYXlvdXRUZXN0IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1kaXNw
bGF5L2Rpc3BsYXktY29udGVudHMtZmlyc3QtbGV0dGVyLTAwMi5odG1sLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQu
dHh0CmluZGV4IGE4ODNlNjg1MmUxODQyZGY5NjlmYmNhZTI1NmEyNzg3Y2Y5NmJmYzkuLjdjN2E4
OTRkZWIxZDNjMzA2Mzk4MGQ2YjYwNzBlMDNiOTk3NDJhY2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
QEAgLTEsMTMgKzEsMTUgQEAKICAKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0g
IChmaWxsLWNvbG9yICNDODAwMDApKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxh
Z3MgMjU2KQorICAgIChmaWxsLWNvbG9yICNDODAwMDApKSkKIChmaWxsLXJlY3QKICAgKGV4dGVu
dCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkp
CiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjMDAwMEM4
N0YpKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMjU2KQorICAgIChmaWxs
LWNvbG9yICMwMDAwQzg3RikpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgzMCwzMCkgc2l6
ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSkKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVj
dGVkLnR4dAppbmRleCBkZTY5OGFlNjRkYjYyYzZjNDlhMjJlMGJiOWVmYzY1NzM0OGViZmM4Li45
OTg3YmFlMWFhODZlYmU3ZmNiYTVhYTdjNjg5MmQyZGQwYjIxOTE2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhw
ZWN0ZWQudHh0CkBAIC01LDE0ICs1LDE1IEBACiAoc2F2ZQogICAocmVzdG9yZS1pbmRleCA0KSkK
IChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAxMDI0KQotICAoc2hhZG93LWJsdXIgMTIuMDAp
Ci0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxl
Z2FjeS1yYWRpdXMgMCkpCisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1mbGFncyAxMDI0
KQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQogKGZpbGwtY29t
cG9zaXRlZC1yZWN0CiAgIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0
IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0
ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92
ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMt
ZXhwZWN0ZWQudHh0CmluZGV4IDg0OGIwNzc1NDVhN2M2ODAyNzBlZWUxYmEwMWZiYmQxZThiY2Mz
ZmMuLjA1NGUzNGE0NTI4ZmZhZTM0ZTliMTQzNzM1ZDdlYjYzNTJkODMwYzIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10
cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwxOSArMiwyMCBAQAogKHRyYW5zbGF0ZQogICAo
eCAwLjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQorKGNvbmNhdGVuYXRlLWN0
bQogICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0p
KQogKHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgMTAyNCkKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0x
MCBoZWlnaHQ9MjApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQorICAoc3RhdGUt
Y2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMTAyNCkKKyAgICAoc2hhZG93LWJsdXIgMTIuMDAp
CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVz
ZS1sZWdhY3ktcmFkaXVzIDApKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAogICAoZXh0ZW50IGF0
ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAx
MDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNl
LW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChibGVuZC1tb2Rl
IG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGM1ZjZhYzZiMjVhOTg3ZmIw
NGVlZTlhMTE5MTBiZWY2MWY3MzFhMzMuLjRhZjdlMTA5ZTkzMWIwZDRkZDBjZDY5MjQ0OTc0Mjcw
ODUzYjEyZjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNw
YXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVy
LWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtNiwxMyArNiwxNCBAQAogICAoZXh0ZW50IGF0
ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogICAo
Y29sb3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChj
b21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAo
c2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMTMxNDU2KQotICAoZmlsbC1jb2xvciAjMDAwMEZG
KQotICAoc3Ryb2tlLXN0eWxlIDApCi0gIChzaG91bGQtYW50aWFsaWFzIDApKQorICAoc3RhdGUt
Y2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMTMxNDU2KQorICAgIChmaWxsLWNvbG9yICMwMDAw
RkYpCisgICAgKHN0cm9rZS1zdHlsZSAwKQorICAgIChzaG91bGQtYW50aWFsaWFzIDApKSkKIChk
cmF3LXJlY3QKICAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgyKQogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwNHgyKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxh
eS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBiZjdlZjI3NWY2
MTg1NWE2MjUxYjYxNzZkYjE3ZGQwMmU5MDQ4ZWMzLi41ZTFmYzk2OGI0NWFiN2MxMTcxNGNmM2I3
NWUyNmY3ODQyZjNkNzg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVw
bGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtNiw3ICs2
LDcgQEAgcmVjb3JkZWQ6CiAgIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAgIChy
ZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBv
c2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNl
LW92ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAKIHJlcGxheWVkOiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggMjEwZTQ0
YjA4NzdjMDQwY2E4NTI0MjBkZDk3YjQyYzBlYWMxNzZjNS4uMTFlN2UwMWU5ODg4M2IwZmMzNjEz
M2IyMmMwNTJhYWY3Y2M5ZDA3MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
LXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTUsMTUgKzUsMTYgQEAKIChzYXZlCiAgIChyZXN0
b3JlLWluZGV4IDQpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUyNTMxMikKLSAgKHNo
YWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0g
IChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApCi0gIChzaG91bGQtc3VicGl4ZWwtcXVhbnRp
emUtZm9udHMgMCkpCisgIChzdGF0ZS1jaGFuZ2UgCisgICAgKGNoYW5nZS1mbGFncyA1MjUzMTIp
CisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhl
aWdodD0yMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKQorICAgIChzaG91bGQt
c3VicGl4ZWwtcXVhbnRpemUtZm9udHMgMCkpKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0CiAgIChl
eHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAx
MDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNl
LW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92ZXIpCiAgIChibGVuZC1tb2Rl
IG5vcm1hbCkpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNs
dWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCAzODRlOTgxMjlkYzdlYmNkZDg5NmQz
MTBmYThjNzVkMzY1M2FiYjdmLi5hZmNjOGM0YTk0MWViOWNlMTM1MjE5NzUxNjUxZTkxMWZlMDdj
NzA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0
cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9y
bXMtZXhwZWN0ZWQudHh0CkBAIC0yLDIwICsyLDIxIEBACiAodHJhbnNsYXRlCiAgICh4IDAuMDAp
CiAgICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCisoY29uY2F0ZW5hdGUtY3RtCiAgIChj
dG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkpCiAoc2F2
ZQogICAocmVzdG9yZS1pbmRleCA1KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MjUz
MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVp
Z2h0PTIwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKQotICAoc2hvdWxkLXN1YnBp
eGVsLXF1YW50aXplLWZvbnRzIDApKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChjaGFuZ2UtZmxh
Z3MgNTI1MzEyKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkKKyAg
ICAoc2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIDApKSkKIChmaWxsLWNvbXBvc2l0ZWQt
cmVjdAogICAoZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJl
Y3QgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0
ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCisgIChjb21wb3NpdGUtb3BlcmF0b3Igc291cmNlLW92
ZXIpCiAgIChibGVuZC1tb2RlIG5vcm1hbCkpCiAocmVzdG9yZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345280</attachid>
            <date>2018-07-18 13:59:58 -0700</date>
            <delta_ts>2018-07-18 14:25:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187765-20180718135957.patch</filename>
            <type>text/plain</type>
            <size>213820</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UxOWQyYTE5Zjg0YjUx
ODQxMGNiMDQ2NGZjOTNiZmRkZmExNTBmOC4uMTFmZTUyYTJiMTg4ZGM5YTc0ZGQzY2E5YTRiMDIw
NTMxNjNjNTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4MyBAQAorMjAxOC0wNy0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGljb24sIHdpZGdldCwgc2Nyb2xsYmFyIGFuZCB0aGVtZSB0byBiZSBkcmF3biB0aHJvdWdoIERp
c3BsYXlMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODc3NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEcmF3aW5nIHRoZXNlIGl0ZW1zIHNob3VsZCBnbyB0aHJvdWdoIEdyYXBoaWNzQ29udGV4dCB3
aGljaCB3aWxsIGNyZWF0ZQorICAgICAgICBzcGVjaWFsIERpc3BsYXlMaXN0SXRlbXMgZm9yIGRy
YXdpbmcgdGhlbS4gVGhlc2UgRGlzcGxheUxpc3RJdGVtcyB3aWxsCisgICAgICAgIHN0b3JlIGFs
bCB0aGUgcGFyYW1ldGVycyB0byBiZSB1c2VkIHdoZW4gcmVwbGF5aW5nIHRoZSBEaXNwbGF5TGlz
dCBiYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1Ro
ZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZTo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZvcm0vVGhlbWUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdl
dC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaGVtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3V2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Njcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdUaGVt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvSWNvbklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFp
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6SWNvbjo6cGxhdGZvcm1QYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpw
YWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJY29uKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdXaWRnZXQpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChOaWNvc2lh
OjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3VGhlbWUpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
cGUvSWNvbldQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9U
aGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50VG9nZ2xlQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3RlcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGxhdGZvcm1QYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpUaGVtZU1hYzo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0RmxhZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dwZS9XaWRnZXRXUEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6cGFpbnQpOgorCisyMDE4LTA3LTE3ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBEaXNwbGF5TGlz
dEl0ZW1zIGFuZCB1c2Ugc3RkOjp0dXBsZSB0byBzdG9yZSB0aGUgYXJndW1lbnRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcwMDIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNwbGF5TGlzdEl0ZW1z
IGFyZSBzaW1wbGUgb2JqZWN0cyB3aGljaCByZXByZXNlbnQgZ3JhcGhpY3MgY29tbWFuZHMgYW5k
CisgICAgICAgIHRoZWlyIGFyZ3VtZW50cy4gVGhlIGFyZ3VtZW50cyBhcmUgc3RvcmVkIHdoaWxl
IHJlY29yZGluZyB0aGUgRGlzcGxheUxpc3QgCisgICAgICAgIGFuZCB1c2VkIHdoZW4gcmVwbGF5
aW5nIGl0IGJhY2suIEluIGZhY3QsIHdlIGRvIG5vdCBjYXJlIG11Y2ggYWJvdXQga25vd2luZwor
ICAgICAgICB0aGVzZSBhcmd1bWVudHMgZXhwZWN0IHdoZW4gZGVidWdnaW5nIHRoZSBEaXNwbGF5
TGlzdC4gU28gYSBtZWNoYW5pY2FsIHdheQorICAgICAgICB0byBzdG9yZSB0aGUgYXJndW1lbnRz
IGFuZCBwYXNzaW5nIHRoZW0gdG8gR3JhcGhpY3NDb250ZXh0IHNob3VsZCBiZSBzdWZmaWNpZW50
LgorICAgICAgICBUaGlzIHdpbGwgbWFrZSBhZGRpbmcgYSBuZXcgRGlzcGxheUxpc3RJdGVtIGVh
c2llciBhbmQgaW4gbWFrZXMgdGhlIGNvZGUKKyAgICAgICAgYSBsb3Qgc2hvcnRlci4KKworICAg
ICAgICBUaGlzIHBhdGNoIHRlbXBsYXRpemVzIHRoZSBEaXNwbGF5TGlzdEl0ZW1zIGNsYXNzZXMg
YW5kIHVzZXMgc3RkOjp0dXBsZSB0bworICAgICAgICBzdG9yZSB0aGUgYXJndW1lbnRzLiBUaGUg
R3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCAKKyAgICAg
ICAgdG8gdGhlIHRlbXBsYXRlIGFsb25nIHdpdGggdGhlIHR5cGVzIG9mIHRoZSBzdGQ6OnR1cGxl
IGl0ZW1zLiBUaGUgY2xhc3MKKyAgICAgICAgaGllcmFyY2h5IGlzIGEgbGl0dGxlIGJpdCBkaWZm
ZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lOgorCisgICAgICAgIC0tIEl0ZW06IFRoaXMgaXMg
dGhlIGJhc2UgY2xhc3MgYW5kIHRoaXMgaXMgd2hhdCBEaXNwbGF5TGlzdCBzdG9yZXMuCisgICAg
ICAgIC0tIEdlb210cnlJdGVtOiBJdCBpcyBkZXJpdmVkIGZyb20gSXRlbSBhbmQgdGhlIG9ubHkg
ZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAgICAgIGl0IGFuZCBJdGVtIGlzIGl0IGtub3dzIHRoZSBl
eHRlbnQgb2YgdGhlIEl0ZW0uCisgICAgICAgIC0tIEdyYXBoaWNzSXRlbTogSXQncyBhIHRlbXBs
YXRlIGNsYXNzIHdoaWNoIHRha2VzIGEgcG9pbnRlciB0byBhIEdyYXBoaWNzQ29udGV4dAorICAg
ICAgICBmdW5jdGlvbiwgc2V0IG9mIGFyZ3VtZW50cycgdHlwZXMuIEl0cyBjb25zdHJ1Y3RvciBz
YXZlcyB0aGUgYXJndW1lbnRzIGluCisgICAgICAgIHN0ZDo6dHVwbGUuIEl0cyBhcHBseSBtZXRo
b2QgY2FsbHMgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiBieSBwYXNzaW5nCisgICAgICAg
IHRoZSBhcmd1bWVudHMgaXQgc3RvcmVzLgorICAgICAgICAtLSBTZXR0aW5nSXRlbTogSXQgaXMg
ZGVyaXZlZCBmcm9tIEl0ZW0gYW5kIEdyYXBoaWNzSXRlbS4KKyAgICAgICAgLS0gRHJhd2luZ0l0
ZW06IEl0IGlzIGRlcml2ZWQgZnJvbSBHZW9tdHJ5SXRlbSBhbmQgR3JhcGhpY3NJdGVtLgorCisg
ICAgICAgIE5vdGVzIGFuZCBzb21lIGRyYXdiYWNrcyBvZiB0aGlzIHBhdGNoIGFyZToKKyAgICAg
ICAgLS0gVGhlIERpc3BsYXlMaXN0IHJlcGxheWluZyBiYWNrIGZ1bmN0aW9uIHNob3VsZCBiZSBt
ZXRob2RzIG9mIEdyYXBoaWNzQ29udGV4dC4KKyAgICAgICAgLS0gVGhlIG9wZXJhdG9yIDw8IGhh
cyB0byBiZSBkZWZpbmVkIGZvciBhbGwgdGhlIGFyZ3VtZW50cycgdHlwZXMuCisgICAgICAgIC0t
IFdoZW4gYW4gYXJndW1lbnRzIGlzIGEgUmVmQ291bnRlZCBhbmQgdGhlIEdyYXBoaWNzQ29udGV4
IGZ1bmN0aW9uIHRha2VzCisgICAgICAgIGEgcmF3IHBvaW50ZXIgb3IgcmVmZXJlbmNlIHRvIHRo
ZSBvYmplY3QgaXRzZWxmLCB0aGUgR3JhcGhpY3NJdGVtIGNhbiBzdG9yZQorICAgICAgICBhIFJl
ZiBvciBhIFJlZlB0ciB0byB0aGUgb2JqZWN0LiBUaGUgaW1wbGljaXQgY2FzdGluZyBvZiBSZWZQ
dHIgYW5kIFJlZgorICAgICAgICB3aWxsIGRvIHRoZSBtYWdpYyB3aGVuIHRoZSBhcmd1bWVudHMg
YXJlIHBhc3NlZCB0byBHcmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250Lmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5
U3RhdGVDaGFuZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5
dGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXRlbXNE
ZXNjcmlwdG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXRlbURlc2NyaXB0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06Om5hbWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmFyZ3VtZW50TmFtZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZGVzY3JpcHRpb24gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OnNpemVJbkJ5
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRy
YW5zbGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJvdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNjYWxlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRl
OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0U3RhdGU6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBseSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFy
U2hhZG93OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5
cGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
OjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3Vu
ZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZTo6RHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3SW1hZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjphcHBseSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6RHJhd05h
dGl2ZUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TmF0aXZlSW1hZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmFwcGx5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6bG9jYWxC
b3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1JlY3RzOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZVJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VF
bGxpcHNlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xlYXJSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW06OmlzR2VvbWV0cnlJdGVtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
OjpJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZW9tZXRyeUl0ZW06OnNl
dEV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0cnlJdGVtOjpl
eHRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21ldHJ5SXRl
bTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdl
b21ldHJ5SXRlbTo6R2VvbWV0cnlJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpHcmFwaGljc0l0ZW06OkdyYXBoaWNzSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6R3JhcGhpY3NJdGVtOjphcmd1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVtOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVtOjppdGVyYXJ0ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0dGluZ0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0dGluZ0l0ZW06OlNldHRpbmdJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OnJlc3RvcmVJbmRleCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6c2V0UmVzdG9yZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6c3ViR2x5cGhCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmlzU3RhdGVJdGVtIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjppc1N0YXRlSXRlbVR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpzZXRFeHRl
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVt
OjpleHRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdJdGVtOjpleHRlbnRLbm93biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OlNhdmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6UmVzdG9yZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Um90YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJvdGF0ZTo6YW5nbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpTZXRT
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNh
cDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lQ2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaE9m
ZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Q2xlYXJTaGFkb3cpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6cmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpD
bGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0
VG9QYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXRUb1BhdGg6OnBhdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpwYXRoIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6d2luZFJ1bGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRo
OjpDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBoczo6YmxvY2tMb2NhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6c2V0QmxvY2tMb2NhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxBbmNob3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6
OmFuY2hvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3R2x5cGhzOjpnbHlwaHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OnNvdXJjZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpkZXN0aW5h
dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1RpbGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZGVzdGlu
YXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZEltYWdlOjp0aWxlU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OnNwYWNpbmcgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNj
YWxlZEltYWdlOjppbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OnNvdXJjZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlc3Rp
bmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpzb3VyY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVzdGluYXRpb24gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJu
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjppbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1BhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjp0aWxlUmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmRl
c3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0dGVybjo6cGhhc2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpzcGFjaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6Om9wYWNpdHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxh
eWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OnJlY3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0Ojpib3JkZXJUaGlj
a25lc3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdSZWN0OjpEcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmU6OnBvaW50MSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OnBvaW50MiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6
OnNldEJsb2NrTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmJsb2NrTG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQW5jaG9y
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGlu
ZXNGb3JUZXh0Ojpwb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6d2lkdGhzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojppc1ByaW50aW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNG
b3JUZXh0Ojpkb3VibGVMaW5lcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtl
cjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TGluZUZvckRvY3VtZW50TWFya2VyOjpwb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6d2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXI6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpyZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UGF0aDo6RHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpwYXRoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0
aDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdGb2N1c1JpbmdQYXRoOjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjb2xvciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRy
YXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpyZWN0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjp3aWR0
aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0Zv
Y3VzUmluZ1JlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3Q6OkZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6cmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29tcG9zaXRlT3BlcmF0
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxD
b21wb3NpdGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
b3VuZGVkUmVjdDo6cm91bmRlZFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OnJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOjpyb3VuZGVkSG9sZVJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjb2xv
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6cGF0aCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRo
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxs
aXBzZTo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmxpbmVXaWR0aCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ry
b2tlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
UGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VQYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OnJlY3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9r
ZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFy
UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGVhclJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBseVN0cm9r
ZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5
RmlsbFBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNj
YWxlRmFjdG9yOjpzY2FsZUZhY3RvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6cmVw
bGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oOgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I8PCk6CisKIDIwMTgtMDctMTcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2ViIEFuaW1hdGlvbnNdIEludGVycG9sYXRpb24gYmV0d2Vl
biBsZW5ndGhzIHdpdGggYW4gImF1dG8iIHZhbHVlIHNob3VsZCBiZSBkaXNjcmV0ZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oCmluZGV4IDFkY2U4Yjc1ODA3ZjBkZGY3YzVh
YjFmMTllNzUzOWJjNzI4ZDY5NzEuLmZlOTZhZmRjYmFkYjQwNTdmZDYxMDUyNjIyM2U5NWYwZGJk
ZWYxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvU2Vj
b25kcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogI2lmbmRlZiBfX09CSkNfXwpAQCAtMTAzLDYgKzEwNCwxMiBAQCBwcml2YXRlOgog
I2VuZGlmCiB9OwogCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQ29udHJvbFN0YXRlcyYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIENvbnRy
b2xTdGF0ZXMgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBmOWUw
NWY1NWY3NTY4YWVlMjFjYTg0OTY2NGJjM2Q2ZTU3ZTExYmVmLi5kZTI4ZjAyNzRkNmUzYjI0NGIy
ODczYzBiOWU3NmI3YjA4MDlhMTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5j
cHAKQEAgLTE2MywxMSArMTYzLDE2IEBAIHZvaWQgU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFdpZGdlCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkgfHwg
IWZyYW1lUmVjdCgpLmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgaWYgKCFmcmFtZVJlY3Qo
KS5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXRo
ZW1lKCkucGFpbnQoKnRoaXMsIGNvbnRleHQsIGRhbWFnZVJlY3QpKQotICAgICAgICBXaWRnZXQ6
OnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGNvbnRleHQuZHJhd1Njcm9sbGJhcigq
dGhpcywgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyOjpwbGF0Zm9ybVBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IXRoZW1lKCkucGFpbnQoKnRoaXMsIGNvbnRleHQsIHJlY3QpKQorICAgICAgICBXaWRnZXQ6OnBh
aW50KGNvbnRleHQsIHJlY3QpOwogfQogCiB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFRpbWVy
RmlyZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAppbmRleCA2MmY1MDQ0YTgzOTNi
ZTY0ZWViYmM2NDc1NDc1ZThiMmUyZDcyMDI0Li5jMGQ0MzBhZDNkYjMzOTllNmUzNzVlZmU4YzM3
OWVjNzhhN2UwMjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApAQCAtODQsNiAr
ODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3Nl
ZFBvcyA9IHA7IH0KIAogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCwgV2lkZ2V0OjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luKSBvdmVycmlkZTsKKyAgICB2b2lkIHBs
YXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgYm9v
bCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldEVuYWJsZWQoYm9vbCk7CkBAIC0xODIsNiArMTgzLDEyIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBpc1Njcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKK2lu
bGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxi
YXImKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBTY3JvbGxiYXIgbWVtYmVycyB0byB0aGUg
VGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0lER0VUKFNjcm9sbGJhciwgaXNTY3JvbGxi
YXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAppbmRleCBjMGFmMTkyYjFkMTUyNWIwNWFk
M2FmNWZjODA5NDg3YzdiMjYxMGUyLi42NGJiNGY3OGRiZjg3NGEwMWZjMWIyY2MyMThkZjU2Nzcx
OTA4ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCkBAIC01Nyw3ICs1NywxMiBAQCBi
b29sIFRoZW1lOjpjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25z
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBUaGVtZTo6cGFpbnQoQ29udHJvbFBhcnQs
IENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCwgU2Nyb2xsVmlldyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKK3ZvaWQgVGhlbWU6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0
YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSkKK3sKKyAgICBjb250ZXh0LmRyYXdUaGVtZSgqdGhpcywgcGFydCwgc3RhdGVz
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3Rvciwg
cGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7
Cit9CisKK3ZvaWQgVGhlbWU6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJv
bFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZs
b2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKaW5k
ZXggZThjZWMzNWQ1OTE2YmNkZWIxZGUzOTg4YWEzNjliNWJlMjQ0ZTAzMi4uZDYzMjU0YmNhZjM4
NDZmNzIyNTU5ZWVlYTJlNWNlNzkzYTk0NTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDcgKzY5LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENv
bnRyb2xQYXJ0KSBjb25zdDsKIAogICAgIC8vIE1ldGhvZCBmb3IgcGFpbnRpbmcgYSBjb250cm9s
LiBUaGUgcmVjdCBpcyBpbiB6b29tZWQgY29vcmRpbmF0ZXMuCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiwgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0
ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKyAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRS
ZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBl
YXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1QYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNv
bnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCosIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVt
QXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CiAKICAgICAvLyBTb21lIGNvbnRy
b2xzIG1heSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVycyAoZS5nLiwgdGhlIGNoZWNrIG9u
IGFuIE9TIFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250cm9scyByZXBhaW50LAogICAgIC8v
IHRoZSB0aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlzIGluZmxhdGVkIHJlY3QgdG8gdGhl
IGVuZ2luZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRoZSB3aG9sZSBjb250cm9sLgpAQCAt
ODgsNSArOTAsMTEgQEAgcHJpdmF0ZToKICAgICBUaGVtZShjb25zdCBUaGVtZSYpID0gZGVsZXRl
OwogICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFRoZW1lJikgPSBkZWxldGU7CiB9OworICAgIAor
aW5saW5lIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRoZW1l
JikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgVGhlbWUgbWVtYmVycyB0byB0aGUgVGV4dFN0
cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggZjMxZjI0NWE4MGJiZDcwYWNjZTYyMTE4NTQ5Y2QyZDQw
MGFjMjFmMy4uOTljZDgzYmZjYjA2M2Y1ZGQxMDJhZDQ0MjAwZTczOGIyYmUzYmZhZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTExNCw2ICsxMTUsNyBAQCBw
dWJsaWM6CiAgICAgZW51bSBjbGFzcyBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHsgQW55T3Jp
Z2luLCBBY2Nlc3NpYmxlT3JpZ2luT25seSB9OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9y
aWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luKTsK
KyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgaW52YWxpZGF0ZVJlY3QoYm91bmRzUmVjdCgpKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JikgPSAwOwog
CkBAIC0yNDQsNiArMjQ2LDEyIEBAIGlubGluZSB2b2lkIFdpZGdldDo6cmV0YWluUGxhdGZvcm1X
aWRnZXQoKQogCiAjZW5kaWYKIAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFdpZGdldCYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIFdpZGdl
dCBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KKyAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dJ
REdFVChUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCmluZGV4IDUyZWRiYWU5NDUzN2ZhNzIwZDQ3MTRiMTgxZWQyNmY3Mjdi
NmUyYmUuLjcxODU5ODZiMjMwYTM1MTdmY2Q2Y2E5Nzg1NmJiMmU2MjhmN2JjYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAg
LTM3MCw2ICszNzEsMTIgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3aWR0aDsKIH0KIAoraW5saW5lIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBGb250JikK
K3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgRm9udCBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFt
LgorICAgIHJldHVybiB0czsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRm9udF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZm
ZXIuaAppbmRleCAxNzUyZGNiZDA4ZThmNmNjNzk5YmU0NTYzN2NjY2ZjYzUyZTc4YzNjLi40NWYx
N2ZhY2Q3YjBlMWRhMmY1Y2ZjOTE1MGViYjJmZDVhZjY1MzMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPGNsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShDRykKICNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dHZW9tZXRyeS5oPgpAQCAtMjI4LDUgKzIyOSwxMSBAQCBw
cml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdseXBoQnVmZmVyJikKK3sKKyAgICAvLyBGSVhN
RTogZHVtcCB0aGUgR2x5cGhCdWZmZXIgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICBy
ZXR1cm4gdHM7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmgKaW5kZXggYzdmYzRjNmUzNjkzODBhNWU5YTc3MzEyNGY3NDBhNjNmZGI1
MTAwYi4uN2JmYmZmYTQ3Y2QyNDBlZDc3NmExMWUxOTIzNmJjZGMwMGRmY2RlOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsK
QEAgLTE1Niw0ICsxNTcsMTAgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybUdyYWRpZW50IG1fZ3Jh
ZGllbnQ7CiB9OwogCitpbmxpbmUgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEdyYWRpZW50JikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUg
R3JhZGllbnQgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IGM5NzMxYWE1MTk0ODY2Y2YzZmJhNWUwMzNjYzE4ZDczYzU4NjM3ZmEu
LmNjNzEzM2M2NzViMmQ4YmI0ZThjNWE4NzFmMjhlZDRhMTZmNTQzMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAt
MzEsMTAgKzMxLDE0IEBACiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUg
Ikljb24uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1
ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUaGVtZS5oIgorI2luY2x1ZGUgIldpZGdldC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtODQzLDYgKzg0Nyw1MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdN
b2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCiAgICAgc2V0UGxhdGZvcm1UZXh0RHJhd2lu
Z01vZGUobW9kZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SWNvbihJY29uJiBp
Y29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5k
cmF3SWNvbihpY29uLCByZWN0KTsKKyAgICBlbHNlCisgICAgICAgIGljb24ucGxhdGZvcm1QYWlu
dCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2lkZ2V0KFdp
ZGdldCYgd2lkZ2V0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9pbXBsKQorICAgICAg
ICBtX2ltcGwtPmRyYXdXaWRnZXQod2lkZ2V0LCByZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHdp
ZGdldC5wbGF0Zm9ybVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbC0+ZHJhd1Njcm9sbGJhcihzY3JvbGxi
YXIsIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsYmFyLnBsYXRmb3JtUGFpbnQoKnRo
aXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lKFRoZW1lJiB0
aGVtZSwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9h
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lz
dGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbXBsKQorICAgICAg
ICBtX2ltcGwtPmRyYXdUaGVtZSh0aGVtZSwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1
c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgZWxzZQorICAgICAg
ICB0aGVtZS5wbGF0Zm9ybVBhaW50KCp0aGlzLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpv
b21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3Is
IHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKK30KKwogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0xMTI5LDYgKzExNzcs
MTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQogICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNo
b3VsZEFudGlhbGlhcyk7CiAgICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5z
aG91bGRTbW9vdGhGb250cyk7CiB9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUpCit7Cisg
ICAgc3RhdGUuYXBwbHkoKnRoaXMpOworfQogCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hl
ZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCBjY2MyZDAzZTdlYWYxZmJiZWMyYTEyMWY1ODM1OTRiNjkwMTRlMTJjLi5mZWE5
YTk2Mjc1N2MzNDE5NDY3ODMwMzY3ZWMwNTkwMDQ4YzFhNDk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMjYsNiArMjYs
NyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKICNpbmNs
dWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgpAQCAtMzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJU
aGVtZVR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAKQEAgLTgwLDE2ICs4MiwyMCBAQCBjb25zdCBpbnQgY01pc3NwZWxsaW5n
TGluZVBhdHRlcm5HYXBXaWR0aCA9IDE7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBG
bG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU7CitjbGFzcyBJY29uOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRS
ZWN0OwotY2xhc3MgUm91bmRlZFJlY3Q7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKIGNsYXNzIFBhdGg7CitjbGFzcyBSb3VuZGVkUmVjdDsKK2NsYXNzIFNjcm9sbGJhcjsK
IGNsYXNzIFRleHRSdW47CitjbGFzcyBUaGVtZTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OworY2xhc3MgVVJMOworY2xhc3MgV2lkZ2V0OwogCiBlbnVtIFRleHREcmF3aW5nTW9kZSB7CiAg
ICAgVGV4dE1vZGVGaWxsID0gMSA8PCAwLApAQCAtMTE2LDYgKzEyMiwxMiBAQCBlbnVtIGNsYXNz
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIDogdWludDhfdCB7CiAgICAgQXV0b2NvcnJlY3Rpb25S
ZXBsYWNlbWVudCwKICAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMKIH07CisgICAgCitpbmxpbmUg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgSW1hZ2VQ
YWludGluZ09wdGlvbnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogY2xhc3MgUmVjb3JkZXI7CkBAIC0yMzMsNiArMjQ1LDEy
IEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7CiAgICAgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uIG1fb3JpZW50YXRpb25EZXNjcmlwdGlvbjsKICAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBtX2ludGVycG9sYXRpb25RdWFsaXR5OwogfTsKKyAgICAKK2lubGluZSBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBJbWFnZVBhaW50aW5nT3B0aW9u
cyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAKIHN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9
IGRlZmF1bHQ7CkBAIC0yNTUsNyArMjczLDYgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xhc3MgR3JhcGhpY3ND
b250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTQxMiw2ICs0MjksNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAogICAgIHZvaWQg
YXBwbHlTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIHZvaWQgYXBwbHlT
dGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCiAgICAgZW51
bSBSb3VuZGluZ01vZGUgewogICAgICAgICBSb3VuZEFsbFNpZGVzLApAQCAtNDQ4LDYgKzQ2Niwx
MSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYp
OwogI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdJY29uKEljb24mLCBjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2b2lkIGRyYXdXaWRnZXQoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQg
ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcmF3
VGhlbWUoVGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCosIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisKICAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7
CiAgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KTsKICAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAppbmRleCA2YmNm
NzY4YWRmZDg5ZWUwYjE5NmEzZWE2MmVlMDY4MGM4YWQxOGVlLi44NDY5MmM0ZDczMjg5OTM1MWU5
MzcwYzFlMDRhOTJhYTZjOTA3NmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCkBAIC03OCwxMyArNzgsMjAgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcywgU3Ryb2tlU3R5bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKKyNpZiBVU0UoQ0cpCiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0
IFBhdGgmKSA9IDA7CisjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIAorICAg
IHZpcnR1YWwgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENv
bnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHJlc3RvcmUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgK
aW5kZXggODYwZWE2OTZmZWI0ODViYWJhMzRmZWZjMDQxZDJlYzM4ODczNGI4My4uZTI1Y2E4OGVj
ODQ2MWFjMDYwNWE2ZDI2NzVhYWFjNWNjOGFjZmZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ljb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMSwxMCArMjEsMTIgQEAKICNpZm5kZWYgSWNvbl9oCiAjZGVmaW5l
IEljb25faAogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgi
CkBAIC00OCw3ICs1MCwxMiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB+SWNvbigp
OwogCi0gICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KQorICAgIHsKKyAgICAgICAgY29udGV4dC5kcmF3SWNvbigqdGhpcywgcmVjdCk7Cisg
ICAgfQorCisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYpIGNvbnN0OwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBSZWZQdHI8
SWNvbj4gY3JlYXRlKEhJQ09OIGhJY29uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihoSWNv
bikpOyB9CkBAIC03OSw2ICs4NiwxMiBAQCBwcml2YXRlOgogICAgIEdka1BpeGJ1ZiogbV9pY29u
OwogI2VuZGlmCiB9OworICAgIAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEljb24mKQoreworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBJY29uIG1l
bWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCA4Y2ZiMWU5MjI1N2U0MzI1MjcwNmFlYTU0NWI0
MjYzOTRmZTk5ZmQ2Li5jMTY2ZjFiYjY4NzMwNGEwY2JkODQwNDI3NjQ4YzIxOTA3M2FhMmNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4s
IGZsb2F0IHdpZHRoLCBib28KICAgICBkcmF3TGluZXNGb3JUZXh0KG9yaWdpbiwgRGFzaEFycmF5
IHsgd2lkdGgsIDAgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJs
aW5lcywgU3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzI5
LDcgKzMyOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHJva2VUaGlja25lc3MoKSk7
CisgICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAppbmRleCBlMDZlNDAzMWQ4
NzlkMTkwMzY5YWFjODM4NzY4MDQ5ODRjNjVhN2NkLi4zNWNiNzdkZTNlNzc2OTMwY2U3ZjI2MzBi
MWY4OTI2MjhkZWI2ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAK
QEAgLTI5NCw5ICsyOTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaQogICAgIENhaXJvOjpk
cmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQog
ewotICAgIFVOVVNFRF9QQVJBTShzdHJva2VUaGlja25lc3MpOworICAgIFVOVVNFRF9QQVJBTShz
dHJva2VTdHlsZSk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwogICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwg
d2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CkBAIC0zMTIsMTAgKzMxMiw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmls
bENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0
aChjb25zdCBQYXRoJikKLXsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwpAQCAtMzI3
LDYgKzMyMywyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsbwogICAgIFVOVVNFRF9QQVJBTShv
ZmZzZXQpOwogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
cywgd2lkdGgsIGNvbG9yKTsKIH0KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lN
UExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdXaWRnZXQoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9J
TVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKQoreworICAgIEFTU0VS
VF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0
YXRlcywgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQsIGJvb2ws
IGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAppbmRleCA5OTdjYmRkYTUxYzNmMWMwYzUyZDUwZmNjZWE0ZTU4NTk1YjhhNzli
Li5hMDRmNmFlNGE5MGVkMGVhZjIzNWU5MDU3MDJiMWU5Mzg2ZjBkMTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtNzksMTQgKzc5LDE4IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2ws
IFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZHJhd0ljb24o
SWNvbiYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1dpZGdldChX
aWRnZXQmLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3U2Nyb2xsYmFy
KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdUaGVt
ZShUaGVtZSYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6
b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIG92ZXJyaWRlOworCiAgICAgdm9pZCBzYXZl
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAppbmRleCBkMjk1MDcxNzhjYjAwZTU2OWRmMWIxYzY2Yjk5ZmRhNzlhZDI0N2NmLi5kNWIy
MjA5NmZmMDA4NmRiOGNlYmU0YTgxNjU2YTg2NmM5MTMzMWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CkBAIC0xNTg3LDcgKzE1ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9y
VGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNrbmVz
cygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHBy
aW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBhNDBmODlmNzY4ODU0ZTgwNDQ5MmIw
YzFhNWMzYTBmY2I2ZGU3ODZmLi5hNmJlMWRjMmU2N2E5OGRkMTM4NzcwZmRiZjFlMzJhMjI1ZDA1
ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTExNCw4ICsxMTQsOCBAQCB2b2lk
IERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogc2l6ZV90IERpc3BsYXlM
aXN0OjpzaXplSW5CeXRlcygpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAg
Zm9yIChhdXRvJiByZWYgOiBtX2xpc3QpCi0gICAgICAgIHJlc3VsdCArPSBJdGVtOjpzaXplSW5C
eXRlcyhyZWYpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkKKyAgICAgICAgcmVzdWx0
ICs9IGl0ZW0tPnNpemVJbkJ5dGVzKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaAppbmRleCBkNDQzN2UzZDQxYmUxMjJjYzg5MDY1MjQ3YzkyMjI2ZTc4MWRj
NzdiLi5mODYyYjg3OGI1MDRhMGQ0ZTJkZGI4MTBjZThmZmE4NjJiZTA0YzUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaApAQCAtNDEsOCArNDEsNiBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAK
IG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIEl0ZW07Ci0KIGVudW0gQXNUZXh0Rmxh
ZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCiAgICAgSW5jbHVk
ZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAppbmRleCAxZmNlZThiMzg0MzczMDM2ZDIzZjA5MTEyYWI2M2U3OTY5NWVj
MDQzLi42YzQ3NmU5Y2MyZGQyMTFhZjhjMmE4ZDMyMDgzNjI5YTYwYWZjMzU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExMjEgKzI2LDkwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogCi0jaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLS8vIFNob3VsZCBtYXRjaCBS
ZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCi1zdGF0aWMgY29uc3QgZmxvYXQg
cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFM
T0dfRElTQUJMRUQKLVdURjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgVGV4dFN0cmVhbSB0czsKLSAgICB0cyA8PCAqdGhpczsKLSAgICByZXR1cm4gdHMucmVsZWFz
ZSgpLnV0ZjgoKTsKLX0KLSNlbmRpZgotCi1zaXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29uc3Qg
SXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3RhdGU+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2lu
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PENsaXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXRU
b1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFn
ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKSk7
Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4o
aXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UmVj
dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNG
b3JUZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVudE1h
cmtlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UGF0
aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsQ29t
cG9zaXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxGaWxsUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxT
dHJva2VSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxT
dHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZp
bGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RmlsbFBhdHRl
cm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKK3VzaW5nIEl0ZW1EZXNjcmlwdG9y
ID0gc3RydWN0IHsKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVu
dHNOYW1lczsKK307CisKK3N0YXRpYyBjb25zdCBWZWN0b3I8SXRlbURlc2NyaXB0b3I+JiBpdGVt
c0Rlc2NyaXB0b3JzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEl0ZW1E
ZXNjcmlwdG9yPj4gaXRlbXNEZXNjcmlwdG9ycyA9IFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4oewor
ICAgICAgICB7ICJzYXZlIiwgeyB9IH0sCisgICAgICAgIHsgInJlc3RvcmUiLCB7IH0gfSwKKyAg
ICAgICAgeyAic2V0LXN0YXRlIiwgeyAic3RhdGUtY2hhbmdlIiB9IH0sCisgICAgICAgIHsgInRy
YW5zbGF0ZSIsIHsgIngiLCAieSIgfSB9LAorICAgICAgICB7ICJyb3RhdGUiLCB7ICJhbmdsZSIg
fSB9LAorICAgICAgICB7ICJzY2FsZSIsIHsgInNpemUiIH0gfSwKKyAgICAgICAgeyAiY29uY2F0
ZW5hdGUtY3RtIiwgeyAiY3RtIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWNhcCIsIHsgImxp
bmUtY2FwIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWRhc2giLCB7ICJkYXNoLWFycmF5Iiwg
ImRhc2gtb2Zmc2V0IiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWpvaW4iLCB7ICJsaW5lLWpv
aW4iIH0gfSwKKyAgICAgICAgeyAic2V0LW1pdGVyLWxpbWl0IiwgeyAibWl0cmUtbGltaXQiIH0g
fSwKKyAgICAgICAgeyAiY2xlYXItc2hhZG93IiwgeyB9IH0sCisgICAgICAgIHsgImNsaXAiLCB7
ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsaXAtb3V0IiwgeyAicmVjdCIgfSB9LAorICAgICAg
ICB7ICJjbGlwLW91dC10by1wYXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7ICJjbGlwLXBh
dGgiLCB7ICJwYXRoIiwgIndpbmQtcnVsZSIgfSB9LAorICAgICAgICB7ICJhcHBseS1zdHJva2Ut
cGF0dGVybiIsIHsgfSB9LAorICAgICAgICB7ICJhcHBseS1maWxsLXBhdHRlcm4iLCB7IH0gfSwK
KyAgICAgICAgeyAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciIsIHsgInNjYWxlLWZhY3RvciIg
fSB9LAorCisgICAgICAgIHsgImJlZ2luLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgIm9wYWNpdHki
IH0gfSwKKyAgICAgICAgeyAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgfSB9LAorICAgICAg
ICB7ICJkcmF3LWdseXBocyIsIHsgImZvbnQiLCAiZ2x5cGgtYnVmZmVyIiwgImZyb20iLCAibnVt
LWdseXBocyIsICJwb2ludCIsICJmb250LXNtb290aGluZyIgfSB9LAorICAgICAgICB7ICJkcmF3
LWltYWdlIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInNvdXJjZS1yZWN0IiwgImltYWdlLXBh
aW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAiZHJhdy10aWxlZC1pbWFnZSIsIHsgImlt
YWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcG9pbnQiLCAidGlsZS1zaXplIiwgInNwYWNpbmci
LCAiaW1hZ2UtcGFpbnRpbmctb3B0aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LXRpbGVkLXNj
YWxlZC1pbWFnZSIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcmVjdCIsICJ0aWxl
LXNjYWxlZmFjdG9yIiwgImgtcnVsZSIsICJ2LXJ1bGUiLCAiaW1hZ2UtcGFpbnRpbmctb3B0aW9u
cyIgfSB9LAorICAgICAgICB7ICJkcmF3LW5hdGl2ZS1pbWFnZSIsIHsgImltYWdlIiwgInNlbGYt
c2l6ZSIsICJkZXN0LXJlY3QiLCAic291cmNlLXJlY3QiLCAiY29tcG9zaXRlLW9wZXJhdG9yIiwg
ImJsZW5kLW1vZGUiLCAiaW1hZ2Utb3JpZW50YXRpb24iIH0gfSwKKyAgICAgICAgeyAiZHJhdy1w
YXR0ZXJuIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInRpbGUtcmVjdCIsICJwYXR0ZXJuLXRy
YW5zZm9ybSIsICJwaGFzZSIsICJzcGFjaW5nIiwgImNvbXBvc2l0ZS1vcGVyYXRvciIsICJibGVu
ZC1tb2RlIiB9IH0sCisgICAgICAgIHsgImRyYXctcmVjdCIsIHsgInJlY3QiLCAiYm9yZGVyLXRo
aWNrbmVzcyIgfSB9LAorICAgICAgICB7ICJkcmF3LWxpbmUiLCB7ICJwb2ludC0xIiwgInBvaW50
LTIiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1saW5lcy1mb3ItdGV4dCIsIHsgInBvaW50IiwgIndp
ZHRocyIsICJpcy1wcmludGluZyIsICJkb3VibGUtbGluZXMiLCAic3Ryb2tlLXN0eWxlIiB9IH0s
CisgICAgICAgIHsgImRyYXctbGluZS1mb3ItZG9jdW1lbnQtbWFya2VyIiwgeyAicG9pbnQiLCAi
d2lkdGgiLCAiZG9jdW1lbnQtbWFya2VyLWxpbmUtc3R5bGUiIH0gfSwKKyAgICAgICAgeyAiZHJh
dy1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXBhdGgiLCB7ICJwYXRo
IiB9IH0sCisgICAgICAgIHsgImRyYXctZm9jdXMtcmluZy1wYXRoIiwgeyAicGF0aCIsICJ3aWR0
aCIsICJvZmZzZXQiLCAiY29sb3IiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1mb2N1cy1yaW5nLXJl
Y3RzIiwgeyAicmVjdHMiLCAid2lkdGgiLCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAgICAg
IHsgImRyYXctaWNvbiIsIHsgImljb24iLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXdp
ZGdldCIsIHsgIndpZGdldCIsICJyZWN0In0gfSwKKyAgICAgICAgeyAiZHJhdy1zY3JvbGxiYXIi
LCB7ICJzY3JvbGxiYXIiLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXRoZW1lIiwgeyAi
dGhlbWUiLCAiY29udHJvbC1wYXJ0IiwgImNvbnRyb2wtc3RhdGVzIiwgInpvb21lZC1yZWN0Iiwg
Inpvb20tZmFjdG9yIiwgInNjcm9sbC12aWV3IiwgImRldmljZS1zY2FsZS1mYWN0b3IiLCAicGFn
ZS1zY2FsZS1mYWN0b3IiLCAidXNlLXN5c3RlbS1hcHBlYXJhbmNlIiwgInVzZS1kYXJrLWFwcGVh
cmFuY2UiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0IiwgeyAicmVjdCIgfSB9LAorICAgICAg
ICB7ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciIsIHsgInJlY3QiLCAiY29sb3IiIH0gfSwKKyAgICAg
ICAgeyAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiLCB7ICJyZWN0IiwgImdyYWRpZW50IiB9IH0s
CisgICAgICAgIHsgImZpbGwtY29tcG9zaXRlZC1yZWN0IiwgeyAicmVjdCIsICJjb2xvciIsICJj
b21wb3NpdGUtb3BlcmF0b3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAgICB7ICJmaWxsLXJv
dW5kZWQtcmVjdCIsIHsgInJlY3QiLCAiY29sb3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAg
ICB7ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiLCB7ICJyZWN0IiwgInJvdW5kZWQtaG9s
ZS1yZWN0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsgImZpbGwtcGF0aCIsIHsgInBhdGgiIH0g
fSwKKyAgICAgICAgeyAiZmlsbC1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJz
dHJva2UtcmVjdCIsIHsgInJlY3QiLCAibGluZS13aWR0aCIgfSB9LAorICAgICAgICB7ICJzdHJv
a2UtcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAgICAgeyAic3Ryb2tlLWVsbGlwc2UiLCB7ICJy
ZWN0IiB9IH0sCisgICAgICAgIHsgImNsZWFyLXJlY3QiLCB7ICJyZWN0IiB9IH0KKyAgICB9KTsK
KworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KEl0ZW1UeXBlOjpNYXgpID09IGl0ZW1z
RGVzY3JpcHRvcnMuZ2V0KCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlwdG9yczsK
K30KKworc3RhdGljIGNvbnN0IEl0ZW1EZXNjcmlwdG9yJiBpdGVtRGVzY3JpcHRvcihJdGVtVHlw
ZSBpdGVtVHlwZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtVHlwZSkg
PCBpdGVtc0Rlc2NyaXB0b3JzKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlwdG9y
cygpW3N0YXRpY19jYXN0PHNpemVfdD4oaXRlbVR5cGUpXTsKIH0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBpdGVtKQot
ewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAgaWYgKGl0
ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAgICBlbHNl
Ci0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKICAgICAKLSAgICB0cy5lbmRHcm91cCgpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTYXZlJiBpdGVtKQotewotICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIGl0ZW0ucmVzdG9yZUluZGV4KCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgVHJhbnNs
YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVtLnko
KSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
b3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5nbGUo
KSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY2Fs
ZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgpKTsK
LQotICAgIHJldHVybiB0czsKLX0KLQotQ29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLXZvaWQg
Q29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYgaXRl
bSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwotCi0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKLX0KLQotdm9p
ZCBTZXRTdGF0ZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIG1f
c3RhdGUuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQotewotICAg
IHRzIDw8IHN0YXRlLnN0YXRlKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVD
YXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rhc2hP
ZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4m
IGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGluZUpvaW4u
bGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGltaXQ6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldE1p
dGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJMaW1pdCgp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7Ci19
Ci0KLXZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcCYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENs
aXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LmNsaXBPdXQobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXQmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBDbGlw
T3V0VG9QYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAg
Y29udGV4dC5jbGlwT3V0KG1fcGF0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQotewotICAgIHRz
LmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
LXZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUGF0aCYgaXRl
bSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJ3aW5kLXJ1bGUiLCBpdGVtLndpbmRSdWxlKCkpOwotICAgIHJldHVybiB0
czsKLX0KLQotRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQo
Y29uc3RfY2FzdDxGb250Jj4oZm9udCkpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2Nh
dGlvbikKLSAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCi0gICAgLCBtX3Ntb290aGlu
Z01vZGUoc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2dseXBocy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGNvdW50KTsKLSAgICBtX2FkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIG1f
Z2x5cGhzLnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICBtX2FkdmFuY2VzLnVu
Y2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7Ci0gICAgfQotICAgIGNvbXB1dGVCb3VuZHMoKTsK
LX0KLQotaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZmZXIo
KSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hZGQobV9nbHlw
aHNbaV0sICZtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0ZUds
eXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhp
bmdNb2RlKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgYWN0dWFsbHkgdGFrZSB0aGUgZXh0ZW50cyBvZiB0
aGUgZ2x5cGhzIGludG8gY29uc2lkZXJhdGlvbi4gSXQgYXNzdW1lcyB0aGF0Ci0gICAgLy8gdGhl
IGdseXBoIGxpZXMgZW50aXJlbHkgd2l0aGluIGl0cyBbKGFzY2VudCArIGRlc2NlbnQpLCBhZHZh
bmNlXSByZWN0LgotICAgIGZsb2F0IGFzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5mbG9h
dEFzY2VudCgpOwotICAgIGZsb2F0IGRlc2NlbnQgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCkuZmxv
YXREZXNjZW50KCk7Ci0gICAgRmxvYXRQb2ludCBjdXJyZW50ID0gdG9GbG9hdFBvaW50KGxvY2Fs
QW5jaG9yKCkpOwotICAgIHNpemVfdCBudW1HbHlwaHMgPSBtX2dseXBocy5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBHbHlwaEJ1
ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07Ci0gICAgICAgIEZsb2F0UmVjdCBn
bHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNjZW50LCBh
ZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOwotICAgICAgICBtX2JvdW5kcy51bml0
ZShnbHlwaFJlY3QpOwotCi0gICAgICAgIGN1cnJlbnQubW92ZShhZHZhbmNlLndpZHRoKCksIGFk
dmFuY2UuaGVpZ2h0KCkpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdHbHlwaHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CitTdHJp
bmcgSXRlbTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gbV9i
b3VuZHM7Ci0gICAgbG9jYWxCb3VuZHMubW92ZShtX2Jsb2NrTG9jYXRpb24ueCgpLCBtX2Jsb2Nr
TG9jYXRpb24ueSgpKTsKLSAgICByZXR1cm4gbG9jYWxCb3VuZHM7CisgICAgcmV0dXJuIGl0ZW1E
ZXNjcmlwdG9yKG1fdHlwZSkubmFtZTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCitTdHJpbmcgSXRlbTo6
YXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29uc3QKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1
ZmYuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2Nh
dGlvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxB
bmNob3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hv
clBvaW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMoKS5z
aXplKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Ci0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQotICAgICwgbV9pbWFnZShp
bWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShz
b3VyY2UpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25z
KQotewotfQotCi12b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGlu
YXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRl
bSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci1EcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkRyYXdUaWxlZEltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVz
dGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3Rp
bGVTaXplKHRpbGVTaXplKQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX2ltYWdl
UGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi12b2lkIERyYXdU
aWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAg
Y29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3Nv
dXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdUaWxlZEltYWdlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2Uo
KSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhS
dWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGls
ZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2NhbGVG
YWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1fdlJ1
bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQotewotfQotCi12b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2lt
YWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1f
aFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVk
SW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotRHJhd05hdGl2ZUltYWdlOjpE
cmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3TmF0aXZlSW1hZ2UpCi0jaWYgVVNFKENHKQotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0b3Jl
IGFuIGltYWdlIGZvciBDYWlyby4KLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0jZW5kaWYKLSAgICAs
IG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCi0g
ICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgLCBtX29wKG9wKQotICAg
ICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotI2VuZGlmCi0gICAgLCBtX29yaWVudGF0aW9uKG9y
aWVudGF0aW9uKQotewotI2lmICFVU0UoQ0cpCi0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsKLSAg
ICBVTlVTRURfUEFSQU0ob3ApOwotICAgIFVOVVNFRF9QQVJBTShibGVuZE1vZGUpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0jaWYgVVNFKENHKQotICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1f
aW1hZ2UsIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBtX3NyY1JlY3QsIG1fb3AsIG1fYmxl
bmRNb2RlLCBtX29yaWVudGF0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBGSVhNRTogZHVtcCBtb3JlIHN0
dWZmLgotICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLURyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd1BhdHRlcm4pCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wYXR0ZXJuVHJhbnNm
b3JtKHBhdHRlcm5UcmFuc2Zvcm0pCi0gICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQotICAgICwg
bV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKLSAgICAsIG1fcGhhc2UocGhhc2UpCi0gICAgLCBtX3Nw
YWNpbmcoc3BhY2luZykKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShibGVuZE1v
ZGUpCi17Ci19Ci0KLXZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1f
ZGVzdGluYXRpb24sIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9z
cGFjaW5nLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKLXsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0
dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBo
YXNlIiwgaXRlbS5waGFzZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBpdGVt
LnNwYWNpbmcoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3UmVjdCht
X3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQotewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRo
aWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwotICAgIHJldHVybiB0czsKLX0KLQot
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZHM7Ci0gICAgYm91bmRz
LmZpdFRvUG9pbnRzKG1fcG9pbnQxLCBtX3BvaW50Mik7Ci0gICAgcmV0dXJuIGJvdW5kczsKLX0K
LQotdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuZHJhd0xpbmUobV9wb2ludDEsIG1fcG9pbnQyKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lJiBp
dGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0xIiwgaXRlbS5wb2ludDEoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJwb2ludC0yIiwgaXRlbS5wb2ludDIoKSk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi12b2lkIERyYXdMaW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV93aWR0
aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZhbHVl
IGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVC
b3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgpIHJldHVybnMuCi0KLSAgICBpZiAoIW1f
d2lkdGhzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRS
ZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9rZVdp
ZHRoKSk7Ci0gICAgcmVzdWx0LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNuYXBw
aW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhlIENU
TSBpbnRvIGFjY291bnQuCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0
ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9u
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hv
cigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndpZHRocygpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50aW5nKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQg
RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihtX3BvaW50
LCBtX3dpZHRoLCBtX3N0eWxlKTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1ZSBl
cXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIoKSByZXR1cm5zLgotCi0gICAgRmxvYXRSZWN0IHJlc3VsdChtX3BvaW50LCBG
bG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOwotICAgIHJlc3Vs
dC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZvciAibWlz
c3BlbGxpbmcgZG90IiBzbmFwcGluZy4KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKLX0KLQot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdF
bGxpcHNlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSNpZiBVU0UoQ0cpCi0gICAgY29udGV4dC5kcmF3UGF0
aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8v
IEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZzZXQs
IG1fY29sb3IpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1Bh
dGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgRmxv
YXRSZWN0IHJlc3VsdCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgcmVzdWx0Lmlu
ZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdG
b2N1c1JpbmdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgo
KSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgdHMuZHVtcFByb3BlcnR5
KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBp
dGVtLm9mZnNldCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9jdXNS
aW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKLX0KLQotc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgIGZvciAo
YXV0byYgcmVjdCA6IG1fcmVjdHMpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0KTsKLSAgICBy
ZXN1bHQuaW5mbGF0ZShwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0
ZW0ucmVjdHMoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
LXZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkKLXsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQg
RmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhD
b2xvciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9ncmFkaWVudC5n
ZXQoKSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBsb2cgZ3JhZGll
bnQuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xv
ciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29s
b3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJh
dGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJi
bGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVuZE1v
ZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yb3VuZGVkUmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIsIGl0
ZW0ucm91bmRlZEhvbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVt
LmNvbG9yKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFBhdGgobV9w
YXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRo
KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9y
ZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
ZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IFN0
cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0g
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKLSAgICBib3VuZHMuZXhwYW5kKG1fbGluZVdp
ZHRoLCBtX2xpbmVXaWR0aCk7Ci0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotdm9pZCBTdHJva2VS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5zdHJva2VSZWN0KG1fcmVjdCwgbV9saW5lV2lkdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkKLXsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gdGFr
ZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhCeVN0
cm9raW5nUGF0aCgpLgotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tl
VGhpY2tuZXNzKCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5nUmVj
dCgpOwotICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3Mp
OwotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3Bh
dGgpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0
aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJv
a2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlja25l
c3MoKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Ci0gICAgYm91bmRzLmV4cGFu
ZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgcmV0dXJuIGJvdW5kczsK
LX0KLQotdm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVjdCk7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VFbGxp
cHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJSZWN0
JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG1fb3BhY2l0eSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQotewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOwotICAgIHJldHVybiB0czsKLX0KLQot
dm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAotewotICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLX0KLQotI2lm
IFVTRShDRykKLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKLX0K
LQotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2NhbGVG
YWN0b3IpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgSXRlbVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0
b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTog
dHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAi
c2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwg
ImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTog
dHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6
IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMgPDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFnZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8PCAi
ZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBicmVhazsKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5hdGl2
ZS1pbWFnZSI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46
IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVj
dDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
OiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVz
Rm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMtZm9yLXRleHQiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1mb3It
ZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6
IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
aDogdHMgPDwgImRyYXctcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOiB0cyA8PCAiZHJhdy1mb2N1cy1yaW5nLXBhdGgiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmctcmVj
dHMiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVj
dCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAi
ZmlsbC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3Np
dGVkLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRz
IDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8ICJmaWxsLXBhdGgiOyBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMgPDwgImZpbGwtZWxsaXBz
ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHRzIDw8ICJzdHJva2Ut
cmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHRzIDw8ICJzdHJv
a2UtcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHRzIDw8
ICJzdHJva2UtZWxsaXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDog
dHMgPDwgImNsZWFyLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyOiB0cyA8PCAiYmVnaW4tdHJhbnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJlbmQtdHJhbnNw
YXJlbmN5LWxheWVyIjsgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5U3Ryb2tlUGF0dGVybjogdHMgPDwgImFwcGx5LXN0cm9rZS1wYXR0ZXJuIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0
dGVybiI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFrOwot
ICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBTY29w
ZSBncm91cCh0cyk7Ci0gICAgdHMgPDwgaXRlbS50eXBlKCk7Ci0KLSAgICAvLyBGSVhNRTogTWFr
ZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJhdGlvbiBz
d2l0Y2hlcwotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTYXZlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxU
cmFuc2xhdGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTY2Fs
ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0
TGluZUpvaW4+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8Q2xpcD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRoPihp
dGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d0ltYWdlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Rp
bGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TmF0aXZlSW1h
Z2U+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdQYXR0ZXJuOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRlbSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRoPihp
dGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RmlsbFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29s
b3I+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+
KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PEZpbGxQYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBh
dGg+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxCZWdp
blRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8QXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8gSXRl
bXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCi0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
LSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSNpZiBVU0UoQ0cpCi0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5RmlsbFBhdHRlcm46Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRv
dzoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKKyAgICBBU1NFUlQoaW5k
ZXggPCBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLmFyZ3VtZW50c05hbWVzLnNpemUoKSk7CisgICAg
cmV0dXJuIGl0ZW1EZXNjcmlwdG9yKG1fdHlwZSkuYXJndW1lbnRzTmFtZXNbaW5kZXhdOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCBmMDBlYTdlODVjYjFjZDUy
NDY5YmUxNTg4ZDAxMWU4Mzg0NzNjMTNjLi42MjQ0ZWQwYmI3MjcwZDMyMmY1MDcxZmIyOTg4N2Rk
M2UxODU4MGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMzIgKzMxLDMy
IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiVGhlbWUuaCIKKyNpbmNsdWRl
ICJUaGVtZVR5cGVzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNHLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0
U3RyZWFtOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJbWFnZVBhaW50aW5n
T3B0aW9uczsKLQogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogZW51bSBjbGFzcyBJdGVtVHlw
ZSB7Ci0gICAgU2F2ZSwKKyAgICBNaW4gPSAwLAorICAgIFNhdmUgPSBNaW4sCiAgICAgUmVzdG9y
ZSwKKyAgICBTZXRTdGF0ZSwKICAgICBUcmFuc2xhdGUsCiAgICAgUm90YXRlLAogICAgIFNjYWxl
LAogICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldFN0YXRlLAogICAgIFNldExpbmVDYXAsCiAg
ICAgU2V0TGluZURhc2gsCiAgICAgU2V0TGluZUpvaW4sCkBAIC02NiwxMyArNjYsMTcgQEAgZW51
bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgQ2xpcE91dCwKICAgICBDbGlwT3V0VG9QYXRoLAogICAg
IENsaXBQYXRoLAorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwKKyAgICBBcHBseUZpbGxQYXR0ZXJu
LAorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCisKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxh
eWVyLAorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAogICAgIERyYXdHbHlwaHMsCiAgICAgRHJh
d0ltYWdlLAogICAgIERyYXdUaWxlZEltYWdlLAogICAgIERyYXdUaWxlZFNjYWxlZEltYWdlLAot
I2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQogICAgIERyYXdOYXRpdmVJbWFnZSwKLSNlbmRpZgog
ICAgIERyYXdQYXR0ZXJuLAogICAgIERyYXdSZWN0LAogICAgIERyYXdMaW5lLApAQCAtODIsNiAr
ODYsMTAgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgRHJhd1BhdGgsCiAgICAgRHJhd0Zv
Y3VzUmluZ1BhdGgsCiAgICAgRHJhd0ZvY3VzUmluZ1JlY3RzLAorICAgIERyYXdJY29uLAorICAg
IERyYXdXaWRnZXQsCisgICAgRHJhd1Njcm9sbGJhciwKKyAgICBEcmF3VGhlbWUsCiAgICAgRmls
bFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQs
CkBAIC05NCwxMjk1ICsxMDIsOTMzIEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgewogICAgIFN0cm9r
ZVBhdGgsCiAgICAgU3Ryb2tlRWxsaXBzZSwKICAgICBDbGVhclJlY3QsCi0gICAgQmVnaW5UcmFu
c3BhcmVuY3lMYXllciwKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllciwKLSNpZiBVU0UoQ0cpCi0g
ICAgQXBwbHlTdHJva2VQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVk
IGl0ZW0uCi0gICAgQXBwbHlGaWxsUGF0dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSBy
ZWNvcmRlZCBpdGVtLgotI2VuZGlmCi0gICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKKyAgICBN
YXgKIH07CiAKIGNsYXNzIEl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxJdGVtPiB7CiBwdWJsaWM6
Ci0gICAgSXRlbSgpID0gZGVsZXRlOwotCi0gICAgSXRlbShJdGVtVHlwZSB0eXBlKQotICAgICAg
ICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIH5JdGVtKCkgPSBk
ZWZhdWx0OwogCi0gICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV90eXBlOwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCA9IDA7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEaXNwbGF5TGlz
dEl0ZW0gPSB0cnVlOworICAgIHZpcnR1YWwgYm9vbCBpc0dlb21ldHJ5SXRlbSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgCi0gICAgLy8gQSBzdGF0ZSBpdGVtIGlzIG9uZSBwcmVzZXJ2ZWQgYnkgU2F2
ZS9SZXN0b3JlLgotICAgIGJvb2wgaXNTdGF0ZUl0ZW0oKSBjb25zdAorICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
aXNTdGF0ZUl0ZW1UeXBlKG1fdHlwZSk7CisgICAgICAgIHRzIDw8IG5hbWUoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgYm9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUgaXRlbVR5cGUpCisgICAg
SXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFdURjo6Q1N0cmlu
ZyBkdW1wKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJdGVtKEl0ZW1UeXBlIHR5cGUpCisg
ICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBlKSB7
Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBUcmFuc2xhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5
cGU6OiBSb3RhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTY2FsZToKLSAgICAgICAgY2Fz
ZSBJdGVtVHlwZTo6IENvbmNhdGVuYXRlQ1RNOgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjogU2V0
U3RhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lQ2FwOgotICAgICAgICBjYXNl
IEl0ZW1UeXBlOjogU2V0TGluZURhc2g6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5l
Sm9pbjoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGNh
c2UgSXRlbVR5cGU6OiBDbGVhclNoYWRvdzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0df
RElTQUJMRUQKLSAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgot
ICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOworICAgIFN0cmluZyBu
YW1lKCkgY29uc3Q7CisgICAgU3RyaW5nIGFyZ3VtZW50TmFtZShzaXplX3QgaW5kZXgpIGNvbnN0
OwogCi1wcml2YXRlOgogICAgIEl0ZW1UeXBlIG1fdHlwZTsKIH07CiAKLWNsYXNzIERyYXdpbmdJ
dGVtIDogcHVibGljIEl0ZW0geworY2xhc3MgR2VvbWV0cnlJdGVtIDogcHVibGljIEl0ZW0gewog
cHVibGljOgotICAgIERyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgICAgIDogSXRlbSh0
eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJlY3Qm
IHIpIHsgbV9leHRlbnQgPSByOyB9Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgpOyB9Ci0KICAgICBib29sIGV4dGVudEtub3duKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9CiAKLSAgICAvLyBS
ZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0
ZXMuCi0gICAgLy8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cg
ZXRjIGluIHRoZSBzdGF0ZS4KLSAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBzdGQ6Om51
bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbV9l
eHRlbnQ7IC8vIEluIGJhc2UgY29vcmRpbmF0ZXMsIHRha2luZyBzaGFkb3dzIGFuZCB0cmFuc2Zv
cm1zIGludG8gYWNjb3VudC4KLX07Ci0KLWNsYXNzIFNhdmUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxTYXZlPiBjcmVhdGUoKQorICAgIHZvaWQgc2V0RXh0ZW50KGNv
bnN0IEZsb2F0UmVjdCYgZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9CisgICAgY29uc3Qg
RmxvYXRSZWN0IGV4dGVudCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTYXZlKTsKKyAgICAgICAgcmV0dXJuIG1fZXh0ZW50LnZhbHVlX29yKEZsb2F0UmVjdCgp
KTsKICAgICB9CiAKLSAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBjb3Jy
ZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCi0gICAgc2l6ZV90IHJlc3Rv
cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9Ci0gICAgdm9pZCBzZXRS
ZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5kZXg7IH0KLQot
cHJpdmF0ZToKLSAgICBTYXZlKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsg
fQogICAgIAotICAgIHNpemVfdCBtX3Jlc3RvcmVJbmRleCB7IDAgfTsKLX07Ci0KLWNsYXNzIFJl
c3RvcmUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZXN0b3JlPiBj
cmVhdGUoKQorcHJvdGVjdGVkOgorICAgIEdlb21ldHJ5SXRlbShJdGVtVHlwZSB0eXBlKQorICAg
ICAgICA6IEl0ZW0odHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJl
c3RvcmUpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBSZXN0b3JlKCkKLSAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpSZXN0b3JlKQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mIHRzKSBj
b25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgSXRlbTo6ZHVtcCh0cyk7CisgICAgICAgIHRz
LnN0YXJ0R3JvdXAoKTsKKyAgICAgICAgdHMgPDwgImV4dGVudCAiOworICAgICAgICBpZiAoZXh0
ZW50S25vd24oKSkKKyAgICAgICAgICAgIHRzIDw8IGV4dGVudCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAgICAgIHRzLmVuZEdyb3VwKCk7CiAgICAg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbV9leHRlbnQ7CiB9OwogCi1jbGFzcyBUcmFuc2xh
dGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUcmFuc2xhdGU+IGNy
ZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEFwcGxpZXIsIEFwcGxp
ZXIgYXBwbGllciwgY2xhc3MuLi4gQXJndW1lbnRzPgorY2xhc3MgR3JhcGhpY3NJdGVtIHsKK3By
b3RlY3RlZDoKKyAgICBHcmFwaGljc0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAg
ICAgOiBtX2FyZ3VtZW50cyhzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNsYXRlKHgsIHkpKTsKICAg
ICB9CiAKLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgZmxvYXQgeSgp
IGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi1wcml2YXRlOgotICAgIFRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAgICAg
LCBtX3goeCkKLSAgICAgICAgLCBtX3koeSkKKyAgICB0ZW1wbGF0ZTwgc3RkOjpzaXplX3QgST4K
KyAgICBjb25zdCBhdXRvJiBhcmd1bWVudCgpIGNvbnN0CiAgICAgeworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8ST4obV9hcmd1bWVudHMpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQg
bV95OwotfTsKLQotY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUoYW5nbGVJblJhZGlhbnMpKTsKKyAgICAgICAgYXBwbHko
Y29udGV4dCwgc3RkOjppbmRleF9zZXF1ZW5jZV9mb3I8QXJndW1lbnRzLi4uPigpKTsKICAgICB9
CiAKLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KLQotcHJpdmF0
ZToKLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6Um90
YXRlKQotICAgICAgICAsIG1fYW5nbGUoYW5nbGUpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBpdGVyYXJ0ZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKICAgICB7
CisgICAgICAgIGl0ZXJhcnRlKFdURk1vdmUoZnVuY3RvciksIHN0ZDo6aW5kZXhfc2VxdWVuY2Vf
Zm9yPEFyZ3VtZW50cy4uLj4oKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fYW5nbGU7IC8vIEluIHJhZGlh
bnMuCi19OwotCi1jbGFzcyBTY2FsZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNjYWxlPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorcHJpdmF0ZToKKyAg
ICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdC4uLiBJbmRpY2VzPgorICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBzdGQ6OmluZGV4X3NlcXVlbmNlPEluZGljZXMuLi4+KSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOworICAg
ICAgICAoY29udGV4dC4qYXBwbGllcikoc3RkOjpnZXQ8SW5kaWNlcz4obV9hcmd1bWVudHMpLi4u
KTsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotCi1wcml2YXRlOgotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
LSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCBzdGQ6OnNpemVfdC4uLiBJbmRpY2VzPgor
ICAgIHZvaWQgaXRlcmFydGUoRnVuY3RvciYmIGZ1bmN0b3IsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8
SW5kaWNlcy4uLj4pIGNvbnN0CiAgICAgeworICAgICAgICB1c2luZyBzd2FsbG93ID0gaW50W107
CisgICAgICAgICh2b2lkKXN3YWxsb3cgeyAxLCAoZnVuY3RvcihJbmRpY2VzLCBzdGQ6OmdldDxJ
bmRpY2VzPihtX2FyZ3VtZW50cykpLCBpbnQgeyB9KS4uLiB9OwogICAgIH0KIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFNpemUg
bV9zaXplOworICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBtX2FyZ3VtZW50czsKIH07CiAK
LWNsYXNzIENvbmNhdGVuYXRlQ1RNIDogcHVibGljIEl0ZW0gewordGVtcGxhdGUgPEl0ZW1UeXBl
IGl0ZW1UeXBlLCB0eXBlbmFtZSBBcHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIsIGNsYXNzLi4uIEFy
Z3VtZW50cz4KK2NsYXNzIFNldHRpbmdJdGVtIDogcHVibGljIEl0ZW0sIHB1YmxpYyBHcmFwaGlj
c0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPiAgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Q29uY2F0ZW5hdGVDVE0+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1h
dHJpeCkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0obWF0
cml4KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldHRpbmdJdGVtKGFyZ3VtZW50
cy4uLikpOwogICAgIH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQotcHJpdmF0ZToKLSAgICBDb25jYXRlbmF0
ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zv
cm07Ci19OwotCi1jbGFzcyBTZXRTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRT
dGF0ZShzdGF0ZSwgZmxhZ3MpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vf
b2Y8U2VsZiwgVD46OnZhbHVlLCAiVGhpcyBmdW5jdGlvbiBzaG91bGQgY3JlYXRlIGNsYXNzZXMg
ZnJvbSBTZXR0aW5nSXRlbS4iKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVChzdGQ6
OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CiAgICAgfQotICAgIAotICAgIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGU7IH0KIAotICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICB1c2luZyBH
cmFwaGljc0l0ZW1CYXNlID0gR3JhcGhpY3NJdGVtPEFwcGxpZXIsIGFwcGxpZXIsIEFyZ3VtZW50
cy4uLj47CiAKLSAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25z
dDsKLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVh
bSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOwotcHJpdmF0ZToKLSAgICBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQotICAgICAgICAsIG1f
c3RhdGUoc3RhdGUsIGZsYWdzKQorICAgIFNldHRpbmdJdGVtKEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIDogSXRlbShpdGVtVHlwZSkKKyAgICAgICAgLCBHcmFwaGljc0l0ZW1CYXNl
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCiAgICAgewogICAgIH0KIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlOwotfTsKLQotY2xhc3MgU2V0TGluZUNh
cCA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNy
ZWF0ZShMaW5lQ2FwIGxpbmVDYXApCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMp
IGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRM
aW5lQ2FwKGxpbmVDYXApKTsKKyAgICAgICAgSXRlbTo6ZHVtcCh0cyk7CisgICAgICAgIEdyYXBo
aWNzSXRlbUJhc2U6Oml0ZXJhcnRlKFt0aGlzLCAmdHNdKHNpemVfdCBpbmRleCwgY29uc3QgYXV0
byYgYXJndW1lbnRWYWx1ZSkgeworICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KHRoaXMtPmFy
Z3VtZW50TmFtZShpbmRleCksIGFyZ3VtZW50VmFsdWUpOworICAgICAgICB9KTsKICAgICB9Ci0g
ICAgCi0gICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9CiAK
IHByaXZhdGU6Ci0gICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAgICAgIDogSXRl
bShJdGVtVHlwZTo6U2V0TGluZUNhcCkKLSAgICAgICAgLCBtX2xpbmVDYXAobGluZUNhcCkKKyAg
ICB1c2luZyBTZWxmID0gU2V0dGluZ0l0ZW08aXRlbVR5cGUsIEFwcGxpZXIsIGFwcGxpZXIsIEFy
Z3VtZW50cy4uLj47CisKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEdyYXBoaWNzSXRlbUJhc2U6OmFwcGx5KGNv
bnRleHQpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKKyAgICBzaXplX3Qgc2l6ZUluQnl0
ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzaXplb2YoKnRoaXMpOyB9CiB9OwogCi1jbGFz
cyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK3RlbXBsYXRlIDxJdGVtVHlwZSBpdGVtVHlw
ZSwgdHlwZW5hbWUgQXBwbGllciwgQXBwbGllciBhcHBsaWVyLCBjbGFzcy4uLiBBcmd1bWVudHM+
CitjbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBHZW9tZXRyeUl0ZW0sIHB1YmxpYyBHcmFwaGlj
c0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPiAgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0ZShjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwg
ZmxvYXQgZGFzaE9mZnNldCkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGlu
ZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERyYXdpbmdJdGVtKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsK
ICAgICB9CiAKLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGFzaE9mZnNldDsgfQotCi1wcml2YXRlOgotICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6
OlNldExpbmVEYXNoKQotICAgICAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAgICAg
LCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxTZWxmLCBUPjo6dmFsdWUsICJU
aGlzIGZ1bmN0aW9uIHNob3VsZCBjcmVhdGUgY2xhc3NlcyBmcm9tIERyYXdpbmdJdGVtLiIpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIEdyYXBoaWNzSXRlbUJhc2UgPSBHcmFwaGljc0l0
ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAgIERhc2hBcnJheSBtX2Rh
c2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7Ci19OworICAgIC8vIFNob3VsZCBtYXRj
aCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCisgICAgY29uc3RleHByIHN0
YXRpYyBmbG9hdCBjb25zdCBzX3BsYXRmb3JtRm9jdXNSaW5nV2lkdGggPSAzOwogCi1jbGFzcyBT
ZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExp
bmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgRHJhd2luZ0l0ZW0oQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBHZW9tZXRyeUl0ZW0oaXRlbVR5cGUpCisgICAg
ICAgICwgR3JhcGhpY3NJdGVtQmFzZShzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGlu
ZUpvaW4pKTsKICAgICB9Ci0gICAgCi0gICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVKb2luOyB9CiAKIHByaXZhdGU6Ci0gICAgU2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUpvaW4pCi0gICAgICAg
ICwgbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB1c2luZyBTZWxmID0gRHJhd2lu
Z0l0ZW08aXRlbVR5cGUsIEFwcGxpZXIsIGFwcGxpZXIsIEFyZ3VtZW50cy4uLj47CiAKLSAgICBM
aW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1YmxpYyBJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9h
dCBsaW1pdCkKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qg
b3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGlt
aXQobGltaXQpKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6YXBwbHkoY29udGV4dCk7CiAg
ICAgfQogCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1p
dDsgfQorICAgIGJvb2wgaXNHZW9tZXRyeUl0ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c2l6ZW9mKCp0aGlzKTsgfQogCi1wcml2YXRlOgotICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0
ZXJMaW1pdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0KQotICAgICAg
ICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJl
YW0mIHRzKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgR2VvbWV0cnlJdGVtOjpkdW1w
KHRzKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6aXRlcmFydGUoW3RoaXMsICZ0c10oc2l6
ZV90IGluZGV4LCBjb25zdCBhdXRvJiBhcmd1bWVudFZhbHVlKSB7CisgICAgICAgICAgICB0cy5k
dW1wUHJvcGVydHkodGhpcy0+YXJndW1lbnROYW1lKGluZGV4KSwgYXJndW1lbnRWYWx1ZSk7Cisg
ICAgICAgIH0pOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX21pdGVyTGltaXQ7CiB9OwogCi1jbGFzcyBDbGVh
clNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyU2hh
ZG93PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJT
aGFkb3cpOwotICAgIH0KK3VzaW5nIFNhdmVCYXNlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5
cGU6OlNhdmUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGlj
c0NvbnRleHQ6OnNhdmUKKz47CiAKLXByaXZhdGU6Ci0gICAgQ2xlYXJTaGFkb3coKQotICAgICAg
ICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotLy8gRklYTUU6
IHRyZWF0IGFzIERyYXdpbmdJdGVtPwotY2xhc3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFNhdmUgOiBwdWJsaWMgU2F2ZUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcD4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENsaXAocmVjdCkpOwotICAgIH0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
Y3JlYXRlID0gU2F2ZUJhc2U6OmNyZWF0ZTxTYXZlPjsKIAotICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgLy8gSW5kZXggaW4gdGhlIGRpc3BsYXkgbGlz
dCBvZiB0aGUgY29ycmVzcG9uZGluZyBSZXN0b3JlIGl0ZW0uIDAgaWYgdW5tYXRjaGVkLgorICAg
IHNpemVfdCByZXN0b3JlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RvcmVJbmRleDsgfQor
ICAgIHZvaWQgc2V0UmVzdG9yZUluZGV4KHNpemVfdCBpbmRleCkgeyBtX3Jlc3RvcmVJbmRleCA9
IGluZGV4OyB9CiAKIHByaXZhdGU6Ci0gICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0g
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB1c2luZyBTYXZlQmFzZTo6U2F2ZUJhc2U7CiAKLSAgICBGbG9hdFJlY3QgbV9y
ZWN0OwotfTsKLQotY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgdm9p
ZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKKyAgICAgICAgU2F2ZUJhc2U6
OmR1bXAodHMpOworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3RvcmUtaW5kZXgiLCBtX3Jl
c3RvcmVJbmRleCk7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQotICAgICAgICAsIG1fcmVjdChy
ZWN0KQotICAgIHsKLSAgICB9CisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9OworfTsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit1c2lu
ZyBSZXN0b3JlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlJlc3RvcmUsCisgICAgdm9p
ZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUK
Kz47CiAKLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotfTsKK3VzaW5nIFNldFN0YXRlQmFzZSA9IFNl
dHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTZXRTdGF0ZSwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZSwKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZQorPjsKIAotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNl
dFN0YXRlIDogcHVibGljIFNldFN0YXRlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxD
bGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNv
bnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBjb25zdGV4cHIg
c3RhdGljIGF1dG8gY3JlYXRlID0gU2V0U3RhdGVCYXNlOjpjcmVhdGU8U2V0U3RhdGU+OworICAg
IHVzaW5nIFNldFN0YXRlQmFzZTo6U2V0U3RhdGVCYXNlOworICAgIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0K
K307CiAKLXByaXZhdGU6Ci0gICAgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBh
dGgpCi0gICAgewotICAgIH0KK3VzaW5nIFRyYW5zbGF0ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpUcmFuc2xhdGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCwg
ZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSwKKyAgICBmbG9hdCwgZmxv
YXQKKz47CisKK3VzaW5nIFJvdGF0ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpSb3Rh
dGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBoaWNz
Q29udGV4dDo6cm90YXRlLAorICAgIGZsb2F0Cis+OworCit1c2luZyBTY2FsZSA9IFNldHRpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpTY2FsZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEZsb2F0U2l6ZSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNjYWxlLAorICAgIEZs
b2F0U2l6ZQorPjsKKwordXNpbmcgQ29uY2F0ZW5hdGVDVE0gPSBTZXR0aW5nSXRlbTwKKyAgICBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0s
CisgICAgQWZmaW5lVHJhbnNmb3JtCis+OworCit1c2luZyBTZXRMaW5lQ2FwID0gU2V0dGluZ0l0
ZW08CisgICAgSXRlbVR5cGU6OlNldExpbmVDYXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShMaW5lQ2FwKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwLAorICAgIExp
bmVDYXAKKz47CisKK3VzaW5nIFNldExpbmVEYXNoID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5
cGU6OlNldExpbmVEYXNoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRGFz
aEFycmF5JiwgZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoLAorICAg
IERhc2hBcnJheSwgZmxvYXQKKz47CisKK3VzaW5nIFNldExpbmVKb2luID0gU2V0dGluZ0l0ZW08
CisgICAgSXRlbVR5cGU6OlNldExpbmVKb2luLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoTGluZUpvaW4pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luLAorICAgIExp
bmVKb2luCis+OworCit1c2luZyBTZXRNaXRlckxpbWl0ID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9h
dCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCwKKyAgICBmbG9hdAorPjsK
KwordXNpbmcgQ2xlYXJTaGFkb3cgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xlYXJT
aGFkb3csCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0Nv
bnRleHQ6OmNsZWFyU2hhZG93Cis+OworCit1c2luZyBDbGlwID0gU2V0dGluZ0l0ZW08CisgICAg
SXRlbVR5cGU6OkNsaXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9h
dFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpjbGlwLAorICAgIEZsb2F0UmVjdAorPjsK
KwordXNpbmcgQ2xpcE91dCA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGlwT3V0LAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6Y2xpcE91dCwKKyAgICBGbG9hdFJlY3QKKz47CisKK3VzaW5nIENsaXBP
dXRUb1BhdGggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCwKKyAg
ICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0LAorICAgIGNvbnN0IFBhdGgKKz47CisKK3VzaW5nIENsaXBQYXRoID0g
U2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBQYXRoJiwgV2luZFJ1bGUpLAorICAgICZHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoLAorICAgIGNvbnN0IFBhdGgsIFdpbmRSdWxlCis+OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyNpZiBVU0UoQ0cpCit1
c2luZyBBcHBseVN0cm9rZVBhdHRlcm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6QXBw
bHlTdHJva2VQYXR0ZXJuLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAm
R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KKz47CisKK3VzaW5nIEFwcGx5Rmls
bFBhdHRlcm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybiwK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybgorPjsKKyNlbmRpZgogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci19
OwordXNpbmcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1U
eXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6
KikoZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Is
CisgICAgZmxvYXQKKz47CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworLy8gSXMg
RHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlz
IGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgordXNpbmcgQmVnaW5UcmFuc3BhcmVuY3lMYXll
ciA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyLAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgZmxvYXQKKz47CisKK3VzaW5nIEVuZFRy
YW5zcGFyZW5jeUxheWVyID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcgorPjsKKwordXNpbmcgRHJhd0dseXBoc0Jh
c2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0dseXBocywKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2ln
bmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSwKKyAg
ICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzLAorICAgIFJlZjxjb25zdCBGb250PiwgR2x5
cGhCdWZmZXIsIHVuc2lnbmVkLCB1bnNpZ25lZCwgRmxvYXRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUKKz47CisKK2NsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd0dseXBoc0Jhc2UgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShSZWY8Y29uc3Qg
Rm9udD4mJiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKKyAgICAgICAgYXV0byBzdWJHbHlwaEJ1ZmZlciA9
IERyYXdHbHlwaHM6OnN1YkdseXBoQnVmZmVyKGZvbnQucHRyKCksIGJ1ZmZlciwgZnJvbSwgbnVt
R2x5cGhzKTsKKyAgICAgICAgcmV0dXJuIERyYXdHbHlwaHNCYXNlOjpjcmVhdGUoV1RGTW92ZShm
b250KSwgV1RGTW92ZShzdWJHbHlwaEJ1ZmZlciksIDAsIG51bUdseXBocywgcG9pbnQsIGZvbnRT
bW9vdGhpbmcpOwogICAgIH0KIAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KLSAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lu
ZFJ1bGU7IH0KLQogcHJpdmF0ZToKLSAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSB3aW5kUnVsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAg
ICAgLCBtX3BhdGgocGF0aCkKLSAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAgV2luZFJ1bGUgbV93aW5kUnVsZTsKLX07
CisgICAgdXNpbmcgRHJhd0dseXBoc0Jhc2U6OkRyYXdHbHlwaHNCYXNlOwogCi1jbGFzcyBEcmF3
R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERy
YXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxv
Y2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQorICAgIHN0YXRpYyBH
bHlwaEJ1ZmZlciBzdWJHbHlwaEJ1ZmZlcihjb25zdCBGb250KiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIGNvdW50LCBibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkp
OworICAgICAgICBHbHlwaEJ1ZmZlciBzdWJCdWZmZXI7CisgICAgICAgIGNvbnN0IGF1dG8qIGds
eXBocyA9IGJ1ZmZlci5nbHlwaHMoZnJvbSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGFkdmFuY2Vz
ID0gYnVmZmVyLmFkdmFuY2VzKGZyb20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUdseXBoczsgKytpKQorICAgICAgICAgICAgc3ViQnVmZmVyLmFkZChnbHlwaHNbaV0sIGZv
bnQsIGFkdmFuY2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIHN1YkJ1ZmZlcjsKICAgICB9CiAKLSAg
ICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a0xvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQotCi0g
ICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxB
bmNob3I7IH0KLQotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8R2x5
cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0K
LQotcHJpdmF0ZToKLSAgICBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgY29tcHV0ZUJvdW5kcygpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIEdseXBoQnVmZmVyIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSBj
b25zdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGZvbnQgPSBhcmd1bWVudDwwPigpOworICAgICAgICBmbG9hdCBhc2NlbnQgPSBmb250
LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7CisgICAgICAgIGZsb2F0IGRlc2NlbnQgPSBm
b250LT5mb250TWV0cmljcygpLmZsb2F0RGVzY2VudCgpOwogCi0gICAgUmVmPEZvbnQ+IG1fZm9u
dDsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsKLSAgICBWZWN0
b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7Ci0gICAgRmxvYXRSZWN0IG1f
Ym91bmRzOwotICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwotICAgIEZsb2F0U2l6ZSBt
X2xvY2FsQW5jaG9yOwotICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5nTW9kZTsKLX07
CisgICAgICAgIGNvbnN0IGF1dG8mIGdseXBoQnVmZmVyID0gYXJndW1lbnQ8MT4oKTsKKyAgICAg
ICAgc2l6ZV90IG51bUdseXBocyA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAgICAgICAgYXV0byBj
dXJyZW50ID0gYXJndW1lbnQ8ND4oKTsKIAotY2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdp
bmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdJbWFnZT4gY3JlYXRlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgeworICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UgPSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlQXQoaSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhSZWN0ID0gRmxvYXRS
ZWN0KGN1cnJlbnQueCgpLCBjdXJyZW50LnkoKSAtIGFzY2VudCwgYWR2YW5jZS53aWR0aCgpLCBh
c2NlbnQgKyBkZXNjZW50KTsKKyAgICAgICAgICAgIGJvdW5kcy51bml0ZShnbHlwaFJlY3QpOwor
ICAgICAgICAgICAgY3VycmVudC5tb3ZlKGFkdmFuY2Uud2lkdGgoKSwgYWR2YW5jZS5oZWlnaHQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Cit9OwogCi0gICAg
Y29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotICAg
IEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAgIEZsb2F0
UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KK3VzaW5n
IERyYXdJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0ltYWdlLAor
ICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiks
CisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0
UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJhd0lt
YWdlIDogcHVibGljIERyYXdJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0
aWMgYXV0byBjcmVhdGUgPSBEcmF3SW1hZ2VCYXNlOjpjcmVhdGU8RHJhd0ltYWdlPjsKKyAgICB1
c2luZyBEcmF3SW1hZ2VCYXNlOjpEcmF3SW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1f
aW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9u
cyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgotICAgIEZs
b2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKLSAgICBJbWFn
ZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworICAgIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBEcmF3
VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJ
bWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgRmxvYXRQ
b2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAgIEZsb2F0UmVjdCBk
ZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQotICAgIEZsb2F0
U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KLSAgICBGbG9hdFNp
emUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQordXNpbmcgRHJhd1RpbGVk
SW1hZ2VCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlLAor
ICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpLAorICAgICZHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVjdCwgRmxvYXRQb2lu
dCwgRmxvYXRTaXplLCBGbG9hdFNpemUsIEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitjbGFz
cyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3VGlsZWRJbWFnZUJhc2UgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3VGlsZWRJbWFnZUJhc2U6OmNy
ZWF0ZTxEcmF3VGlsZWRJbWFnZT47CisgICAgdXNpbmcgRHJhd1RpbGVkSW1hZ2VCYXNlOjpEcmF3
VGlsZWRJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTog
RHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRo
aXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBGbG9hdFJlY3QgbV9kZXN0aW5h
dGlvbjsKLSAgICBGbG9hdFBvaW50IG1fc291cmNlOwotICAgIEZsb2F0U2l6ZSBtX3RpbGVTaXpl
OwotICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7Ci0gICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9p
bWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZh
Y3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQordXNpbmcgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlID0g
RHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlLAorICAgIElt
YWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpLAorICAgICZHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVjdCwg
RmxvYXRSZWN0LCBGbG9hdFNpemUsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBJ
bWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBw
dWJsaWMgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIg
c3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlOjpjcmVhdGU8RHJh
d1RpbGVkU2NhbGVkSW1hZ2U+OworICAgIHVzaW5nIERyYXdUaWxlZFNjYWxlZEltYWdlQmFzZTo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3VGlsZWRTY2FsZWRJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVS
dWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQot
ICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMg
Y2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhh
dmUgdG8gYmUgbXV0YWJsZS4KLSAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKLSAgICBGbG9h
dFJlY3QgbV9zb3VyY2U7Ci0gICAgRmxvYXRTaXplIG1fdGlsZVNjYWxlRmFjdG9yOwotICAgIElt
YWdlOjpUaWxlUnVsZSBtX2hSdWxlOwotICAgIEltYWdlOjpUaWxlUnVsZSBtX3ZSdWxlOwotICAg
IEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7CisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLSNpZiBV
U0UoQ0cpIHx8IFVTRShDQUlSTykKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0
ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd05h
dGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRN
b2RlLCBvcmllbnRhdGlvbikpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQp
IHx8IFVTRShDQUlSTykKK3VzaW5nIERyYXdOYXRpdmVJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwK
KyAgICBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Us
CisgICAgTmF0aXZlSW1hZ2VQdHIsIEZsb2F0U2l6ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24KKz47CiAKK2NsYXNz
IERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3TmF0aXZlSW1hZ2VCYXNlIHsKK3B1YmxpYzoK
KyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd05hdGl2ZUltYWdlQmFzZTo6
Y3JlYXRlPERyYXdOYXRpdmVJbWFnZT47CisgICAgdXNpbmcgRHJhd05hdGl2ZUltYWdlQmFzZTo6
RHJhd05hdGl2ZUltYWdlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd05hdGl2ZUltYWdlKGNvbnN0
IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0jaWYgVVNFKENHKQotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBtX2ltYWdlOwotI2VuZGlmCi0gICAgRmxvYXRTaXplIG1faW1hZ2VTaXplOwotICAg
IEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3NyY1JlY3Q7Ci0jaWYg
VVNFKENHKQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxl
bmRNb2RlOwotI2VuZGlmCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOworICAg
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwyPigpOyB9CiB9Owog
I2VuZGlmCiAKLWNsYXNzIERyYXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1Bh
dHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbWFnZSYgaW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNm
b3JtOyB9Ci0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV90aWxlUmVj
dDsgfQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b247IH0KLSAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQot
ICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9Cit1c2lu
ZyBEcmF3UGF0dGVybkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1BhdHRl
cm4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSwK
KyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybiwKKyAgICBSZWY8SW1hZ2U+LCBGbG9h
dFJlY3QsIEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBGbG9hdFNpemUs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUKKz47CiAKLXByaXZhdGU6Ci0gICAgRHJhd1Bh
dHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGVOb3JtYWwpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERy
YXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlz
IHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0
dGVyblRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKLSAgICBGbG9hdFJlY3Qg
bV9kZXN0aW5hdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fcGhhc2U7Ci0gICAgRmxvYXRTaXplIG1f
c3BhY2luZzsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2Js
ZW5kTW9kZTsKLX07Ci0KLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhl
IHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KLWNsYXNz
IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJh
d1BhdHRlcm4gOiBwdWJsaWMgRHJhd1BhdHRlcm5CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KSk7Ci0gICAgfQotCi0gICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bh
Y2l0eTsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdQYXR0ZXJu
QmFzZTo6Y3JlYXRlPERyYXdQYXR0ZXJuPjsKKyAgICB1c2luZyBEcmF3UGF0dGVybkJhc2U6OkRy
YXdQYXR0ZXJuQmFzZTsKIHByaXZhdGU6Ci0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKQotICAgICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
ZmxvYXQgbV9vcGFjaXR5OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBh
cmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRUcmFuc3BhcmVuY3lM
YXllcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVuZFRy
YW5zcGFyZW5jeUxheWVyKTsKLSAgICB9Cit1c2luZyBEcmF3UmVjdEJhc2UgPSBEcmF3aW5nSXRl
bTxJdGVtVHlwZTo6RHJhd1JlY3QsIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQpLCAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCwgRmxvYXRSZWN0LCBm
bG9hdD47CiAKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdSZWN0QmFzZSB7CitwdWJsaWM6
CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdSZWN0QmFzZTo6Y3JlYXRl
PERyYXdSZWN0PjsKKyAgICB1c2luZyBEcmF3UmVjdEJhc2U6OkRyYXdSZWN0QmFzZTsKIHByaXZh
dGU6Ci0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRHJhd1Jl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1Jl
Y3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdSZWN0KHJlY3QsIGJvcmRl
clRoaWNrbmVzcykpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9Ci0gICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4g
bV9ib3JkZXJUaGlja25lc3M7IH0KK3VzaW5nIERyYXdMaW5lQmFzZSA9IERyYXdpbmdJdGVtPAor
ICAgIEl0ZW1UeXBlOjpEcmF3TGluZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiksCisgICAgJkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUsCisgICAgRmxvYXRQb2ludCwgRmxvYXRQb2ludAorPjsKIAorY2xhc3MgRHJh
d0xpbmUgOiBwdWJsaWMgRHJhd0xpbmVCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3Rh
dGljIGF1dG8gY3JlYXRlID0gRHJhd0xpbmVCYXNlOjpjcmVhdGU8RHJhd0xpbmU+OworICAgIHVz
aW5nIERyYXdMaW5lQmFzZTo6RHJhd0xpbmVCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICAgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0g
ICAgICAgICwgbV9ib3JkZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQorICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAgICAg
ICAgYm91bmRzLmZpdFRvUG9pbnRzKGFyZ3VtZW50PDA+KCksIGFyZ3VtZW50PDE+KCkpOworICAg
ICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBmbG9hdCBtX2JvcmRlclRoaWNr
bmVzczsKIH07CiAKLWNsYXNzIERyYXdMaW5lIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwotICAgIH0KLQotICAgIEZsb2F0
UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDE7IH0KLSAgICBGbG9hdFBvaW50
IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQyOyB9Cit1c2luZyBEcmF3TGluZXNGb3JU
ZXh0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0LAor
ICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZXNGb3JUZXh0LAorICAgIEZsb2F0UG9pbnQsIERhc2hBcnJheSwgYm9vbCwgYm9v
bCwgU3Ryb2tlU3R5bGUKKz47CiAKK2NsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJh
d0xpbmVzRm9yVGV4dEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBEcmF3TGluZXNGb3JUZXh0QmFzZTo6Y3JlYXRlPERyYXdMaW5lc0ZvclRleHQ+Owor
ICAgIHVzaW5nIERyYXdMaW5lc0ZvclRleHRCYXNlOjpEcmF3TGluZXNGb3JUZXh0QmFzZTsKIHBy
aXZhdGU6Ci0gICAgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5l
KQotICAgICAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAgICAgLCBtX3BvaW50Mihwb2ludDIp
CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIC8v
IFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5jbG9z
aW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2lu
Z01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKyAgICAgICAgaWYgKCFhcmd1bWVudDwxPigpLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgRmxvYXRSZWN0IGJv
dW5kcyhhcmd1bWVudDwwPigpLCBGbG9hdFNpemUoYXJndW1lbnQ8MT4oKS5sYXN0KCksIGNvbnRl
eHQuc3Ryb2tlVGhpY2tuZXNzKCkpKTsKKyAgICAgICAgYm91bmRzLmluZmxhdGUoMSk7IC8vIEFj
Y291bnQgZm9yIHBpeGVsIHNuYXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBp
dCBkb2Vzbid0IHRha2UgdGhlIENUTSBpbnRvIGFjY291bnQuCisgICAgICAgIHJldHVybiBib3Vu
ZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9pbnQx
OwotICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCi1jbGFzcyBEcmF3TGluZXNGb3JUZXh0
IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5l
c0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBG
bG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24sIGxv
Y2FsQW5jaG9yLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlV2lkdGgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxv
Y2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9Ci0gICAgY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2Nh
dGlvbjsgfQotICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVy
biBtX2xvY2FsQW5jaG9yOyB9Ci0gICAgRmxvYXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KLSAgICBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzOyB9Ci0gICAgYm9vbCBpc1ByaW50aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQotICAgIGJvb2wgZG91YmxlTGluZXMoKSBj
b25zdCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9Cit1c2luZyBEcmF3TGluZUZvckRvY3VtZW50
TWFya2VyQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQb2lu
dCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSksCisgICAgJkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciwKKyAgICBGbG9hdFBvaW50LCBmbG9hdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUKKz47CiAKK2NsYXNzIERyYXdMaW5lRm9yRG9jdW1lbnRNYXJr
ZXIgOiBwdWJsaWMgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlckJhc2UgeworcHVibGljOgorICAg
IGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
QmFzZTo6Y3JlYXRlPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+OworICAgIHVzaW5nIERyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyQmFzZTsK
IHByaXZhdGU6Ci0gICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xv
Y2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgp
Ci0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAg
ICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCi0gICAgICAgICwgbV9sb2NhbEFu
Y2hvcihsb2NhbEFuY2hvcikKLSAgICAgICAgLCBtX3dpZHRocyh3aWR0aHMpCi0gICAgICAgICwg
bV9zdHJva2VXaWR0aChzdHJva2VXaWR0aCkKLSAgICAgICAgLCBtX3ByaW50aW5nKHByaW50aW5n
KQotICAgICAgICAsIG1fZG91YmxlTGluZXMoZG91YmxlTGluZXMpCisgICAgY29uc3Qgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJl
dHVybiBhIHZhbHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpIHJldHVybnMuCisgICAgICAgIEZsb2F0UmVjdCBi
b3VuZHMoYXJndW1lbnQ8MD4oKSwgRmxvYXRTaXplKGFyZ3VtZW50PDE+KCksIGNNaXNzcGVsbGlu
Z0xpbmVUaGlja25lc3MpKTsKKyAgICAgICAgYm91bmRzLmluZmxhdGUoY01pc3NwZWxsaW5nTGlu
ZVRoaWNrbmVzcyk7IC8vIEFjY291bnQgZm9yICJtaXNzcGVsbGluZyBkb3QiIHNuYXBwaW5nLgor
ICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKLSAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hv
cjsKLSAgICBEYXNoQXJyYXkgbV93aWR0aHM7Ci0gICAgZmxvYXQgbV9zdHJva2VXaWR0aDsKLSAg
ICBib29sIG1fcHJpbnRpbmc7Ci0gICAgYm9vbCBtX2RvdWJsZUxpbmVzOwogfTsKIAotY2xhc3Mg
RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXIocG9pbnQsIHdpZHRoLCBzdHlsZSkpOwotICAgIH0KLQotICAgIEZsb2F0UG9p
bnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50OyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoOyB9Cit1c2luZyBEcmF3RWxsaXBzZUJhc2UgPSBEcmF3aW5n
SXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0VsbGlwc2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250
ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZSwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIERyYXdFbGxpcHNlIDogcHVibGljIERy
YXdFbGxpcHNlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0
ZSA9IERyYXdFbGxpcHNlQmFzZTo6Y3JlYXRlPERyYXdFbGxpcHNlPjsKKyAgICB1c2luZyBEcmF3
RWxsaXBzZUJhc2U6OkRyYXdFbGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKQotICAgICAgICAsIG1fcG9pbnQocG9pbnQpCi0g
ICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmxvYXRQb2ludCBtX3BvaW50Owot
ICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsK
KyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQog
fTsKIAotY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworI2lmIFVTRShD
RykKK3VzaW5nIERyYXdQYXRoQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3
UGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAm
R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCwKKyAgICBjb25zdCBQYXRoCis+OworCitjbGFzcyBE
cmF3UGF0aCA6IHB1YmxpYyBEcmF3UGF0aEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7Ci0gICAgfQotCi0gICAg
RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3UGF0aEJhc2U6OmNyZWF0ZTxEcmF3UGF0aD47Cisg
ICAgdXNpbmcgRHJhd1BhdGhCYXNlOjpEcmF3UGF0aEJhc2U7CiBwcml2YXRlOgotICAgIERyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RHJhd0VsbGlwc2UpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1f
cmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4o
KS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIH07CisjZW5kaWYKIAotY2xhc3MgRHJhd1BhdGggOiBw
dWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdGg+IGNy
ZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd1BhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIERyYXdGb2N1c1JpbmdQYXRoQmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCwKKyAgICB2b2lkIChHcmFw
aGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiks
CisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZywKKyAgICBjb25zdCBQYXRoLCBm
bG9hdCwgZmxvYXQsIENvbG9yCis+OwogCitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1Ymxp
YyBEcmF3Rm9jdXNSaW5nUGF0aEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMg
YXV0byBjcmVhdGUgPSBEcmF3Rm9jdXNSaW5nUGF0aEJhc2U6OmNyZWF0ZTxEcmF3Rm9jdXNSaW5n
UGF0aD47CisgICAgdXNpbmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlOjpEcmF3Rm9jdXNSaW5nUGF0
aEJhc2U7CiBwcml2YXRlOgotICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRo
KQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCkuZmFzdEJvdW5kaW5nUmVjdCgpOworICAgICAgICBib3Vu
ZHMuaW5mbGF0ZShzX3BsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgICAgICByZXR1cm4gYm91
bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsgfQotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7CiB9OwogCi1jbGFzcyBEcmF3
Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQotICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQot
ICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgY29uc3Qg
Q29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQordXNpbmcgRHJhd0ZvY3Vz
UmluZ1JlY3RzQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHMsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nLAorICAgIFZlY3RvcjxGbG9hdFJlY3Q+LCBmbG9hdCwgZmxvYXQsIENv
bG9yCis+OwogCitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgOiBwdWJsaWMgRHJhd0ZvY3VzUmlu
Z1JlY3RzQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9
IERyYXdGb2N1c1JpbmdSZWN0c0Jhc2U6OmNyZWF0ZTxEcmF3Rm9jdXNSaW5nUmVjdHM+OworICAg
IHVzaW5nIERyYXdGb2N1c1JpbmdSZWN0c0Jhc2U6OkRyYXdGb2N1c1JpbmdSZWN0c0Jhc2U7CiBw
cml2YXRlOgotICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBhdGgp
Ci0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0g
ICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgICAgIGZvciAoYXV0byYgcmVjdCA6
IGFyZ3VtZW50PDA+KCkpCisgICAgICAgICAgICBib3VuZHMudW5pdGUocmVjdCk7CisgICAgICAg
IGJvdW5kcy5pbmZsYXRlKHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgICAgIHJldHVy
biBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IFBhdGgg
bV9wYXRoOwotICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgZmxvYXQgbV9vZmZzZXQ7Ci0gICAgQ29s
b3IgbV9jb2xvcjsKIH07CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7Cit1c2luZyBEcmF3SWNvbkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlw
ZTo6RHJhd0ljb24sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJY29uJiwgY29uc3Qg
RmxvYXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ljb24sCisgICAgUmVmPElj
b24+LCBGbG9hdFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3SWNvbiA6IHB1YmxpYyBEcmF3SWNv
bkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVh
dGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0g
ICAgfQotCi0gICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVy
biBtX3JlY3RzOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0KKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0ljb25CYXNlOjpjcmVhdGU8RHJhd0ljb24+Owor
ICAgIHVzaW5nIERyYXdJY29uQmFzZTo6RHJhd0ljb25CYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3
Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAgICAgLCBtX3JlY3RzKHJlY3Rz
KQotICAgICAgICAsIG1fd2lkdGgod2lkdGgpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQot
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwotICAgIGZsb2F0IG1fd2lkdGg7
Ci0gICAgZmxvYXQgbV9vZmZzZXQ7Ci0gICAgQ29sb3IgbV9jb2xvcjsKKyAgICBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotY2xhc3MgRmls
bFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewordXNpbmcgRHJhd1dpZGdldEJhc2UgPSBEcmF3
aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1dpZGdldCwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjpkcmF3V2lkZ2V0LAorICAgIFJlZjxXaWRnZXQ+LCBJbnRSZWN0Cis+OworICAgIAorY2xhc3Mg
RHJhd1dpZGdldCA6IHB1YmxpYyBEcmF3V2lkZ2V0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKLSAgICB9Ci0KLSAgICBG
bG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3RleHBy
IHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdXaWRnZXRCYXNlOjpjcmVhdGU8RHJhd1dpZGdldD47
CisgICAgdXNpbmcgRHJhd1dpZGdldEJhc2U6OkRyYXdXaWRnZXRCYXNlOwogcHJpdmF0ZToKLSAg
ICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdChh
cmd1bWVudDwxPigpKTsgfQogfTsKLQotLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBmcm9t
IEZpbGxSZWN0IHByb3Blci4KLWNsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIERyYXdp
bmdJdGVtIHsKKyAgICAKK3VzaW5nIERyYXdTY3JvbGxiYXJCYXNlID0gRHJhd2luZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OkRyYXdTY3JvbGxiYXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0Ojoq
KShTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJh
d1Njcm9sbGJhciwKKyAgICBSZWY8U2Nyb2xsYmFyPiwgSW50UmVjdAorPjsKKyAgICAKK2NsYXNz
IERyYXdTY3JvbGxiYXIgOiBwdWJsaWMgRHJhd1Njcm9sbGJhckJhc2UgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7Ci0gICAgfQotCi0gICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1
dG8gY3JlYXRlID0gRHJhd1Njcm9sbGJhckJhc2U6OmNyZWF0ZTxEcmF3U2Nyb2xsYmFyPjsKKyAg
ICB1c2luZyBEcmF3U2Nyb2xsYmFyQmFzZTo6RHJhd1Njcm9sbGJhckJhc2U7CiBwcml2YXRlOgot
ICAgIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xv
cikKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZs
b2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KGFyZ3VtZW50PDE+KCkpOyB9CiB9OwotCi1jbGFz
cyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CisgICAgCit1c2lu
ZyBEcmF3VGhlbWVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaGVtZSwK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRy
b2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9hdCwg
Ym9vbCwgYm9vbCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lLAorICAgIFRoZW1l
JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QsIGZsb2F0LCB2b2lkKiwg
ZmxvYXQsIGZsb2F0LCBib29sLCBib29sCis+OworICAgIAorY2xhc3MgRHJhd1RoZW1lIDogcHVi
bGljIERyYXdUaGVtZUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVu
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aEdyYWRp
ZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUg
PSBEcmF3VGhlbWVCYXNlOjpjcmVhdGU8RHJhd1RoZW1lPjsKKyAgICB1c2luZyBEcmF3VGhlbWVC
YXNlOjpEcmF3VGhlbWVCYXNlOwogcHJpdmF0ZToKLSAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgICAgICwgbV9yZWN0
KHJlY3QpCi0gICAgICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0
OwotICAgIG11dGFibGUgUmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFrZSB0
aGlzIG5vdCBtdXRhYmxlCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFy
Z3VtZW50PDM+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVu
ZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7
IH0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0
dXJuIG1fb3A7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9i
bGVuZE1vZGU7IH0KK3VzaW5nIEZpbGxSZWN0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1U
eXBlOjpGaWxsUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0
UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAorICAgIEZsb2F0UmVjdAor
PjsKIAorY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRmlsbFJlY3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJlY3RCYXNlOjpjcmVhdGU8Rmls
bFJlY3Q+OworICAgIHVzaW5nIEZpbGxSZWN0QmFzZTo6RmlsbFJlY3RCYXNlOwogcHJpdmF0ZToK
LSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAg
ICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QpCi0gICAgICAg
ICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX29w
KG9wKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0
OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKLSAgICBC
bGVuZE1vZGUgbV9ibGVuZE1vZGU7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxSb3VuZGVkUmVjdCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUm91bmRlZFJlY3Q+
IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOwotICAgIH0KLQotICAg
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsg
fQordXNpbmcgRmlsbFJlY3RXaXRoQ29sb3JCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aENvbG9yLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdCwKKyAgICBGbG9hdFJlY3QsIENvbG9yCis+OwogCitjbGFzcyBGaWxsUmVjdFdpdGhDb2xv
ciA6IHB1YmxpYyBGaWxsUmVjdFdpdGhDb2xvckJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdFdpdGhDb2xvckJhc2U6OmNyZWF0ZTxGaWxs
UmVjdFdpdGhDb2xvcj47CisgICAgdXNpbmcgRmlsbFJlY3RXaXRoQ29sb3JCYXNlOjpGaWxsUmVj
dFdpdGhDb2xvckJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKLSAg
ICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAs
IG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQotCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7
Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CisgICAgY29u
c3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNs
YXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKTsK
LSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KK3VzaW5nIEZpbGxSZWN0V2l0aEdyYWRpZW50QmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCwKKyAg
ICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jiks
CisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0LCBSZWY8R3Jh
ZGllbnQ+Cis+OwogCitjbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBGaWxsUmVj
dFdpdGhHcmFkaWVudEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBj
cmVhdGUgPSBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2U6OmNyZWF0ZTxGaWxsUmVjdFdpdGhHcmFk
aWVudD47CisgICAgdXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRCYXNlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAgICAs
IG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNv
bG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0K
LQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JvdW5kZWRI
b2xlUmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsUGF0aCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxsUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRmlsbENvbXBvc2l0ZWRSZWN0QmFzZSA9IERyYXdpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCisgICAgdm9pZCAoR3JhcGhp
Y3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAorICAg
IEZsb2F0UmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUKKz47CiAKK2Ns
YXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBGaWxsQ29tcG9zaXRlZFJlY3RCYXNlIHsK
K3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbENvbXBvc2l0
ZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxDb21wb3NpdGVkUmVjdD47CisgICAgdXNpbmcgRmlsbENv
bXBvc2l0ZWRSZWN0QmFzZTo6RmlsbENvbXBvc2l0ZWRSZWN0QmFzZTsKIHByaXZhdGU6Ci0gICAg
RmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RmlsbFBhdGgpCi0gICAgICAgICwgbV9wYXRoKHBhdGgpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KLQotICAg
IGNvbnN0IFBhdGggbV9wYXRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsRWxsaXBzZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsRWxsaXBzZT4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZpbGxFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQordXNpbmcgRmlsbFJvdW5kZWRSZWN0QmFzZSA9IERyYXdpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCisgICAgdm9pZCAoR3JhcGhpY3ND
b250ZXh0OjoqKShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCwKKyAgICBGbG9hdFJv
dW5kZWRSZWN0LCBDb2xvciwgQmxlbmRNb2RlCis+OwogCitjbGFzcyBGaWxsUm91bmRlZFJlY3Qg
OiBwdWJsaWMgRmlsbFJvdW5kZWRSZWN0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0
YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSb3VuZGVkUmVjdEJhc2U6OmNyZWF0ZTxGaWxsUm91bmRl
ZFJlY3Q+OworICAgIHVzaW5nIEZpbGxSb3VuZGVkUmVjdEJhc2U6OkZpbGxSb3VuZGVkUmVjdEJh
c2U7CiBwcml2YXRlOgotICAgIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAg
ICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVsbGlwc2UpCi0gICAgICAgICwgbV9y
ZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9y
ZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLnJlY3QoKTsgfQogfTsKIAotY2xhc3MgU3Ryb2tl
UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJv
a2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVX
aWR0aCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9Ci0gICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7
IH0KK3VzaW5nIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFzZSA9IERyYXdpbmdJdGVtPAorICAg
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKKyAgICB2b2lkIChHcmFwaGljc0Nv
bnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
LAorICAgIEZsb2F0UmVjdCwgRmxvYXRSb3VuZGVkUmVjdCwgQ29sb3IKKz47CiAKK2NsYXNzIEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFz
ZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlQmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPjsKKyAg
ICB1c2luZyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZUJhc2U6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tl
UmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2xpbmVXaWR0aChsaW5l
V2lkdGgpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmxvYXRSZWN0
IG1fcmVjdDsKLSAgICBmbG9hdCBtX2xpbmVXaWR0aDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgU3Ryb2tlUGF0aCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VQYXRo
PiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNvbnN0IFBhdGgmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIEZpbGxQYXRoQmFzZSA9IERyYXdpbmdJ
dGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCwKKyAgICBj
b25zdCBQYXRoCis+OwogCitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBGaWxsUGF0aEJhc2Ugewor
cHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUGF0aEJhc2U6
OmNyZWF0ZTxGaWxsUGF0aD47CisgICAgdXNpbmcgRmlsbFBhdGhCYXNlOjpGaWxsUGF0aEJhc2U7
CiBwcml2YXRlOgotICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0
aDsKLSAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIH07
CiAKLWNsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUVsbGlwc2UocmVj
dCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9Cit1c2luZyBGaWxsRWxsaXBzZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6
RmlsbEVsbGlwc2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJl
Y3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZSwKKyAgICBGbG9hdFJlY3QK
Kz47CiAKK2NsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIEZpbGxFbGxpcHNlQmFzZSB7CitwdWJs
aWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxFbGxpcHNlQmFzZTo6
Y3JlYXRlPEZpbGxFbGxpcHNlPjsKKyAgICB1c2luZyBGaWxsRWxsaXBzZUJhc2U6OkZpbGxFbGxp
cHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2UpCi0gICAg
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgQ2xlYXJSZWN0IDogcHVibGljIERyYXdp
bmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyUmVjdD4gY3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENs
ZWFyUmVjdChyZWN0KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KK3VzaW5nIFN0cm9rZVJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CisgICAg
SXRlbVR5cGU6OlN0cm9rZVJlY3QsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCwK
KyAgICBGbG9hdFJlY3QsIGZsb2F0Cis+OwogCitjbGFzcyBTdHJva2VSZWN0IDogcHVibGljIFN0
cm9rZVJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRl
ID0gU3Ryb2tlUmVjdEJhc2U6OmNyZWF0ZTxTdHJva2VSZWN0PjsKKyAgICB1c2luZyBTdHJva2VS
ZWN0QmFzZTo6U3Ryb2tlUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIENsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkNsZWFyUmVj
dCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBhcmd1bWVudDwwPigpOworICAgICAg
ICBib3VuZHMuZXhwYW5kKGFyZ3VtZW50PDE+KCksIGFyZ3VtZW50PDE+KCkpOworICAgICAgICBy
ZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLSNpZiBVU0UoQ0cpCi1jbGFzcyBBcHBs
eVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxB
cHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KK3VzaW5nIFN0cm9rZVBhdGhCYXNl
ID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OlN0cm9rZVBhdGgsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBQYXRoJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCwKKyAgICBjb25zdCBQYXRoCis+OwogCitjbGFzcyBTdHJva2VQYXRoIDogcHVibGlj
IFN0cm9rZVBhdGhCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3Jl
YXRlID0gU3Ryb2tlUGF0aEJhc2U6OmNyZWF0ZTxTdHJva2VQYXRoPjsKKyAgICB1c2luZyBTdHJv
a2VQYXRoQmFzZTo6U3Ryb2tlUGF0aEJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5U3Ryb2tlUGF0
dGVybigpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuKQorICAg
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgIH0KKyAgICAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3Jy
ZWN0bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0aCgpLgorICAgICAgICBmbG9hdCBzdHJva2VU
aGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5k
cyA9IGFyZ3VtZW50PDA+KCkuYm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJvdW5kcy5leHBhbmQo
c3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgICAgICByZXR1cm4gYm91bmRz
OworICAgIH0KIH07CiAKLWNsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseUZpbGxQYXR0ZXJuPiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlGaWxsUGF0dGVybik7Ci0gICAgfQor
dXNpbmcgU3Ryb2tlRWxsaXBzZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVj
dCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UsCisgICAgRmxvYXRSZWN0
Cis+OwogCitjbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIFN0cm9rZUVsbGlwc2VCYXNlIHsK
K3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gU3Ryb2tlRWxsaXBz
ZUJhc2U6OmNyZWF0ZTxTdHJva2VFbGxpcHNlPjsKKyAgICB1c2luZyBTdHJva2VFbGxpcHNlQmFz
ZTo6U3Ryb2tlRWxsaXBzZUJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5RmlsbFBhdHRlcm4oKQot
ICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCisgICAgY29uc3Qgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisgICAgICAgIEZsb2F0UmVjdCBib3Vu
ZHMgPSBhcmd1bWVudDwwPigpOworICAgICAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVz
cywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogfTsKLSNlbmRp
ZgotCi1jbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNj
YWxlRmFjdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwotICAgIH0KIAotICAgIGZsb2F0IHNjYWxlRmFj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQordXNpbmcgQ2xlYXJSZWN0QmFz
ZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGVhclJlY3QsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QsCisgICAgRmxvYXRSZWN0Cis+OwogCitjbGFzcyBDbGVhclJlY3QgOiBwdWJs
aWMgQ2xlYXJSZWN0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNy
ZWF0ZSA9IENsZWFyUmVjdEJhc2U6OmNyZWF0ZTxDbGVhclJlY3Q+OworICAgIHVzaW5nIENsZWFy
UmVjdEJhc2U6OkNsZWFyUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsKK2lubGluZSBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbSYg
aXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICBpdGVt
LmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworaW5saW5lIFdURjo6Q1N0cmluZyBJdGVt
OjpkdW1wKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRzIDw8ICp0aGlzOwor
ICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNw
bGF5TGlzdAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRp
Y2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVkaWNhdGU7
IH0gXAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0dFT01FVFJZ
SVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorICAgIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgaXRl
bSkgeyByZXR1cm4gaXRlbS5wcmVkaWNhdGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKERy
YXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0dFT01FVFJZSVRFTShHZW9tZXRyeUl0ZW0sIGlzR2VvbWV0cnlJdGVtKCkpCiAKICNk
ZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRvVmFsdWVUeXBl
TmFtZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCiAgICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBp
dGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBl
TmFtZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFJlc3RvcmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oVHJhbnNsYXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2Fs
ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNU
TSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRHJhd0dseXBocykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3SW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1Rp
bGVkSW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1Rp
bGVkU2NhbGVkSW1hZ2UpCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdlKQotI2VuZGlmCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxQYXRo
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxFbGxpcHNlKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZVJlY3QpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShCZWdpblRyYW5zcGFyZW5jeUxheWVyKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxheWVyKQot
I2lmIFVTRShDRykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBs
eVN0cm9rZVBhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
QXBwbHlGaWxsUGF0dGVybikKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFkb3cpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAppbmRleCBlYTI3MzI2YjU2MWYxOWRlMjI0NzNlM2JhYzgzZjQ0ZmFh
MDkyZmZkLi5mODU5YzY5YTBmNGUwZDFlZTI5ZWI3ZTU5NGYyYmY3YzMzMzdmZWQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDIxICs1MiwyMiBAQCBSZWNv
cmRlcjo6flJlY29yZGVyKCkKIAogdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3Qg
SXRlbSYgaXRlbSkKIHsKLSAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkKICNpZiBVU0UoQ0cp
Ci0gICAgICAgIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4g
fHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgorICAgIGlmICgh
aXM8R2VvbWV0cnlJdGVtPihpdGVtKSAmJiBpdGVtLnR5cGUoKSAhPSBJdGVtVHlwZTo6QXBwbHlT
dHJva2VQYXR0ZXJuICYmIGl0ZW0udHlwZSgpICE9IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJu
KQorI2Vsc2UKKyAgICBpZiAoIWlzPEdlb21ldHJ5SXRlbT4oaXRlbSkpCiAjZW5kaWYKLSAgICAp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlcyA9IGN1
cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFu
Z2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwotICAgICAgICBp
ZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShE
aXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJv
bUxhc3RTdGF0ZSkpOwotICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3RhdGU6
OmNyZWF0ZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKLSAg
ICAgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKLSAgICAgICAgICAgIGN1
cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKLSAg
ICAgICAgfQotICAgICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRydWU7
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYg
c3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0
ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRl
KTsKKyAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2aW5nIHN0YXRlICIg
PDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5n
ZXNGcm9tTGFzdFN0YXRlKSk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFNldFN0YXRl
OjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3RhdGUs
IGNoYW5nZXNGcm9tTGFzdFN0YXRlKSkpOworICAgICAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VG
bGFncyA9IDA7CisgICAgICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0
ZUNoYW5nZXMubV9zdGF0ZTsKICAgICB9CisgICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRy
YXdpbmcgPSB0cnVlOwogfQogCiB2b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQpAQCAtOTksNDQgKzEwMCw0NCBAQCB2b2lkIFJlY29yZGVyOjpzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiAgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0Ojpj
cmVhdGUobWl0ZXJMaW1pdCkpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdHbHlwaHM6OmNyZWF0
ZShmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pLCBudW1HbHlwaHMsIEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUoc3RhcnRQb2ludCksIHNt
b290aGluZ01vZGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRl
bT4oYXBwZW5kSXRlbShEcmF3R2x5cGhzOjpjcmVhdGUobWFrZVJlZihmb250KSwgZ2x5cGhCdWZm
ZXIsIGZyb20sIG51bUdseXBocywgc3RhcnRQb2ludCwgZm9udFNtb290aGluZykpKTsKICAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6
OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRp
b24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9
IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3SW1hZ2U6OmNyZWF0ZShtYWtl
UmVmKGltYWdlKSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7
CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWRSZWNvcmQ7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOworICAg
IGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1Rp
bGVkSW1hZ2U6OmNyZWF0ZShtYWtlUmVmKGltYWdlKSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOwogICAgIHVwZGF0ZUl0ZW1F
eHRlbnQobmV3SXRlbSk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwog
fQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGlt
YWdlUGFpbnRpbmdPcHRpb25zKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9t
ZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShtYWtlUmVm
KGltYWdlKSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1
bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRl
bSk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCi0jaWYgVVNF
KENHKSB8fCBVU0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShD
QUlSTykKIHZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewotICAg
IERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0o
RHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBk
b3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUo
aW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVu
dGF0aW9uKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAjZW5kaWYKIAog
dm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd1BhdHRlcm46OmNyZWF0ZShpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpKTsKKyAgICBh
dXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdQYXR0
ZXJuOjpjcmVhdGUobWFrZVJlZihpbWFnZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKSk7CiAgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKIH0KIApAQCAtMjA5LDcgKzIxMCw3IEBAIEFmZmluZVRyYW5zZm9y
bSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQog
CiB2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7
Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7CiB9CiAKQEAgLTIyMCwxMjEgKzIyMSwxNDcgQEAgdm9pZCBSZWNvcmRlcjo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdSZWN0OjpjcmVhdGUo
cmVjdCwgYm9yZGVyVGhpY2tuZXNzKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxH
ZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlj
a25lc3MpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5n
SXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOworICAg
IGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0xp
bmU6OmNyZWF0ZShwb2ludDEsIHBvaW50MikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0
ZW0pOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKEZsb2F0UG9pbnQoKSwgdG9GbG9h
dFNpemUocG9pbnQpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhpY2tu
ZXNzKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVu
ZEl0ZW0oRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHBvaW50LCB3aWR0
aCwgc3R5bGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4o
YXBwZW5kSXRlbShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocG9pbnQsIHdpZHRo
LCBzdHlsZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJl
Y29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3RWxs
aXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21l
dHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CiAgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAorI2lmIFVTRShDRykKIHZvaWQgUmVjb3JkZXI6
OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0aDo6Y3JlYXRlKHBhdGgp
KSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRl
bShEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKIH0KKyNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3Ip
KSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRl
bShEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSkp
OwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5l
d0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3Rm9jdXNSaW5nUmVj
dHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKSk7CisgICAgYXV0byYgbmV3
SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3Rm9jdXNSaW5nUmVj
dHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKSk7CisgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKK30KKyAgICAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJY29uKEljb24m
IGljb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93
bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdJY29uOjpjcmVhdGUobWFrZVJlZihp
Y29uKSwgcmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lk
IFJlY29yZGVyOjpkcmF3V2lkZ2V0KFdpZGdldCYgd2lkZ2V0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRHJhd1dpZGdldDo6Y3JlYXRlKG1ha2VSZWYod2lkZ2V0KSwgcmVjdCkpKTsKKyAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3U2Nyb2xsYmFy
KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGF1dG8m
IG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1Njcm9sbGJh
cjo6Y3JlYXRlKG1ha2VSZWYoc2Nyb2xsYmFyKSwgcmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3VGhlbWUoVGhlbWUmIHRoZW1l
LCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1B
cHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RoZW1lOjpjcmVhdGUodGhl
bWUsIHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2
aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNl
RGFya0FwcGVhcmFuY2UpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIERy
YXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmls
bFJlY3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9t
ZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3Q6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVwZGF0
ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdpbmdJdGVt
JiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RXaXRo
Q29sb3I6OmNyZWF0ZShyZWN0LCBjb2xvcikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNh
c3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVj
dCwgY29sb3IpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSkp
OworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0o
RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpKTsKICAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBk
b3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0
ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93
bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRl
KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSkp
OworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0o
RmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpKTsKICAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdpbmdJ
dGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSkpOwor
ICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9y
KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUGF0aDo6Y3JlYXRlKHBhdGgp
KSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRl
bShGaWxsUGF0aDo6Y3JlYXRlKHBhdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVt
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbEVsbGlwc2U6OmNyZWF0ZShy
ZWN0KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7
Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShTdHJva2VSZWN0OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSkpOworICAgIGF1dG8mIG5l
d0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlUmVjdDo6Y3Jl
YXRlKHJlY3QsIGxpbmVXaWR0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwog
fQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
RHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShT
dHJva2VQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8
R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSkpOwogICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlRWxsaXBzZTo6Y3JlYXRl
KHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRhdGVJdGVtRXh0
ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRvJiBu
ZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKENsZWFyUmVjdDo6Y3Jl
YXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIApAQCAtNDAy
LDcgKzQyOSw3IEBAIEl0ZW0mIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0ZW0p
CiAgICAgcmV0dXJuIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwogfQogCi12
b2lkIFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJiBpdGVtKSBjb25zdAor
dm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChHZW9tZXRyeUl0ZW0mIGl0ZW0pIGNvbnN0
CiB7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5sb2NhbEJv
dW5kcyhncmFwaGljc0NvbnRleHQoKSkpCiAgICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4dGVudEZy
b21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCmluZGV4IGM1YWM3MDkxMzk1ZmE0ZmU4M2EzMWQyYzg4ZGIxZTg4YTdhZGEzZTQu
LmQ1YWU3NDYyZTIxYzZhYzgyYTllZTAxZTA4MWFiMjY3OTk3Nzc2NGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNDUsOCArNDUsNiBAQCBzdHJ1Y3QgSW1hZ2VQ
YWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdp
bmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6CkBAIC05NywxMyAr
OTUsMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CisjaWYgVVNFKENHKQogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRl
OworI2VuZGlmCiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdJY29uKElj
b24mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdXaWRnZXQoV2lk
Z2V0JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Njcm9sbGJhcihT
Y3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3VGhlbWUo
VGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJh
bmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2F2ZSgp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwpAQCAtMTMzLDcgKzEzOCw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAKICAg
ICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlSXRlbUV4dGVudChHZW9tZXRyeUl0ZW0mKSBjb25zdDsKICAgICAKICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xp
cEJvdW5kcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CmluZGV4IDhmZWFhMmY1ZDc1MzI4ZTQzNmJmOWQ4OGI4ZGMwNWJhYzFjMmUxZjMuLjBjZmZlNmY5
YzY4NTIxYzBiOTA4MTlmMGJlZGVkMWQ1ZTY3OTViZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTU1LDkgKzU1LDkgQEAgc3RkOjp1bmlxdWVfcHRyPERp
c3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGJvb2wKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKICAgICAg
ICAgYXV0byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdldCgpOwogCi0gICAgICAg
IGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXM8RHJhd2luZ0l0ZW0+KGl0ZW0pKSB7Ci0g
ICAgICAgICAgICBjb25zdCBEcmF3aW5nSXRlbSYgZHJhd2luZ0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZHJhd2luZ0l0ZW0uZXh0ZW50S25vd24o
KSAmJiAhZHJhd2luZ0l0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsKKyAg
ICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxHZW9tZXRyeUl0ZW0+KGl0ZW0p
KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBnZW9tZXRyeUl0ZW0gPSBkb3duY2FzdDxHZW9t
ZXRyeUl0ZW0+KGl0ZW0pOworICAgICAgICAgICAgaWYgKGdlb21ldHJ5SXRlbS5leHRlbnRLbm93
bigpICYmICFnZW9tZXRyeUl0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsK
ICAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwg
InNraXBwaW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSWNvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSWNvbkd0ay5jcHAKaW5kZXggYWYxODVhNTRjZGQ0OWQyMDQ2ODY1ZTY5M2M1YTczYzk0
YzU4YjA0Yi4uZjBhZTVjZmNhMTlhYmJmY2I5NDAwZDgxMzViMzRjOGYzMTdjMzAzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcApAQCAt
MTEzLDExICsxMTMsOCBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
SWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBUT0RPOiBTY2FsZS9jbGlwIHRo
ZSBpbWFnZSBpZiBuZWNlc3NhcnkuCiAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpOwogICAgIGNhaXJvX3NhdmUoY3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQppbmRleCBjZWU1MTZlMTQ0MGU3OGVi
NTQzNzM5YWIyYTAzOGQ4NzM2MmY3ZDQ0Li5kYmQ4M2Q1N2MwZTY1ODdhZjIyMmQ3YzdhNzVkYmY0
NGFkYTA4OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvSWNvbklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3Mv
SWNvbklPUy5tbQpAQCAtNTUsMTEgKzU1LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUlj
b25Gb3JJbWFnZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSWNvbihpbWFnZSkpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSWNv
bjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CiAKICAgICBmbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX2Nn
SW1hZ2UuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ljb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SWNvbk1hYy5tbQppbmRleCA2MTQzYjUxZDQzNjQ1ZDVhZDQ4YzM5NWFmN2M0ZWEyNjQzM2Q3YzRh
Li5lODUwMzA4ZDBiYzg1NzI3Yjk1MGM2NmMxNjZhZjdkNTRhZDk0MmYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQpAQCAtOTEsMTMgKzkx
LDkgQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JVVEkoY29uc3QgU3RyaW5nJiBV
VEkpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGltYWdlKSk7CiB9CiAKLXZvaWQgSWNv
bjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQgbG9jYWxDdXJyZW50R0MoY29udGV4dCk7Ci0KICAgICBbbV9uc0ltYWdlIGRyYXdJblJlY3Q6
cmVjdCBmcm9tUmVjdDpOU01ha2VSZWN0KDAsIDAsIFttX25zSW1hZ2Ugc2l6ZV0ud2lkdGgsIFtt
X25zSW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJhdGlvblNv
dXJjZU92ZXIgZnJhY3Rpb246MS4wZl07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggOWE5NTRlMjJiOTRiYmFl
OWNiMTc1ZmVhZmMwNDJmZmZlYjVhZmUxZC4uMDQwNjI3NmFiYmM3NTE4YTUzN2RlZDY3ZWQzYTZh
NzA3ZDVjMzFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludAogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50
Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMs
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBEYXNoQXJyYXksIGJvb2ws
IGJvb2wsIENvbG9yLCBmbG9hdD4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0
KCkgPSBkZWZhdWx0OwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFz
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgVU5VU0VEX1BBUkFNKHN0cm9rZVRoaWNrbmVzcyk7
CisgICAgVU5VU0VEX1BBUkFNKHN0cm9rZVN0eWxlKTsKICAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVz
Rm9yVGV4dD4ocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0KQEAgLTY5MSwxMCArNjkx
LDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3Qs
IHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsKLX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBzdHJ1Y3QgRHJhd0ZvY3VzUmluZyBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIGZsb2F0LCBDb2xv
cj4gewpAQCAtNzM1LDYgKzczMSwyNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdAogICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsK
IH0KIAordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3SWNvbihJY29uJiwgY29uc3Qg
RmxvYXRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAg
IAordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0
IEludFJlY3QmKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAg
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30K
KyAgICAKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1RoZW1lKFRoZW1lJiwgQ29u
dHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCos
IGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVE
X1lFVCgpOworfQorCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNhdmUoKQogewogICAg
IHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVy
LmgKaW5kZXggZGM0ODQ5ZTVjZjRhOGNhOTJmMzlhMjY1Y2Q5OWMxNDNhOThjZDUzMC4uNDg3OGNh
Mjg4NjBiYWM4ODQyMzFkMTY0OGMxZjQ0MzAwOGNlMGM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtNzIsMTMgKzcyLDE3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNo
QXJyYXkmLCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBib29s
LCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCwgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0Vs
bGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
b3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3SWNvbihXZWJDb3JlOjpJY29uJiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdlYkNv
cmU6OldpZGdldCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1RoZW1lKFdlYkNvcmU6OlRoZW1lJiwgV2ViQ29y
ZTo6Q29udHJvbFBhcnQsIFdlYkNvcmU6OkNvbnRyb2xTdGF0ZXMmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNl
U3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDAyOWQwNzljYzFjMjAwMzk4YTc4MTFl
NjZmM2UzM2U3OTM5NjFiYWMuLjFhYmY0ZmFjMTNiMGFkYTIzYWRiZGYwMDRiMTFiMzhhODJjMjJi
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcApAQCAtMTcwOCw3ICsxNzA4LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlz
UmVjb3JkaW5nKCkpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3TGluZXNG
b3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhpY2tu
ZXNzKCkpOworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmRyYXdMaW5lc0ZvclRleHQo
cG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JY29uV2luLmNwcAppbmRleCA3OTllMzQ3NDAzOTQwNjM1MTBlOTU0YjZhZjMwOTk4
ZTdkMjVlMmFkLi4xOGZlNmY3OTEyNzVlYWQ1OWMwMzQyM2JhZDhjN2Q0YTgyZDljZmJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCkBA
IC03NCwxMSArNzQsOCBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
Y29uKGhJY29uKSk7CiB9CiAKLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHIpIGNvbnN0CiB7Ci0gICAgaWYg
KGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBMb2Nh
bFdpbmRvd3NDb250ZXh0IHdpbmRvd0NvbnRleHQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChy
KSk7CiAgICAgRHJhd0ljb25FeCh3aW5kb3dDb250ZXh0LmhkYygpLCByLngoKSwgci55KCksIG1f
aEljb24sIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgMCwgMCwgRElfTk9STUFMKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dwZS9JY29uV1BFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dwZS9JY29uV1BFLmNwcAppbmRleCA3
NmEyMWRhMzZmMzZlZjkxYWExNzg4OWI4ZmMxMTliMjIyZTcyNWJlLi4xZWRiN2Q5ZjVjNmQxMzlh
ZThmNjc1MWMxY2NhMzI1ZDI5NGUyNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogSWNvbjo6fkljb24oKSA9IGRlZmF1bHQ7CiAKLXZvaWQgSWNvbjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgSWNvbjo6cGxhdGZvcm1Q
YWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmluZGV4IDg3NDEyOTMzOTc5
M2FkMmU2YjNkYWQ5ZjcxOWZhMDYwNWI0NTIwYWQuLmYzOGEwYTRlMTVjYjE5ZGQ1YzEzOGI5YzNh
MWM1YTJlM2FlOTY2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsu
Y3BwCkBAIC04MCw3ICs4MCwxMiBAQCB2b2lkIFdpZGdldDo6aGlkZSgpCiAgICAgICAgIGd0a193
aWRnZXRfaGlkZShwbGF0Zm9ybVdpZGdldCgpKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0LmRy
YXdXaWRnZXQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KaW5kZXggOGIxZThiNTRiNWNlMjcwZjI0OGRhZWNlZDUy
NGY3NzJhMTU0ZTllYi4uZGNjNmE0OTA1MjA5OTRhYTQ1NzAyMTJjZTRiYzJkZGJiNzFlZjYxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCkBAIC0xNDEsMTQgKzE0
MSwxNiBAQCBOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0ZXJWaWV3KCkgY29uc3QKICAgICByZXR1cm4g
dmlldzsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3Qg
SW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWlu
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3kpCiB7Ci0gICAgaWYgKHAucGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KICAg
ICAKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKICAgICBOU1ZpZXcgKnZpZXcgPSBnZXRPdXRlclZpZXco
KTsKIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLnBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKIAogICAgIE5TUmVjdCB2aWV3RnJh
bWUgPSBbdmlldyBmcmFtZV07CkBAIC0xNTYsNyArMTU4LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCB2aWV3RnJhbWUub3Jp
Z2luLnggLSB2aWV3Qm91bmRzLm9yaWdpbi54LCB2aWV3RnJhbWUub3JpZ2luLnkgLSB2aWV3Qm91
bmRzLm9yaWdpbi55KTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBb
dmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21W
aWV3Olt2aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRdOworICAgIFt2aWV3IGRp
c3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6
W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0OmNnQ29udGV4dF07CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKaW5kZXggNDkwMjhmMWI0M2M3M2Mz
NWNjMzEzNzBhN2RmNGU5ODQxNGZkYzYyNi4uZTlmMzAzZDNkMWJmYWRmMTdiNjdkOGQzNmU1ZThi
MjE1NzRkNmYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKQEAgLTUz
LDcgKzUzLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVT
cGFjZShDb250cm9sUGFydCBwYXJ0KSBjb25zdCBmaW5hbCB7IHJldHVybiBwYXJ0ID09IFB1c2hC
dXR0b25QYXJ0OyB9CiAKLSAgICB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVz
JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgem9vbUZhY3Rvciwg
U2Nyb2xsVmlldyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0
b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgZmlu
YWw7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xQYXJ0
LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29t
RmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQg
cGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIGZpbmFsOwogICAgIHZvaWQgaW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJv
bFBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QmLCBmbG9hdCB6b29tRmFjdG9y
KSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgdXNlclByZWZlcnNSZWR1Y2VkTW90aW9uKCkgY29u
c3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KaW5kZXggNDgz
MWZmZjRmODhhY2UxNGNmZDBmZWYzZWE3YjgxYjc4NDM3N2Q3YS4uZDkyMzg1NjAxOTZkZDM2OWU0
ODc4ZmIyN2UyNjI2OWYzNDJmNWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1RoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVt
ZU1hYy5tbQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRpYyBib29sIGRyYXdDZWxsRm9jdXNSaW5n
KE5TQ2VsbCAqY2VsbCwgTlNSZWN0IGNlbGxGcmFtZSwgTlNWaWV3ICpjb250cm9sVmllCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZUJ1dHRvbihDb250cm9s
UGFydCBidXR0b25UeXBlLCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZh
Y3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZs
b2F0IHBhZ2VTY2FsZUZhY3RvcikKK3N0YXRpYyB2b2lkIHBhaW50VG9nZ2xlQnV0dG9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFBhcnQgYnV0dG9uVHlwZSwgQ29udHJvbFN0YXRl
cyYgY29udHJvbFN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29t
RmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvciwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogCkBAIC01MjAsNyArNTIwLDcgQEAgc3RhdGljIE5TQnV0dG9uQ2VsbCAqYnV0dG9uKENvbnRy
b2xQYXJ0IHBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMKICAgICByZXR1
cm4gY2VsbDsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0IHBh
cnQsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxW
aWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKQorc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9s
bFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgCkBAIC01OTYsNyArNTk2LDcg
QEAgc3RhdGljIE5TQ29udHJvbFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25zdCBG
b250Q2FzY2FkZSYgZm9udCkKICAgICByZXR1cm4gTlNDb250cm9sU2l6ZU1pbmk7CiB9CiAKLXN0
YXRpYyB2b2lkIHBhaW50U3RlcHBlcihDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFj
dG9yLCBTY3JvbGxWaWV3KikKK3N0YXRpYyB2b2lkIHBhaW50U3RlcHBlcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29t
ZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikKIHsKICAgICAvLyBXZSBkb24n
dCB1c2UgTlNTdGVwcGVyQ2VsbCBiZWNhdXNlIHRoZXJlIGFyZSBubyB3YXlzIHRvIGRyYXcgYW4K
ICAgICAvLyBOU1N0ZXBwZXJDZWxsIHdpdGggdGhlIHVwIGJ1dHRvbiBoaWdobGlnaHRlZC4KQEAg
LTg0OCwyNSArODQ4LDI1IEBAIHZvaWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0
KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmIHN0CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFRoZW1lTWFjOjpwYWludChDb250cm9sUGFydCBw
YXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9y
LCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit2b2lk
IFRoZW1lTWFjOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJv
bFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21l
ZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5j
ZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBl
YXJhbmNlIGxvY2FsQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFy
YW5jZSk7CiAKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6
Ci0gICAgICAgICAgICBwYWludFRvZ2dsZUJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdl
U2NhbGVGYWN0b3IpOworICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24oY29udGV4dCwgcGFy
dCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9s
bFZpZXcqPihzY3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgICAg
ICBwYWludFRvZ2dsZUJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpv
b21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3Ip
OworICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24oY29udGV4dCwgcGFydCwgc3RhdGVzLCB6
b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXcqPihzY3Jv
bGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZh
dWx0QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6Ci0gICAgICAgICAgICBwYWludEJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNv
bnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFj
dG9yLCBwYWdlU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgcGFpbnRCdXR0b24oY29udGV4dCwg
cGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNj
cm9sbFZpZXcqPihzY3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rv
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0
OgotICAgICAgICAgICAgcGFpbnRTdGVwcGVyKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwg
em9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7CisgICAgICAgICAgICBwYWludFN0ZXBwZXIoY29udGV4
dCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9s
bFZpZXcqPihzY3JvbGxWaWV3KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dpZGdldE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRN
YWMubW0KaW5kZXggOTk2YzE5ZDU1MGY5MTMxZmEwMjM2MGI2NTdmODhiZTlmOWU2NjZiYi4uYjhh
N2ZjOTMyMDY2YzgxOTJhYjJiYzhlZTM3MDU5NzhmOWUwODVlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCkBAIC0xODYsOSArMTg2LDkgQEAgTlNWaWV3ICpXaWRn
ZXQ6OmdldE91dGVyVmlldygpIGNvbnN0CiAgICAgcmV0dXJuIHZpZXc7CiB9CiAKLXZvaWQgV2lk
Z2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQog
ewotICAgIGlmIChwLnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAoY29udGV4dC5wYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBOU1ZpZXcgKnZpZXcgPSBnZXRPdXRl
clZpZXcoKTsKIApAQCAtMjAyLDExICsyMDIsMTcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGkK
ICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCisgICAgY29udGV4dC5kcmF3
V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKyAgICAKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKICAgICAv
LyBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoaXMgV2lkZ2V0LCBiZWNhdXNlIHNlbmRpbmcgbWVzc2Fn
ZXMgdG8gdGhlIHZpZXdzIGNhbiBpbnZva2UgYXJiaXRyYXJ5CiAgICAgLy8gY29kZSwgd2hpY2gg
Y2FuIGRlcmVmIGl0LgogICAgIFJlZjxXaWRnZXQ+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCisg
ICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CiAgICAgTlNHcmFwaGljc0NvbnRleHQg
KmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKQEAgLTIxNCw3ICsyMjAsNyBAQCB2b2lk
IFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1
cml0eU9yaWdpblBhaW50UG9saQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSBvZiBkcmF3aW5nIGludG8gYSB3aW5kb3cgb3Ig
YW4gaW5jbHVzaXZlIGxheWVyLCBvciBwcmludGluZy4KICAgICAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpb
dmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11dXTsKKyAgICAgICAg
W3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6cmVjdCBm
cm9tVmlldzpbdmlldyBzdXBlcnZpZXddXV07CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsNyArMjQzLDcgQEAgdm9pZCBX
aWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJp
dHlPcmlnaW5QYWludFBvbGkKICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSAwOwogICAgIH0KIAot
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLnBsYXRmb3JtQ29udGV4dCgpOworICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgogICAgIEFTU0VSVChjZ0NvbnRleHQgPT0gW2N1
cnJlbnRDb250ZXh0IGdyYXBoaWNzUG9ydF0pOwpAQCAtMjU5LDcgKzI2NSw3IEBAIHZvaWQgV2lk
Z2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXBy
ZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICAgICAgTlNHcmFwaGljc0NvbnRleHQgKm5zQ29udGV4
dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmNn
Q29udGV4dCBmbGlwcGVkOk5PXTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICAg
ICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6ciBm
cm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6bnNDb250ZXh0XTsKKyAgICAgICAg
W3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6cmVjdCBm
cm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6bnNDb250ZXh0XTsKICAgICB9CiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEZsYWdzLmgKaW5kZXggZjhjYjNiZDI2Njc0NjUxZTZhY2UwNjgyZGIwYWY4ZWJkNWY4
OWYzNS4uZWNmZTE3YmIyMTkzNWZkZjVkZGZjZjZhYjI2OGQxN2Y2YWYyZTlhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgVGV4dFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsK
QEAgLTQwLDYgKzQyLDEyIEBAIGVudW0gY2xhc3MgRm9udFNtb290aGluZ01vZGUgOiB1aW50OF90
IHsKICAgICBBbnRpYWxpYXNlZCwKICAgICBTdWJwaXhlbEFudGlhbGlhc2VkCiB9OworICAgIAor
aW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBj
b25zdCBGb250U21vb3RoaW5nTW9kZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIEZvbnRT
bW9vdGhpbmdNb2RlIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KIAogLy8g
VGhpcyBzZXR0aW5nIGlzIHVzZWQgdG8gcHJvdmlkZSB3YXlzIG9mIHN3aXRjaGluZyBiZXR3ZWVu
IG11bHRpcGxlIHJlbmRlcmluZyBtb2RlcyB0aGF0IG1heSBoYXZlIGRpZmZlcmVudAogLy8gbWV0
cmljcy4gSXQgaXMgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24gV2lu
ZG93cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAKaW5kZXggOGJk
YzAyM2E0Mzc2NmQ0NWYzYzFhOWZjYThjZTA5M2VmOTM1ZDdiOS4uYTUxZTRmMTc1OTQyZDhiYmU4
NGU3YTM3ZTE5YmFkNjgyNjkxZTNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1dpZGdldFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dp
ZGdldFdpbi5jcHAKQEAgLTc1LDcgKzc1LDEyIEBAIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJiBjdXJzb3IpCiAgICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3IoY3Vy
c29yKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmln
aW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0LmRyYXdXaWRnZXQoKnRoaXMsIHJlY3QpOwor
fQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRSZWN0JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3Bl
L1dpZGdldFdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNw
cAppbmRleCA1ZjY2MzMwYzUyMzk4N2E2NzA4NTAwMDRiMzk4OWNjYWM2NDBmYjVkLi45NDUzMzg1
ZDg3YWVhY2QxMWMwN2ExOTk0Mjc4OWMzYjM1MmI3OWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcApAQCAtNTIsNyArNTIsMTIgQEAgSW50UmVjdCBXaWRnZXQ6
OmZyYW1lUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWU7CiB9CiAKLXZvaWQgV2lkZ2V0
OjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgU2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit7CisgICAg
Y29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBXaWRnZXQ6OnBsYXRm
b3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmlu
ZGV4IDQ2ODQ3MmM2ODY1YmY2NzE2YjliMmY4OGJiYmFlMTU1ZGYzZTM2MGEuLjZiYjllOTFlOTY1
YTE4ZWE5YjBhMjQ1NWUzY2IzZmU0YjBmZWFiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcApAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBh
aW50KGNvbnN0IFJlbmRlckJveCYgYm94LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBj
b25zCiAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoK
ICAgICAgICAgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGJveCwgY29udHJvbFN0YXRl
cyk7Ci0gICAgICAgIFRoZW1lOjpzaW5nbGV0b24oKS5wYWludChwYXJ0LCBjb250cm9sU3RhdGVz
LCBwYWludEluZm8uY29udGV4dCgpLCBkZXZpY2VQaXhlbFNuYXBwZWRSZWN0LCBib3guc3R5bGUo
KS5lZmZlY3RpdmVab29tKCksICZib3gudmlldygpLmZyYW1lVmlldygpLCBkZXZpY2VTY2FsZUZh
Y3RvciwgcGFnZVNjYWxlRmFjdG9yLCBib3gucGFnZSgpLnVzZVN5c3RlbUFwcGVhcmFuY2UoKSwg
Ym94LnBhZ2UoKS51c2VEYXJrQXBwZWFyYW5jZSgpKTsKKyAgICAgICAgVGhlbWU6OnNpbmdsZXRv
bigpLnBhaW50KHBhaW50SW5mby5jb250ZXh0KCksIHBhcnQsIGNvbnRyb2xTdGF0ZXMsIGRldmlj
ZVBpeGVsU25hcHBlZFJlY3QsIGJveC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJmJveC52aWV3
KCkuZnJhbWVWaWV3KCksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIGJveC5w
YWdlKCkudXNlU3lzdGVtQXBwZWFyYW5jZSgpLCBib3gucGFnZSgpLnVzZURhcmtBcHBlYXJhbmNl
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMWRlNzA1NGRhMTVhZWVhYmY5MDM4ZjVlMjMwOTA4NWIwODk0MGEwYS4uMTUyMzMz
YTZmYzM5ZjFiNTQzMjkyMDk0Nzg5NjgyYzNlZmUxYmYyYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBA
CisyMDE4LTA3LTE4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+
CisKKyAgICAgICAgQWxsb3cgaWNvbiwgd2lkZ2V0LCBzY3JvbGxiYXIgYW5kIHRoZW1lIHRvIGJl
IGRyYXduIHRocm91Z2ggRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4Nzc2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNw
YXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lw
LWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9k
aXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9y
bXMtZXhwZWN0ZWQudHh0OgorCisyMDE4LTA3LTE3ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBEaXNwbGF5TGlzdEl0ZW1z
IGFuZCB1c2Ugc3RkOjp0dXBsZSB0byBzdG9yZSB0aGUgYXJndW1lbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcwMDIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lIGV4aXN0aW5nIGxh
eW91dCB0ZXN0cy4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNo
YWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvbGF5ZXIt
ZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9yZXBsYXkt
c2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy13
azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dDoKKwogMjAxOC0wNy0xNyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFk
ZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnNraXAgTGF5b3V0VGVzdCBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZGlzcGxheS9kaXNwbGF5LWNvbnRlbnRzLWZpcnN0
LWxldHRlci0wMDIuaHRtbC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCBhODgzZTY4NTJlMTg0MmRm
OTY5ZmJjYWUyNTZhMjc4N2NmOTZiZmM5Li43YzdhODk0ZGViMWQzYzMwNjM5ODBkNmI2MDcwZTAz
Yjk5NzQyYWNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDEzICsxLDE1IEBACiAgCiAoc2V0
LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAg
KHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAj
QzgwMDAwKSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQog
ICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZs
YWdzIDI1NikKLSAgKGZpbGwtY29sb3IgIzAwMDBDODdGKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAg
ICAoY2hhbmdlLWZsYWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAjMDAwMEM4N0YpKSkKIChmaWxs
LXJlY3QKICAgKGV4dGVudCBhdCAoMzAsMzApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgzMCwz
MCkgc2l6ZSA1NXg1MCkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0
ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggZGU2OThhZTY0ZGI2
MmM2YzQ5YTIyZTBiYjllZmM2NTczNDhlYmZjOC4uOTk4N2JhZTFhYTg2ZWJlN2ZjYmE1YWE3YzY4
OTJkMmRkMGIyMTkxNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtNSwxNCArNSwxNSBA
QAogKHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgMTAyNCkKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0x
MCBoZWlnaHQ9MjApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQorICAoc3RhdGUt
Y2hhbmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgMTAyNCkKKyAgICAoc2hhZG93LWJsdXIgMTIuMDAp
CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVz
ZS1sZWdhY3ktcmFkaXVzIDApKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAogICAoZXh0ZW50IGF0
ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkK
ICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQor
ICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwp
KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCA4NDhiMDc3
NTQ1YTdjNjgwMjcwZWVlMWJhMDFmYmJkMWU4YmNjM2ZjLi4wNTRlMzRhNDUyOGZmYWUzNGU5YjE0
MzczNWQ3ZWI2MzUyZDgzMGMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
ZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAg
LTIsMTkgKzIsMjAgQEAKICh0cmFuc2xhdGUKICAgKHggMC4wMCkKICAgKHkgMjIuMDApKQotKGNv
bmNhdGVudGF0ZS1jdG0KKyhjb25jYXRlbmF0ZS1jdG0KICAgKGN0bSB7bT0oKDAuODcsMC41MCko
LTAuNTAsMC44NykpIHQ9KDgxLjcwLC0xOC4zMCl9KSkKIChzYXZlCiAgIChyZXN0b3JlLWluZGV4
IDUpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDEwMjQpCi0gIChzaGFkb3ctYmx1ciAx
Mi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93cy11
c2UtbGVnYWN5LXJhZGl1cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdz
IDEwMjQpCisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRo
PTEwIGhlaWdodD0yMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCiAoZmls
bC1jb21wb3NpdGVkLXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgx
ODUuNjUpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYp
Ci0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJh
dG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVj
dGVkLnR4dAppbmRleCBjNWY2YWM2YjI1YTk4N2ZiMDRlZWU5YTExOTEwYmVmNjFmNzMxYTMzLi40
YWY3ZTEwOWU5MzFiMGQ0ZGQwY2Q2OTI0NDk3NDI3MDg1M2IxMmY3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQK
QEAgLTYsMTMgKzYsMTQgQEAKICAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChy
ZWN0IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3Np
dGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1v
dmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdz
IDEzMTQ1NikKLSAgKGZpbGwtY29sb3IgIzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQotICAo
c2hvdWxkLWFudGlhbGlhcyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdz
IDEzMTQ1NikKKyAgICAoZmlsbC1jb2xvciAjMDAwMEZGKQorICAgIChzdHJva2Utc3R5bGUgMCkK
KyAgICAoc2hvdWxkLWFudGlhbGlhcyAwKSkpCiAoZHJhdy1yZWN0CiAgIChleHRlbnQgYXQgKDAs
MCkgc2l6ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVj
dC1leHBlY3RlZC50eHQKaW5kZXggYmY3ZWYyNzVmNjE4NTVhNjI1MWI2MTc2ZGIxN2RkMDJlOTA0
OGVjMy4uNWUxZmM5NjhiNDVhYjdjMTE3MTRjZjNiNzVlMjZmNzg0MmYzZDc4OSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQKQEAgLTYsNyArNiw3IEBAIHJlY29yZGVkOgogICAoZXh0ZW50
IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEw
MCkKICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVy
KQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3Jt
YWwpKQogCiByZXBsYXllZDogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDIxMGU0NGIwODc3YzA0MGNhODUyNDIwZGQ5N2I0MmMw
ZWFjMTc2YzUuLjExZTdlMDFlOTg4ODNiMGZjMzYxMzNiMjJjMDUyYWFmN2NjOWQwNzEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBA
IC01LDE1ICs1LDE2IEBACiAoc2F2ZQogICAocmVzdG9yZS1pbmRleCA0KSkKIChzZXQtc3RhdGUK
LSAgKGNoYW5nZS1mbGFncyA1MjUzMTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRv
dy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1
cyAwKQotICAoc2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIDApKQorICAoc3RhdGUtY2hh
bmdlIAorICAgIChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkK
KyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNl
LWxlZ2FjeS1yYWRpdXMgMCkKKyAgICAoc2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIDAp
KSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAogICAoZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4
MTM3KQogICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYp
Ci0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJh
dG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50
eHQKaW5kZXggMzg0ZTk4MTI5ZGM3ZWJjZGQ4OTZkMzEwZmE4Yzc1ZDM2NTNhYmI3Zi4uYWZjYzhj
NGE5NDFlYjljZTEzNTIxOTc1MTY1MWU5MTFmZTA3YzcwNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9y
bXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxh
eWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwyMCAr
MiwyMSBAQAogKHRyYW5zbGF0ZQogICAoeCAwLjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50
YXRlLWN0bQorKGNvbmNhdGVuYXRlLWN0bQogICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCww
Ljg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQogKHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAo
c2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQotICAoc2hhZG93LWJsdXIgMTIuMDAp
Ci0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxl
Z2FjeS1yYWRpdXMgMCkKLSAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkKKyAg
KHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDUyNTMxMikKKyAgICAoc2hhZG93LWJs
dXIgMTIuMDApCisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChz
aGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApCisgICAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6
ZS1mb250cyAwKSkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCww
LjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkK
ICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQor
ICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwp
KQogKHJlc3RvcmUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345284</attachid>
            <date>2018-07-18 14:25:29 -0700</date>
            <delta_ts>2018-07-18 17:03:25 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-187765-20180718142528.patch</filename>
            <type>text/plain</type>
            <size>217114</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UxOWQyYTE5Zjg0YjUx
ODQxMGNiMDQ2NGZjOTNiZmRkZmExNTBmOC4uZTM4N2IyZWY4NjNiNTAwYjZhNTYwNzk0ZWNiYTQ4
MDgwY2UyMjc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5MCBAQAorMjAxOC0wNy0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93
IGljb24sIHdpZGdldCwgc2Nyb2xsYmFyIGFuZCB0aGVtZSB0byBiZSBkcmF3biB0aHJvdWdoIERp
c3BsYXlMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODc3NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEcmF3aW5nIHRoZXNlIGl0ZW1zIHNob3VsZCBnbyB0aHJvdWdoIEdyYXBoaWNzQ29udGV4dCB3
aGljaCB3aWxsIGNyZWF0ZQorICAgICAgICBzcGVjaWFsIERpc3BsYXlMaXN0SXRlbXMgZm9yIGRy
YXdpbmcgdGhlbS4gVGhlc2UgRGlzcGxheUxpc3RJdGVtcyB3aWxsCisgICAgICAgIHN0b3JlIGFs
bCB0aGUgcGFyYW1ldGVycyB0byBiZSB1c2VkIHdoZW4gcmVwbGF5aW5nIHRoZSBEaXNwbGF5TGlz
dCBiYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyOjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1Ro
ZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZTo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZvcm0vVGhlbWUuaDoK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdl
dC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U2Nyb2xsYmFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaGVtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3V2lk
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Njcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdUaGVt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9pb3MvSWNvbklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFp
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6SWNvbjo6cGxhdGZvcm1QYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpw
YWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJY29uKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdXaWRnZXQpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChOaWNvc2lh
OjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3VGhlbWUpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
cGUvSWNvbldQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9U
aGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50VG9nZ2xlQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3RlcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGxhdGZvcm1QYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpUaGVtZU1hYzo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0RmxhZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRmb3JtUGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3dwZS9UaGVtZVdQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZVdQRTo6cGxhdGZvcm1QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZVdQRTo6cGFp
bnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZVdQRTo6cGFpbnRSYWRpbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaGVtZVdQRTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6VGhlbWVXUEU6OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvVGhl
bWVXUEUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwbGF0
Zm9ybVBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50KToKKworMjAxOC0wNy0xNyAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFRlbXBsYXRpemUg
RGlzcGxheUxpc3RJdGVtcyBhbmQgdXNlIHN0ZDo6dHVwbGUgdG8gc3RvcmUgdGhlIGFyZ3VtZW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MDAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlzcGxh
eUxpc3RJdGVtcyBhcmUgc2ltcGxlIG9iamVjdHMgd2hpY2ggcmVwcmVzZW50IGdyYXBoaWNzIGNv
bW1hbmRzIGFuZAorICAgICAgICB0aGVpciBhcmd1bWVudHMuIFRoZSBhcmd1bWVudHMgYXJlIHN0
b3JlZCB3aGlsZSByZWNvcmRpbmcgdGhlIERpc3BsYXlMaXN0IAorICAgICAgICBhbmQgdXNlZCB3
aGVuIHJlcGxheWluZyBpdCBiYWNrLiBJbiBmYWN0LCB3ZSBkbyBub3QgY2FyZSBtdWNoIGFib3V0
IGtub3dpbmcKKyAgICAgICAgdGhlc2UgYXJndW1lbnRzIGV4cGVjdCB3aGVuIGRlYnVnZ2luZyB0
aGUgRGlzcGxheUxpc3QuIFNvIGEgbWVjaGFuaWNhbCB3YXkKKyAgICAgICAgdG8gc3RvcmUgdGhl
IGFyZ3VtZW50cyBhbmQgcGFzc2luZyB0aGVtIHRvIEdyYXBoaWNzQ29udGV4dCBzaG91bGQgYmUg
c3VmZmljaWVudC4KKyAgICAgICAgVGhpcyB3aWxsIG1ha2UgYWRkaW5nIGEgbmV3IERpc3BsYXlM
aXN0SXRlbSBlYXNpZXIgYW5kIGluIG1ha2VzIHRoZSBjb2RlCisgICAgICAgIGEgbG90IHNob3J0
ZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0ZW1wbGF0aXplcyB0aGUgRGlzcGxheUxpc3RJdGVt
cyBjbGFzc2VzIGFuZCB1c2VzIHN0ZDo6dHVwbGUgdG8KKyAgICAgICAgc3RvcmUgdGhlIGFyZ3Vt
ZW50cy4gVGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1l
bnQgCisgICAgICAgIHRvIHRoZSB0ZW1wbGF0ZSBhbG9uZyB3aXRoIHRoZSB0eXBlcyBvZiB0aGUg
c3RkOjp0dXBsZSBpdGVtcy4gVGhlIGNsYXNzCisgICAgICAgIGhpZXJhcmNoeSBpcyBhIGxpdHRs
ZSBiaXQgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9uZToKKworICAgICAgICAtLSBJdGVt
OiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGFuZCB0aGlzIGlzIHdoYXQgRGlzcGxheUxpc3Qgc3Rv
cmVzLgorICAgICAgICAtLSBHZW9tdHJ5SXRlbTogSXQgaXMgZGVyaXZlZCBmcm9tIEl0ZW0gYW5k
IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAgICBpdCBhbmQgSXRlbSBpcyBpdCBr
bm93cyB0aGUgZXh0ZW50IG9mIHRoZSBJdGVtLgorICAgICAgICAtLSBHcmFwaGljc0l0ZW06IEl0
J3MgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaCB0YWtlcyBhIHBvaW50ZXIgdG8gYSBHcmFwaGljc0Nv
bnRleHQKKyAgICAgICAgZnVuY3Rpb24sIHNldCBvZiBhcmd1bWVudHMnIHR5cGVzLiBJdHMgY29u
c3RydWN0b3Igc2F2ZXMgdGhlIGFyZ3VtZW50cyBpbgorICAgICAgICBzdGQ6OnR1cGxlLiBJdHMg
YXBwbHkgbWV0aG9kIGNhbGxzIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24gYnkgcGFzc2lu
ZworICAgICAgICB0aGUgYXJndW1lbnRzIGl0IHN0b3Jlcy4KKyAgICAgICAgLS0gU2V0dGluZ0l0
ZW06IEl0IGlzIGRlcml2ZWQgZnJvbSBJdGVtIGFuZCBHcmFwaGljc0l0ZW0uCisgICAgICAgIC0t
IERyYXdpbmdJdGVtOiBJdCBpcyBkZXJpdmVkIGZyb20gR2VvbXRyeUl0ZW0gYW5kIEdyYXBoaWNz
SXRlbS4KKworICAgICAgICBOb3RlcyBhbmQgc29tZSBkcmF3YmFja3Mgb2YgdGhpcyBwYXRjaCBh
cmU6CisgICAgICAgIC0tIFRoZSBEaXNwbGF5TGlzdCByZXBsYXlpbmcgYmFjayBmdW5jdGlvbiBz
aG91bGQgYmUgbWV0aG9kcyBvZiBHcmFwaGljc0NvbnRleHQuCisgICAgICAgIC0tIFRoZSBvcGVy
YXRvciA8PCBoYXMgdG8gYmUgZGVmaW5lZCBmb3IgYWxsIHRoZSBhcmd1bWVudHMnIHR5cGVzLgor
ICAgICAgICAtLSBXaGVuIGFuIGFyZ3VtZW50cyBpcyBhIFJlZkNvdW50ZWQgYW5kIHRoZSBHcmFw
aGljc0NvbnRleCBmdW5jdGlvbiB0YWtlcworICAgICAgICBhIHJhdyBwb2ludGVyIG9yIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IGl0c2VsZiwgdGhlIEdyYXBoaWNzSXRlbSBjYW4gc3RvcmUKKyAg
ICAgICAgYSBSZWYgb3IgYSBSZWZQdHIgdG8gdGhlIG9iamVjdC4gVGhlIGltcGxpY2l0IGNhc3Rp
bmcgb2YgUmVmUHRyIGFuZCBSZWYKKyAgICAgICAgd2lsbCBkbyB0aGUgbWFnaWMgd2hlbiB0aGUg
YXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gR3JhcGhpY3NDb250ZXh0LgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0aCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
OjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Oml0ZW1zRGVzY3JpcHRvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Oml0
ZW1EZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpuYW1l
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjphcmd1bWVudE5h
bWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlc2NyaXB0
aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
OjpzaXplSW5CeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
b3BlcmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2
ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlc3RvcmU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjphY2N1bXVsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmFwcGx5IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6YXBwbHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVy
TGltaXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclNoYWRvdzo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
czo6RHJhd0dseXBocyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0dseXBoczo6Z2VuZXJhdGVHbHlwaEJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmNvbXB1dGVCb3Vu
ZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6
OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ltYWdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1h
Z2U6OkRyYXdOYXRpdmVJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd05hdGl2ZUltYWdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmU6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TGluZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJv
dW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91
bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
RWxsaXBzZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxC
b3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdSZWN0czo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjphcHBseSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoQ29sb3I6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVk
UmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmFwcGx5IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6YXBwbHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6
OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OmFwcGx5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjps
b2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlRWxsaXBzZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3Bh
cmVuY3lMYXllcjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNj
YWxlRmFjdG9yOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtOjppc0dlb21ldHJ5SXRlbSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbTo6dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6R2VvbWV0
cnlJdGVtOjpzZXRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okdlb21l
dHJ5SXRlbTo6ZXh0ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpH
ZW9tZXRyeUl0ZW06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpHZW9tZXRyeUl0ZW06Okdlb21ldHJ5SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6R3JhcGhpY3NJdGVtOjpHcmFwaGljc0l0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkdyYXBoaWNzSXRlbTo6YXJndW1lbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdyYXBoaWNzSXRlbTo6YXBwbHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdyYXBoaWNzSXRlbTo6aXRlcmFydGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldHRpbmdJdGVtOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldHRpbmdJdGVtOjpTZXR0aW5nSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpyZXN0b3JlSW5kZXggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OnNldFJlc3RvcmVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OnN1YkdseXBoQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtOjppc0RyYXdpbmdJdGVtIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjppc1N0YXRlSXRlbSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNTdGF0ZUl0ZW1U
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRl
bTo6c2V0RXh0ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3aW5nSXRlbTo6ZXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6ZXh0ZW50S25vd24gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpsb2NhbEJvdW5kcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpTYXZlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OlJlc3Rv
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OnggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRy
YW5zbGF0ZTo6eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJvdGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSb3RhdGU6OmFuZ2xlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJhbnNmb3Jt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRT
dGF0ZTo6U2V0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVDYXA6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUNhcDo6bGluZUNhcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURh
c2g6OmRhc2hPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGlu
ZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVy
TGltaXQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OkNsZWFy
U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OnJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6
OkNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91
dDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcE91dFRvUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpwYXRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpDbGlwT3V0VG9QYXRoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6cGF0aCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6
OndpbmRSdWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwUGF0aDo6Q2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdHbHlwaHM6OmJsb2NrTG9jYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OnNldEJsb2NrTG9jYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmxvY2Fs
QW5jaG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzOjphbmNob3JQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Z2x5cGhzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjppbWFnZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpzb3VyY2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFn
ZTo6ZGVzdGluYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjppbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OnNvdXJjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1h
Z2U6OmRlc3RpbmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6dGlsZVNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpzcGFjaW5nIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3VGlsZWRTY2FsZWRJbWFnZTo6aW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpzb3VyY2UgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZElt
YWdlOjpkZXN0aW5hdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6c291cmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRlc3Rp
bmF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3UGF0dGVybjo6aW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpwYXR0ZXJuVHJhbnNmb3JtIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6dGlsZVJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpkZXN0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdHRlcm46OnBoYXNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6c3BhY2luZyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjpvcGFjaXR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFu
c3BhcmVuY3lMYXllcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6
Ym9yZGVyVGhpY2tuZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UmVjdDo6RHJhd1JlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpwb2ludDEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpwb2ludDIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGlu
ZXNGb3JUZXh0OjpzZXRCbG9ja0xvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpibG9ja0xvY2F0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Ojps
b2NhbEFuY2hvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmVzRm9yVGV4dDo6cG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OndpZHRocyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6aXNQ
cmludGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVzRm9yVGV4dDo6ZG91YmxlTGluZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9j
dW1lbnRNYXJrZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6cG9pbnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6
OndpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0VsbGlwc2U6OkRyYXdFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0aDo6cGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OkRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6cGF0
aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Zv
Y3VzUmluZ1BhdGg6OndpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Y29sb3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdQYXRoOjpEcmF3Rm9jdXNSaW5nUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6cmVjdHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdS
ZWN0czo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmNvbG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVj
dHM6OkRyYXdGb2N1c1JpbmdSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpGaWxsUmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OnJl
Y3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aENvbG9yOjpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OkZpbGxSZWN0V2l0aEdyYWRpZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bENvbXBvc2l0ZWRSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBv
c2l0ZU9wZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9z
aXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
b3VuZGVkUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUm91bmRlZFJlY3Q6OnJvdW5kZWRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNvbG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6
OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6cm91bmRlZEhvbGVSZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OnBhdGgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRo
OjpGaWxsUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bEVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbEVsbGlwc2U6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpyZWN0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpsaW5lV2lk
dGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZVJlY3Q6OlN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlUGF0aDo6cGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxp
cHNlOjpTdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xlYXJSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6
QXBwbHlTdHJva2VQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcjo6c2NhbGVGYWN0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudCBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVzRm9yVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorCiAyMDE4LTA3LTE3ICBBbnRvaW5lIFF1aW50ICA8
Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYiBBbmltYXRpb25zXSBJbnRlcnBvbGF0
aW9uIGJldHdlZW4gbGVuZ3RocyB3aXRoIGFuICJhdXRvIiB2YWx1ZSBzaG91bGQgYmUgZGlzY3Jl
dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaAppbmRleCAxZGNlOGI3NTgw
N2YwZGRmN2M1YWIxZjE5ZTc1MzliYzcyOGQ2OTcxLi5mZTk2YWZkY2JhZGI0MDU3ZmQ2MTA1MjYy
MjNlOTVmMGRiZGVmMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250
cm9sU3RhdGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udHJvbFN0YXRlcy5o
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1NlY29uZHMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpZm5kZWYgX19PQkpDX18KQEAgLTEwMyw2ICsxMDQsMTIgQEAg
cHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENvbnRyb2xTdGF0ZXMmKQoreworICAgIC8vIEZJWE1FOiBkdW1w
IHRoZSBDb250cm9sU3RhdGVzIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJu
IHRzOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
aW5kZXggZjllMDVmNTVmNzU2OGFlZTIxY2E4NDk2NjRiYzNkNmU1N2UxMWJlZi4uZGUyOGYwMjc0
ZDZlM2IyNDRiMjg3M2MwYjllNzZiN2IwODA5YTE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuY3BwCkBAIC0xNjMsMTEgKzE2MywxNiBAQCB2b2lkIFNjcm9sbGJhcjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBXaWRn
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNh
YmxlZCgpIHx8ICFmcmFtZVJlY3QoKS5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgIGlmICgh
ZnJhbWVSZWN0KCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCF0aGVtZSgpLnBhaW50KCp0aGlzLCBjb250ZXh0LCBkYW1hZ2VSZWN0KSkKLSAgICAg
ICAgV2lkZ2V0OjpwYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBjb250ZXh0LmRyYXdT
Y3JvbGxiYXIoKnRoaXMsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFNjcm9sbGJhcjo6cGxhdGZv
cm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgaWYgKCF0aGVtZSgpLnBhaW50KCp0aGlzLCBjb250ZXh0LCByZWN0KSkKKyAgICAgICAg
V2lkZ2V0OjpwYWludChjb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBTY3JvbGxiYXI6OmF1dG9z
Y3JvbGxUaW1lckZpcmVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggNjJm
NTA0NGE4MzkzYmU2NGVlYmJjNjQ3NTQ3NWU4YjJlMmQ3MjAyNC4uYzBkNDMwYWQzZGIzMzk5ZTZl
Mzc1ZWZlOGMzNzllYzc4YTdlMDI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgK
QEAgLTg0LDYgKzg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJlc3NlZFBvcyhpbnQgcCkg
eyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFdpZGdldDo6U2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsK
IAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwpAQCAtMTgyLDYgKzE4MywxMiBAQCBwcml2YXRl
OgogICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiB9OwogCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2Nyb2xsYmFyJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgU2Nyb2xsYmFyIG1lbWJl
cnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQorICAgIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dJREdFVChTY3JvbGxiYXIs
IGlzU2Nyb2xsYmFyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVt
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKaW5kZXggYzBhZjE5MmIx
ZDE1MjViMDVhZDNhZjVmYzgwOTQ4N2M3YjI2MTBlMi4uNjRiYjRmNzhkYmY4NzRhMDFmYzFiMmNj
MjE4ZGY1Njc3MTkwOGVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhl
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcApAQCAtNTcsNyAr
NTcsMTIgQEAgYm9vbCBUaGVtZTo6Y29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9s
UGFydCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGhlbWU6OnBhaW50KENv
bnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQsIFNjcm9sbFZpZXcqLCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wpCit2b2lk
IFRoZW1lOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0IHBhcnQs
IENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpCit7CisgICAgY29udGV4dC5kcmF3VGhlbWUoKnRoaXMsIHBh
cnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2Nh
bGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRGFya0Fw
cGVhcmFuY2UpOworfQorCit2b2lkIFRoZW1lOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4
dCYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQs
IHZvaWQqLCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
aGVtZS5oCmluZGV4IGU4Y2VjMzVkNTkxNmJjZGViMWRlMzk4OGFhMzY5YjViZTI0NGUwMzIuLmQ2
MzI1NGJjYWYzODQ2ZjcyMjU1OWVlZWEyZTVjZTc5M2E5NDUxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhlbWUuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02OCw3
ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hp
dGVTcGFjZShDb250cm9sUGFydCkgY29uc3Q7CiAKICAgICAvLyBNZXRob2QgZm9yIHBhaW50aW5n
IGEgY29udHJvbC4gVGhlIHJlY3QgaXMgaW4gem9vbWVkIGNvb3JkaW5hdGVzLgotICAgIHZpcnR1
YWwgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xs
VmlldyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJv
b2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNv
bnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyos
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNl
U3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRyb2xT
dGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZv
aWQqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29s
IHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOwogCiAgICAgLy8g
U29tZSBjb250cm9scyBtYXkgc3BpbGwgb3V0IG9mIHRoZWlyIGNvbnRhaW5lcnMgKGUuZy4sIHRo
ZSBjaGVjayBvbiBhbiBPUyBYIGNoZWNrYm94KS4gIFdoZW4gdGhlc2UgY29udHJvbHMgcmVwYWlu
dCwKICAgICAvLyB0aGUgdGhlbWUgbmVlZHMgdG8gY29tbXVuaWNhdGUgdGhpcyBpbmZsYXRlZCBy
ZWN0IHRvIHRoZSBlbmdpbmUgc28gdGhhdCBpdCBjYW4gaW52YWxpZGF0ZSB0aGUgd2hvbGUgY29u
dHJvbC4KQEAgLTg4LDUgKzkwLDExIEBAIHByaXZhdGU6CiAgICAgVGhlbWUoY29uc3QgVGhlbWUm
KSA9IGRlbGV0ZTsKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUaGVtZSYpID0gZGVsZXRlOwog
fTsKKyAgICAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBUaGVtZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIFRoZW1lIG1lbWJlcnMgdG8g
dGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IGYzMWYyNDVhODBiYmQ3MGFjY2U2MjEx
ODU0OWNkMmQ0MDBhYzIxZjMuLjk5Y2Q4M2JmY2IwNjNmNWRkMTAyYWQ0NDIwMGU3MzhiMmJlM2Jm
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC0xMTQsNiAr
MTE1LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgU2VjdXJpdHlPcmlnaW5QYWludFBvbGlj
eSB7IEFueU9yaWdpbiwgQWNjZXNzaWJsZU9yaWdpbk9ubHkgfTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0Jiwg
U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFu
eU9yaWdpbik7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmKTsKICAgICB2b2lkIGludmFsaWRhdGUoKSB7IGludmFsaWRhdGVSZWN0KGJvdW5k
c1JlY3QoKSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYpID0gMDsKIApAQCAtMjQ0LDYgKzI0NiwxMiBAQCBpbmxpbmUgdm9pZCBXaWRnZXQ6OnJldGFp
blBsYXRmb3JtV2lkZ2V0KCkKIAogI2VuZGlmCiAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBXaWRnZXQmKQoreworICAgIC8vIEZJWE1FOiBkdW1w
IHRoZSBXaWRnZXQgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9
CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSURHRVQoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA1MmVkYmFlOTQ1MzdmYTcyMGQ0NzE0YjE4
MWVkMjZmNzI3YjZlMmJlLi43MTg1OTg2YjIzMGEzNTE3ZmNkNmNhOTc4NTZiYjJlNjI4ZjdiY2Fl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0zNyw2ICszNyw3
IEBACiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CkBAIC0zNzAsNiArMzcxLDEyIEBAIEFMV0FZU19JTkxJTkUgZmxvYXQgRm9udDo6d2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gd2lkdGg7CiB9CiAKK2lu
bGluZSBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29u
c3QgRm9udCYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIEZvbnQgbWVtYmVycyB0byB0aGUg
VGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEZvbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoQnVmZmVyLmgKaW5kZXggMTc1MmRjYmQwOGU4ZjZjYzc5OWJlNDU2MzdjY2NmY2M1MmU3
OGMzYy4uNDVmMTdmYWNkN2IwZTFkYTJmNWNmYzkxNTBlYmIyZmQ1YWY2NTMzMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDxjbGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBV
U0UoQ0cpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHR2VvbWV0cnkuaD4KQEAgLTIyOCw1ICsy
MjksMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBHbHlwaEJ1ZmZlciYpCit7Cisg
ICAgLy8gRklYTUU6IGR1bXAgdGhlIEdseXBoQnVmZmVyIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJl
YW0uCisgICAgcmV0dXJuIHRzOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCmluZGV4IGM3ZmM0YzZlMzY5MzgwYTVlOWE3NzMxMjRm
NzQwYTYzZmRiNTEwMGIuLjdiZmJmZmE0N2NkMjQwZWQ3NzZhMTFlMTkyMzZiY2RjMDBkZmNkZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zh
cmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCiAjaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0KiBDR0Nv
bnRleHRSZWY7CkBAIC0xNTYsNCArMTU3LDEwIEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm1HcmFk
aWVudCBtX2dyYWRpZW50OwogfTsKIAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFkaWVudCYpCit7CisgICAgLy8gRklYTUU6
IGR1bXAgdGhlIEdyYWRpZW50IG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJu
IHRzOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCBjOTczMWFhNTE5NDg2NmNmM2ZiYTVlMDMzY2MxOGQ3
M2M1ODYzN2ZhLi5jYzcxMzNjNjc1YjJkOGJiNGU4YzVhODcxZjI4ZWQ0YTE2ZjU0MzA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKQEAgLTMxLDEwICszMSwxNCBAQAogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIK
KyNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGhlbWUuaCIKKyNpbmNsdWRlICJX
aWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTg0Myw2ICs4NDcsNTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFRl
eHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQogICAgIHNldFBsYXRmb3Jt
VGV4dERyYXdpbmdNb2RlKG1vZGUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lj
b24oSWNvbiYgaWNvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2ltcGwpCisgICAgICAg
IG1faW1wbC0+ZHJhd0ljb24oaWNvbiwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBpY29uLnBs
YXRmb3JtUGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1dpZGdldChXaWRnZXQmIHdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1faW1w
bCkKKyAgICAgICAgbV9pbXBsLT5kcmF3V2lkZ2V0KHdpZGdldCwgcmVjdCk7CisgICAgZWxzZQor
ICAgICAgICB3aWRnZXQucGxhdGZvcm1QYWludCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRyYXdTY3JvbGxi
YXIoc2Nyb2xsYmFyLCByZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbGJhci5wbGF0Zm9y
bVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaGVt
ZShUaGVtZSYgdGhlbWUsIENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywg
Y29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3Jv
bGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBi
b29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW1w
bCkKKyAgICAgICAgbV9pbXBsLT5kcmF3VGhlbWUodGhlbWUsIHBhcnQsIHN0YXRlcywgem9vbWVk
UmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2Fs
ZUZhY3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UpOworICAgIGVs
c2UKKyAgICAgICAgdGhlbWUucGxhdGZvcm1QYWludCgqdGhpcywgcGFydCwgc3RhdGVzLCB6b29t
ZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNj
YWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMTEy
OSw2ICsxMTc3LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlh
cyhzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9u
dHMoc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwogfQorICAgIAordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0
YXRlKQoreworICAgIHN0YXRlLmFwcGx5KCp0aGlzKTsKK30KIAogZmxvYXQgR3JhcGhpY3NDb250
ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0
aCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggY2NjMmQwM2U3ZWFmMWZiYmVjMmExMjFmNTgzNTk0YjY5MDE0
ZTEyYy4uZmVhOWE5NjI3NTdjMzQxOTQ2NzgzMDM2N2VjMDU5MDA0OGMxYTQ5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAg
LTI2LDYgKzI2LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb250cm9sU3RhdGVz
LmgiCiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisj
aW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC04MCwxNiArODIsMjAgQEAgY29uc3QgaW50IGNN
aXNzcGVsbGluZ0xpbmVQYXR0ZXJuR2FwV2lkdGggPSAxOwogY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOworY2xhc3MgSWNvbjsKIGNsYXNzIEltYWdlQnVmZmVyOwog
Y2xhc3MgSW50UmVjdDsKLWNsYXNzIFJvdW5kZWRSZWN0OwotY2xhc3MgVVJMOwotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBQYXRoOworY2xhc3MgUm91bmRlZFJlY3Q7CitjbGFzcyBT
Y3JvbGxiYXI7CiBjbGFzcyBUZXh0UnVuOworY2xhc3MgVGhlbWU7CiBjbGFzcyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKK2NsYXNzIFVSTDsKK2NsYXNzIFdpZGdldDsKIAogZW51bSBUZXh0RHJhd2lu
Z01vZGUgewogICAgIFRleHRNb2RlRmlsbCA9IDEgPDwgMCwKQEAgLTExNiw2ICsxMjIsMTIgQEAg
ZW51bSBjbGFzcyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSA6IHVpbnQ4X3QgewogICAgIEF1dG9j
b3JyZWN0aW9uUmVwbGFjZW1lbnQsCiAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCiB9OworICAg
IAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRz
LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAg
dGhlIEltYWdlUGFpbnRpbmdPcHRpb25zIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0
czsKK30KIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGNsYXNzIFJlY29yZGVyOwpAQCAtMjMz
LDYgKzI0NSwxMiBAQCBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnMgewogICAgIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBtX29yaWVudGF0aW9uRGVzY3JpcHRpb247CiAgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eTsKIH07CisgICAgCitpbmxpbmUg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYgdHMsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0aGUgSW1hZ2VQYWlu
dGluZ09wdGlvbnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJuIHRzOworfQogCiBzdHJ1
Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlKCkgPSBkZWZhdWx0OwpAQCAtMjU1LDcgKzI3Myw2IEBAIHN0cnVjdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi0KIGNsYXNz
IEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250
ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MTIsNiArNDI5LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAK
ICAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICB2
b2lkIGFwcGx5U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsK
IAogICAgIGVudW0gUm91bmRpbmdNb2RlIHsKICAgICAgICAgUm91bmRBbGxTaWRlcywKQEAgLTQ0
OCw2ICs0NjYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29u
c3QgQ29sb3ImKTsKICNlbmRpZgogCisgICAgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqLCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFw
cGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpOworCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KExpbmVDYXApOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQg
ZGFzaE9mZnNldCk7CiAgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgK
aW5kZXggNmJjZjc2OGFkZmQ4OWVlMGIxOTZhM2VhNjJlZTA2ODBjOGFkMThlZS4uODQ2OTJjNGQ3
MzI4OTkzNTFlOTM3MGMxZTA0YTkyYWE2YzkwNzZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaApAQCAtNzgsMTMg
Kzc4LDIwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBmbG9hdCBzdHJv
a2VUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHdpZHRoLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CisjaWYgVVNFKENHKQogICAgIHZpcnR1YWwgdm9pZCBkcmF3
UGF0aChjb25zdCBQYXRoJikgPSAwOworI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1dpZGdldChXaWRnZXQmLCBjb25zdCBJbnRSZWN0
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3U2Nyb2xsYmFyKFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUaGVtZShUaGVtZSYsIENvbnRy
b2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvciwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5oCmluZGV4IDg2MGVhNjk2ZmViNDg1YmFiYTM0ZmVmYzA0MWQyZWMzODg3MzRiODMu
LmUyNWNhODhlYzg0NjFhYzA2MDVhNmQyNjc1YWFhYzVjYzhhY2ZmYmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTAgKzIxLDEyIEBACiAjaWZuZGVmIEljb25f
aAogI2RlZmluZSBJY29uX2gKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JNKElPUykKICNpbmNsdWRlICJOYXRp
dmVJbWFnZS5oIgpAQCAtNDgsNyArNTAsMTIgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBP
UlQgfkljb24oKTsKIAotICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0Jik7CisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGNvbnRleHQuZHJhd0ljb24oKnRoaXMs
IHJlY3QpOworICAgIH0KKworICAgIHZvaWQgcGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBzdGF0
aWMgUmVmUHRyPEljb24+IGNyZWF0ZShISUNPTiBoSWNvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3
IEljb24oaEljb24pKTsgfQpAQCAtNzksNiArODYsMTIgQEAgcHJpdmF0ZToKICAgICBHZGtQaXhi
dWYqIG1faWNvbjsKICNlbmRpZgogfTsKKyAgICAKK2lubGluZSBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJY29uJikKK3sKKyAgICAvLyBGSVhNRTogZHVtcCB0
aGUgSWNvbiBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOGNmYjFlOTIyNTdlNDMyNTI3
MDZhZWE1NDViNDI2Mzk0ZmU5OWZkNi4uYzE2NmYxYmI2ODczMDRhMGNiZDg0MDQyNzY0OGMyMTkw
NzNhYTJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzIwLDcgKzMyMCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgb3JpZ2luLCBmbG9hdCB3aWR0aCwgYm9vCiAgICAgZHJhd0xpbmVzRm9yVGV4dChvcmlnaW4s
IERhc2hBcnJheSB7IHdpZHRoLCAwIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9y
VGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlVGhp
Y2tuZXNzKCkpOworICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHdpZHRo
cywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZVN0eWxlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXgg
ZTA2ZTQwMzFkODc5ZDE5MDM2OWFhYzgzODc2ODA0OTg0YzY1YTdjZC4uY2I1ZDRhZjY0NzJjNTEy
Y2E3NDRmZWVkNTUxZTAxYjQxNjc3OTljOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uY3BwCkBAIC0yOTQsOSArMjk0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2kKICAg
ICBDYWlybzo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywg
c3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBVTlVT
RURfUEFSQU0oc3Ryb2tlU3R5bGUpOwogICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4
dCwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQpAQCAtMzEyLDEwICszMTIsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3Qs
IHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKQEAgLTMyNyw2ICszMjMsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG8KICAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdHMsIHdpZHRoLCBjb2xvcik7CiB9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgQVNT
RVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKQoreworICAgIEFT
U0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikKK3sK
KyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaGVtZShUaGVtZSYsIENvbnRyb2xQYXJ0LCBDb250cm9s
U3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQsIGJv
b2wsIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uaAppbmRleCA5OTdjYmRkYTUxYzNmMWMwYzUyZDUwZmNjZWE0ZTU4NTk1Yjhh
NzliLi5hMDRmNmFlNGE5MGVkMGVhZjIzNWU5MDU3MDJiMWU5Mzg2ZjBkMTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtNzksMTQgKzc5LDE4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAg
IHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92
ZXJyaWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZHJhd0lj
b24oSWNvbiYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1dpZGdl
dChXaWRnZXQmLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3U2Nyb2xs
YmFyKFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdU
aGVtZShUaGVtZSYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0
JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFw
cGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIG92ZXJyaWRlOworCiAgICAgdm9pZCBz
YXZlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAppbmRleCBkMjk1MDcxNzhjYjAwZTU2OWRmMWIxYzY2Yjk5ZmRhNzlhZDI0N2NmLi5k
NWIyMjA5NmZmMDA4NmRiOGNlYmU0YTgxNjU2YTg2NmM5MTMzMWQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCkBAIC0xNTg3LDcgKzE1ODcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JgogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVz
Rm9yVGV4dChwb2ludCwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVRoaWNr
bmVzcygpKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMs
IHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBhNDBmODlmNzY4ODU0ZTgwNDQ5
MmIwYzFhNWMzYTBmY2I2ZGU3ODZmLi5hNmJlMWRjMmU2N2E5OGRkMTM4NzcwZmRiZjFlMzJhMjI1
ZDA1ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTExNCw4ICsxMTQsOCBAQCB2
b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogc2l6ZV90IERpc3Bs
YXlMaXN0OjpzaXplSW5CeXRlcygpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0g
ICAgZm9yIChhdXRvJiByZWYgOiBtX2xpc3QpCi0gICAgICAgIHJlc3VsdCArPSBJdGVtOjpzaXpl
SW5CeXRlcyhyZWYpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkKKyAgICAgICAgcmVz
dWx0ICs9IGl0ZW0tPnNpemVJbkJ5dGVzKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3QuaAppbmRleCBkNDQzN2UzZDQxYmUxMjJjYzg5MDY1MjQ3YzkyMjI2ZTc4
MWRjNzdiLi5mODYyYjg3OGI1MDRhMGQ0ZTJkZGI4MTBjZThmZmE4NjJiZTA0YzUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3QuaApAQCAtNDEsOCArNDEsNiBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIEl0ZW07Ci0KIGVudW0gQXNUZXh0
RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCiAgICAgSW5j
bHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcAppbmRleCAxZmNlZThiMzg0MzczMDM2ZDIzZjA5MTEyYWI2M2U3OTY5
NWVjMDQzLi42YzQ3NmU5Y2MyZGQyMTFhZjhjMmE4ZDMyMDgzNjI5YTYwYWZjMzU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExMjEgKzI2LDkwIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogCi0jaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLS8vIFNob3VsZCBtYXRj
aCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCi1zdGF0aWMgY29uc3QgZmxv
YXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8
ICFMT0dfRElTQUJMRUQKLVdURjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17
Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICB0cyA8PCAqdGhpczsKLSAgICByZXR1cm4gdHMucmVs
ZWFzZSgpLnV0ZjgoKTsKLX0KLSNlbmRpZgotCi1zaXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29u
c3QgSXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3Rh
dGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVK
b2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PENsaXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBP
dXRUb1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBo
cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJ
bWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVt
KSk7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRpdmVJbWFn
ZT4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGlu
ZXNGb3JUZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVGb3JEb2N1bWVu
dE1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0Pihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxs
Q29tcG9zaXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJl
Y3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RmlsbFBh
dHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKK3VzaW5nIEl0ZW1EZXNjcmlw
dG9yID0gc3RydWN0IHsKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhcmd1
bWVudHNOYW1lczsKK307CisKK3N0YXRpYyBjb25zdCBWZWN0b3I8SXRlbURlc2NyaXB0b3I+JiBp
dGVtc0Rlc2NyaXB0b3JzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPEl0
ZW1EZXNjcmlwdG9yPj4gaXRlbXNEZXNjcmlwdG9ycyA9IFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4o
eworICAgICAgICB7ICJzYXZlIiwgeyB9IH0sCisgICAgICAgIHsgInJlc3RvcmUiLCB7IH0gfSwK
KyAgICAgICAgeyAic2V0LXN0YXRlIiwgeyAic3RhdGUtY2hhbmdlIiB9IH0sCisgICAgICAgIHsg
InRyYW5zbGF0ZSIsIHsgIngiLCAieSIgfSB9LAorICAgICAgICB7ICJyb3RhdGUiLCB7ICJhbmds
ZSIgfSB9LAorICAgICAgICB7ICJzY2FsZSIsIHsgInNpemUiIH0gfSwKKyAgICAgICAgeyAiY29u
Y2F0ZW5hdGUtY3RtIiwgeyAiY3RtIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWNhcCIsIHsg
ImxpbmUtY2FwIiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWRhc2giLCB7ICJkYXNoLWFycmF5
IiwgImRhc2gtb2Zmc2V0IiB9IH0sCisgICAgICAgIHsgInNldC1saW5lLWpvaW4iLCB7ICJsaW5l
LWpvaW4iIH0gfSwKKyAgICAgICAgeyAic2V0LW1pdGVyLWxpbWl0IiwgeyAibWl0cmUtbGltaXQi
IH0gfSwKKyAgICAgICAgeyAiY2xlYXItc2hhZG93IiwgeyB9IH0sCisgICAgICAgIHsgImNsaXAi
LCB7ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsaXAtb3V0IiwgeyAicmVjdCIgfSB9LAorICAg
ICAgICB7ICJjbGlwLW91dC10by1wYXRoIiwgeyAicGF0aCIgfSB9LAorICAgICAgICB7ICJjbGlw
LXBhdGgiLCB7ICJwYXRoIiwgIndpbmQtcnVsZSIgfSB9LAorICAgICAgICB7ICJhcHBseS1zdHJv
a2UtcGF0dGVybiIsIHsgfSB9LAorICAgICAgICB7ICJhcHBseS1maWxsLXBhdHRlcm4iLCB7IH0g
fSwKKyAgICAgICAgeyAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciIsIHsgInNjYWxlLWZhY3Rv
ciIgfSB9LAorCisgICAgICAgIHsgImJlZ2luLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgIm9wYWNp
dHkiIH0gfSwKKyAgICAgICAgeyAiZW5kLXRyYW5zcGFyZW5jeS1sYXllciIsIHsgfSB9LAorICAg
ICAgICB7ICJkcmF3LWdseXBocyIsIHsgImZvbnQiLCAiZ2x5cGgtYnVmZmVyIiwgImZyb20iLCAi
bnVtLWdseXBocyIsICJwb2ludCIsICJmb250LXNtb290aGluZyIgfSB9LAorICAgICAgICB7ICJk
cmF3LWltYWdlIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInNvdXJjZS1yZWN0IiwgImltYWdl
LXBhaW50aW5nLW9wdGlvbnMiIH0gfSwKKyAgICAgICAgeyAiZHJhdy10aWxlZC1pbWFnZSIsIHsg
ImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcG9pbnQiLCAidGlsZS1zaXplIiwgInNwYWNp
bmciLCAiaW1hZ2UtcGFpbnRpbmctb3B0aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LXRpbGVk
LXNjYWxlZC1pbWFnZSIsIHsgImltYWdlIiwgImRlc3QtcmVjdCIsICJzb3VyY2UtcmVjdCIsICJ0
aWxlLXNjYWxlZmFjdG9yIiwgImgtcnVsZSIsICJ2LXJ1bGUiLCAiaW1hZ2UtcGFpbnRpbmctb3B0
aW9ucyIgfSB9LAorICAgICAgICB7ICJkcmF3LW5hdGl2ZS1pbWFnZSIsIHsgImltYWdlIiwgInNl
bGYtc2l6ZSIsICJkZXN0LXJlY3QiLCAic291cmNlLXJlY3QiLCAiY29tcG9zaXRlLW9wZXJhdG9y
IiwgImJsZW5kLW1vZGUiLCAiaW1hZ2Utb3JpZW50YXRpb24iIH0gfSwKKyAgICAgICAgeyAiZHJh
dy1wYXR0ZXJuIiwgeyAiaW1hZ2UiLCAiZGVzdC1yZWN0IiwgInRpbGUtcmVjdCIsICJwYXR0ZXJu
LXRyYW5zZm9ybSIsICJwaGFzZSIsICJzcGFjaW5nIiwgImNvbXBvc2l0ZS1vcGVyYXRvciIsICJi
bGVuZC1tb2RlIiB9IH0sCisgICAgICAgIHsgImRyYXctcmVjdCIsIHsgInJlY3QiLCAiYm9yZGVy
LXRoaWNrbmVzcyIgfSB9LAorICAgICAgICB7ICJkcmF3LWxpbmUiLCB7ICJwb2ludC0xIiwgInBv
aW50LTIiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1saW5lcy1mb3ItdGV4dCIsIHsgInBvaW50Iiwg
IndpZHRocyIsICJpcy1wcmludGluZyIsICJkb3VibGUtbGluZXMiLCAic3Ryb2tlLXN0eWxlIiB9
IH0sCisgICAgICAgIHsgImRyYXctbGluZS1mb3ItZG9jdW1lbnQtbWFya2VyIiwgeyAicG9pbnQi
LCAid2lkdGgiLCAiZG9jdW1lbnQtbWFya2VyLWxpbmUtc3R5bGUiIH0gfSwKKyAgICAgICAgeyAi
ZHJhdy1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXBhdGgiLCB7ICJw
YXRoIiB9IH0sCisgICAgICAgIHsgImRyYXctZm9jdXMtcmluZy1wYXRoIiwgeyAicGF0aCIsICJ3
aWR0aCIsICJvZmZzZXQiLCAiY29sb3IiIH0gfSwKKyAgICAgICAgeyAiZHJhdy1mb2N1cy1yaW5n
LXJlY3RzIiwgeyAicmVjdHMiLCAid2lkdGgiLCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAg
ICAgIHsgImRyYXctaWNvbiIsIHsgImljb24iLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3
LXdpZGdldCIsIHsgIndpZGdldCIsICJyZWN0In0gfSwKKyAgICAgICAgeyAiZHJhdy1zY3JvbGxi
YXIiLCB7ICJzY3JvbGxiYXIiLCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXRoZW1lIiwg
eyAidGhlbWUiLCAiY29udHJvbC1wYXJ0IiwgImNvbnRyb2wtc3RhdGVzIiwgInpvb21lZC1yZWN0
IiwgInpvb20tZmFjdG9yIiwgInNjcm9sbC12aWV3IiwgImRldmljZS1zY2FsZS1mYWN0b3IiLCAi
cGFnZS1zY2FsZS1mYWN0b3IiLCAidXNlLXN5c3RlbS1hcHBlYXJhbmNlIiwgInVzZS1kYXJrLWFw
cGVhcmFuY2UiIH0gfSwKKyAgICAgICAgeyAiZmlsbC1yZWN0IiwgeyAicmVjdCIgfSB9LAorICAg
ICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciIsIHsgInJlY3QiLCAiY29sb3IiIH0gfSwKKyAg
ICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiLCB7ICJyZWN0IiwgImdyYWRpZW50IiB9
IH0sCisgICAgICAgIHsgImZpbGwtY29tcG9zaXRlZC1yZWN0IiwgeyAicmVjdCIsICJjb2xvciIs
ICJjb21wb3NpdGUtb3BlcmF0b3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAgICAgICB7ICJmaWxs
LXJvdW5kZWQtcmVjdCIsIHsgInJlY3QiLCAiY29sb3IiLCAiYmxlbmQtbW9kZSIgfSB9LAorICAg
ICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiLCB7ICJyZWN0IiwgInJvdW5kZWQt
aG9sZS1yZWN0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsgImZpbGwtcGF0aCIsIHsgInBhdGgi
IH0gfSwKKyAgICAgICAgeyAiZmlsbC1lbGxpcHNlIiwgeyAicmVjdCIgfSB9LAorICAgICAgICB7
ICJzdHJva2UtcmVjdCIsIHsgInJlY3QiLCAibGluZS13aWR0aCIgfSB9LAorICAgICAgICB7ICJz
dHJva2UtcGF0aCIsIHsgInBhdGgiIH0gfSwKKyAgICAgICAgeyAic3Ryb2tlLWVsbGlwc2UiLCB7
ICJyZWN0IiB9IH0sCisgICAgICAgIHsgImNsZWFyLXJlY3QiLCB7ICJyZWN0IiB9IH0KKyAgICB9
KTsKKworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KEl0ZW1UeXBlOjpNYXgpID09IGl0
ZW1zRGVzY3JpcHRvcnMuZ2V0KCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlwdG9y
czsKK30KKworc3RhdGljIGNvbnN0IEl0ZW1EZXNjcmlwdG9yJiBpdGVtRGVzY3JpcHRvcihJdGVt
VHlwZSBpdGVtVHlwZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtVHlw
ZSkgPCBpdGVtc0Rlc2NyaXB0b3JzKCkuc2l6ZSgpKTsKKyAgICByZXR1cm4gaXRlbXNEZXNjcmlw
dG9ycygpW3N0YXRpY19jYXN0PHNpemVfdD4oaXRlbVR5cGUpXTsKIH0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBpdGVt
KQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAgaWYg
KGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAgICBl
bHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKICAgICAKLSAgICB0cy5lbmRHcm91cCgpOwot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTYXZlJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVzdG9yZS1pbmRleCIsIGl0ZW0ucmVzdG9yZUluZGV4KCkpOwot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgVHJh
bnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVt
LnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5n
bGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgp
KTsKLQotICAgIHJldHVybiB0czsKLX0KLQotQ29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLXZv
aWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwot
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKLX0KLQot
dm9pZCBTZXRTdGF0ZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAg
IG1fc3RhdGUuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQotewot
ICAgIHRzIDw8IHN0YXRlLnN0YXRlKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExp
bmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rh
c2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpv
aW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGluZUpv
aW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGltaXQ6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNl
dE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJMaW1p
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7
Ci19Ci0KLXZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcCYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LmNsaXBPdXQobV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXQmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
bGlwT3V0VG9QYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5jbGlwT3V0KG1fcGF0aCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUGF0aCYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJ3aW5kLXJ1bGUiLCBpdGVtLndpbmRSdWxlKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2Zv
bnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tM
b2NhdGlvbikKLSAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCi0gICAgLCBtX3Ntb290
aGluZ01vZGUoc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2dseXBocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGNvdW50KTsKLSAgICBtX2FkdmFuY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291
bnQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IG1fZ2x5cGhzLnVuY2hlY2tlZEFwcGVuZChnbHlwaHNbaV0pOwotICAgICAgICBtX2FkdmFuY2Vz
LnVuY2hlY2tlZEFwcGVuZChhZHZhbmNlc1tpXSk7Ci0gICAgfQotICAgIGNvbXB1dGVCb3VuZHMo
KTsKLX0KLQotaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZm
ZXIoKSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdC5hZGQobV9n
bHlwaHNbaV0sICZtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0pOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0
ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9v
dGhpbmdNb2RlKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXNuJ3QgYWN0dWFsbHkgdGFrZSB0aGUgZXh0ZW50cyBv
ZiB0aGUgZ2x5cGhzIGludG8gY29uc2lkZXJhdGlvbi4gSXQgYXNzdW1lcyB0aGF0Ci0gICAgLy8g
dGhlIGdseXBoIGxpZXMgZW50aXJlbHkgd2l0aGluIGl0cyBbKGFzY2VudCArIGRlc2NlbnQpLCBh
ZHZhbmNlXSByZWN0LgotICAgIGZsb2F0IGFzY2VudCA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudCgpOwotICAgIGZsb2F0IGRlc2NlbnQgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCku
ZmxvYXREZXNjZW50KCk7Ci0gICAgRmxvYXRQb2ludCBjdXJyZW50ID0gdG9GbG9hdFBvaW50KGxv
Y2FsQW5jaG9yKCkpOwotICAgIHNpemVfdCBudW1HbHlwaHMgPSBtX2dseXBocy5zaXplKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UgYWR2YW5jZSA9IG1fYWR2YW5jZXNbaV07Ci0gICAgICAgIEZsb2F0UmVj
dCBnbHlwaFJlY3QgPSBGbG9hdFJlY3QoY3VycmVudC54KCksIGN1cnJlbnQueSgpIC0gYXNjZW50
LCBhZHZhbmNlLndpZHRoKCksIGFzY2VudCArIGRlc2NlbnQpOwotICAgICAgICBtX2JvdW5kcy51
bml0ZShnbHlwaFJlY3QpOwotCi0gICAgICAgIGN1cnJlbnQubW92ZShhZHZhbmNlLndpZHRoKCks
IGFkdmFuY2UuaGVpZ2h0KCkpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IERyYXdHbHlwaHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CitT
dHJpbmcgSXRlbTo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0g
bV9ib3VuZHM7Ci0gICAgbG9jYWxCb3VuZHMubW92ZShtX2Jsb2NrTG9jYXRpb24ueCgpLCBtX2Js
b2NrTG9jYXRpb24ueSgpKTsKLSAgICByZXR1cm4gbG9jYWxCb3VuZHM7CisgICAgcmV0dXJuIGl0
ZW1EZXNjcmlwdG9yKG1fdHlwZSkubmFtZTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCitTdHJpbmcgSXRl
bTo6YXJndW1lbnROYW1lKHNpemVfdCBpbmRleCkgY29uc3QKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUg
c3R1ZmYuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tM
b2NhdGlvbigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9j
YWxBbmNob3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFu
Y2hvclBvaW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGVuZ3RoIiwgaXRlbS5nbHlwaHMo
KS5zaXplKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQotICAgICwgbV9pbWFn
ZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJj
ZShzb3VyY2UpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQotewotfQotCi12b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVz
dGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYg
aXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi1EcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBt
X3RpbGVTaXplKHRpbGVTaXplKQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX2lt
YWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi12b2lkIERy
YXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBt
X3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdUaWxlZEltYWdlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1h
Z2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXNpemUiLCBpdGVtLnRpbGVTaXplKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3BhY2luZyIsIGl0ZW0uc3BhY2luZygpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2Nh
bGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1f
dlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotfQotCi12b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3Is
IG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQotRHJhd05hdGl2ZUltYWdl
OjpEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwg
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3TmF0aXZlSW1hZ2UpCi0jaWYgVVNFKENHKQotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN0
b3JlIGFuIGltYWdlIGZvciBDYWlyby4KLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0jZW5kaWYKLSAg
ICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3Qp
Ci0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgLCBtX29wKG9wKQot
ICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotI2VuZGlmCi0gICAgLCBtX29yaWVudGF0aW9u
KG9yaWVudGF0aW9uKQotewotI2lmICFVU0UoQ0cpCi0gICAgVU5VU0VEX1BBUkFNKGltYWdlKTsK
LSAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgIFVOVVNFRF9QQVJBTShibGVuZE1vZGUpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0jaWYgVVNFKENHKQotICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG1faW1hZ2UsIG1faW1hZ2VTaXplLCBtX2Rlc3RpbmF0aW9uLCBtX3NyY1JlY3QsIG1fb3AsIG1f
YmxlbmRNb2RlLCBtX29yaWVudGF0aW9uKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICAvLyBGSVhNRTogZHVtcCBtb3Jl
IHN0dWZmLgotICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotI2VuZGlmCi0KLURyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd1BhdHRlcm4pCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9wYXR0ZXJuVHJh
bnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCi0gICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQotICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKLSAgICAsIG1fcGhhc2UocGhhc2UpCi0gICAgLCBt
X3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCi17Ci19Ci0KLXZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwg
bV9zcGFjaW5nLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKLXsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0UmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
InBoYXNlIiwgaXRlbS5waGFzZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNwYWNpbmciLCBp
dGVtLnNwYWNpbmcoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIERyYXdSZWN0OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3UmVj
dChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQotewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVy
LXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZHM7Ci0gICAgYm91
bmRzLmZpdFRvUG9pbnRzKG1fcG9pbnQxLCBtX3BvaW50Mik7Ci0gICAgcmV0dXJuIGJvdW5kczsK
LX0KLQotdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuZHJhd0xpbmUobV9wb2ludDEsIG1fcG9pbnQyKTsKLX0KLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5l
JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0xIiwgaXRlbS5wb2ludDEoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJwb2ludC0yIiwgaXRlbS5wb2ludDIoKSk7Ci0gICAgcmV0dXJuIHRz
OwotfQotCi12b2lkIERyYXdMaW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV93
aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIHZh
bHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCgpIHJldHVybnMuCi0KLSAgICBpZiAo
IW1fd2lkdGhzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxv
YXRSZWN0IHJlc3VsdChwb2ludCgpLCBGbG9hdFNpemUobV93aWR0aHMubGFzdCgpLCBtX3N0cm9r
ZVdpZHRoKSk7Ci0gICAgcmVzdWx0LmluZmxhdGUoMSk7IC8vIEFjY291bnQgZm9yIHBpeGVsIHNu
YXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBhcyBpdCBkb2Vzbid0IHRha2UgdGhl
IENUTSBpbnRvIGFjY291bnQuCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQm
IGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0
aW9uKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFu
Y2hvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZSIsIGl0ZW0uZG91YmxlTGluZXMoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJ3aWR0aHMiLCBpdGVtLndpZHRocygpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImlzLXByaW50aW5nIiwgaXRlbS5pc1ByaW50aW5nKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZG91YmxlIiwgaXRlbS5kb3VibGVMaW5lcygpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihtX3Bv
aW50LCBtX3dpZHRoLCBtX3N0eWxlKTsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYSB2YWx1
ZSBlcXVhbCB0byBvciBlbmNsb3Npbmcgd2hhdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIoKSByZXR1cm5zLgotCi0gICAgRmxvYXRSZWN0IHJlc3VsdChtX3BvaW50
LCBGbG9hdFNpemUobV93aWR0aCwgY01pc3NwZWxsaW5nTGluZVRoaWNrbmVzcykpOwotICAgIHJl
c3VsdC5pbmZsYXRlKGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3MpOyAvLyBBY2NvdW50IGZvciAi
bWlzc3BlbGxpbmcgZG90IiBzbmFwcGluZy4KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBv
aW50KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdFbGxpcHNlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSNpZiBVU0UoQ0cpCi0gICAgY29udGV4dC5kcmF3
UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7
IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZz
ZXQsIG1fY29sb3IpOwotfQotCi1zdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmlu
Z1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAg
RmxvYXRSZWN0IHJlc3VsdCA9IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0gICAgcmVzdWx0
LmluZmxhdGUocGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdGb2N1c1JpbmdQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBh
dGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCi0gICAgdHMuZHVtcFByb3Bl
cnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQi
LCBpdGVtLm9mZnNldCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5kcmF3Rm9j
dXNSaW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKLX0KLQotc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgIGZv
ciAoYXV0byYgcmVjdCA6IG1fcmVjdHMpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0KTsKLSAg
ICByZXN1bHQuaW5mbGF0ZShwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIs
IGl0ZW0ucmVjdHMoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgo
KSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkKLXsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdp
dGhDb2xvciYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9ncmFkaWVu
dC5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIC8vIEZJWE1FOiBsb2cgZ3Jh
ZGllbnQuCi0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9j
b2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9w
ZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12
b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVu
ZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yb3VuZGVkUmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5j
b2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9k
ZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3Ip
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZW0pCi17Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIs
IGl0ZW0ucm91bmRlZEhvbGVSZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBp
dGVtLmNvbG9yKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFBhdGgo
bV9wYXRoKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5w
YXRoKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbEVsbGlwc2Uo
bV9yZWN0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17
Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKLSAgICBib3VuZHMuZXhwYW5kKG1fbGlu
ZVdpZHRoLCBtX2xpbmVXaWR0aCk7Ci0gICAgcmV0dXJuIGJvdW5kczsKLX0KLQotdm9pZCBTdHJv
a2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC5zdHJva2VSZWN0KG1fcmVjdCwgbV9saW5lV2lkdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkK
LXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0K
LXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8g
dGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBDR1BhdGhC
eVN0cm9raW5nUGF0aCgpLgotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9wYXRoLmJvdW5kaW5n
UmVjdCgpOwotICAgIGJvdW5kcy5leHBhbmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25l
c3MpOwotICAgIHJldHVybiBib3VuZHM7Ci19Ci0KLXZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc3Ryb2tlUGF0aCht
X3BhdGgpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKLXsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0u
cGF0aCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBT
dHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJva2VUaGlj
a25lc3MoKTsKLQotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7Ci0gICAgYm91bmRzLmV4
cGFuZChzdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgcmV0dXJuIGJvdW5k
czsKLX0KLQotdm9pZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zdHJva2VFbGxpcHNlKG1fcmVjdCk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VF
bGxpcHNlJiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJS
ZWN0JiBpdGVtKQotewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHJl
dHVybiB0czsKLX0KLQotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fb3BhY2l0eSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQotewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLX0KLQot
I2lmIFVTRShDRykKLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsK
LX0KLQotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7Ci19Ci0jZW5kaWYK
LQotdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2Nh
bGVGYWN0b3IpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInNjYWxlLWZhY3RvciIsIGl0ZW0uc2NhbGVGYWN0b3IoKSk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbVR5cGUmIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5z
bGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8
PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMg
PDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVD
YXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOiB0cyA8PCAiY2xpcC1vdXQtdG8tcGF0aCI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB0cyA8PCAiY2xpcC1wYXRoIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogdHMgPDwgImRyYXctZ2x5cGhzIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB0cyA8PCAiZHJhdy1pbWFnZSI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB0cyA8PCAiZHJhdy10aWxlZC1pbWFn
ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB0cyA8
PCAiZHJhdy10aWxlZC1zY2FsZWQtaW1hZ2UiOyBicmVhazsKLSNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHRzIDw8ICJkcmF3LW5h
dGl2ZS1pbWFnZSI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRl
cm46IHRzIDw8ICJkcmF3LXBhdHRlcm4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UmVjdDogdHMgPDwgImRyYXctcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lOiB0cyA8PCAiZHJhdy1saW5lIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmVzRm9yVGV4dDogdHMgPDwgImRyYXctbGluZXMtZm9yLXRleHQiOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOiB0cyA8PCAiZHJhdy1saW5lcy1m
b3ItZG9jdW1lbnQtbWFya2VyIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlw
c2U6IHRzIDw8ICJkcmF3LWVsbGlwc2UiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UGF0aDogdHMgPDwgImRyYXctcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdQYXRoOiB0cyA8PCAiZHJhdy1mb2N1cy1yaW5nLXBhdGgiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHRzIDw8ICJkcmF3LWZvY3VzLXJpbmct
cmVjdHMiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwt
cmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8
PCAiZmlsbC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21w
b3NpdGVkLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
IHRzIDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8ICJmaWxsLXBhdGgi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMgPDwgImZpbGwtZWxs
aXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHRzIDw8ICJzdHJv
a2UtcmVjdCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHRzIDw8ICJz
dHJva2UtcGF0aCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHRz
IDw8ICJzdHJva2UtZWxsaXBzZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDogdHMgPDwgImNsZWFyLXJlY3QiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOiB0cyA8PCAiYmVnaW4tdHJhbnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHRzIDw8ICJlbmQtdHJh
bnNwYXJlbmN5LWxheWVyIjsgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5U3Ryb2tlUGF0dGVybjogdHMgPDwgImFwcGx5LXN0cm9rZS1wYXR0ZXJuIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwt
cGF0dGVybiI7IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBncm91cCh0cyk7Ci0gICAgdHMgPDwgaXRlbS50eXBlKCk7Ci0KLSAgICAvLyBGSVhNRTog
TWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJhdGlv
biBzd2l0Y2hlcwotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTYXZlPihpdGVtKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxUcmFuc2xhdGU+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxT
Y2FsZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KGl0
ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U2V0TGluZUpvaW4+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRo
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ltYWdlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TmF0aXZl
SW1hZ2U+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRo
PihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Q29sb3I+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRl
bSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PEZpbGxQYXRoPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVt
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9r
ZVBhdGg+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8g
SXRlbXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCi0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSNpZiBVU0UoQ0cp
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0czsKKyAgICBBU1NFUlQo
aW5kZXggPCBpdGVtRGVzY3JpcHRvcihtX3R5cGUpLmFyZ3VtZW50c05hbWVzLnNpemUoKSk7Cisg
ICAgcmV0dXJuIGl0ZW1EZXNjcmlwdG9yKG1fdHlwZSkuYXJndW1lbnRzTmFtZXNbaW5kZXhdOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCBmMDBlYTdlODVjYjFj
ZDUyNDY5YmUxNTg4ZDAxMWU4Mzg0NzNjMTNjLi42MjQ0ZWQwYmI3MjcwZDMyMmY1MDcxZmIyOTg4
N2RkM2UxODU4MGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMzIgKzMx
LDMyIEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiVGhlbWUuaCIKKyNpbmNs
dWRlICJUaGVtZVR5cGVzLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBU
ZXh0U3RyZWFtOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJbWFnZVBhaW50
aW5nT3B0aW9uczsKLQogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogZW51bSBjbGFzcyBJdGVt
VHlwZSB7Ci0gICAgU2F2ZSwKKyAgICBNaW4gPSAwLAorICAgIFNhdmUgPSBNaW4sCiAgICAgUmVz
dG9yZSwKKyAgICBTZXRTdGF0ZSwKICAgICBUcmFuc2xhdGUsCiAgICAgUm90YXRlLAogICAgIFNj
YWxlLAogICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldFN0YXRlLAogICAgIFNldExpbmVDYXAs
CiAgICAgU2V0TGluZURhc2gsCiAgICAgU2V0TGluZUpvaW4sCkBAIC02NiwxMyArNjYsMTcgQEAg
ZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgQ2xpcE91dCwKICAgICBDbGlwT3V0VG9QYXRoLAog
ICAgIENsaXBQYXRoLAorICAgIEFwcGx5U3Ryb2tlUGF0dGVybiwKKyAgICBBcHBseUZpbGxQYXR0
ZXJuLAorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCisKKyAgICBCZWdpblRyYW5zcGFyZW5j
eUxheWVyLAorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAogICAgIERyYXdHbHlwaHMsCiAgICAg
RHJhd0ltYWdlLAogICAgIERyYXdUaWxlZEltYWdlLAogICAgIERyYXdUaWxlZFNjYWxlZEltYWdl
LAotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQogICAgIERyYXdOYXRpdmVJbWFnZSwKLSNlbmRp
ZgogICAgIERyYXdQYXR0ZXJuLAogICAgIERyYXdSZWN0LAogICAgIERyYXdMaW5lLApAQCAtODIs
NiArODYsMTAgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSB7CiAgICAgRHJhd1BhdGgsCiAgICAgRHJh
d0ZvY3VzUmluZ1BhdGgsCiAgICAgRHJhd0ZvY3VzUmluZ1JlY3RzLAorICAgIERyYXdJY29uLAor
ICAgIERyYXdXaWRnZXQsCisgICAgRHJhd1Njcm9sbGJhciwKKyAgICBEcmF3VGhlbWUsCiAgICAg
RmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRoR3JhZGll
bnQsCkBAIC05NCwxMjk1ICsxMDIsOTMzIEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgewogICAgIFN0
cm9rZVBhdGgsCiAgICAgU3Ryb2tlRWxsaXBzZSwKICAgICBDbGVhclJlY3QsCi0gICAgQmVnaW5U
cmFuc3BhcmVuY3lMYXllciwKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllciwKLSNpZiBVU0UoQ0cp
Ci0gICAgQXBwbHlTdHJva2VQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29y
ZGVkIGl0ZW0uCi0gICAgQXBwbHlGaWxsUGF0dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUg
YSByZWNvcmRlZCBpdGVtLgotI2VuZGlmCi0gICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKKyAg
ICBNYXgKIH07CiAKIGNsYXNzIEl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxJdGVtPiB7CiBwdWJs
aWM6Ci0gICAgSXRlbSgpID0gZGVsZXRlOwotCi0gICAgSXRlbShJdGVtVHlwZSB0eXBlKQotICAg
ICAgICA6IG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIH5JdGVtKCkg
PSBkZWZhdWx0OwogCi0gICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV90eXBlOwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCA9IDA7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEaXNwbGF5
TGlzdEl0ZW0gPSB0cnVlOworICAgIHZpcnR1YWwgYm9vbCBpc0dlb21ldHJ5SXRlbSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25z
dCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgCi0gICAgLy8gQSBzdGF0ZSBpdGVtIGlzIG9uZSBwcmVzZXJ2ZWQgYnkg
U2F2ZS9SZXN0b3JlLgotICAgIGJvb2wgaXNTdGF0ZUl0ZW0oKSBjb25zdAorICAgIHZpcnR1YWwg
dm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gaXNTdGF0ZUl0ZW1UeXBlKG1fdHlwZSk7CisgICAgICAgIHRzIDw8IG5hbWUoKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgYm9vbCBpc1N0YXRlSXRlbVR5cGUoSXRlbVR5cGUgaXRlbVR5cGUpCisg
ICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFdURjo6Q1N0
cmluZyBkdW1wKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJdGVtKEl0ZW1UeXBlIHR5cGUp
CisgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGl0ZW1UeXBl
KSB7Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBUcmFuc2xhdGU6Ci0gICAgICAgIGNhc2UgSXRl
bVR5cGU6OiBSb3RhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTY2FsZToKLSAgICAgICAg
Y2FzZSBJdGVtVHlwZTo6IENvbmNhdGVuYXRlQ1RNOgotICAgICAgICBjYXNlIEl0ZW1UeXBlOjog
U2V0U3RhdGU6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRMaW5lQ2FwOgotICAgICAgICBj
YXNlIEl0ZW1UeXBlOjogU2V0TGluZURhc2g6Ci0gICAgICAgIGNhc2UgSXRlbVR5cGU6OiBTZXRM
aW5lSm9pbjoKLSAgICAgICAgY2FzZSBJdGVtVHlwZTo6IFNldE1pdGVyTGltaXQ6Ci0gICAgICAg
IGNhc2UgSXRlbVR5cGU6OiBDbGVhclNoYWRvdzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFM
T0dfRElTQUJMRUQKLSAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRp
ZgotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOworICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3Q7CisgICAgU3RyaW5nIGFyZ3VtZW50TmFtZShzaXplX3QgaW5kZXgpIGNv
bnN0OwogCi1wcml2YXRlOgogICAgIEl0ZW1UeXBlIG1fdHlwZTsKIH07CiAKLWNsYXNzIERyYXdp
bmdJdGVtIDogcHVibGljIEl0ZW0geworY2xhc3MgR2VvbWV0cnlJdGVtIDogcHVibGljIEl0ZW0g
ewogcHVibGljOgotICAgIERyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgICAgIDogSXRl
bSh0eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJl
Y3QmIHIpIHsgbV9leHRlbnQgPSByOyB9Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBj
b25zdCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgpOyB9Ci0KICAgICBib29sIGV4dGVudEtub3du
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9CiAKLSAgICAv
LyBSZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRp
bmF0ZXMuCi0gICAgLy8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFk
b3cgZXRjIGluIHRoZSBzdGF0ZS4KLSAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBzdGQ6
Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
bV9leHRlbnQ7IC8vIEluIGJhc2UgY29vcmRpbmF0ZXMsIHRha2luZyBzaGFkb3dzIGFuZCB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudC4KLX07Ci0KLWNsYXNzIFNhdmUgOiBwdWJsaWMgSXRlbSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTYXZlPiBjcmVhdGUoKQorICAgIHZvaWQgc2V0RXh0ZW50
KGNvbnN0IEZsb2F0UmVjdCYgZXh0ZW50KSB7IG1fZXh0ZW50ID0gZXh0ZW50OyB9CisgICAgY29u
c3QgRmxvYXRSZWN0IGV4dGVudCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTYXZlKTsKKyAgICAgICAgcmV0dXJuIG1fZXh0ZW50LnZhbHVlX29yKEZsb2F0UmVj
dCgpKTsKICAgICB9CiAKLSAgICAvLyBJbmRleCBpbiB0aGUgZGlzcGxheSBsaXN0IG9mIHRoZSBj
b3JyZXNwb25kaW5nIFJlc3RvcmUgaXRlbS4gMCBpZiB1bm1hdGNoZWQuCi0gICAgc2l6ZV90IHJl
c3RvcmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9yZUluZGV4OyB9Ci0gICAgdm9pZCBz
ZXRSZXN0b3JlSW5kZXgoc2l6ZV90IGluZGV4KSB7IG1fcmVzdG9yZUluZGV4ID0gaW5kZXg7IH0K
LQotcHJpdmF0ZToKLSAgICBTYXZlKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsgfQogICAgIAotICAgIHNpemVfdCBtX3Jlc3RvcmVJbmRleCB7IDAgfTsKLX07Ci0KLWNsYXNz
IFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZXN0b3Jl
PiBjcmVhdGUoKQorcHJvdGVjdGVkOgorICAgIEdlb21ldHJ5SXRlbShJdGVtVHlwZSB0eXBlKQor
ICAgICAgICA6IEl0ZW0odHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlc3RvcmUpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBSZXN0b3JlKCkKLSAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpSZXN0b3JlKQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mIHRz
KSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgSXRlbTo6ZHVtcCh0cyk7CisgICAgICAg
IHRzLnN0YXJ0R3JvdXAoKTsKKyAgICAgICAgdHMgPDwgImV4dGVudCAiOworICAgICAgICBpZiAo
ZXh0ZW50S25vd24oKSkKKyAgICAgICAgICAgIHRzIDw8IGV4dGVudCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0cyA8PCAidW5rbm93biI7CisgICAgICAgIHRzLmVuZEdyb3VwKCk7CiAg
ICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbV9leHRlbnQ7CiB9OwogCi1jbGFzcyBUcmFu
c2xhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUcmFuc2xhdGU+
IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEFwcGxpZXIsIEFw
cGxpZXIgYXBwbGllciwgY2xhc3MuLi4gQXJndW1lbnRzPgorY2xhc3MgR3JhcGhpY3NJdGVtIHsK
K3Byb3RlY3RlZDoKKyAgICBHcmFwaGljc0l0ZW0oQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBtX2FyZ3VtZW50cyhzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNsYXRlKHgsIHkpKTsK
ICAgICB9CiAKLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgZmxvYXQg
eSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi1wcml2YXRlOgotICAgIFRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAg
ICAgLCBtX3goeCkKLSAgICAgICAgLCBtX3koeSkKKyAgICB0ZW1wbGF0ZTwgc3RkOjpzaXplX3Qg
ST4KKyAgICBjb25zdCBhdXRvJiBhcmd1bWVudCgpIGNvbnN0CiAgICAgeworICAgICAgICByZXR1
cm4gc3RkOjpnZXQ8ST4obV9hcmd1bWVudHMpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxv
YXQgbV95OwotfTsKLQotY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUoYW5nbGVJblJhZGlhbnMpKTsKKyAgICAgICAgYXBw
bHkoY29udGV4dCwgc3RkOjppbmRleF9zZXF1ZW5jZV9mb3I8QXJndW1lbnRzLi4uPigpKTsKICAg
ICB9CiAKLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KLQotcHJp
dmF0ZToKLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6
Um90YXRlKQotICAgICAgICAsIG1fYW5nbGUoYW5nbGUpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBpdGVyYXJ0ZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKICAg
ICB7CisgICAgICAgIGl0ZXJhcnRlKFdURk1vdmUoZnVuY3RvciksIHN0ZDo6aW5kZXhfc2VxdWVu
Y2VfZm9yPEFyZ3VtZW50cy4uLj4oKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fYW5nbGU7IC8vIEluIHJh
ZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNjYWxlPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorcHJpdmF0ZToK
KyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdC4uLiBJbmRpY2VzPgorICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBzdGQ6OmluZGV4X3NlcXVlbmNlPEluZGljZXMuLi4+KSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOwor
ICAgICAgICAoY29udGV4dC4qYXBwbGllcikoc3RkOjpnZXQ8SW5kaWNlcz4obV9hcmd1bWVudHMp
Li4uKTsKICAgICB9CiAKLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotCi1wcml2YXRlOgotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKLSAgICAgICAgLCBtX3NpemUoc2l6
ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCBzdGQ6OnNpemVfdC4uLiBJbmRpY2Vz
PgorICAgIHZvaWQgaXRlcmFydGUoRnVuY3RvciYmIGZ1bmN0b3IsIHN0ZDo6aW5kZXhfc2VxdWVu
Y2U8SW5kaWNlcy4uLj4pIGNvbnN0CiAgICAgeworICAgICAgICB1c2luZyBzd2FsbG93ID0gaW50
W107CisgICAgICAgICh2b2lkKXN3YWxsb3cgeyAxLCAoZnVuY3RvcihJbmRpY2VzLCBzdGQ6Omdl
dDxJbmRpY2VzPihtX2FyZ3VtZW50cykpLCBpbnQgeyB9KS4uLiB9OwogICAgIH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFNp
emUgbV9zaXplOworICAgIHN0ZDo6dHVwbGU8QXJndW1lbnRzLi4uPiBtX2FyZ3VtZW50czsKIH07
CiAKLWNsYXNzIENvbmNhdGVuYXRlQ1RNIDogcHVibGljIEl0ZW0gewordGVtcGxhdGUgPEl0ZW1U
eXBlIGl0ZW1UeXBlLCB0eXBlbmFtZSBBcHBsaWVyLCBBcHBsaWVyIGFwcGxpZXIsIGNsYXNzLi4u
IEFyZ3VtZW50cz4KK2NsYXNzIFNldHRpbmdJdGVtIDogcHVibGljIEl0ZW0sIHB1YmxpYyBHcmFw
aGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPiAgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q29uY2F0ZW5hdGVDVE0+IGNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdHJpeCkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0o
bWF0cml4KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldHRpbmdJdGVtKGFyZ3Vt
ZW50cy4uLikpOwogICAgIH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQotcHJpdmF0ZToKLSAgICBDb25jYXRl
bmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFu
c2Zvcm07Ci19OwotCi1jbGFzcyBTZXRTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRTdGF0ZShzdGF0ZSwgZmxhZ3MpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2Y8U2VsZiwgVD46OnZhbHVlLCAiVGhpcyBmdW5jdGlvbiBzaG91bGQgY3JlYXRlIGNsYXNz
ZXMgZnJvbSBTZXR0aW5nSXRlbS4iKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVChz
dGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CiAgICAgfQotICAgIAotICAg
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KIAotICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICB1c2lu
ZyBHcmFwaGljc0l0ZW1CYXNlID0gR3JhcGhpY3NJdGVtPEFwcGxpZXIsIGFwcGxpZXIsIEFyZ3Vt
ZW50cy4uLj47CiAKLSAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBj
b25zdDsKLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0
cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotcHJpdmF0ZToKLSAgICBTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQotICAgICAgICAs
IG1fc3RhdGUoc3RhdGUsIGZsYWdzKQorICAgIFNldHRpbmdJdGVtKEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogSXRlbShpdGVtVHlwZSkKKyAgICAgICAgLCBHcmFwaGljc0l0ZW1C
YXNlKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCiAgICAgewogICAgIH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlOwotfTsKLQotY2xhc3MgU2V0TGlu
ZUNhcCA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+
IGNyZWF0ZShMaW5lQ2FwIGxpbmVDYXApCisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYg
dHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRMaW5lQ2FwKGxpbmVDYXApKTsKKyAgICAgICAgSXRlbTo6ZHVtcCh0cyk7CisgICAgICAgIEdy
YXBoaWNzSXRlbUJhc2U6Oml0ZXJhcnRlKFt0aGlzLCAmdHNdKHNpemVfdCBpbmRleCwgY29uc3Qg
YXV0byYgYXJndW1lbnRWYWx1ZSkgeworICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KHRoaXMt
PmFyZ3VtZW50TmFtZShpbmRleCksIGFyZ3VtZW50VmFsdWUpOworICAgICAgICB9KTsKICAgICB9
Ci0gICAgCi0gICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9
CiAKIHByaXZhdGU6Ci0gICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAgICAgIDog
SXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKLSAgICAgICAgLCBtX2xpbmVDYXAobGluZUNhcCkK
KyAgICB1c2luZyBTZWxmID0gU2V0dGluZ0l0ZW08aXRlbVR5cGUsIEFwcGxpZXIsIGFwcGxpZXIs
IEFyZ3VtZW50cy4uLj47CisKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIEdyYXBoaWNzSXRlbUJhc2U6OmFwcGx5
KGNvbnRleHQpOwogICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0KLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKKyAgICBzaXplX3Qgc2l6ZUlu
Qnl0ZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzaXplb2YoKnRoaXMpOyB9CiB9OwogCi1j
bGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK3RlbXBsYXRlIDxJdGVtVHlwZSBpdGVt
VHlwZSwgdHlwZW5hbWUgQXBwbGllciwgQXBwbGllciBhcHBsaWVyLCBjbGFzcy4uLiBBcmd1bWVu
dHM+CitjbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBHZW9tZXRyeUl0ZW0sIHB1YmxpYyBHcmFw
aGljc0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPiAgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0ZShjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJh
eSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0
TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdpbmdJdGVtKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
KTsKICAgICB9CiAKLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGFzaE9mZnNldDsgfQotCi1wcml2YXRlOgotICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5
cGU6OlNldExpbmVEYXNoKQotICAgICAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAg
ICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHN0YXRpYyBSZWY8SXRlbT4gY3JlYXRlKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAg
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxTZWxmLCBUPjo6dmFsdWUs
ICJUaGlzIGZ1bmN0aW9uIHNob3VsZCBjcmVhdGUgY2xhc3NlcyBmcm9tIERyYXdpbmdJdGVtLiIp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+
KGFyZ3VtZW50cykuLi4pKTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVzaW5nIEdyYXBoaWNzSXRlbUJhc2UgPSBHcmFwaGlj
c0l0ZW08QXBwbGllciwgYXBwbGllciwgQXJndW1lbnRzLi4uPjsKIAotICAgIERhc2hBcnJheSBt
X2Rhc2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7Ci19OworICAgIC8vIFNob3VsZCBt
YXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpCisgICAgY29uc3RleHBy
IHN0YXRpYyBmbG9hdCBjb25zdCBzX3BsYXRmb3JtRm9jdXNSaW5nV2lkdGggPSAzOwogCi1jbGFz
cyBTZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNl
dExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgRHJhd2luZ0l0ZW0oQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBHZW9tZXRyeUl0ZW0oaXRlbVR5cGUpCisg
ICAgICAgICwgR3JhcGhpY3NJdGVtQmFzZShzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4o
bGluZUpvaW4pKTsKICAgICB9Ci0gICAgCi0gICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7
IHJldHVybiBtX2xpbmVKb2luOyB9CiAKIHByaXZhdGU6Ci0gICAgU2V0TGluZUpvaW4oTGluZUpv
aW4gbGluZUpvaW4pCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUpvaW4pCi0gICAg
ICAgICwgbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB1c2luZyBTZWxmID0gRHJh
d2luZ0l0ZW08aXRlbVR5cGUsIEFwcGxpZXIsIGFwcGxpZXIsIEFyZ3VtZW50cy4uLj47CiAKLSAg
ICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1Ymxp
YyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShm
bG9hdCBsaW1pdCkKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVy
TGltaXQobGltaXQpKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6YXBwbHkoY29udGV4dCk7
CiAgICAgfQogCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJM
aW1pdDsgfQorICAgIGJvb2wgaXNHZW9tZXRyeUl0ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gc2l6ZW9mKCp0aGlzKTsgfQogCi1wcml2YXRlOgotICAgIFNldE1pdGVyTGltaXQoZmxvYXQg
bWl0ZXJMaW1pdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0KQotICAg
ICAgICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRT
dHJlYW0mIHRzKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgR2VvbWV0cnlJdGVtOjpk
dW1wKHRzKTsKKyAgICAgICAgR3JhcGhpY3NJdGVtQmFzZTo6aXRlcmFydGUoW3RoaXMsICZ0c10o
c2l6ZV90IGluZGV4LCBjb25zdCBhdXRvJiBhcmd1bWVudFZhbHVlKSB7CisgICAgICAgICAgICB0
cy5kdW1wUHJvcGVydHkodGhpcy0+YXJndW1lbnROYW1lKGluZGV4KSwgYXJndW1lbnRWYWx1ZSk7
CisgICAgICAgIH0pOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX21pdGVyTGltaXQ7CiB9OwogCi1jbGFzcyBD
bGVhclNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFy
U2hhZG93PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xl
YXJTaGFkb3cpOwotICAgIH0KK3VzaW5nIFNhdmVCYXNlID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OlNhdmUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFw
aGljc0NvbnRleHQ6OnNhdmUKKz47CiAKLXByaXZhdGU6Ci0gICAgQ2xlYXJTaGFkb3coKQotICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQotICAgIHsKLSAgICB9Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotLy8gRklY
TUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPwotY2xhc3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIFNhdmUgOiBwdWJsaWMgU2F2ZUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xp
cD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENsaXAocmVjdCkpOwotICAgIH0KKyAgICBjb25zdGV4cHIgc3RhdGljIGF1
dG8gY3JlYXRlID0gU2F2ZUJhc2U6OmNyZWF0ZTxTYXZlPjsKIAotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgLy8gSW5kZXggaW4gdGhlIGRpc3BsYXkg
bGlzdCBvZiB0aGUgY29ycmVzcG9uZGluZyBSZXN0b3JlIGl0ZW0uIDAgaWYgdW5tYXRjaGVkLgor
ICAgIHNpemVfdCByZXN0b3JlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RvcmVJbmRleDsg
fQorICAgIHZvaWQgc2V0UmVzdG9yZUluZGV4KHNpemVfdCBpbmRleCkgeyBtX3Jlc3RvcmVJbmRl
eCA9IGluZGV4OyB9CiAKIHByaXZhdGU6Ci0gICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB1c2luZyBTYXZlQmFzZTo6U2F2ZUJhc2U7CiAKLSAgICBGbG9hdFJlY3Qg
bV9yZWN0OwotfTsKLQotY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
dm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKKyAgICAgICAgU2F2ZUJh
c2U6OmR1bXAodHMpOworICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3RvcmUtaW5kZXgiLCBt
X3Jlc3RvcmVJbmRleCk7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQotICAgICAgICAsIG1fcmVj
dChyZWN0KQotICAgIHsKLSAgICB9CisgICAgc2l6ZV90IG1fcmVzdG9yZUluZGV4IHsgMCB9Owor
fTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cit1
c2luZyBSZXN0b3JlID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OlJlc3RvcmUsCisgICAg
dm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUKKz47CiAKLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotfTsKK3VzaW5nIFNldFN0YXRlQmFzZSA9
IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTZXRTdGF0ZSwKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiksCisgICAgJkdy
YXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZSwKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZQorPjsKIAotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFNldFN0YXRlIDogcHVibGljIFNldFN0YXRlQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwotICAgIH0KLQotICAg
IGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gU2V0U3RhdGVCYXNlOjpjcmVhdGU8U2V0U3RhdGU+Owor
ICAgIHVzaW5nIFNldFN0YXRlQmFzZTo6U2V0U3RhdGVCYXNlOworICAgIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7
IH0KK307CiAKLXByaXZhdGU6Ci0gICAgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQot
ICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgICAgICwgbV9wYXRo
KHBhdGgpCi0gICAgewotICAgIH0KK3VzaW5nIFRyYW5zbGF0ZSA9IFNldHRpbmdJdGVtPAorICAg
IEl0ZW1UeXBlOjpUcmFuc2xhdGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9h
dCwgZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSwKKyAgICBmbG9hdCwg
ZmxvYXQKKz47CisKK3VzaW5nIFJvdGF0ZSA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpS
b3RhdGUsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShmbG9hdCksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6cm90YXRlLAorICAgIGZsb2F0Cis+OworCit1c2luZyBTY2FsZSA9IFNldHRp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpTY2FsZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6
OiopKGNvbnN0IEZsb2F0U2l6ZSYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNjYWxlLAorICAg
IEZsb2F0U2l6ZQorPjsKKwordXNpbmcgQ29uY2F0ZW5hdGVDVE0gPSBTZXR0aW5nSXRlbTwKKyAg
ICBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0Ojoq
KShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRD
VE0sCisgICAgQWZmaW5lVHJhbnNmb3JtCis+OworCit1c2luZyBTZXRMaW5lQ2FwID0gU2V0dGlu
Z0l0ZW08CisgICAgSXRlbVR5cGU6OlNldExpbmVDYXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250
ZXh0OjoqKShMaW5lQ2FwKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwLAorICAg
IExpbmVDYXAKKz47CisKK3VzaW5nIFNldExpbmVEYXNoID0gU2V0dGluZ0l0ZW08CisgICAgSXRl
bVR5cGU6OlNldExpbmVEYXNoLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3Qg
RGFzaEFycmF5JiwgZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoLAor
ICAgIERhc2hBcnJheSwgZmxvYXQKKz47CisKK3VzaW5nIFNldExpbmVKb2luID0gU2V0dGluZ0l0
ZW08CisgICAgSXRlbVR5cGU6OlNldExpbmVKb2luLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoTGluZUpvaW4pLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luLAorICAg
IExpbmVKb2luCis+OworCit1c2luZyBTZXRNaXRlckxpbWl0ID0gU2V0dGluZ0l0ZW08CisgICAg
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShm
bG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCwKKyAgICBmbG9hdAor
PjsKKwordXNpbmcgQ2xlYXJTaGFkb3cgPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3csCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKSgpLAorICAgICZHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyU2hhZG93Cis+OworCit1c2luZyBDbGlwID0gU2V0dGluZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OkNsaXAsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBG
bG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpjbGlwLAorICAgIEZsb2F0UmVjdAor
PjsKKwordXNpbmcgQ2xpcE91dCA9IFNldHRpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGlwT3V0
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0JiksCisgICAg
JkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCwKKyAgICBGbG9hdFJlY3QKKz47CisKK3VzaW5nIENs
aXBPdXRUb1BhdGggPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCwK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0LAorICAgIGNvbnN0IFBhdGgKKz47CisKK3VzaW5nIENsaXBQYXRo
ID0gU2V0dGluZ0l0ZW08CisgICAgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgsCisgICAgdm9pZCAo
R3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBQYXRoJiwgV2luZFJ1bGUpLAorICAgICZHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoLAorICAgIGNvbnN0IFBhdGgsIFdpbmRSdWxlCis+OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyNpZiBVU0UoQ0cp
Cit1c2luZyBBcHBseVN0cm9rZVBhdHRlcm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAg
ICAmR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KKz47CisKK3VzaW5nIEFwcGx5
RmlsbFBhdHRlcm4gPSBTZXR0aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVy
biwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKCksCisgICAgJkdyYXBoaWNzQ29udGV4
dDo6YXBwbHlGaWxsUGF0dGVybgorPjsKKyNlbmRpZgogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7
Ci19OwordXNpbmcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciA9IFNldHRpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4
dDo6KikoZmxvYXQpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IsCisgICAgZmxvYXQKKz47CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworLy8g
SXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVy
IGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgordXNpbmcgQmVnaW5UcmFuc3BhcmVuY3lM
YXllciA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoZmxvYXQpLAorICAgICZHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAgZmxvYXQKKz47CisKK3VzaW5nIEVu
ZFRyYW5zcGFyZW5jeUxheWVyID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoKSwKKyAgICAmR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcgorPjsKKwordXNpbmcgRHJhd0dseXBo
c0Jhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0dseXBocywKKyAgICB2b2lk
IChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSwK
KyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzLAorICAgIFJlZjxjb25zdCBGb250Piwg
R2x5cGhCdWZmZXIsIHVuc2lnbmVkLCB1bnNpZ25lZCwgRmxvYXRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUKKz47CisKK2NsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd0dseXBoc0Jhc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZShSZWY8Y29u
c3QgRm9udD4mJiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKKyAgICAgICAgYXV0byBzdWJHbHlwaEJ1ZmZl
ciA9IERyYXdHbHlwaHM6OnN1YkdseXBoQnVmZmVyKGZvbnQucHRyKCksIGJ1ZmZlciwgZnJvbSwg
bnVtR2x5cGhzKTsKKyAgICAgICAgcmV0dXJuIERyYXdHbHlwaHNCYXNlOjpjcmVhdGUoV1RGTW92
ZShmb250KSwgV1RGTW92ZShzdWJHbHlwaEJ1ZmZlciksIDAsIG51bUdseXBocywgcG9pbnQsIGZv
bnRTbW9vdGhpbmcpOwogICAgIH0KIAotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGg7IH0KLSAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
d2luZFJ1bGU7IH0KLQogcHJpdmF0ZToKLSAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSB3aW5kUnVsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAg
ICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAgV2luZFJ1bGUgbV93aW5kUnVsZTsK
LX07CisgICAgdXNpbmcgRHJhd0dseXBoc0Jhc2U6OkRyYXdHbHlwaHNCYXNlOwogCi1jbGFzcyBE
cmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQorICAgIHN0YXRp
YyBHbHlwaEJ1ZmZlciBzdWJHbHlwaEJ1ZmZlcihjb25zdCBGb250KiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIGNvdW50LCBibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9k
ZSkpOworICAgICAgICBHbHlwaEJ1ZmZlciBzdWJCdWZmZXI7CisgICAgICAgIGNvbnN0IGF1dG8q
IGdseXBocyA9IGJ1ZmZlci5nbHlwaHMoZnJvbSk7CisgICAgICAgIGNvbnN0IGF1dG8qIGFkdmFu
Y2VzID0gYnVmZmVyLmFkdmFuY2VzKGZyb20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKQorICAgICAgICAgICAgc3ViQnVmZmVyLmFkZChnbHlwaHNbaV0s
IGZvbnQsIGFkdmFuY2VzW2ldKTsKKyAgICAgICAgcmV0dXJuIHN1YkJ1ZmZlcjsKICAgICB9CiAK
LSAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9i
bG9ja0xvY2F0aW9uOyB9Ci0gICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQot
Ci0gICAgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxBbmNob3I7IH0KLQotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrTG9jYXRpb24gKyBtX2xvY2FsQW5jaG9yOyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7
IH0KLQotcHJpdmF0ZToKLSAgICBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNo
b3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgY29tcHV0ZUJvdW5kcygpOwotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIEdseXBoQnVmZmVyIGdlbmVyYXRlR2x5cGhCdWZmZXIo
KSBjb25zdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNv
bnN0IGF1dG8mIGZvbnQgPSBhcmd1bWVudDwwPigpOworICAgICAgICBmbG9hdCBhc2NlbnQgPSBm
b250LT5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7CisgICAgICAgIGZsb2F0IGRlc2NlbnQg
PSBmb250LT5mb250TWV0cmljcygpLmZsb2F0RGVzY2VudCgpOwogCi0gICAgUmVmPEZvbnQ+IG1f
Zm9udDsKLSAgICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsKLSAgICBW
ZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7Ci0gICAgRmxvYXRSZWN0
IG1fYm91bmRzOwotICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwotICAgIEZsb2F0U2l6
ZSBtX2xvY2FsQW5jaG9yOwotICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5nTW9kZTsK
LX07CisgICAgICAgIGNvbnN0IGF1dG8mIGdseXBoQnVmZmVyID0gYXJndW1lbnQ8MT4oKTsKKyAg
ICAgICAgc2l6ZV90IG51bUdseXBocyA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAgICAgICAgYXV0
byBjdXJyZW50ID0gYXJndW1lbnQ8ND4oKTsKIAotY2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdJbWFnZT4gY3JlYXRlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShpbWFnZSwg
ZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICAgICAgRmxv
YXRSZWN0IGJvdW5kczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7
ICsraSkgeworICAgICAgICAgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2UgPSBnbHlwaEJ1
ZmZlci5hZHZhbmNlQXQoaSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhSZWN0ID0gRmxv
YXRSZWN0KGN1cnJlbnQueCgpLCBjdXJyZW50LnkoKSAtIGFzY2VudCwgYWR2YW5jZS53aWR0aCgp
LCBhc2NlbnQgKyBkZXNjZW50KTsKKyAgICAgICAgICAgIGJvdW5kcy51bml0ZShnbHlwaFJlY3Qp
OworICAgICAgICAgICAgY3VycmVudC5tb3ZlKGFkdmFuY2Uud2lkdGgoKSwgYWR2YW5jZS5oZWln
aHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Cit9OwogCi0g
ICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQot
ICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAgIEZs
b2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KK3Vz
aW5nIERyYXdJbWFnZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0ltYWdl
LAorICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZs
b2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJh
d0ltYWdlIDogcHVibGljIERyYXdJbWFnZUJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBz
dGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3SW1hZ2VCYXNlOjpjcmVhdGU8RHJhd0ltYWdlPjsKKyAg
ICB1c2luZyBEcmF3SW1hZ2VCYXNlOjpEcmF3SW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0gICAgbXV0YWJsZSBSZWY8SW1hZ2U+
IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0
aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgotICAg
IEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKLSAgICBJ
bWFnZVBhaW50aW5nT3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOworICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBE
cmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgRmxv
YXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQotICAgIEZs
b2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KLSAgICBGbG9h
dFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQordXNpbmcgRHJhd1Rp
bGVkSW1hZ2VCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdl
LAorICAgIEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpLAorICAgICZHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUaWxlZEltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVjdCwgRmxvYXRQ
b2ludCwgRmxvYXRTaXplLCBGbG9hdFNpemUsIEltYWdlUGFpbnRpbmdPcHRpb25zCis+OwogCitj
bGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3VGlsZWRJbWFnZUJhc2UgeworcHVibGlj
OgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3VGlsZWRJbWFnZUJhc2U6
OmNyZWF0ZTxEcmF3VGlsZWRJbWFnZT47CisgICAgdXNpbmcgRHJhd1RpbGVkSW1hZ2VCYXNlOjpE
cmF3VGlsZWRJbWFnZUJhc2U7CiBwcml2YXRlOgotICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZGVzdGluYXRpb247IH0KLQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhN
RTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3Mu
IFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fc291cmNlOwotICAgIEZsb2F0U2l6ZSBtX3RpbGVT
aXplOwotICAgIEZsb2F0U2l6ZSBtX3NwYWNpbmc7Ci0gICAgSW1hZ2VQYWludGluZ09wdGlvbnMg
bV9pbWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2Ug
OiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQ
YWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQordXNpbmcgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNl
ID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlLAorICAg
IEltYWdlRHJhd1Jlc3VsdCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVs
ZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpLAorICAgICZH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlLAorICAgIFJlZjxJbWFnZT4sIEZsb2F0UmVj
dCwgRmxvYXRSZWN0LCBGbG9hdFNpemUsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
LCBJbWFnZVBhaW50aW5nT3B0aW9ucworPjsKIAorY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2Ug
OiBwdWJsaWMgRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4
cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlOjpjcmVhdGU8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+OworICAgIHVzaW5nIERyYXdUaWxlZFNjYWxlZEltYWdlQmFz
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2VCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3VGlsZWRTY2Fs
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRp
bGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0K
LQotICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFn
ZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0
IGhhdmUgdG8gYmUgbXV0YWJsZS4KLSAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKLSAgICBG
bG9hdFJlY3QgbV9zb3VyY2U7Ci0gICAgRmxvYXRTaXplIG1fdGlsZVNjYWxlRmFjdG9yOwotICAg
IEltYWdlOjpUaWxlUnVsZSBtX2hSdWxlOwotICAgIEltYWdlOjpUaWxlUnVsZSBtX3ZSdWxlOwot
ICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG1faW1hZ2VQYWludGluZ09wdGlvbnM7CisgICAgY29u
c3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDE+KCk7IH0KIH07CiAKLSNp
ZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNy
ZWF0ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxl
bmRNb2RlLCBvcmllbnRhdGlvbikpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNU
MkQpIHx8IFVTRShDQUlSTykKK3VzaW5nIERyYXdOYXRpdmVJbWFnZUJhc2UgPSBEcmF3aW5nSXRl
bTwKKyAgICBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlLAorICAgIHZvaWQgKEdyYXBoaWNzQ29u
dGV4dDo6KikoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
LCBJbWFnZU9yaWVudGF0aW9uKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1h
Z2UsCisgICAgTmF0aXZlSW1hZ2VQdHIsIEZsb2F0U2l6ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3Qs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24KKz47CiAKK2Ns
YXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3TmF0aXZlSW1hZ2VCYXNlIHsKK3B1Ymxp
YzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd05hdGl2ZUltYWdlQmFz
ZTo6Y3JlYXRlPERyYXdOYXRpdmVJbWFnZT47CisgICAgdXNpbmcgRHJhd05hdGl2ZUltYWdlQmFz
ZTo6RHJhd05hdGl2ZUltYWdlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd05hdGl2ZUltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKTsKLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQotCi0jaWYgVVNFKENHKQotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBtX2ltYWdlOwotI2VuZGlmCi0gICAgRmxvYXRTaXplIG1faW1hZ2VTaXplOwot
ICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwotICAgIEZsb2F0UmVjdCBtX3NyY1JlY3Q7Ci0j
aWYgVVNFKENHKQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1f
YmxlbmRNb2RlOwotI2VuZGlmCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwor
ICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwyPigpOyB9CiB9
OwogI2VuZGlmCiAKLWNsYXNzIERyYXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJbWFnZSYg
aW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0gICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJh
bnNmb3JtOyB9Ci0gICAgRmxvYXRSZWN0IHRpbGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV90aWxl
UmVjdDsgfQotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KLSAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsg
fQotICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9Cit1
c2luZyBEcmF3UGF0dGVybkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1Bh
dHRlcm4sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
KSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybiwKKyAgICBSZWY8SW1hZ2U+LCBG
bG9hdFJlY3QsIEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBGbG9hdFNp
emUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUKKz47CiAKLXByaXZhdGU6Ci0gICAgRHJh
d1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGVOb3JtYWwpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9Ci0KLSAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6
IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBU
aGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1f
cGF0dGVyblRyYW5zZm9ybTsKLSAgICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKLSAgICBGbG9hdFJl
Y3QgbV9kZXN0aW5hdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fcGhhc2U7Ci0gICAgRmxvYXRTaXpl
IG1fc3BhY2luZzsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBt
X2JsZW5kTW9kZTsKLX07Ci0KLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNpemUgb2Yg
dGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KLWNs
YXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
RHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd1BhdHRlcm5CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KSk7Ci0gICAgfQotCi0gICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhY2l0eTsgfQotCisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdQYXR0
ZXJuQmFzZTo6Y3JlYXRlPERyYXdQYXR0ZXJuPjsKKyAgICB1c2luZyBEcmF3UGF0dGVybkJhc2U6
OkRyYXdQYXR0ZXJuQmFzZTsKIHByaXZhdGU6Ci0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyKQotICAgICAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgZmxvYXQgbV9vcGFjaXR5OworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBhcmd1bWVudDwxPigpOyB9CiB9OwogCi1jbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRUcmFuc3BhcmVu
Y3lMYXllcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVu
ZFRyYW5zcGFyZW5jeUxheWVyKTsKLSAgICB9Cit1c2luZyBEcmF3UmVjdEJhc2UgPSBEcmF3aW5n
SXRlbTxJdGVtVHlwZTo6RHJhd1JlY3QsIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpLCAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCwgRmxvYXRSZWN0
LCBmbG9hdD47CiAKK2NsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdSZWN0QmFzZSB7CitwdWJs
aWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdSZWN0QmFzZTo6Y3Jl
YXRlPERyYXdSZWN0PjsKKyAgICB1c2luZyBEcmF3UmVjdEJhc2U6OkRyYXdSZWN0QmFzZTsKIHBy
aXZhdGU6Ci0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgICAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgRHJh
d1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJh
d1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdSZWN0KHJlY3QsIGJv
cmRlclRoaWNrbmVzcykpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9Ci0gICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9ib3JkZXJUaGlja25lc3M7IH0KK3VzaW5nIERyYXdMaW5lQmFzZSA9IERyYXdpbmdJdGVt
PAorICAgIEl0ZW1UeXBlOjpEcmF3TGluZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6Oiop
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmUsCisgICAgRmxvYXRQb2ludCwgRmxvYXRQb2ludAorPjsKIAorY2xhc3Mg
RHJhd0xpbmUgOiBwdWJsaWMgRHJhd0xpbmVCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIg
c3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0xpbmVCYXNlOjpjcmVhdGU8RHJhd0xpbmU+OworICAg
IHVzaW5nIERyYXdMaW5lQmFzZTo6RHJhd0xpbmVCYXNlOwogcHJpdmF0ZToKLSAgICBEcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3Qp
Ci0gICAgICAgICwgbV9ib3JkZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQorICAgIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kczsKKyAg
ICAgICAgYm91bmRzLmZpdFRvUG9pbnRzKGFyZ3VtZW50PDA+KCksIGFyZ3VtZW50PDE+KCkpOwor
ICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBmbG9hdCBtX2JvcmRlclRo
aWNrbmVzczsKIH07CiAKLWNsYXNzIERyYXdMaW5lIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwotICAgIH0KLQotICAgIEZs
b2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDE7IH0KLSAgICBGbG9hdFBv
aW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQyOyB9Cit1c2luZyBEcmF3TGluZXNG
b3JUZXh0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZXNGb3JUZXh0LAorICAgIEZsb2F0UG9pbnQsIERhc2hBcnJheSwgYm9vbCwg
Ym9vbCwgU3Ryb2tlU3R5bGUKKz47CiAKK2NsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMg
RHJhd0xpbmVzRm9yVGV4dEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0
byBjcmVhdGUgPSBEcmF3TGluZXNGb3JUZXh0QmFzZTo6Y3JlYXRlPERyYXdMaW5lc0ZvclRleHQ+
OworICAgIHVzaW5nIERyYXdMaW5lc0ZvclRleHRCYXNlOjpEcmF3TGluZXNGb3JUZXh0QmFzZTsK
IHByaXZhdGU6Ci0gICAgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdM
aW5lKQotICAgICAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAgICAgLCBtX3BvaW50Mihwb2lu
dDIpCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAg
IC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gb3IgZW5j
bG9zaW5nIHdoYXQgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlh
c2luZ01vZGVGb3JUZXh0KCkgcmV0dXJucy4KKyAgICAgICAgaWYgKCFhcmd1bWVudDwxPigpLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICAgICAgRmxvYXRSZWN0
IGJvdW5kcyhhcmd1bWVudDwwPigpLCBGbG9hdFNpemUoYXJndW1lbnQ8MT4oKS5sYXN0KCksIGNv
bnRleHQuc3Ryb2tlVGhpY2tuZXNzKCkpKTsKKyAgICAgICAgYm91bmRzLmluZmxhdGUoMSk7IC8v
IEFjY291bnQgZm9yIHBpeGVsIHNuYXBwaW5nLiBGSVhNRTogVGhpcyBpc24ndCBwZXJmZWN0LCBh
cyBpdCBkb2Vzbid0IHRha2UgdGhlIENUTSBpbnRvIGFjY291bnQuCisgICAgICAgIHJldHVybiBi
b3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFBvaW50IG1fcG9p
bnQxOwotICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCi1jbGFzcyBEcmF3TGluZXNGb3JU
ZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdM
aW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lkdGgpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24s
IGxvY2FsQW5jaG9yLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlV2lkdGgp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYg
YmxvY2tMb2NhdGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9Ci0gICAg
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tM
b2NhdGlvbjsgfQotICAgIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJl
dHVybiBtX2xvY2FsQW5jaG9yOyB9Ci0gICAgRmxvYXRQb2ludCBwb2ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tMb2NhdGlvbiArIG1fbG9jYWxBbmNob3I7IH0KLSAgICBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocygpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzOyB9Ci0gICAgYm9vbCBpc1ByaW50
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQotICAgIGJvb2wgZG91YmxlTGluZXMo
KSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9Cit1c2luZyBEcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3TGluZUZvckRv
Y3VtZW50TWFya2VyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSksCisgICAgJkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciwKKyAgICBGbG9hdFBvaW50LCBmbG9hdCwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUKKz47CiAKK2NsYXNzIERyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIgOiBwdWJsaWMgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlckJhc2UgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyQmFzZTo6Y3JlYXRlPERyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXI+OworICAgIHVzaW5nIERy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXJCYXNlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyQmFz
ZTsKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9j
a0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlV2lk
dGgpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0g
ICAgICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCi0gICAgICAgICwgbV9sb2Nh
bEFuY2hvcihsb2NhbEFuY2hvcikKLSAgICAgICAgLCBtX3dpZHRocyh3aWR0aHMpCi0gICAgICAg
ICwgbV9zdHJva2VXaWR0aChzdHJva2VXaWR0aCkKLSAgICAgICAgLCBtX3ByaW50aW5nKHByaW50
aW5nKQotICAgICAgICAsIG1fZG91YmxlTGluZXMoZG91YmxlTGluZXMpCisgICAgY29uc3Qgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlCiAgICAgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRv
IHJldHVybiBhIHZhbHVlIGVxdWFsIHRvIG9yIGVuY2xvc2luZyB3aGF0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcigpIHJldHVybnMuCisgICAgICAgIEZsb2F0UmVj
dCBib3VuZHMoYXJndW1lbnQ8MD4oKSwgRmxvYXRTaXplKGFyZ3VtZW50PDE+KCksIGNNaXNzcGVs
bGluZ0xpbmVUaGlja25lc3MpKTsKKyAgICAgICAgYm91bmRzLmluZmxhdGUoY01pc3NwZWxsaW5n
TGluZVRoaWNrbmVzcyk7IC8vIEFjY291bnQgZm9yICJtaXNzcGVsbGluZyBkb3QiIHNuYXBwaW5n
LgorICAgICAgICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKLSAgICBGbG9hdFNpemUgbV9sb2NhbEFu
Y2hvcjsKLSAgICBEYXNoQXJyYXkgbV93aWR0aHM7Ci0gICAgZmxvYXQgbV9zdHJva2VXaWR0aDsK
LSAgICBib29sIG1fcHJpbnRpbmc7Ci0gICAgYm9vbCBtX2RvdWJsZUxpbmVzOwogfTsKIAotY2xh
c3MgRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZUZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBzdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lRm9y
RG9jdW1lbnRNYXJrZXIocG9pbnQsIHdpZHRoLCBzdHlsZSkpOwotICAgIH0KLQotICAgIEZsb2F0
UG9pbnQgcG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BvaW50OyB9Ci0gICAgZmxvYXQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Cit1c2luZyBEcmF3RWxsaXBzZUJhc2UgPSBEcmF3
aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0VsbGlwc2UsCisgICAgdm9pZCAoR3JhcGhpY3ND
b250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3
RWxsaXBzZSwKKyAgICBGbG9hdFJlY3QKKz47CiAKK2NsYXNzIERyYXdFbGxpcHNlIDogcHVibGlj
IERyYXdFbGxpcHNlQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNy
ZWF0ZSA9IERyYXdFbGxpcHNlQmFzZTo6Y3JlYXRlPERyYXdFbGxpcHNlPjsKKyAgICB1c2luZyBE
cmF3RWxsaXBzZUJhc2U6OkRyYXdFbGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKQotICAgICAgICAsIG1fcG9pbnQocG9pbnQp
Ci0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmxvYXRQb2ludCBtX3BvaW50
OwotICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHls
ZTsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsg
fQogfTsKIAotY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworI2lmIFVT
RShDRykKK3VzaW5nIERyYXdQYXRoQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpE
cmF3UGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAg
ICAmR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCwKKyAgICBjb25zdCBQYXRoCis+OworCitjbGFz
cyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3UGF0aEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7Ci0gICAgfQotCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQorICAgIGNvbnN0
ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3UGF0aEJhc2U6OmNyZWF0ZTxEcmF3UGF0aD47
CisgICAgdXNpbmcgRHJhd1BhdGhCYXNlOjpEcmF3UGF0aEJhc2U7CiBwcml2YXRlOgotICAgIERy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0VsbGlwc2UpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAg
IH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0
IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8
MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIH07CisjZW5kaWYKIAotY2xhc3MgRHJhd1BhdGgg
OiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdGg+
IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd1BhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIERyYXdGb2N1c1JpbmdQYXRoQmFzZSA9IERy
YXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCwKKyAgICB2b2lkIChH
cmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZywKKyAgICBjb25zdCBQYXRo
LCBmbG9hdCwgZmxvYXQsIENvbG9yCis+OwogCitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1
YmxpYyBEcmF3Rm9jdXNSaW5nUGF0aEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0
aWMgYXV0byBjcmVhdGUgPSBEcmF3Rm9jdXNSaW5nUGF0aEJhc2U6OmNyZWF0ZTxEcmF3Rm9jdXNS
aW5nUGF0aD47CisgICAgdXNpbmcgRHJhd0ZvY3VzUmluZ1BhdGhCYXNlOjpEcmF3Rm9jdXNSaW5n
UGF0aEJhc2U7CiBwcml2YXRlOgotICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAg
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQotICAgICAgICAsIG1fcGF0aChw
YXRoKQorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZQogICAgIHsKKyAgICAgICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IGFyZ3VtZW50PDA+KCkuZmFzdEJvdW5kaW5nUmVjdCgpOworICAgICAgICBi
b3VuZHMuaW5mbGF0ZShzX3BsYXRmb3JtRm9jdXNSaW5nV2lkdGgpOworICAgICAgICByZXR1cm4g
Ym91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RC
b3VuZGluZ1JlY3QoKTsgfQotCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7CiB9OwogCi1jbGFzcyBE
cmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZz
ZXQsIGNvbG9yKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQotICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQotICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgY29u
c3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQordXNpbmcgRHJhd0Zv
Y3VzUmluZ1JlY3RzQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHMsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nLAorICAgIFZlY3RvcjxGbG9hdFJlY3Q+LCBmbG9hdCwgZmxvYXQs
IENvbG9yCis+OwogCitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgOiBwdWJsaWMgRHJhd0ZvY3Vz
UmluZ1JlY3RzQmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0
ZSA9IERyYXdGb2N1c1JpbmdSZWN0c0Jhc2U6OmNyZWF0ZTxEcmF3Rm9jdXNSaW5nUmVjdHM+Owor
ICAgIHVzaW5nIERyYXdGb2N1c1JpbmdSZWN0c0Jhc2U6OkRyYXdGb2N1c1JpbmdSZWN0c0Jhc2U7
CiBwcml2YXRlOgotICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBh
dGgpCi0gICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
Ci0gICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHM7CisgICAgICAgIGZvciAoYXV0byYgcmVj
dCA6IGFyZ3VtZW50PDA+KCkpCisgICAgICAgICAgICBib3VuZHMudW5pdGUocmVjdCk7CisgICAg
ICAgIGJvdW5kcy5pbmZsYXRlKHNfcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCk7CisgICAgICAgIHJl
dHVybiBib3VuZHM7CiAgICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IFBh
dGggbV9wYXRoOwotICAgIGZsb2F0IG1fd2lkdGg7Ci0gICAgZmxvYXQgbV9vZmZzZXQ7Ci0gICAg
Q29sb3IgbV9jb2xvcjsKIH07CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7Cit1c2luZyBEcmF3SWNvbkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVt
VHlwZTo6RHJhd0ljb24sCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShJY29uJiwgY29u
c3QgRmxvYXRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ljb24sCisgICAgUmVm
PEljb24+LCBGbG9hdFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3SWNvbiA6IHB1YmxpYyBEcmF3
SWNvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBj
cmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7
Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3RzOyB9Ci0gICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRo
OyB9Ci0gICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICBj
b25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0KKyAgICBjb25z
dGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJhd0ljb25CYXNlOjpjcmVhdGU8RHJhd0ljb24+
OworICAgIHVzaW5nIERyYXdJY29uQmFzZTo6RHJhd0ljb25CYXNlOwogcHJpdmF0ZToKLSAgICBE
cmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAgICAgLCBtX3JlY3RzKHJl
Y3RzKQotICAgICAgICAsIG1fd2lkdGgod2lkdGgpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0
KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwotICAgIGZsb2F0IG1fd2lk
dGg7Ci0gICAgZmxvYXQgbV9vZmZzZXQ7Ci0gICAgQ29sb3IgbV9jb2xvcjsKKyAgICBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MT4oKTsgfQogfTsKIAotY2xhc3Mg
RmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewordXNpbmcgRHJhd1dpZGdldEJhc2UgPSBE
cmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd1dpZGdldCwKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpkcmF3V2lkZ2V0LAorICAgIFJlZjxXaWRnZXQ+LCBJbnRSZWN0Cis+OworICAgIAorY2xh
c3MgRHJhd1dpZGdldCA6IHB1YmxpYyBEcmF3V2lkZ2V0QmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKLSAgICB9Ci0KLSAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCisgICAgY29uc3Rl
eHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IERyYXdXaWRnZXRCYXNlOjpjcmVhdGU8RHJhd1dpZGdl
dD47CisgICAgdXNpbmcgRHJhd1dpZGdldEJhc2U6OkRyYXdXaWRnZXRCYXNlOwogcHJpdmF0ZToK
LSAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkZpbGxSZWN0KQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0UmVj
dCBtX3JlY3Q7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVj
dChhcmd1bWVudDwxPigpKTsgfQogfTsKLQotLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBm
cm9tIEZpbGxSZWN0IHByb3Blci4KLWNsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIERy
YXdpbmdJdGVtIHsKKyAgICAKK3VzaW5nIERyYXdTY3JvbGxiYXJCYXNlID0gRHJhd2luZ0l0ZW08
CisgICAgSXRlbVR5cGU6OkRyYXdTY3JvbGxiYXIsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0
OjoqKShTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6
ZHJhd1Njcm9sbGJhciwKKyAgICBSZWY8U2Nyb2xsYmFyPiwgSW50UmVjdAorPjsKKyAgICAKK2Ns
YXNzIERyYXdTY3JvbGxiYXIgOiBwdWJsaWMgRHJhd1Njcm9sbGJhckJhc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7Ci0gICAgfQotCi0gICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYg
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0KKyAgICBjb25zdGV4cHIgc3RhdGlj
IGF1dG8gY3JlYXRlID0gRHJhd1Njcm9sbGJhckJhc2U6OmNyZWF0ZTxEcmF3U2Nyb2xsYmFyPjsK
KyAgICB1c2luZyBEcmF3U2Nyb2xsYmFyQmFzZTo6RHJhd1Njcm9sbGJhckJhc2U7CiBwcml2YXRl
OgotICAgIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcikKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAg
IEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KGFyZ3VtZW50PDE+KCkpOyB9CiB9OwotCi1j
bGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CisgICAgCit1
c2luZyBEcmF3VGhlbWVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OkRyYXdUaGVt
ZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKFRoZW1lJiwgQ29udHJvbFBhcnQsIENv
bnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9h
dCwgYm9vbCwgYm9vbCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RoZW1lLAorICAgIFRo
ZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QsIGZsb2F0LCB2b2lk
KiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sCis+OworICAgIAorY2xhc3MgRHJhd1RoZW1lIDog
cHVibGljIERyYXdUaGVtZUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aEdy
YWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVh
dGUgPSBEcmF3VGhlbWVCYXNlOjpjcmVhdGU8RHJhd1RoZW1lPjsKKyAgICB1c2luZyBEcmF3VGhl
bWVCYXNlOjpEcmF3VGhlbWVCYXNlOwogcHJpdmF0ZToKLSAgICBGaWxsUmVjdFdpdGhHcmFkaWVu
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAgICAgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgICAgICwgbV9y
ZWN0KHJlY3QpCi0gICAgICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9y
ZWN0OwotICAgIG11dGFibGUgUmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFr
ZSB0aGlzIG5vdCBtdXRhYmxlCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGFyZ3VtZW50PDM+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsQ29tcG9zaXRlZFJl
Y3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBi
bGVuZE1vZGUpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3I7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3A7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9ibGVuZE1vZGU7IH0KK3VzaW5nIEZpbGxSZWN0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0
ZW1UeXBlOjpGaWxsUmVjdCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZs
b2F0UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAorICAgIEZsb2F0UmVj
dAorPjsKIAorY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRmlsbFJlY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbFJlY3RCYXNlOjpjcmVhdGU8
RmlsbFJlY3Q+OworICAgIHVzaW5nIEZpbGxSZWN0QmFzZTo6RmlsbFJlY3RCYXNlOwogcHJpdmF0
ZToKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QpCi0gICAg
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBt
X29wKG9wKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBz
dGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9y
ZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKLSAg
ICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAKLWNsYXNzIEZpbGxSb3VuZGVkUmVjdCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUm91bmRlZFJl
Y3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOwotICAgIH0KLQot
ICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9k
ZTsgfQordXNpbmcgRmlsbFJlY3RXaXRoQ29sb3JCYXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6Kiko
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCwKKyAgICBGbG9hdFJlY3QsIENvbG9yCis+OwogCitjbGFzcyBGaWxsUmVjdFdpdGhD
b2xvciA6IHB1YmxpYyBGaWxsUmVjdFdpdGhDb2xvckJhc2UgeworcHVibGljOgorICAgIGNvbnN0
ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUmVjdFdpdGhDb2xvckJhc2U6OmNyZWF0ZTxG
aWxsUmVjdFdpdGhDb2xvcj47CisgICAgdXNpbmcgRmlsbFJlY3RXaXRoQ29sb3JCYXNlOjpGaWxs
UmVjdFdpdGhDb2xvckJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkK
LSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAg
ICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQotCi0gICAgRmxvYXRSb3VuZGVkUmVjdCBtX3Jl
Y3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CisgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGFyZ3VtZW50PDA+KCk7IH0KIH07CiAK
LWNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
KTsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KLSAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KK3VzaW5nIEZpbGxSZWN0V2l0aEdyYWRpZW50
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCwK
KyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50
JiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QsCisgICAgRmxvYXRSZWN0LCBSZWY8
R3JhZGllbnQ+Cis+OwogCitjbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBGaWxs
UmVjdFdpdGhHcmFkaWVudEJhc2UgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0
byBjcmVhdGUgPSBGaWxsUmVjdFdpdGhHcmFkaWVudEJhc2U6OmNyZWF0ZTxGaWxsUmVjdFdpdGhH
cmFkaWVudD47CisgICAgdXNpbmcgRmlsbFJlY3RXaXRoR3JhZGllbnRCYXNlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAg
ICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7
IH0KLQotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JvdW5k
ZWRIb2xlUmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsUGF0aCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3Jl
YXRlKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGaWxsUGF0aChwYXRoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQordXNpbmcgRmlsbENvbXBvc2l0ZWRSZWN0QmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCisgICAgdm9pZCAoR3Jh
cGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0LAor
ICAgIEZsb2F0UmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUKKz47CiAK
K2NsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBGaWxsQ29tcG9zaXRlZFJlY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRmlsbENvbXBv
c2l0ZWRSZWN0QmFzZTo6Y3JlYXRlPEZpbGxDb21wb3NpdGVkUmVjdD47CisgICAgdXNpbmcgRmls
bENvbXBvc2l0ZWRSZWN0QmFzZTo6RmlsbENvbXBvc2l0ZWRSZWN0QmFzZTsKIHByaXZhdGU6Ci0g
ICAgRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbFBhdGgpCi0gICAgICAgICwgbV9wYXRoKHBhdGgpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KLQot
ICAgIGNvbnN0IFBhdGggbV9wYXRoOworICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBhcmd1bWVudDwwPigpOyB9CiB9OwogCi1jbGFzcyBGaWxsRWxsaXBzZSA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsRWxsaXBzZT4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxFbGxpcHNlKHJlY3QpKTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQordXNpbmcgRmlsbFJvdW5kZWRSZWN0QmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCisgICAgdm9pZCAoR3JhcGhp
Y3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCwKKyAgICBGbG9h
dFJvdW5kZWRSZWN0LCBDb2xvciwgQmxlbmRNb2RlCis+OwogCitjbGFzcyBGaWxsUm91bmRlZFJl
Y3QgOiBwdWJsaWMgRmlsbFJvdW5kZWRSZWN0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHBy
IHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxSb3VuZGVkUmVjdEJhc2U6OmNyZWF0ZTxGaWxsUm91
bmRlZFJlY3Q+OworICAgIHVzaW5nIEZpbGxSb3VuZGVkUmVjdEJhc2U6OkZpbGxSb3VuZGVkUmVj
dEJhc2U7CiBwcml2YXRlOgotICAgIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVsbGlwc2UpCi0gICAgICAgICwg
bV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwwPigpLnJlY3QoKTsgfQogfTsKIAotY2xhc3MgU3Ry
b2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxT
dHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxp
bmVXaWR0aCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9Ci0gICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lk
dGg7IH0KK3VzaW5nIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlQmFzZSA9IERyYXdpbmdJdGVtPAor
ICAgIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKKyAgICB2b2lkIChHcmFwaGlj
c0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlLAorICAgIEZsb2F0UmVjdCwgRmxvYXRSb3VuZGVkUmVjdCwgQ29sb3IKKz47CiAKK2NsYXNz
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlQmFzZTo6Y3JlYXRlPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPjsK
KyAgICB1c2luZyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZUJhc2U6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ry
b2tlUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2xpbmVXaWR0aChs
aW5lV2lkdGgpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmxvYXRS
ZWN0IG1fcmVjdDsKLSAgICBmbG9hdCBtX2xpbmVXaWR0aDsKKyAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgU3Ryb2tlUGF0
aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VQ
YXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwotICAgIH0KLQotICAgIGNvbnN0IFBhdGgmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KK3VzaW5nIEZpbGxQYXRoQmFzZSA9IERyYXdp
bmdJdGVtPAorICAgIEl0ZW1UeXBlOjpGaWxsUGF0aCwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRl
eHQ6OiopKGNvbnN0IFBhdGgmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCwKKyAg
ICBjb25zdCBQYXRoCis+OwogCitjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBGaWxsUGF0aEJhc2Ug
eworcHVibGljOgorICAgIGNvbnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBGaWxsUGF0aEJh
c2U6OmNyZWF0ZTxGaWxsUGF0aD47CisgICAgdXNpbmcgRmlsbFBhdGhCYXNlOjpGaWxsUGF0aEJh
c2U7CiBwcml2YXRlOgotICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0
aCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBjb25zdCBQYXRoIG1f
cGF0aDsKLSAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0K
IH07CiAKLWNsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUVsbGlwc2Uo
cmVjdCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9Cit1c2luZyBGaWxsRWxsaXBzZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2UsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9h
dFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZSwKKyAgICBGbG9hdFJl
Y3QKKz47CiAKK2NsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIEZpbGxFbGxpcHNlQmFzZSB7Citw
dWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRvIGNyZWF0ZSA9IEZpbGxFbGxpcHNlQmFz
ZTo6Y3JlYXRlPEZpbGxFbGxpcHNlPjsKKyAgICB1c2luZyBGaWxsRWxsaXBzZUJhc2U6OkZpbGxF
bGxpcHNlQmFzZTsKIHByaXZhdGU6Ci0gICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2UpCi0g
ICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotY2xhc3MgQ2xlYXJSZWN0IDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyUmVjdD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IENsZWFyUmVjdChyZWN0KSk7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KK3VzaW5nIFN0cm9rZVJlY3RCYXNlID0gRHJhd2luZ0l0ZW08Cisg
ICAgSXRlbVR5cGU6OlN0cm9rZVJlY3QsCisgICAgdm9pZCAoR3JhcGhpY3NDb250ZXh0OjoqKShj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dCwKKyAgICBGbG9hdFJlY3QsIGZsb2F0Cis+OwogCitjbGFzcyBTdHJva2VSZWN0IDogcHVibGlj
IFN0cm9rZVJlY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3Jl
YXRlID0gU3Ryb2tlUmVjdEJhc2U6OmNyZWF0ZTxTdHJva2VSZWN0PjsKKyAgICB1c2luZyBTdHJv
a2VSZWN0QmFzZTo6U3Ryb2tlUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIENsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkNsZWFy
UmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CisgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBhcmd1bWVudDwwPigpOworICAg
ICAgICBib3VuZHMuZXhwYW5kKGFyZ3VtZW50PDE+KCksIGFyZ3VtZW50PDE+KCkpOworICAgICAg
ICByZXR1cm4gYm91bmRzOwogICAgIH0KLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVj
dDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLSNpZiBVU0UoQ0cpCi1jbGFzcyBB
cHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KK3VzaW5nIFN0cm9rZVBhdGhC
YXNlID0gRHJhd2luZ0l0ZW08CisgICAgSXRlbVR5cGU6OlN0cm9rZVBhdGgsCisgICAgdm9pZCAo
R3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBQYXRoJiksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCwKKyAgICBjb25zdCBQYXRoCis+OwogCitjbGFzcyBTdHJva2VQYXRoIDogcHVi
bGljIFN0cm9rZVBhdGhCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
Y3JlYXRlID0gU3Ryb2tlUGF0aEJhc2U6OmNyZWF0ZTxTdHJva2VQYXRoPjsKKyAgICB1c2luZyBT
dHJva2VQYXRoQmFzZTo6U3Ryb2tlUGF0aEJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5U3Ryb2tl
UGF0dGVybigpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuKQor
ICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgIH0KKyAgICAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBj
b3JyZWN0bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0aCgpLgorICAgICAgICBmbG9hdCBzdHJv
a2VUaGlja25lc3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgRmxvYXRSZWN0IGJv
dW5kcyA9IGFyZ3VtZW50PDA+KCkuYm91bmRpbmdSZWN0KCk7CisgICAgICAgIGJvdW5kcy5leHBh
bmQoc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MpOworICAgICAgICByZXR1cm4gYm91
bmRzOworICAgIH0KIH07CiAKLWNsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseUZpbGxQYXR0ZXJuPiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlGaWxsUGF0dGVybik7Ci0gICAg
fQordXNpbmcgU3Ryb2tlRWxsaXBzZUJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6
U3Ryb2tlRWxsaXBzZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKGNvbnN0IEZsb2F0
UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UsCisgICAgRmxvYXRS
ZWN0Cis+OwogCitjbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIFN0cm9rZUVsbGlwc2VCYXNl
IHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gU3Ryb2tlRWxs
aXBzZUJhc2U6OmNyZWF0ZTxTdHJva2VFbGxpcHNlPjsKKyAgICB1c2luZyBTdHJva2VFbGxpcHNl
QmFzZTo6U3Ryb2tlRWxsaXBzZUJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5RmlsbFBhdHRlcm4o
KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CisgICAgICAgIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisgICAgICAgIEZsb2F0UmVjdCBi
b3VuZHMgPSBhcmd1bWVudDwwPigpOworICAgICAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNr
bmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsKICAgICB9Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogfTsKLSNl
bmRpZgotCi1jbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0
IHNjYWxlRmFjdG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwotICAgIH0KIAotICAgIGZsb2F0IHNjYWxl
RmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQordXNpbmcgQ2xlYXJSZWN0
QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpDbGVhclJlY3QsCisgICAgdm9pZCAo
R3JhcGhpY3NDb250ZXh0OjoqKShjb25zdCBGbG9hdFJlY3QmKSwKKyAgICAmR3JhcGhpY3NDb250
ZXh0OjpjbGVhclJlY3QsCisgICAgRmxvYXRSZWN0Cis+OwogCitjbGFzcyBDbGVhclJlY3QgOiBw
dWJsaWMgQ2xlYXJSZWN0QmFzZSB7CitwdWJsaWM6CisgICAgY29uc3RleHByIHN0YXRpYyBhdXRv
IGNyZWF0ZSA9IENsZWFyUmVjdEJhc2U6OmNyZWF0ZTxDbGVhclJlY3Q+OworICAgIHVzaW5nIENs
ZWFyUmVjdEJhc2U6OkNsZWFyUmVjdEJhc2U7CiBwcml2YXRlOgotICAgIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9y
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8MD4oKTsgfQogfTsKIAotV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsKK2lubGluZSBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRl
bSYgaXRlbSkKK3sKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICBp
dGVtLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworaW5saW5lIFdURjo6Q1N0cmluZyBJ
dGVtOjpkdW1wKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRzIDw8ICp0aGlz
OworICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUgU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHBy
ZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVkaWNh
dGU7IH0gXAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0dFT01F
VFJZSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorICAgIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVUeXBlTmFtZSkgXAor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYg
aXRlbSkgeyByZXR1cm4gaXRlbS5wcmVkaWNhdGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVN
KERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0dFT01FVFJZSVRFTShHZW9tZXRyeUl0ZW0sIGlzR2VvbWV0cnlJdGVtKCkpCiAK
ICNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRvVmFsdWVU
eXBlTmFtZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCiAgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVy
biBpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVU
eXBlTmFtZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKFJlc3RvcmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oVHJhbnNsYXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
Y2FsZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0
ZUNUTSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNoKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRHJhd0dseXBocykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShEcmF3SW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d1RpbGVkSW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d1RpbGVkU2NhbGVkSW1hZ2UpCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdlKQotI2VuZGlmCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3Qp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxQ
YXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxFbGxpcHNl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZVJlY3QpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShCZWdpblRyYW5zcGFyZW5jeUxheWVyKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxheWVy
KQotI2lmIFVTRShDRykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShB
cHBseVN0cm9rZVBhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQXBwbHlGaWxsUGF0dGVybikKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFkb3cpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBlYTI3MzI2YjU2MWYxOWRlMjI0NzNlM2JhYzgzZjQ0
ZmFhMDkyZmZkLi5mODU5YzY5YTBmNGUwZDFlZTI5ZWI3ZTU5NGYyYmY3YzMzMzdmZWQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDIxICs1MiwyMiBAQCBS
ZWNvcmRlcjo6flJlY29yZGVyKCkKIAogdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29u
c3QgSXRlbSYgaXRlbSkKIHsKLSAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkKICNpZiBVU0Uo
Q0cpCi0gICAgICAgIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRl
cm4gfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgorICAgIGlm
ICghaXM8R2VvbWV0cnlJdGVtPihpdGVtKSAmJiBpdGVtLnR5cGUoKSAhPSBJdGVtVHlwZTo6QXBw
bHlTdHJva2VQYXR0ZXJuICYmIGl0ZW0udHlwZSgpICE9IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0
ZXJuKQorI2Vsc2UKKyAgICBpZiAoIWlzPEdlb21ldHJ5SXRlbT4oaXRlbSkpCiAjZW5kaWYKLSAg
ICApIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlcyA9
IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5j
aGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwotICAgICAg
ICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVB
TShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2Vz
RnJvbUxhc3RTdGF0ZSkpOwotICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoU2V0U3Rh
dGU6OmNyZWF0ZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsK
LSAgICAgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0gMDsKLSAgICAgICAgICAg
IGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsK
LSAgICAgICAgfQotICAgICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyA9IHRy
dWU7CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7CisgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBz
dGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0
YXRlKTsKKyAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKKyAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2aW5nIHN0YXRl
ICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3RhdGUsIGNo
YW5nZXNGcm9tTGFzdFN0YXRlKSk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFNldFN0
YXRlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3Rh
dGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSkpOworICAgICAgICBzdGF0ZUNoYW5nZXMubV9jaGFu
Z2VGbGFncyA9IDA7CisgICAgICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBz
dGF0ZUNoYW5nZXMubV9zdGF0ZTsKICAgICB9CisgICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZv
ckRyYXdpbmcgPSB0cnVlOwogfQogCiB2b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQpAQCAtOTksNDQgKzEwMCw0NCBAQCB2b2lkIFJlY29yZGVyOjpzZXRN
aXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiAgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0
OjpjcmVhdGUobWl0ZXJMaW1pdCkpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBo
cyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdHbHlwaHM6OmNy
ZWF0ZShmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2Vz
KGZyb20pLCBudW1HbHlwaHMsIEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUoc3RhcnRQb2ludCks
IHNtb290aGluZ01vZGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5
SXRlbT4oYXBwZW5kSXRlbShEcmF3R2x5cGhzOjpjcmVhdGUobWFrZVJlZihmb250KSwgZ2x5cGhC
dWZmZXIsIGZyb20sIG51bUdseXBocywgc3RhcnRQb2ludCwgZm9udFNtb290aGluZykpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3Jk
ZXI6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1h
Z2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CisgICAgYXV0byYgbmV3SXRl
bSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3SW1hZ2U6OmNyZWF0ZSht
YWtlUmVmKGltYWdlKSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMp
KSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRp
b24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOwor
ICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJh
d1RpbGVkSW1hZ2U6OmNyZWF0ZShtYWtlUmVmKGltYWdlKSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
dGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOwogICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3Jk
OwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1
bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShp
bWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUs
IGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxH
ZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShtYWtl
UmVmKGltYWdlKSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwg
dlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3
SXRlbSk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCi0jaWYg
VVNFKENHKSB8fCBVU0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVT
RShDQUlSTykKIHZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewot
ICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0
ZW0oRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSkpOworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd05hdGl2ZUltYWdlOjpjcmVh
dGUoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9y
aWVudGF0aW9uKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAjZW5kaWYK
IAogdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRHJhd1BhdHRlcm46OmNyZWF0ZShpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSkpKTsKKyAg
ICBhdXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdQ
YXR0ZXJuOjpjcmVhdGUobWFrZVJlZihpbWFnZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpKSk7CiAgICAgdXBkYXRl
SXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIApAQCAtMjA5LDcgKzIxMCw3IEBAIEFmZmluZVRyYW5z
Zm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KQogCiB2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
CiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpKTsKKyAgICBh
dXRvJiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7CiB9CiAKQEAgLTIyMCwxMjEgKzIyMSwxNDcgQEAgdm9pZCBSZWNvcmRlcjo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdSZWN0OjpjcmVh
dGUocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2Fz
dDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJU
aGlja25lc3MpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDIpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3
aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSkpOwor
ICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJh
d0xpbmU6OmNyZWF0ZShwb2ludDEsIHBvaW50MikpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKEZsb2F0UG9pbnQoKSwgdG9G
bG9hdFNpemUocG9pbnQpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhp
Y2tuZXNzKSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFw
cGVuZEl0ZW0oRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKHBvaW50LCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHBvaW50LCB3
aWR0aCwgc3R5bGUpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRl
bT4oYXBwZW5kSXRlbShEcmF3TGluZUZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocG9pbnQsIHdp
ZHRoLCBzdHlsZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3
RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdl
b21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKSk7CiAgICAg
dXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAorI2lmIFVTRShDRykKIHZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0
ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3UGF0aDo6Y3JlYXRlKHBh
dGgpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKIH0KKyNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBl
bmRJdGVtKERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29s
b3IpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgRHJhd2luZ0l0ZW0m
IG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShEcmF3Rm9jdXNSaW5n
UmVjdHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKSk7CisgICAgYXV0byYg
bmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3Rm9jdXNSaW5n
UmVjdHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKSk7CisgICAgdXBkYXRl
SXRlbUV4dGVudChuZXdJdGVtKTsKK30KKyAgICAKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJY29uKElj
b24mIGljb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhdXRvJiBuZXdJdGVtID0g
ZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdJY29uOjpjcmVhdGUobWFrZVJl
ZihpY29uKSwgcmVjdCkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2
b2lkIFJlY29yZGVyOjpkcmF3V2lkZ2V0KFdpZGdldCYgd2lkZ2V0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVu
ZEl0ZW0oRHJhd1dpZGdldDo6Y3JlYXRlKG1ha2VSZWYod2lkZ2V0KSwgcmVjdCkpKTsKKyAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3U2Nyb2xs
YmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGF1
dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1Njcm9s
bGJhcjo6Y3JlYXRlKG1ha2VSZWYoc2Nyb2xsYmFyKSwgcmVjdCkpKTsKKyAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3VGhlbWUoVGhlbWUmIHRo
ZW1lLCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0
UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0
ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGF1dG8mIG5ld0l0
ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RoZW1lOjpjcmVhdGUo
dGhlbWUsIHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywg
ZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwg
dXNlRGFya0FwcGVhcmFuY2UpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0o
RmlsbFJlY3Q6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxH
ZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3Q6OmNyZWF0ZShyZWN0KSkpOwogICAgIHVw
ZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdpbmdJ
dGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJlY3RX
aXRoQ29sb3I6OmNyZWF0ZShyZWN0LCBjb2xvcikpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93
bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUo
cmVjdCwgY29sb3IpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3Jh
ZGllbnQpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRl
bT4oYXBwZW5kSXRlbShGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpKTsKICAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0g
PSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsQ29tcG9zaXRlZFJlY3Q6OmNy
ZWF0ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0g
ZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKEZpbGxDb21wb3NpdGVkUmVjdDo6Y3Jl
YXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQo
bmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4o
YXBwZW5kSXRlbShGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2Rl
KSkpOworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0
ZW0oRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpKTsKICAg
ICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIERyYXdp
bmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSkp
OworICAgIGF1dG8mIG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0o
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNv
bG9yKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0
ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRlbShGaWxsUGF0aDo6Y3JlYXRlKHBh
dGgpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5k
SXRlbShGaWxsUGF0aDo6Y3JlYXRlKHBhdGgpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJ
dGVtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGFwcGVuZEl0ZW0oRmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0KSkpOworICAgIGF1dG8mIG5ld0l0
ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRmlsbEVsbGlwc2U6OmNyZWF0
ZShyZWN0KSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiB7Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShTdHJva2VSZWN0OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSkpOworICAgIGF1dG8m
IG5ld0l0ZW0gPSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlUmVjdDo6
Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0p
OwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5kSXRl
bShTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpKTsKKyAgICBhdXRvJiBuZXdJdGVtID0gZG93bmNh
c3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSkpOwog
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJ
dGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oU3Ryb2tlRWxsaXBzZTo6Y3Jl
YXRlKHJlY3QpKSk7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4o
YXBwZW5kSXRlbShTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpKTsKICAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJh
d2luZ0l0ZW0+KGFwcGVuZEl0ZW0oQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpKTsKKyAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKENsZWFyUmVjdDo6
Y3JlYXRlKHJlY3QpKSk7CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIApAQCAt
NDAyLDcgKzQyOSw3IEBAIEl0ZW0mIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0
ZW0pCiAgICAgcmV0dXJuIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwogfQog
Ci12b2lkIFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJiBpdGVtKSBjb25z
dAordm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChHZW9tZXRyeUl0ZW0mIGl0ZW0pIGNv
bnN0CiB7CiAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5sb2Nh
bEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCiAgICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4dGVu
dEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCmluZGV4IGM1YWM3MDkxMzk1ZmE0ZmU4M2EzMWQyYzg4ZGIxZTg4YTdhZGEz
ZTQuLmQ1YWU3NDYyZTIxYzZhYzgyYTllZTAxZTA4MWFiMjY3OTk3Nzc2NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNDUsOCArNDUsNiBAQCBzdHJ1Y3QgSW1h
Z2VQYWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERy
YXdpbmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBs
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6CkBAIC05Nywx
MyArOTUsMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
LCBTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisjaWYgVVNFKENHKQogICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJy
aWRlOworI2VuZGlmCiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdJY29u
KEljb24mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdXaWRnZXQo
V2lkZ2V0JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1Njcm9sbGJh
cihTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3VGhl
bWUoVGhlbWUmLCBDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYg
em9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBl
YXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2F2
ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwpAQCAtMTMzLDcgKzEz
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAK
ICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OworICAg
IHZvaWQgdXBkYXRlSXRlbUV4dGVudChHZW9tZXRyeUl0ZW0mKSBjb25zdDsKICAgICAKICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcEJvdW5kcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
Y3BwCmluZGV4IDhmZWFhMmY1ZDc1MzI4ZTQzNmJmOWQ4OGI4ZGMwNWJhYzFjMmUxZjMuLjBjZmZl
NmY5YzY4NTIxYzBiOTA4MTlmMGJlZGVkMWQ1ZTY3OTViZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTU1LDkgKzU1LDkgQEAgc3RkOjp1bmlxdWVfcHRy
PERpc3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGJvb2wKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKICAg
ICAgICAgYXV0byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdldCgpOwogCi0gICAg
ICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXM8RHJhd2luZ0l0ZW0+KGl0ZW0pKSB7
Ci0gICAgICAgICAgICBjb25zdCBEcmF3aW5nSXRlbSYgZHJhd2luZ0l0ZW0gPSBkb3duY2FzdDxE
cmF3aW5nSXRlbT4oaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZHJhd2luZ0l0ZW0uZXh0ZW50S25v
d24oKSAmJiAhZHJhd2luZ0l0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsK
KyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxHZW9tZXRyeUl0ZW0+KGl0
ZW0pKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBnZW9tZXRyeUl0ZW0gPSBkb3duY2FzdDxH
ZW9tZXRyeUl0ZW0+KGl0ZW0pOworICAgICAgICAgICAgaWYgKGdlb21ldHJ5SXRlbS5leHRlbnRL
bm93bigpICYmICFnZW9tZXRyeUl0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkp
IHsKICAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgInNraXBwaW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSWNvbkd0ay5jcHAKaW5kZXggYWYxODVhNTRjZGQ0OWQyMDQ2ODY1ZTY5M2M1YTcz
Yzk0YzU4YjA0Yi4uZjBhZTVjZmNhMTlhYmJmY2I5NDAwZDgxMzViMzRjOGYzMTdjMzAzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcApA
QCAtMTEzLDExICsxMTMsOCBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBUT0RPOiBTY2FsZS9jbGlw
IHRoZSBpbWFnZSBpZiBuZWNlc3NhcnkuCiAgICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpOwogICAgIGNhaXJvX3NhdmUoY3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQppbmRleCBjZWU1MTZlMTQ0MGU3
OGViNTQzNzM5YWIyYTAzOGQ4NzM2MmY3ZDQ0Li5kYmQ4M2Q1N2MwZTY1ODdhZjIyMmQ3YzdhNzVk
YmY0NGFkYTA4OTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvSWNvbklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvSWNvbklPUy5tbQpAQCAtNTUsMTEgKzU1LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0
ZUljb25Gb3JJbWFnZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSWNvbihpbWFnZSkpOwogfQogCi12b2lkIEljb246OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQg
SWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKICAgICBmbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aCht
X2NnSW1hZ2UuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ljb25NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSWNvbk1hYy5tbQppbmRleCA2MTQzYjUxZDQzNjQ1ZDVhZDQ4YzM5NWFmN2M0ZWEyNjQzM2Q3
YzRhLi5lODUwMzA4ZDBiYzg1NzI3Yjk1MGM2NmMxNjZhZjdkNTRhZDk0MmYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQpAQCAtOTEsMTMg
KzkxLDkgQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JVVEkoY29uc3QgU3RyaW5n
JiBVVEkpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGltYWdlKSk7CiB9CiAKLXZvaWQg
SWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQgbG9jYWxDdXJyZW50R0MoY29udGV4dCk7Ci0KICAgICBbbV9uc0ltYWdlIGRyYXdJblJl
Y3Q6cmVjdCBmcm9tUmVjdDpOU01ha2VSZWN0KDAsIDAsIFttX25zSW1hZ2Ugc2l6ZV0ud2lkdGgs
IFttX25zSW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJhdGlv
blNvdXJjZU92ZXIgZnJhY3Rpb246MS4wZl07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggOWE5NTRlMjJiOTRi
YmFlOWNiMTc1ZmVhZmMwNDJmZmZlYjVhZmUxZC4uMDQwNjI3NmFiYmM3NTE4YTUzN2RlZDY3ZWQz
YTZhNzA3ZDVjMzFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludAogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBv
aW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGlu
ZXMsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5
bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBEYXNoQXJyYXksIGJv
b2wsIGJvb2wsIENvbG9yLCBmbG9hdD4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JU
ZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
RGFzCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgVU5VU0VEX1BBUkFNKHN0cm9rZVRoaWNrbmVz
cyk7CisgICAgVU5VU0VEX1BBUkFNKHN0cm9rZVN0eWxlKTsKICAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xp
bmVzRm9yVGV4dD4ocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0
YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0KQEAgLTY5MSwxMCAr
NjkxLDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJl
Y3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsKLX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBzdHJ1Y3QgRHJhd0ZvY3VzUmlu
ZyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIGZsb2F0LCBD
b2xvcj4gewpAQCAtNzM1LDYgKzczMSwyNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdAogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3Ip
KTsKIH0KIAordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3SWNvbihJY29uJiwgY29u
c3QgRmxvYXRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQor
ICAgIAordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3V2lkZ2V0KFdpZGdldCYsIGNv
bnN0IEludFJlY3QmKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9Cisg
ICAgCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFy
JiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsK
K30KKyAgICAKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1RoZW1lKFRoZW1lJiwg
Q29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9p
ZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOworfQorCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNhdmUoKQogewog
ICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmgKaW5kZXggZGM0ODQ5ZTVjZjRhOGNhOTJmMzlhMjY1Y2Q5OWMxNDNhOThjZDUzMC4uNDg3
OGNhMjg4NjBiYWM4ODQyMzFkMTY0OGMxZjQ0MzAwOGNlMGM5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtNzIsMTMgKzcy
LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBE
YXNoQXJyYXkmLCBib29sLCBib29sLCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBEYXNoQXJyYXkmLCBi
b29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCwg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3SWNvbihXZWJDb3JlOjpJY29uJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3V2lkZ2V0KFdl
YkNvcmU6OldpZGdldCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1RoZW1lKFdlYkNvcmU6OlRoZW1lJiwgV2Vi
Q29yZTo6Q29udHJvbFBhcnQsIFdlYkNvcmU6OkNvbnRyb2xTdGF0ZXMmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZp
ZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wg
dXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDAyOWQwNzljYzFjMjAwMzk4YTc4
MTFlNjZmM2UzM2U3OTM5NjFiYWMuLjFhYmY0ZmFjMTNiMGFkYTIzYWRiZGYwMDRiMTFiMzhhODJj
MjJiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcApAQCAtMTcwOCw3ICsxNzA4
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IERhc2hBcnJheSYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KGlzUmVjb3JkaW5nKCkpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdFJlY29yZGVyLT5kcmF3TGlu
ZXNGb3JUZXh0KHBvaW50LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlVGhp
Y2tuZXNzKCkpOworICAgICAgICBtX2Rpc3BsYXlMaXN0UmVjb3JkZXItPmRyYXdMaW5lc0ZvclRl
eHQocG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JY29uV2luLmNwcAppbmRleCA3OTllMzQ3NDAzOTQwNjM1MTBlOTU0YjZhZjMw
OTk4ZTdkMjVlMmFkLi4xOGZlNmY3OTEyNzVlYWQ1OWMwMzQyM2JhZDhjN2Q0YTgyZDljZmJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3Bw
CkBAIC03NCwxMSArNzQsOCBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJY29uKGhJY29uKSk7CiB9CiAKLXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHIpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHIpIGNvbnN0CiB7Ci0gICAg
aWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBM
b2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd0NvbnRleHQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVj
dChyKSk7CiAgICAgRHJhd0ljb25FeCh3aW5kb3dDb250ZXh0LmhkYygpLCByLngoKSwgci55KCks
IG1faEljb24sIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgMCwgMCwgRElfTk9STUFMKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dwZS9JY29uV1BFLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dwZS9JY29uV1BFLmNwcAppbmRl
eCA3NmEyMWRhMzZmMzZlZjkxYWExNzg4OWI4ZmMxMTliMjIyZTcyNWJlLi4xZWRiN2Q5ZjVjNmQx
MzlhZThmNjc1MWMxY2NhMzI1ZDI5NGUyNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93cGUvSWNvbldQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSWNvbjo6fkljb24oKSA9IGRlZmF1bHQ7CiAKLXZvaWQgSWNvbjo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgSWNvbjo6cGxhdGZv
cm1QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCmluZGV4IDg3NDEyOTMz
OTc5M2FkMmU2YjNkYWQ5ZjcxOWZhMDYwNWI0NTIwYWQuLmYzOGEwYTRlMTVjYjE5ZGQ1YzEzOGI5
YzNhMWM1YTJlM2FlOTY2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRH
dGsuY3BwCkBAIC04MCw3ICs4MCwxMiBAQCB2b2lkIFdpZGdldDo6aGlkZSgpCiAgICAgICAgIGd0
a193aWRnZXRfaGlkZShwbGF0Zm9ybVdpZGdldCgpKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0
LmRyYXdXaWRnZXQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWlu
dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KaW5kZXggOGIxZThiNTRiNWNlMjcwZjI0OGRhZWNl
ZDUyNGY3NzJhMTU0ZTllYi4uZGNjNmE0OTA1MjA5OTRhYTQ1NzAyMTJjZTRiYzJkZGJiNzFlZjYx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCkBAIC0xNDEsMTQg
KzE0MSwxNiBAQCBOU1ZpZXcqIFdpZGdldDo6Z2V0T3V0ZXJWaWV3KCkgY29uc3QKICAgICByZXR1
cm4gdmlldzsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29u
c3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0Ojpw
YWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3kpCiB7Ci0gICAgaWYgKHAucGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30K
ICAgICAKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKICAgICBOU1ZpZXcgKnZpZXcgPSBnZXRPdXRlclZp
ZXcoKTsKIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLnBsYXRmb3JtQ29udGV4dCgp
OworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2dDb250ZXh0KTsKIAogICAgIE5TUmVjdCB2aWV3
RnJhbWUgPSBbdmlldyBmcmFtZV07CkBAIC0xNTYsNyArMTU4LDcgQEAgdm9pZCBXaWRnZXQ6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5Q
YWludFBvbGkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCB2aWV3RnJhbWUu
b3JpZ2luLnggLSB2aWV3Qm91bmRzLm9yaWdpbi54LCB2aWV3RnJhbWUub3JpZ2luLnkgLSB2aWV3
Qm91bmRzLm9yaWdpbi55KTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZy
b21WaWV3Olt2aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpjZ0NvbnRleHRdOworICAgIFt2aWV3
IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZp
ZXc6W3ZpZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0OmNnQ29udGV4dF07CiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2dDb250ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKaW5kZXggNDkwMjhmMWI0M2M3
M2MzNWNjMzEzNzBhN2RmNGU5ODQxNGZkYzYyNi4uZTlmMzAzZDNkMWJmYWRmMTdiNjdkOGQzNmU1
ZThiMjE1NzRkNmYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgKQEAg
LTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hp
dGVTcGFjZShDb250cm9sUGFydCBwYXJ0KSBjb25zdCBmaW5hbCB7IHJldHVybiBwYXJ0ID09IFB1
c2hCdXR0b25QYXJ0OyB9CiAKLSAgICB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3Rh
dGVzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkg
ZmluYWw7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xQ
YXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6
b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxv
YXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpIGZpbmFsOwogICAgIHZvaWQgaW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29u
dHJvbFBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmLCBGbG9hdFJlY3QmLCBmbG9hdCB6b29tRmFj
dG9yKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgdXNlclByZWZlcnNSZWR1Y2VkTW90aW9uKCkg
Y29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KaW5kZXgg
NDgzMWZmZjRmODhhY2UxNGNmZDBmZWYzZWE3YjgxYjc4NDM3N2Q3YS4uZDkyMzg1NjAxOTZkZDM2
OWU0ODc4ZmIyN2UyNjI2OWYzNDJmNWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1RoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9U
aGVtZU1hYy5tbQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRpYyBib29sIGRyYXdDZWxsRm9jdXNS
aW5nKE5TQ2VsbCAqY2VsbCwgTlNSZWN0IGNlbGxGcmFtZSwgTlNWaWV3ICpjb250cm9sVmllCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZUJ1dHRvbihDb250
cm9sUGFydCBidXR0b25UeXBlLCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9v
bUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Is
IGZsb2F0IHBhZ2VTY2FsZUZhY3RvcikKK3N0YXRpYyB2b2lkIHBhaW50VG9nZ2xlQnV0dG9uKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFBhcnQgYnV0dG9uVHlwZSwgQ29udHJvbFN0
YXRlcyYgY29udHJvbFN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6
b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
ciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwogCkBAIC01MjAsNyArNTIwLDcgQEAgc3RhdGljIE5TQnV0dG9uQ2VsbCAqYnV0dG9uKENv
bnRyb2xQYXJ0IHBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMKICAgICBy
ZXR1cm4gY2VsbDsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yKQorc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNj
cm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Ip
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgCkBAIC01OTYsNyArNTk2
LDcgQEAgc3RhdGljIE5TQ29udHJvbFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25z
dCBGb250Q2FzY2FkZSYgZm9udCkKICAgICByZXR1cm4gTlNDb250cm9sU2l6ZU1pbmk7CiB9CiAK
LXN0YXRpYyB2b2lkIHBhaW50U3RlcHBlcihDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29t
RmFjdG9yLCBTY3JvbGxWaWV3KikKK3N0YXRpYyB2b2lkIHBhaW50U3RlcHBlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6
b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikKIHsKICAgICAvLyBXZSBk
b24ndCB1c2UgTlNTdGVwcGVyQ2VsbCBiZWNhdXNlIHRoZXJlIGFyZSBubyB3YXlzIHRvIGRyYXcg
YW4KICAgICAvLyBOU1N0ZXBwZXJDZWxsIHdpdGggdGhlIHVwIGJ1dHRvbiBoaWdobGlnaHRlZC4K
QEAgLTg0OCwyNSArODQ4LDI1IEBAIHZvaWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRS
ZWN0KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmIHN0CiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi12b2lkIFRoZW1lTWFjOjpwYWludChDb250cm9sUGFy
dCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3
KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFj
dG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit2
b2lkIFRoZW1lTWFjOjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpv
b21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFy
YW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1B
cHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBw
ZWFyYW5jZSk7CiAKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBDaGVja2JveFBh
cnQ6Ci0gICAgICAgICAgICBwYWludFRvZ2dsZUJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQs
IHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBw
YWdlU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24oY29udGV4dCwg
cGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNj
cm9sbFZpZXcqPihzY3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rv
cik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAg
ICAgICBwYWludFRvZ2dsZUJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3Qs
IHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0
b3IpOworICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24oY29udGV4dCwgcGFydCwgc3RhdGVz
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXcqPihz
Y3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBE
ZWZhdWx0QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICBjYXNl
IFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAgICAgICAgICBwYWludEJ1dHRvbihwYXJ0LCBzdGF0ZXMs
IGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxl
RmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgcGFpbnRCdXR0b24oY29udGV4
dCwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0
PFNjcm9sbFZpZXcqPihzY3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZh
Y3Rvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25Q
YXJ0OgotICAgICAgICAgICAgcGFpbnRTdGVwcGVyKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVj
dCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7CisgICAgICAgICAgICBwYWludFN0ZXBwZXIoY29u
dGV4dCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNj
cm9sbFZpZXcqPihzY3JvbGxWaWV3KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dpZGdldE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRn
ZXRNYWMubW0KaW5kZXggOTk2YzE5ZDU1MGY5MTMxZmEwMjM2MGI2NTdmODhiZTlmOWU2NjZiYi4u
YjhhN2ZjOTMyMDY2YzgxOTJhYjJiYzhlZTM3MDU5NzhmOWUwODVlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCkBAIC0xODYsOSArMTg2LDkgQEAgTlNWaWV3ICpX
aWRnZXQ6OmdldE91dGVyVmlldygpIGNvbnN0CiAgICAgcmV0dXJuIHZpZXc7CiB9CiAKLXZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3kpCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
KQogewotICAgIGlmIChwLnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAoY29udGV4dC5wYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBOU1ZpZXcgKnZpZXcgPSBnZXRP
dXRlclZpZXcoKTsKIApAQCAtMjAyLDExICsyMDIsMTcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGkKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCisgICAgY29udGV4dC5k
cmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKyAgICAKK3ZvaWQgV2lkZ2V0OjpwbGF0Zm9ybVBh
aW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKICAg
ICAvLyBUYWtlIGEgcmVmZXJlbmNlIHRvIHRoaXMgV2lkZ2V0LCBiZWNhdXNlIHNlbmRpbmcgbWVz
c2FnZXMgdG8gdGhlIHZpZXdzIGNhbiBpbnZva2UgYXJiaXRyYXJ5CiAgICAgLy8gY29kZSwgd2hp
Y2ggY2FuIGRlcmVmIGl0LgogICAgIFJlZjxXaWRnZXQ+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwog
CisgICAgTlNWaWV3ICp2aWV3ID0gZ2V0T3V0ZXJWaWV3KCk7CiAgICAgTlNHcmFwaGljc0NvbnRl
eHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKQEAgLTIxNCw3ICsyMjAsNyBAQCB2
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSBvZiBkcmF3aW5nIGludG8gYSB3aW5kb3cg
b3IgYW4gaW5jbHVzaXZlIGxheWVyLCBvciBwcmludGluZy4KICAgICAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotICAgICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0
eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2aWV3IHN1cGVydmlld11dXTsKKyAgICAg
ICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6cmVj
dCBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXV07CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsNyArMjQzLDcgQEAgdm9p
ZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGkKICAgICAgICAgICAgIHNjcm9sbFZpZXcgPSAwOwogICAgIH0K
IAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwLnBsYXRmb3JtQ29udGV4dCgpOworICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgogICAgIEFTU0VSVChjZ0NvbnRleHQgPT0g
W2N1cnJlbnRDb250ZXh0IGdyYXBoaWNzUG9ydF0pOwpAQCAtMjU5LDcgKzI2NSw3IEBAIHZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdk
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICAgICAgTlNHcmFwaGljc0NvbnRleHQgKm5zQ29u
dGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0
OmNnQ29udGV4dCBmbGlwcGVkOk5PXTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAg
ICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6
ciBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6bnNDb250ZXh0XTsKKyAgICAg
ICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6cmVj
dCBmcm9tVmlldzpbdmlldyBzdXBlcnZpZXddXSBpbkNvbnRleHQ6bnNDb250ZXh0XTsKICAgICB9
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEZsYWdzLmgKaW5kZXggZjhjYjNiZDI2Njc0NjUxZTZhY2UwNjgyZGIwYWY4ZWJk
NWY4OWYzNS4uZWNmZTE3YmIyMTkzNWZkZjVkZGZjZjZhYjI2OGQxN2Y2YWYyZTlhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RmxhZ3MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRGbGFncy5oCkBAIC0yNSw2ICsyNSw4IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgVGV4dFJlbmRlcmluZ01vZGUgOiB1aW50OF90
IHsKQEAgLTQwLDYgKzQyLDEyIEBAIGVudW0gY2xhc3MgRm9udFNtb290aGluZ01vZGUgOiB1aW50
OF90IHsKICAgICBBbnRpYWxpYXNlZCwKICAgICBTdWJwaXhlbEFudGlhbGlhc2VkCiB9OworICAg
IAoraW5saW5lIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mIHRz
LCBjb25zdCBGb250U21vb3RoaW5nTW9kZSYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIEZv
bnRTbW9vdGhpbmdNb2RlIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30KIAog
Ly8gVGhpcyBzZXR0aW5nIGlzIHVzZWQgdG8gcHJvdmlkZSB3YXlzIG9mIHN3aXRjaGluZyBiZXR3
ZWVuIG11bHRpcGxlIHJlbmRlcmluZyBtb2RlcyB0aGF0IG1heSBoYXZlIGRpZmZlcmVudAogLy8g
bWV0cmljcy4gSXQgaXMgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBDRyBhbmQgR0RJIHRleHQgb24g
V2luZG93cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAKaW5kZXgg
OGJkYzAyM2E0Mzc2NmQ0NWYzYzFhOWZjYThjZTA5M2VmOTM1ZDdiOS4uYTUxZTRmMTc1OTQyZDhi
YmU4NGU3YTM3ZTE5YmFkNjgyNjkxZTNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1dpZGdldFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1dpZGdldFdpbi5jcHAKQEAgLTc1LDcgKzc1LDEyIEBAIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3Io
Y29uc3QgQ3Vyc29yJiBjdXJzb3IpCiAgICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3Io
Y3Vyc29yKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2VjdXJpdHlP
cmlnaW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0LmRyYXdXaWRnZXQoKnRoaXMsIHJlY3Qp
OworfQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3BlL1RoZW1lV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVtZVdQRS5j
cHAKaW5kZXggZTIyYTI5NDdlZTcyN2FhZjgwZGI3MDZhYjc2N2E3ZTZhMTg0NWY5Mi4uMzQwYTBh
ZGEwYjM0YWU1ZWM3Y2ZkYTAwNmNmODQ4NWRjZTk3ZTFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93cGUvVGhlbWVXUEUuY3BwCkBAIC01NywyNCArNTcsMjQgQEAgTGVuZ3RoU2l6ZSBUaGVt
ZVdQRTo6Y29udHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZv
bnRDYXNjYWQKICAgICByZXR1cm4gVGhlbWU6OmNvbnRyb2xTaXplKHBhcnQsIGZvbnRDYXNjYWRl
LCB6b29tZWRTaXplLCB6b29tRmFjdG9yKTsKIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnQoQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Ny
b2xsVmlldyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKK3ZvaWQgVGhlbWVXUEU6OnBsYXRm
b3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sUGFydCBwYXJ0LCBDb250
cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9v
bUZhY3Rvciwgdm9pZCogLCBmbG9hdCwgZmxvYXQsIGJvb2wsIGJvb2wpCiB7CiAgICAgc3dpdGNo
IChwYXJ0KSB7CiAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIHBhaW50Q2hlY2tib3go
c3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAgICAgcGFpbnRD
aGVja2JveChjb250ZXh0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgcGFpbnRSYWRpbyhzdGF0ZXMs
IGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworICAgICAgICBwYWludFJhZGlvKGNv
bnRleHQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgICAgIHBhaW50QnV0dG9uKHN0YXRlcywgY29u
dGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CisgICAgICAgIHBhaW50QnV0dG9uKGNvbnRl
eHQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFp
bnRDaGVja2JveChDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKK3ZvaWQgVGhlbWVXUEU6OnBh
aW50Q2hlY2tib3goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sU3RhdGVzJiBzdGF0
ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCiB7CiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCkBAIC0xMDMsNyArMTAzLDcg
QEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRDaGVja2JveChDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY28KICAgICB9CiB9CiAKLXZvaWQgVGhlbWVXUEU6OnBh
aW50UmFkaW8oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCit2b2lkIFRoZW1lV1BFOjpwYWlu
dFJhZGlvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBj
b25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQogewogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIApAQCAtMTI5LDcgKzEyOSw3IEBAIHZv
aWQgVGhlbWVXUEU6OnBhaW50UmFkaW8oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgfQogfQogCi12b2lkIFRoZW1lV1BFOjpwYWludEJ1
dHRvbihDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKK3ZvaWQgVGhlbWVXUEU6OnBhaW50QnV0
dG9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25z
dCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUv
VGhlbWVXUEUuaAppbmRleCBiMTc2YTgwMmYyYTk4ZjRmYTBjMDFiYWE2N2Y1OThkYzA4ZGRjNzIz
Li40MTRhZTBiMjEwYzljNmMyN2ZjZmIyZDI4NmJjNTZjYTIwNmQyM2I2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUuaApAQCAtMzMsMTEgKzMzLDExIEBAIGNsYXNzIFRoZW1l
V1BFIGZpbmFsIDogcHVibGljIFRoZW1lIHsKIHByaXZhdGU6CiAgICAgTGVuZ3RoU2l6ZSBjb250
cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhTaXpl
JiwgZmxvYXQpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBT
Y3JvbGxWaWV3KiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKSBmaW5hbDsKKyAgICB2b2lkIHBs
YXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMm
LCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9v
bCkgZmluYWw7CiAKLSAgICB2b2lkIHBhaW50Q2hlY2tib3goQ29udHJvbFN0YXRlcyYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KTsKLSAgICB2b2lkIHBhaW50UmFk
aW8oQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KTsKLSAgICB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBwYWludENoZWNrYm94KEdy
YXBoaWNzQ29udGV4dCYsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7
CisgICAgdm9pZCBwYWludFJhZGlvKEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xTdGF0ZXMmLCBj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBwYWludEJ1dHRvbihHcmFwaGljc0Nv
bnRleHQmLCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3BlL1dpZGdldFdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0
V1BFLmNwcAppbmRleCA1ZjY2MzMwYzUyMzk4N2E2NzA4NTAwMDRiMzk4OWNjYWM2NDBmYjVkLi45
NDUzMzg1ZDg3YWVhY2QxMWMwN2ExOTk0Mjc4OWMzYjM1MmI3OWFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcApAQCAtNTIsNyArNTIsMTIgQEAgSW50UmVjdCBX
aWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWU7CiB9CiAKLXZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiwgU2VjdXJpdHlP
cmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCit7
CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBXaWRnZXQ6
OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwCmluZGV4IDQ2ODQ3MmM2ODY1YmY2NzE2YjliMmY4OGJiYmFlMTU1ZGYzZTM2MGEuLjZiYjll
OTFlOTY1YTE4ZWE5YjBhMjQ1NWUzY2IzZmU0YjBmZWFiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtMzAzLDcgKzMwMyw3IEBAIGJvb2wgUmVuZGVyVGhl
bWU6OnBhaW50KGNvbnN0IFJlbmRlckJveCYgYm94LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3Rh
dGVzLCBjb25zCiAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9u
UGFydDoKICAgICAgICAgdXBkYXRlQ29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKGJveCwgY29udHJv
bFN0YXRlcyk7Ci0gICAgICAgIFRoZW1lOjpzaW5nbGV0b24oKS5wYWludChwYXJ0LCBjb250cm9s
U3RhdGVzLCBwYWludEluZm8uY29udGV4dCgpLCBkZXZpY2VQaXhlbFNuYXBwZWRSZWN0LCBib3gu
c3R5bGUoKS5lZmZlY3RpdmVab29tKCksICZib3gudmlldygpLmZyYW1lVmlldygpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCBib3gucGFnZSgpLnVzZVN5c3RlbUFwcGVhcmFu
Y2UoKSwgYm94LnBhZ2UoKS51c2VEYXJrQXBwZWFyYW5jZSgpKTsKKyAgICAgICAgVGhlbWU6OnNp
bmdsZXRvbigpLnBhaW50KHBhaW50SW5mby5jb250ZXh0KCksIHBhcnQsIGNvbnRyb2xTdGF0ZXMs
IGRldmljZVBpeGVsU25hcHBlZFJlY3QsIGJveC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJmJv
eC52aWV3KCkuZnJhbWVWaWV3KCksIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3Is
IGJveC5wYWdlKCkudXNlU3lzdGVtQXBwZWFyYW5jZSgpLCBib3gucGFnZSgpLnVzZURhcmtBcHBl
YXJhbmNlKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMWRlNzA1NGRhMTVhZWVhYmY5MDM4ZjVlMjMwOTA4NWIwODk0MGEwYS4u
ZDMyNWFmMjdhZDAxNTkxYjEyYzIyMTc4ZTVmNzcwODc5YTJiZGJkZSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDE4LTA3LTE3ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBEaXNwbGF5TGlzdEl0ZW1zIGFuZCB1c2Ugc3Rk
Ojp0dXBsZSB0byBzdG9yZSB0aGUgYXJndW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODcwMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lIGV4aXN0aW5nIGxheW91dCB0ZXN0cy4K
KworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1z
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVk
LXJlY3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy13azEvZGlzcGxheWxp
c3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRm
b3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVj
dGVkLnR4dDoKKwogMjAxOC0wNy0xNyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnNraXAgTGF5b3V0VGVzdCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtZGlzcGxheS9kaXNwbGF5LWNvbnRlbnRzLWZpcnN0LWxldHRlci0wMDIu
aHRtbC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxh
eS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCBhODgzZTY4NTJlMTg0MmRmOTY5ZmJjYWUyNTZh
Mjc4N2NmOTZiZmM5Li43YzdhODk0ZGViMWQzYzMwNjM5ODBkNmI2MDcwZTAzYjk5NzQyYWNkIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDEzICsxLDE1IEBACiAgCiAoc2V0LXN0YXRlCi0gIChj
aGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKHN0YXRlLWNoYW5n
ZSAKKyAgICAoY2hhbmdlLWZsYWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAjQzgwMDAwKSkpCiAo
ZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAo
MTAsMTApIHNpemUgNTV4NTApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAg
KGZpbGwtY29sb3IgIzAwMDBDODdGKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZs
YWdzIDI1NikKKyAgICAoZmlsbC1jb2xvciAjMDAwMEM4N0YpKSkKIChmaWxsLXJlY3QKICAgKGV4
dGVudCBhdCAoMzAsMzApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1
MCkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggZGU2OThhZTY0ZGI2MmM2YzQ5YTIyZTBi
YjllZmM2NTczNDhlYmZjOC4uOTk4N2JhZTFhYTg2ZWJlN2ZjYmE1YWE3YzY4OTJkMmRkMGIyMTkx
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtNSwxNCArNSwxNSBAQAogKHNhdmUKICAg
KHJlc3RvcmUtaW5kZXggNCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMTAyNCkKLSAg
KHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjAp
Ci0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQorICAoc3RhdGUtY2hhbmdlIAorICAg
IChjaGFuZ2UtZmxhZ3MgMTAyNCkKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRv
dy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFk
aXVzIDApKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAogICAoZXh0ZW50IGF0ICg0Myw1MCkgc2l6
ZSAxMzR4MTM3KQogICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMw
MDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRl
LW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUp
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCA4NDhiMDc3NTQ1YTdjNjgwMjcw
ZWVlMWJhMDFmYmJkMWU4YmNjM2ZjLi4wNTRlMzRhNDUyOGZmYWUzNGU5YjE0MzczNWQ3ZWI2MzUy
ZDgzMGMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTIsMTkgKzIsMjAg
QEAKICh0cmFuc2xhdGUKICAgKHggMC4wMCkKICAgKHkgMjIuMDApKQotKGNvbmNhdGVudGF0ZS1j
dG0KKyhjb25jYXRlbmF0ZS1jdG0KICAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44Nykp
IHQ9KDgxLjcwLC0xOC4zMCl9KSkKIChzYXZlCiAgIChyZXN0b3JlLWluZGV4IDUpKQogKHNldC1z
dGF0ZQotICAoY2hhbmdlLWZsYWdzIDEwMjQpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNo
YWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDEwMjQpCisgICAg
KHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0y
MCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCiAoZmlsbC1jb21wb3NpdGVk
LXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAgIChy
ZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3Np
dGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1v
dmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAppbmRl
eCBjNWY2YWM2YjI1YTk4N2ZiMDRlZWU5YTExOTEwYmVmNjFmNzMxYTMzLi40YWY3ZTEwOWU5MzFi
MGQ0ZGQwY2Q2OTI0NDk3NDI3MDg1M2IxMmY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTYsMTMgKzYs
MTQgQEAKICAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChyZWN0IGF0ICgwLDAp
IHNpemUgMTA0eDEwNCkKICAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3NpdGUtb3BlcmF0aW9u
IHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxl
bmQtbW9kZSBub3JtYWwpKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKLSAg
KGZpbGwtY29sb3IgIzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQotICAoc2hvdWxkLWFudGlh
bGlhcyAwKSkKKyAgKHN0YXRlLWNoYW5nZSAKKyAgICAoY2hhbmdlLWZsYWdzIDEzMTQ1NikKKyAg
ICAoZmlsbC1jb2xvciAjMDAwMEZGKQorICAgIChzdHJva2Utc3R5bGUgMCkKKyAgICAoc2hvdWxk
LWFudGlhbGlhcyAwKSkpCiAoZHJhdy1yZWN0CiAgIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4
MikKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50
eHQKaW5kZXggYmY3ZWYyNzVmNjE4NTVhNjI1MWI2MTc2ZGIxN2RkMDJlOTA0OGVjMy4uNWUxZmM5
NjhiNDVhYjdjMTE3MTRjZjNiNzVlMjZmNzg0MmYzZDc4OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBl
Y3RlZC50eHQKQEAgLTYsNyArNiw3IEBAIHJlY29yZGVkOgogICAoZXh0ZW50IGF0ICg0MTIsMCkg
c2l6ZSAxMDB4MTAwKQogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9y
ICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9z
aXRlLW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogCiByZXBs
YXllZDogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0
ZWQudHh0CmluZGV4IDIxMGU0NGIwODc3YzA0MGNhODUyNDIwZGQ5N2I0MmMwZWFjMTc2YzUuLjEx
ZTdlMDFlOTg4ODNiMGZjMzYxMzNiMjJjMDUyYWFmN2NjOWQwNzEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFk
b3ctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxh
eWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC01LDE1ICs1LDE2
IEBACiAoc2F2ZQogICAocmVzdG9yZS1pbmRleCA0KSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1m
bGFncyA1MjUzMTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lk
dGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKQotICAoc2hv
dWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIDApKQorICAoc3RhdGUtY2hhbmdlIAorICAgIChj
aGFuZ2UtZmxhZ3MgNTI1MzEyKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93
LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRp
dXMgMCkKKyAgICAoc2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIDApKSkKIChmaWxsLWNv
bXBvc2l0ZWQtcmVjdAogICAoZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogICAocmVj
dCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3Np
dGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRlLW9wZXJhdG9yIHNvdXJjZS1v
dmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJh
bnNmb3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Rpc3Bs
YXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKaW5kZXggMzg0
ZTk4MTI5ZGM3ZWJjZGQ4OTZkMzEwZmE4Yzc1ZDM2NTNhYmI3Zi4uYWZjYzhjNGE5NDFlYjljZTEz
NTIxOTc1MTY1MWU5MTFmZTA3YzcwNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMS9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMiwyMCArMiwyMSBAQAogKHRy
YW5zbGF0ZQogICAoeCAwLjAwKQogICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQorKGNv
bmNhdGVuYXRlLWN0bQogICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEu
NzAsLTE4LjMwKX0pKQogKHNhdmUKICAgKHJlc3RvcmUtaW5kZXggNSkpCiAoc2V0LXN0YXRlCi0g
IChjaGFuZ2UtZmxhZ3MgNTI1MzEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ct
b2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMg
MCkKLSAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkKKyAgKHN0YXRlLWNoYW5n
ZSAKKyAgICAoY2hhbmdlLWZsYWdzIDUyNTMxMikKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisg
ICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3dzLXVzZS1s
ZWdhY3ktcmFkaXVzIDApCisgICAgKHNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyAwKSkp
CiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKICAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4
NC41NXgxODUuNjUpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMw
MDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQorICAoY29tcG9zaXRl
LW9wZXJhdG9yIHNvdXJjZS1vdmVyKQogICAoYmxlbmQtbW9kZSBub3JtYWwpKQogKHJlc3RvcmUp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345307</attachid>
            <date>2018-07-18 17:03:56 -0700</date>
            <delta_ts>2018-07-18 17:03:56 -0700</delta_ts>
            <desc>Patch for Review</desc>
            <filename>187765-review.patch</filename>
            <type>text/plain</type>
            <size>48750</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMDRiOGUzOGNiZC4uZTM4N2IyZWY4NjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTgtMDctMTggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBpY29uLCB3aWRnZXQsIHNjcm9sbGJhciBhbmQg
dGhlbWUgdG8gYmUgZHJhd24gdGhyb3VnaCBEaXNwbGF5TGlzdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NzY1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHJhd2luZyB0aGVzZSBpdGVtcyBzaG91bGQg
Z28gdGhyb3VnaCBHcmFwaGljc0NvbnRleHQgd2hpY2ggd2lsbCBjcmVhdGUKKyAgICAgICAgc3Bl
Y2lhbCBEaXNwbGF5TGlzdEl0ZW1zIGZvciBkcmF3aW5nIHRoZW0uIFRoZXNlIERpc3BsYXlMaXN0
SXRlbXMgd2lsbAorICAgICAgICBzdG9yZSBhbGwgdGhlIHBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3
aGVuIHJlcGxheWluZyB0aGUgRGlzcGxheUxpc3QgYmFjay4KKworICAgICAgICAqIHBsYXRmb3Jt
L0NvbnRyb2xTdGF0ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6cGxhdGZvcm1QYWludCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnBsYXRmb3JtUGFpbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL1RoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJh
dG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVm
ZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaGVtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
Okljb246OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdJY29uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1dpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3VGhlbWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNp
emVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJY29uKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3VGhlbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxh
dGZvcm1QYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW06CisgICAgICAg
IChXZWJDb3JlOjpJY29uOjpwbGF0Zm9ybVBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
Okljb246OnBhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SWNvbk1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBsYXRmb3JtUGFpbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xp
bmVzRm9yVGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3SWNvbik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
V2lkZ2V0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdT
Y3JvbGxiYXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d1RoZW1lKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQ
YXRoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJv
L05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ljb25XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6cGxhdGZvcm1Q
YWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SWNvbjo6cGxhdGZvcm1QYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpwYWludCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1dpZGdldElPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpwYWludFRvZ2dsZUJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpwYWludFN0ZXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVN
YWM6OnBsYXRmb3JtUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OnBhaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBsYXRm
b3JtUGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEZsYWdzLmg6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2lkZ2V0V2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpwbGF0Zm9ybVBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvVGhlbWVX
UEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVXUEU6OnBsYXRmb3JtUGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhlbWVXUEU6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29y
ZTo6VGhlbWVXUEU6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVXUEU6OnBh
aW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lV1BFOjpwYWludCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmg6CisgICAgICAgICogcGxhdGZvcm0v
d3BlL1dpZGdldFdQRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1QYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWlu
dCk6CisKIDIwMTgtMDctMTcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LmNvbT4KIAogICAgICAgICBUZW1wbGF0aXplIERpc3BsYXlMaXN0SXRlbXMgYW5kIHVzZSBzdGQ6
OnR1cGxlIHRvIHN0b3JlIHRoZSBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRy
b2xTdGF0ZXMuaAppbmRleCAxZGNlOGI3NTgwNy4uZmU5NmFmZGNiYWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRyb2xTdGF0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250cm9sU3RhdGVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2lmbmRlZiBfX09C
SkNfXwpAQCAtMTAzLDYgKzEwNCwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29udHJvbFN0YXRl
cyYpCit7CisgICAgLy8gRklYTUU6IGR1bXAgdGhlIENvbnRyb2xTdGF0ZXMgbWVtYmVycyB0byB0
aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBmOWUwNWY1NWY3NS4uZGUyOGYwMjc0ZDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcApAQCAtMTYzLDExICsxNjMsMTYg
QEAgdm9pZCBTY3JvbGxiYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgV2lkZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhZnJhbWVSZWN0KCkuaW50ZXJzZWN0
cyhkYW1hZ2VSZWN0KSkKKyAgICBpZiAoIWZyYW1lUmVjdCgpLmludGVyc2VjdHMoZGFtYWdlUmVj
dCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghdGhlbWUoKS5wYWludCgqdGhpcywgY29u
dGV4dCwgZGFtYWdlUmVjdCkpCi0gICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgZGFtYWdl
UmVjdCk7CisgICAgY29udGV4dC5kcmF3U2Nyb2xsYmFyKCp0aGlzLCBkYW1hZ2VSZWN0KTsKK30K
Kwordm9pZCBTY3JvbGxiYXI6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghdGhlbWUoKS5wYWludCgqdGhpcywg
Y29udGV4dCwgcmVjdCkpCisgICAgICAgIFdpZGdldDo6cGFpbnQoY29udGV4dCwgcmVjdCk7CiB9
CiAKIHZvaWQgU2Nyb2xsYmFyOjphdXRvc2Nyb2xsVGltZXJGaXJlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5oCmluZGV4IDYyZjUwNDRhODM5Li5jMGQ0MzBhZDNkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTg0LDYgKzg0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UHJlc3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9CiAKICAgICB2b2lk
IHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFdpZGdl
dDo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6
OkFueU9yaWdpbikgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZW5hYmxlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwpAQCAt
MTgyLDYgKzE4MywxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiB9OwogCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsYmFyJikKK3sKKyAgICAvLyBGSVhNRTog
ZHVtcCB0aGUgU2Nyb2xsYmFyIG1lbWJlcnMgdG8gdGhlIFRleHRTdHJlYW0uCisgICAgcmV0dXJu
IHRzOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dJREdFVChTY3JvbGxiYXIsIGlzU2Nyb2xsYmFyKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
aGVtZS5jcHAKaW5kZXggYzBhZjE5MmIxZDEuLjY0YmI0Zjc4ZGJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGhlbWUuY3BwCkBAIC01Nyw3ICs1NywxMiBAQCBib29sIFRoZW1lOjpjb250cm9sUmVxdWly
ZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBUaGVtZTo6cGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgU2Nyb2xsVmlldyosIGZsb2F0LCBm
bG9hdCwgYm9vbCwgYm9vbCkKK3ZvaWQgVGhlbWU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9h
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZp
ZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wg
dXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKK3sKKyAgICBjb250
ZXh0LmRyYXdUaGVtZSgqdGhpcywgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9y
LCBzY3JvbGxWaWV3LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0
ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Cit9CisKK3ZvaWQgVGhlbWU6OnBsYXRm
b3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgdm9pZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKaW5kZXggZThjZWMzNWQ1OTEuLmQ2MzI1NGJj
YWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJUaGVtZVR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNjgsNyArNjksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0OwogCiAgICAg
Ly8gTWV0aG9kIGZvciBwYWludGluZyBhIGNvbnRyb2wuIFRoZSByZWN0IGlzIGluIHpvb21lZCBj
b29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xT
dGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZs
b2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxv
YXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFBh
cnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpv
b21GYWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYs
IENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0
IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtB
cHBlYXJhbmNlKTsKIAogICAgIC8vIFNvbWUgY29udHJvbHMgbWF5IHNwaWxsIG91dCBvZiB0aGVp
ciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hlY2sgb24gYW4gT1MgWCBjaGVja2JveCkuICBXaGVu
IHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAgICAgLy8gdGhlIHRoZW1lIG5lZWRzIHRvIGNvbW11
bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0byB0aGUgZW5naW5lIHNvIHRoYXQgaXQgY2FuIGlu
dmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wuCkBAIC04OCw1ICs5MCwxMSBAQCBwcml2YXRlOgog
ICAgIFRoZW1lKGNvbnN0IFRoZW1lJikgPSBkZWxldGU7CiAgICAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgVGhlbWUmKSA9IGRlbGV0ZTsKIH07CisgICAgCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVGhlbWUmKQoreworICAgIC8vIEZJWE1FOiBkdW1w
IHRoZSBUaGVtZSBtZW1iZXJzIHRvIHRoZSBUZXh0U3RyZWFtLgorICAgIHJldHVybiB0czsKK30K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCBm
MzFmMjQ1YTgwYi4uOTljZDgzYmZjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1dpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CkBAIC0xMTQsNiArMTE1LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGljeSB7IEFueU9yaWdpbiwgQWNjZXNzaWJsZU9yaWdpbk9ubHkg
fTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRSZWN0JiwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbik7CisgICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGludmFsaWRhdGUoKSB7
IGludmFsaWRhdGVSZWN0KGJvdW5kc1JlY3QoKSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpID0gMDsKIApAQCAtMjQ0LDYgKzI0NiwxMiBAQCBpbmxp
bmUgdm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKIAogI2VuZGlmCiAKK2lubGlu
ZSBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBXaWRnZXQmKQor
eworICAgIC8vIEZJWE1FOiBkdW1wIHRoZSBXaWRnZXQgbWVtYmVycyB0byB0aGUgVGV4dFN0cmVh
bS4KKyAgICByZXR1cm4gdHM7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNk
ZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSURHRVQoVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCmluZGV4IDRkODQwYTkxZGNlLi5jYzcxMzNjNjc1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
CkBAIC0zMSwxMCArMzEsMTQgQEAKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5j
bHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5j
bHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAj
aW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRoZW1lLmgiCisjaW5jbHVkZSAiV2lkZ2V0
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC04NDMsNiArODQ3LDUwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJh
d2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKICAgICBzZXRQbGF0Zm9ybVRleHRE
cmF3aW5nTW9kZShtb2RlKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJY29uKElj
b24mIGljb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2lt
cGwtPmRyYXdJY29uKGljb24sIHJlY3QpOworICAgIGVsc2UKKyAgICAgICAgaWNvbi5wbGF0Zm9y
bVBhaW50KCp0aGlzLCByZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRn
ZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2ltcGwpCisg
ICAgICAgIG1faW1wbC0+ZHJhd1dpZGdldCh3aWRnZXQsIHJlY3QpOworICAgIGVsc2UKKyAgICAg
ICAgd2lkZ2V0LnBsYXRmb3JtUGFpbnQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5kcmF3U2Nyb2xsYmFyKHNj
cm9sbGJhciwgcmVjdCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIucGxhdGZvcm1QYWlu
dCgqdGhpcywgcmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGhlbWUoVGhl
bWUmIHRoZW1lLCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIGNvbnN0
IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwgdm9pZCogc2Nyb2xsVmll
dywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgYm9vbCB1
c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNlKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2ltcGwpCisg
ICAgICAgIG1faW1wbC0+ZHJhd1RoZW1lKHRoZW1lLCBwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3Qs
IHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0
b3IsIHVzZVN5c3RlbUFwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKKyAgICBlbHNlCisg
ICAgICAgIHRoZW1lLnBsYXRmb3JtUGFpbnQoKnRoaXMsIHBhcnQsIHN0YXRlcywgem9vbWVkUmVj
dCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldywgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZh
Y3RvciwgdXNlU3lzdGVtQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UpOworfQorCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMDAy
MTY4YTYzYmUuLmZlYTlhOTYyNzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMjYsNiArMjYsNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKICNpbmNsdWRlICJEYXNoQXJyYXku
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgpAQCAt
MzQsNiArMzUsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRh
dGlvbi5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJUaGVtZVR5cGVzLmgiCiAj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
QEAgLTgwLDE2ICs4MiwyMCBAQCBjb25zdCBpbnQgY01pc3NwZWxsaW5nTGluZVBhdHRlcm5HYXBX
aWR0aCA9IDE7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0
OwogY2xhc3MgR3JhZGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7Citj
bGFzcyBJY29uOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0OwotY2xhc3MgUm91
bmRlZFJlY3Q7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFBh
dGg7CitjbGFzcyBSb3VuZGVkUmVjdDsKK2NsYXNzIFNjcm9sbGJhcjsKIGNsYXNzIFRleHRSdW47
CitjbGFzcyBUaGVtZTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OworY2xhc3MgVVJMOwor
Y2xhc3MgV2lkZ2V0OwogCiBlbnVtIFRleHREcmF3aW5nTW9kZSB7CiAgICAgVGV4dE1vZGVGaWxs
ID0gMSA8PCAwLApAQCAtNDYwLDYgKzQ2NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwogI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdJY29u
KEljb24mLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdXaWRnZXQoV2lkZ2V0Jiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcmF3VGhlbWUoVGhlbWUmLCBDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgdm9pZCosIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSk7CisKICAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCk7CiAgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KTsKICAgICB2b2lkIHNldExpbmVKb2luKExpbmVK
b2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEltcGwuaAppbmRleCAzMTU1NGNmNjc0NC4uODQ2OTJjNGQ3MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmgKQEAgLTg3LDYgKzg3LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJl
Y3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29u
c3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29u
dHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZs
b2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
LCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JY29uLmgKaW5kZXggODYwZWE2OTZmZWIuLmUyNWNhODhlYzg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEwICsyMSwxMiBAQAogI2lmbmRlZiBJY29u
X2gKICNkZWZpbmUgSWNvbl9oCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiTmF0
aXZlSW1hZ2UuaCIKQEAgLTQ4LDcgKzUwLDEyIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIH5JY29uKCk7CiAKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBjb250ZXh0LmRyYXdJY29uKCp0aGlz
LCByZWN0KTsKKyAgICB9CisKKyAgICB2b2lkIHBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3Rh
dGljIFJlZlB0cjxJY29uPiBjcmVhdGUoSElDT04gaEljb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJY29uKGhJY29uKSk7IH0KQEAgLTc5LDYgKzg2LDEyIEBAIHByaXZhdGU6CiAgICAgR2RrUGl4
YnVmKiBtX2ljb247CiAjZW5kaWYKIH07CisgICAgCitpbmxpbmUgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSWNvbiYpCit7CisgICAgLy8gRklYTUU6IGR1bXAg
dGhlIEljb24gbWVtYmVycyB0byB0aGUgVGV4dFN0cmVhbS4KKyAgICByZXR1cm4gdHM7Cit9CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggMjU1MDg4ZGJk
ZWUuLmNiNWQ0YWY2NDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAK
QEAgLTMyMyw2ICszMjMsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG8KICAgICBVTlVTRURf
UEFSQU0ob2Zmc2V0KTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdHMsIHdpZHRoLCBjb2xvcik7CiB9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0ljb24oSWNvbiYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKQoreworICAgIEFTU0VS
VF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikKK3sKKyAg
ICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmRyYXdUaGVtZShUaGVtZSYsIENvbnRyb2xQYXJ0LCBDb250cm9sU3Rh
dGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQsIGJvb2ws
IGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAppbmRleCA5NjFhOTY5N2M3NS4uYTA0ZjZhZTRhOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5oCkBAIC04Niw2ICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogCisgICAgdm9pZCBkcmF3
SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3V2lk
Z2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdTY3Jv
bGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVt
QXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CisKICAgICB2b2lk
IHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IGE3OWU2OTJkMDEyLi42YzQ3NmU5Y2My
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNzMsNiArNzMsMTAg
QEAgc3RhdGljIGNvbnN0IFZlY3RvcjxJdGVtRGVzY3JpcHRvcj4mIGl0ZW1zRGVzY3JpcHRvcnMo
KQogICAgICAgICB7ICJkcmF3LXBhdGgiLCB7ICJwYXRoIiB9IH0sCiAgICAgICAgIHsgImRyYXct
Zm9jdXMtcmluZy1wYXRoIiwgeyAicGF0aCIsICJ3aWR0aCIsICJvZmZzZXQiLCAiY29sb3IiIH0g
fSwKICAgICAgICAgeyAiZHJhdy1mb2N1cy1yaW5nLXJlY3RzIiwgeyAicmVjdHMiLCAid2lkdGgi
LCAib2Zmc2V0IiwgImNvbG9yIiB9IH0sCisgICAgICAgIHsgImRyYXctaWNvbiIsIHsgImljb24i
LCAicmVjdCIgfSB9LAorICAgICAgICB7ICJkcmF3LXdpZGdldCIsIHsgIndpZGdldCIsICJyZWN0
In0gfSwKKyAgICAgICAgeyAiZHJhdy1zY3JvbGxiYXIiLCB7ICJzY3JvbGxiYXIiLCAicmVjdCIg
fSB9LAorICAgICAgICB7ICJkcmF3LXRoZW1lIiwgeyAidGhlbWUiLCAiY29udHJvbC1wYXJ0Iiwg
ImNvbnRyb2wtc3RhdGVzIiwgInpvb21lZC1yZWN0IiwgInpvb20tZmFjdG9yIiwgInNjcm9sbC12
aWV3IiwgImRldmljZS1zY2FsZS1mYWN0b3IiLCAicGFnZS1zY2FsZS1mYWN0b3IiLCAidXNlLXN5
c3RlbS1hcHBlYXJhbmNlIiwgInVzZS1kYXJrLWFwcGVhcmFuY2UiIH0gfSwKICAgICAgICAgeyAi
ZmlsbC1yZWN0IiwgeyAicmVjdCIgfSB9LAogICAgICAgICB7ICJmaWxsLXJlY3Qtd2l0aC1jb2xv
ciIsIHsgInJlY3QiLCAiY29sb3IiIH0gfSwKICAgICAgICAgeyAiZmlsbC1yZWN0LXdpdGgtZ3Jh
ZGllbnQiLCB7ICJyZWN0IiwgImdyYWRpZW50IiB9IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAppbmRleCAyNWJhMmQ0ZjI2YS4uNjI0NGVkMGJiNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaApAQCAtMzEsNyArMzEsMTIgQEAKICNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIu
aCIKKyNpbmNsdWRlICJUaGVtZS5oIgorI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKKyNpbmNsdWRl
ICJXaWRnZXQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9U
eXBlQ2FzdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MSw2ICs4
NiwxMCBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIHsKICAgICBEcmF3UGF0aCwKICAgICBEcmF3Rm9j
dXNSaW5nUGF0aCwKICAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRHJhd0ljb24sCisgICAg
RHJhd1dpZGdldCwKKyAgICBEcmF3U2Nyb2xsYmFyLAorICAgIERyYXdUaGVtZSwKICAgICBGaWxs
UmVjdCwKICAgICBGaWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwK
QEAgLTczMyw2ICs3NDIsNjYgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCit1c2luZyBEcmF3SWNv
bkJhc2UgPSBEcmF3aW5nSXRlbTwKKyAgICBJdGVtVHlwZTo6RHJhd0ljb24sCisgICAgdm9pZCAo
R3JhcGhpY3NDb250ZXh0OjoqKShJY29uJiwgY29uc3QgRmxvYXRSZWN0JiksCisgICAgJkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ljb24sCisgICAgUmVmPEljb24+LCBGbG9hdFJlY3QKKz47CisgICAg
CitjbGFzcyBEcmF3SWNvbiA6IHB1YmxpYyBEcmF3SWNvbkJhc2UgeworcHVibGljOgorICAgIGNv
bnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3SWNvbkJhc2U6OmNyZWF0ZTxEcmF3SWNv
bj47CisgICAgdXNpbmcgRHJhd0ljb25CYXNlOjpEcmF3SWNvbkJhc2U7Citwcml2YXRlOgorICAg
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBhcmd1bWVudDwxPigpOyB9Cit9Owor
Cit1c2luZyBEcmF3V2lkZ2V0QmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3
V2lkZ2V0LAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoV2lkZ2V0JiwgY29uc3QgSW50
UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdXaWRnZXQsCisgICAgUmVmPFdpZGdl
dD4sIEludFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3V2lkZ2V0IDogcHVibGljIERyYXdXaWRn
ZXRCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8gY3JlYXRlID0gRHJh
d1dpZGdldEJhc2U6OmNyZWF0ZTxEcmF3V2lkZ2V0PjsKKyAgICB1c2luZyBEcmF3V2lkZ2V0QmFz
ZTo6RHJhd1dpZGdldEJhc2U7Citwcml2YXRlOgorICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBGbG9hdFJlY3QoYXJndW1lbnQ8MT4oKSk7IH0KK307CisgICAgCit1c2luZyBE
cmF3U2Nyb2xsYmFyQmFzZSA9IERyYXdpbmdJdGVtPAorICAgIEl0ZW1UeXBlOjpEcmF3U2Nyb2xs
YmFyLAorICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpLAorICAgICZHcmFwaGljc0NvbnRleHQ6OmRyYXdTY3JvbGxiYXIsCisgICAgUmVmPFNj
cm9sbGJhcj4sIEludFJlY3QKKz47CisgICAgCitjbGFzcyBEcmF3U2Nyb2xsYmFyIDogcHVibGlj
IERyYXdTY3JvbGxiYXJCYXNlIHsKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgc3RhdGljIGF1dG8g
Y3JlYXRlID0gRHJhd1Njcm9sbGJhckJhc2U6OmNyZWF0ZTxEcmF3U2Nyb2xsYmFyPjsKKyAgICB1
c2luZyBEcmF3U2Nyb2xsYmFyQmFzZTo6RHJhd1Njcm9sbGJhckJhc2U7Citwcml2YXRlOgorICAg
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoYXJndW1lbnQ8MT4o
KSk7IH0KK307CisgICAgCit1c2luZyBEcmF3VGhlbWVCYXNlID0gRHJhd2luZ0l0ZW08CisgICAg
SXRlbVR5cGU6OkRyYXdUaGVtZSwKKyAgICB2b2lkIChHcmFwaGljc0NvbnRleHQ6OiopKFRoZW1l
JiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwg
dm9pZCosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCksCisgICAgJkdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RoZW1lLAorICAgIFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBGbG9h
dFJlY3QsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sCis+OworICAgIAor
Y2xhc3MgRHJhd1RoZW1lIDogcHVibGljIERyYXdUaGVtZUJhc2UgeworcHVibGljOgorICAgIGNv
bnN0ZXhwciBzdGF0aWMgYXV0byBjcmVhdGUgPSBEcmF3VGhlbWVCYXNlOjpjcmVhdGU8RHJhd1Ro
ZW1lPjsKKyAgICB1c2luZyBEcmF3VGhlbWVCYXNlOjpEcmF3VGhlbWVCYXNlOworcHJpdmF0ZToK
KyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYXJndW1lbnQ8Mz4oKTsgfQor
fTsKKwogdXNpbmcgRmlsbFJlY3RCYXNlID0gRHJhd2luZ0l0ZW08CiAgICAgSXRlbVR5cGU6OkZp
bGxSZWN0LAogICAgIHZvaWQgKEdyYXBoaWNzQ29udGV4dDo6KikoY29uc3QgRmxvYXRSZWN0Jiks
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggMmNmZmE1OTIy
MDUuLmY4NTljNjlhMGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwCkBAIC0yNjgsNiArMjY4LDMwIEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhdXRv
JiBuZXdJdGVtID0gZG93bmNhc3Q8R2VvbWV0cnlJdGVtPihhcHBlbmRJdGVtKERyYXdGb2N1c1Jp
bmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpKTsKICAgICB1cGRh
dGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwogfQorICAgIAordm9pZCBSZWNvcmRlcjo6ZHJhd0ljb24o
SWNvbiYgaWNvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGF1dG8mIG5ld0l0ZW0g
PSBkb3duY2FzdDxHZW9tZXRyeUl0ZW0+KGFwcGVuZEl0ZW0oRHJhd0ljb246OmNyZWF0ZShtYWtl
UmVmKGljb24pLCByZWN0KSkpOworICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdXaWRnZXQoV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgYXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBw
ZW5kSXRlbShEcmF3V2lkZ2V0OjpjcmVhdGUobWFrZVJlZih3aWRnZXQpLCByZWN0KSkpOworICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdTY3Jv
bGxiYXIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
YXV0byYgbmV3SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3U2Ny
b2xsYmFyOjpjcmVhdGUobWFrZVJlZihzY3JvbGxiYXIpLCByZWN0KSkpOworICAgIHVwZGF0ZUl0
ZW1FeHRlbnQobmV3SXRlbSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdUaGVtZShUaGVtZSYg
dGhlbWUsIENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxv
YXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiBzY3JvbGxWaWV3LCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVzZVN5
c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit7CisgICAgYXV0byYgbmV3
SXRlbSA9IGRvd25jYXN0PEdlb21ldHJ5SXRlbT4oYXBwZW5kSXRlbShEcmF3VGhlbWU6OmNyZWF0
ZSh0aGVtZSwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3
LCBkZXZpY2VTY2FsZUZhY3RvciwgcGFnZVNjYWxlRmFjdG9yLCB1c2VTeXN0ZW1BcHBlYXJhbmNl
LCB1c2VEYXJrQXBwZWFyYW5jZSkpKTsKKyAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwor
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBjZWVhZTIyZjQ4NC4uZDVh
ZTc0NjJlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMTA0
LDYgKzEwNCwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9p
ZCBkcmF3SWNvbihJY29uJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBk
cmF3V2lkZ2V0KFdpZGdldCYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdTY3JvbGxiYXIoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZv
aWQgZHJhd1RoZW1lKFRoZW1lJiwgQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNl
U3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAppbmRl
eCBhZjE4NWE1NGNkZC4uZjBhZTVjZmNhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKQEAgLTExMywxMSArMTEzLDggQEAgUmVmUHRy
PEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKQogICAgIHJldHVybiAwOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBJY29uOjpwbGF0Zm9y
bVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBj
b25zdAogewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgLy8gVE9ETzogU2NhbGUvY2xpcCB0aGUgaW1hZ2UgaWYgbmVjZXNzYXJ5Lgog
ICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKICAgICBj
YWlyb19zYXZlKGNyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2lvcy9JY29uSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0ljb25JT1MubW0KaW5kZXggY2VlNTE2ZTE0NDAuLmRiZDgzZDU3YzBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbQpAQCAtNTUsMTEgKzU1
LDggQEAgUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JJbWFnZShjb25zdCBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4mIGltYWdlKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihpbWFn
ZSkpOwogfQogCi12b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpIGNvbnN0CiB7Ci0g
ICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKICAgICBm
bG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX2NnSW1hZ2UuZ2V0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQppbmRleCA2MTQzYjUx
ZDQzNi4uZTg1MDMwOGQwYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JY29uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tCkBAIC05MSwxMyArOTEsOSBAQCBSZWZQdHI8SWNvbj4gSWNvbjo6
Y3JlYXRlSWNvbkZvclVUSShjb25zdCBTdHJpbmcmIFVUSSkKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEljb24oaW1hZ2UpKTsKIH0KIAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWlu
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QK
IHsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbEN1cnJlbnRHQyhjb250ZXh0
KTsKLQogICAgIFttX25zSW1hZ2UgZHJhd0luUmVjdDpyZWN0IGZyb21SZWN0Ok5TTWFrZVJlY3Qo
MCwgMCwgW21fbnNJbWFnZSBzaXplXS53aWR0aCwgW21fbnNJbWFnZSBzaXplXS5oZWlnaHQpIG9w
ZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uU291cmNlT3ZlciBmcmFjdGlvbjoxLjBmXTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmNwcAppbmRleCA1NTIyOWRlMGYzOC4uMDQwNjI3NmFiYmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCkBAIC03
MzEsNiArNzMxLDI2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0CiAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocmVjdHMsIHdpZHRoLCBjb2xvcikpOwogfQogCit2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJY29uKEljb24mLCBjb25zdCBGbG9hdFJlY3Qm
KQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9CisgICAgCit2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdXaWRnZXQoV2lkZ2V0JiwgY29uc3QgSW50UmVjdCYp
Cit7CisgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKK30KKyAgICAKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1Njcm9sbGJhcihTY3JvbGxiYXImLCBjb25zdCBJbnRS
ZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworfQorICAgIAordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3VGhlbWUoVGhlbWUmLCBDb250cm9sUGFydCwg
Q29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCB2b2lkKiwgZmxvYXQsIGZs
b2F0LCBib29sLCBib29sKQoreworICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cit9
CisKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCiB7CiAgICAgc3RydWN0IFNh
dmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCBl
OTgwZDIwY2NlZi4uNDg3OGNhMjg4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTc4LDYgKzc4LDExIEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBm
bG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3SWNvbihX
ZWJDb3JlOjpJY29uJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dm9pZCBkcmF3V2lkZ2V0KFdlYkNvcmU6OldpZGdldCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1RoZW1lKFdl
YkNvcmU6OlRoZW1lJiwgV2ViQ29yZTo6Q29udHJvbFBhcnQsIFdlYkNvcmU6OkNvbnRyb2xTdGF0
ZXMmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJl
c3RvcmUoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JY29uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JY29uV2luLmNwcAppbmRleCA3OTllMzQ3NDAzOS4uMThmZTZmNzkxMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKQEAgLTc0
LDExICs3NCw4IEBAIFJlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24o
aEljb24pKTsKIH0KIAotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcikKK3ZvaWQgSWNvbjo6cGxhdGZvcm1QYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKIHsKLSAgICBpZiAoY29u
dGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIExvY2FsV2lu
ZG93c0NvbnRleHQgd2luZG93Q29udGV4dChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHIpKTsK
ICAgICBEcmF3SWNvbkV4KHdpbmRvd0NvbnRleHQuaGRjKCksIHIueCgpLCByLnkoKSwgbV9oSWNv
biwgci53aWR0aCgpLCByLmhlaWdodCgpLCAwLCAwLCBESV9OT1JNQUwpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCmluZGV4IDc2YTIx
ZGEzNmYzLi4xZWRiN2Q5ZjVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3BlL0ljb25XUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dwZS9JY29uV1BFLmNwcApAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEljb246On5JY29uKCkgPSBkZWZhdWx0OwogCi12b2lkIEljb246OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEljb246OnBsYXRmb3JtUGFpbnQo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAppbmRleCA4NzQxMjkzMzk3OS4uZjM4
YTBhNGUxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCkBA
IC04MCw3ICs4MCwxMiBAQCB2b2lkIFdpZGdldDo6aGlkZSgpCiAgICAgICAgIGd0a193aWRnZXRf
aGlkZShwbGF0Zm9ybVdpZGdldCgpKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9p
ZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0LmRyYXdXaWRn
ZXQoKnRoaXMsIHJlY3QpOworfQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dpZGdldElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XaWRnZXRJT1MubW0KaW5kZXggOGIxZThiNTRiNWMuLmRjYzZhNDkwNTIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2lkZ2V0SU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XaWRnZXRJT1MubW0KQEAgLTE0MSwxNCArMTQxLDE2IEBA
IE5TVmlldyogV2lkZ2V0OjpnZXRPdXRlclZpZXcoKSBjb25zdAogICAgIHJldHVybiB2aWV3Owog
fQogCi12b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0
JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeSkKIHsKLSAgICBpZiAocC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBjb250ZXh0LmRyYXdXaWRnZXQoKnRoaXMsIHJlY3QpOworfQogICAgIAordm9p
ZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQorewogICAgIE5TVmlldyAqdmlldyA9IGdldE91dGVyVmlldygpOwogCi0g
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHAucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOwogCiAgICAgTlNSZWN0IHZpZXdGcmFtZSA9IFt2
aWV3IGZyYW1lXTsKQEAgLTE1Niw3ICsxNTgsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9saQog
ICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIHZpZXdGcmFtZS5vcmlnaW4ueCAt
IHZpZXdCb3VuZHMub3JpZ2luLngsIHZpZXdGcmFtZS5vcmlnaW4ueSAtIHZpZXdCb3VuZHMub3Jp
Z2luLnkpOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFt2aWV3IGRp
c3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZlcnRSZWN0OnIgZnJvbVZpZXc6W3Zp
ZXcgc3VwZXJ2aWV3XV0gaW5Db250ZXh0OmNnQ29udGV4dF07CisgICAgW3ZpZXcgZGlzcGxheVJl
Y3RJZ25vcmluZ09wYWNpdHk6W3ZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpbdmlldyBz
dXBlcnZpZXddXSBpbkNvbnRleHQ6Y2dDb250ZXh0XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjZ0NvbnRleHQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAppbmRleCA0OTAyOGYxYjQzYy4uZTlmMzAzZDNk
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCkBAIC01Myw3ICs1Myw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29u
dHJvbFBhcnQgcGFydCkgY29uc3QgZmluYWwgeyByZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFy
dDsgfQogCi0gICAgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcyYsIEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZp
ZXcqLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29s
IHVzZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIGZpbmFsOworICAg
IHZvaWQgcGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sUGFydCwgQ29udHJv
bFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwg
dm9pZCogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvciwgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlLCBib29sIHVzZURhcmtBcHBlYXJhbmNl
KSBmaW5hbDsKICAgICB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0LCBj
b25zdCBDb250cm9sU3RhdGVzJiwgRmxvYXRSZWN0JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Qg
ZmluYWw7CiAKICAgICBib29sIHVzZXJQcmVmZXJzUmVkdWNlZE1vdGlvbigpIGNvbnN0IGZpbmFs
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCmluZGV4IDQ4MzFmZmY0Zjg4
Li5kOTIzODU2MDE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQpA
QCAtMzg3LDcgKzM4Nyw3IEBAIHN0YXRpYyBib29sIGRyYXdDZWxsRm9jdXNSaW5nKE5TQ2VsbCAq
Y2VsbCwgTlNSZWN0IGNlbGxGcmFtZSwgTlNWaWV3ICpjb250cm9sVmllCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZUJ1dHRvbihDb250cm9sUGFydCBidXR0
b25UeXBlLCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Ny
b2xsVmlldyogc2Nyb2xsVmlldywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGZsb2F0IHBhZ2VT
Y2FsZUZhY3RvcikKK3N0YXRpYyB2b2lkIHBhaW50VG9nZ2xlQnV0dG9uKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgQ29udHJvbFBhcnQgYnV0dG9uVHlwZSwgQ29udHJvbFN0YXRlcyYgY29udHJv
bFN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBT
Y3JvbGxWaWV3KiBzY3JvbGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwogCkBAIC01
MjAsNyArNTIwLDcgQEAgc3RhdGljIE5TQnV0dG9uQ2VsbCAqYnV0dG9uKENvbnRyb2xQYXJ0IHBh
cnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMKICAgICByZXR1cm4gY2VsbDsK
IH0KICAgICAKLXN0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQsIENvbnRy
b2xTdGF0ZXMmIGNvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3Jv
bGxWaWV3LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKQor
c3RhdGljIHZvaWQgcGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9s
UGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBjb250cm9sU3RhdGVzLCBjb25zdCBGbG9hdFJlY3Qm
IHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcsIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgCkBAIC01OTYsNyArNTk2LDcgQEAgc3RhdGlj
IE5TQ29udHJvbFNpemUgc3RlcHBlckNvbnRyb2xTaXplRm9yRm9udChjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCkKICAgICByZXR1cm4gTlNDb250cm9sU2l6ZU1pbmk7CiB9CiAKLXN0YXRpYyB2b2lk
IHBhaW50U3RlcHBlcihDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3Jv
bGxWaWV3KikKK3N0YXRpYyB2b2lkIHBhaW50U3RlcHBlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBm
bG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikKIHsKICAgICAvLyBXZSBkb24ndCB1c2UgTlNT
dGVwcGVyQ2VsbCBiZWNhdXNlIHRoZXJlIGFyZSBubyB3YXlzIHRvIGRyYXcgYW4KICAgICAvLyBO
U1N0ZXBwZXJDZWxsIHdpdGggdGhlIHVwIGJ1dHRvbiBoaWdobGlnaHRlZC4KQEAgLTg0OCwyNSAr
ODQ4LDI1IEBAIHZvaWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQ
YXJ0IHBhcnQsIGNvbnN0IENvbnRyb2xTdGF0ZXMmIHN0CiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwogfQogCi12b2lkIFRoZW1lTWFjOjpwYWludChDb250cm9sUGFydCBwYXJ0LCBDb250
cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3
LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBib29sIHVz
ZVN5c3RlbUFwcGVhcmFuY2UsIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCit2b2lkIFRoZW1lTWFj
OjpwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ29udHJvbFBhcnQgcGFy
dCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZs
b2F0IHpvb21GYWN0b3IsIHZvaWQqIHNjcm9sbFZpZXcsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
LCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSwgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSkKIHsKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxv
Y2FsQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSk7CiAK
ICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAg
ICAgICBwYWludFRvZ2dsZUJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3Qs
IHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0
b3IpOworICAgICAgICAgICAgcGFpbnRUb2dnbGVCdXR0b24oY29udGV4dCwgcGFydCwgc3RhdGVz
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXcqPihz
Y3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgICAgICBwYWludFRv
Z2dsZUJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3Is
IHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IpOworICAgICAg
ICAgICAgcGFpbnRUb2dnbGVCdXR0b24oY29udGV4dCwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0
LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXcqPihzY3JvbGxWaWV3KSwg
ZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9u
UGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIFNxdWFyZUJ1dHRv
blBhcnQ6Ci0gICAgICAgICAgICBwYWludEJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcsIGRldmljZVNjYWxlRmFjdG9yLCBwYWdl
U2NhbGVGYWN0b3IpOworICAgICAgICAgICAgcGFpbnRCdXR0b24oY29udGV4dCwgcGFydCwgc3Rh
dGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXcq
PihzY3JvbGxWaWV3KSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2FsZUZhY3Rvcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgotICAgICAg
ICAgICAgcGFpbnRTdGVwcGVyKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rv
ciwgc2Nyb2xsVmlldyk7CisgICAgICAgICAgICBwYWludFN0ZXBwZXIoY29udGV4dCwgc3RhdGVz
LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXcqPihz
Y3JvbGxWaWV3KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dp
ZGdldE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KaW5k
ZXggOTk2YzE5ZDU1MGYuLmI4YTdmYzkzMjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XaWRnZXRNYWMubW0KQEAgLTE4Niw5ICsxODYsOSBAQCBOU1ZpZXcgKldpZGdldDo6Z2V0T3V0
ZXJWaWV3KCkgY29uc3QKICAgICByZXR1cm4gdmlldzsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kpCiB7Ci0gICAgaWYg
KHAucGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIE5TVmlldyAqdmlldyA9IGdldE91dGVyVmlldygpOwog
CkBAIC0yMDIsMTEgKzIwMiwxNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBhaW50UG9saQogI2VuZGlmCiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKKyAgICBjb250ZXh0LmRyYXdXaWRnZXQoKnRo
aXMsIHJlY3QpOworfQorICAgIAordm9pZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewogICAgIC8vIFRha2UgYSBy
ZWZlcmVuY2UgdG8gdGhpcyBXaWRnZXQsIGJlY2F1c2Ugc2VuZGluZyBtZXNzYWdlcyB0byB0aGUg
dmlld3MgY2FuIGludm9rZSBhcmJpdHJhcnkKICAgICAvLyBjb2RlLCB3aGljaCBjYW4gZGVyZWYg
aXQuCiAgICAgUmVmPFdpZGdldD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKKyAgICBOU1ZpZXcg
KnZpZXcgPSBnZXRPdXRlclZpZXcoKTsKICAgICBOU0dyYXBoaWNzQ29udGV4dCAqY3VycmVudENv
bnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwogI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgpAQCAtMjE0LDcgKzIyMCw3IEBAIHZvaWQgV2lkZ2V0Ojpw
YWludChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEludFJlY3QmIHIsIFNlY3VyaXR5T3JpZ2lu
UGFpbnRQb2xpCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAgICAgICAgIC8vIFRoaXMg
aXMgdGhlIGNvbW1vbiBjYXNlIG9mIGRyYXdpbmcgaW50byBhIHdpbmRvdyBvciBhbiBpbmNsdXNp
dmUgbGF5ZXIsIG9yIHByaW50aW5nLgogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7Ci0gICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5Olt2aWV3IGNvbnZl
cnRSZWN0OnIgZnJvbVZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV1dOworICAgICAgICBbdmlldyBkaXNw
bGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Olt2
aWV3IHN1cGVydmlld11dXTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIzNyw3ICsyNDMsNyBAQCB2b2lkIFdpZGdldDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiBwLCBjb25zdCBJbnRSZWN0JiByLCBTZWN1cml0eU9yaWdpblBh
aW50UG9saQogICAgICAgICAgICAgc2Nyb2xsVmlldyA9IDA7CiAgICAgfQogCi0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHAucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1kZWNsYXJhdGlvbnMiCiAgICAgQVNTRVJUKGNnQ29udGV4dCA9PSBbY3VycmVudENvbnRl
eHQgZ3JhcGhpY3NQb3J0XSk7CkBAIC0yNTksNyArMjY1LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgcCwgY29uc3QgSW50UmVjdCYgciwgU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVj
bGFyYXRpb25zIgogICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0gW05TR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y2dDb250ZXh0IGZs
aXBwZWQ6Tk9dOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotICAgICAgICBbdmlldyBk
aXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyIGZyb21WaWV3Olt2
aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpuc0NvbnRleHRdOworICAgICAgICBbdmlldyBkaXNw
bGF5UmVjdElnbm9yaW5nT3BhY2l0eTpbdmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Olt2
aWV3IHN1cGVydmlld11dIGluQ29udGV4dDpuc0NvbnRleHRdOwogICAgIH0KICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vV2lkZ2V0V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRX
aW4uY3BwCmluZGV4IDhiZGMwMjNhNDM3Li5hNTFlNGYxNzU5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAKQEAgLTc1LDcgKzc1LDEyIEBAIHZvaWQgV2lkZ2V0
OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiAgICAgdmlldy0+aG9zdFdpbmRvdygp
LT5zZXRDdXJzb3IoY3Vyc29yKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5KQordm9pZCBX
aWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3sKKyAgICBjb250ZXh0LmRyYXdXaWRnZXQo
KnRoaXMsIHJlY3QpOworfQorCit2b2lkIFdpZGdldDo6cGxhdGZvcm1QYWludChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRSZWN0JikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dw
ZS9UaGVtZVdQRS5jcHAKaW5kZXggZTIyYTI5NDdlZTcuLjM0MGEwYWRhMGIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVtZVdQRS5jcHAKQEAgLTU3LDI0ICs1NywyNCBAQCBMZW5n
dGhTaXplIFRoZW1lV1BFOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZAogICAgIHJldHVybiBUaGVtZTo6Y29udHJvbFNpemUocGFydCwg
Zm9udENhc2NhZGUsIHpvb21lZFNpemUsIHpvb21GYWN0b3IpOwogfQogCi12b2lkIFRoZW1lV1BF
OjpwYWludChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29t
RmFjdG9yLCBTY3JvbGxWaWV3KiwgZmxvYXQsIGZsb2F0LCBib29sLCBib29sKQordm9pZCBUaGVt
ZVdQRTo6cGxhdGZvcm1QYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xQYXJ0
IHBhcnQsIENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yLCB2b2lkKiAsIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKIHsK
ICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcGFp
bnRDaGVja2JveChzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworICAg
ICAgICBwYWludENoZWNrYm94KGNvbnRleHQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rv
cik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICBwYWludFJh
ZGlvKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CisgICAgICAgIHBh
aW50UmFkaW8oY29udGV4dCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICAgICAgcGFpbnRCdXR0b24o
c3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAgICAgcGFpbnRC
dXR0b24oY29udGV4dCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIFRo
ZW1lV1BFOjpwYWludENoZWNrYm94KENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQordm9pZCBU
aGVtZVdQRTo6cGFpbnRDaGVja2JveChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENvbnRyb2xT
dGF0ZXMmIHN0YXRlcywgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKIHsKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKQEAgLTEw
Myw3ICsxMDMsNyBAQCB2b2lkIFRoZW1lV1BFOjpwYWludENoZWNrYm94KENvbnRyb2xTdGF0ZXMm
IHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjbwogICAgIH0KIH0KIAotdm9pZCBU
aGVtZVdQRTo6cGFpbnRSYWRpbyhDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKK3ZvaWQgVGhl
bWVXUEU6OnBhaW50UmFkaW8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sU3RhdGVz
JiBzdGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCkBAIC0xMjksNyAr
MTI5LDcgQEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRSYWRpbyhDb250cm9sU3RhdGVzJiBzdGF0ZXMs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgVGhlbWVX
UEU6OnBhaW50QnV0dG9uKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQordm9pZCBUaGVtZVdQ
RTo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDb250cm9sU3RhdGVzJiBz
dGF0ZXMsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9UaGVtZVdQRS5oCmluZGV4IGIxNzZhODAyZjJhLi40MTRhZTBiMjEwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmgKQEAgLTMzLDExICszMywxMSBAQCBj
bGFzcyBUaGVtZVdQRSBmaW5hbCA6IHB1YmxpYyBUaGVtZSB7CiBwcml2YXRlOgogICAgIExlbmd0
aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
TGVuZ3RoU2l6ZSYsIGZsb2F0KSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgcGFpbnQoQ29udHJv
bFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCwgU2Nyb2xsVmlldyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkgZmluYWw7Cisg
ICAgdm9pZCBwbGF0Zm9ybVBhaW50KEdyYXBoaWNzQ29udGV4dCYsIENvbnRyb2xQYXJ0LCBDb250
cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIHZvaWQqLCBmbG9hdCwgZmxvYXQs
IGJvb2wsIGJvb2wpIGZpbmFsOwogCi0gICAgdm9pZCBwYWludENoZWNrYm94KENvbnRyb2xTdGF0
ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7Ci0gICAgdm9p
ZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCk7Ci0gICAgdm9pZCBwYWludEJ1dHRvbihDb250cm9sU3RhdGVzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRD
aGVja2JveChHcmFwaGljc0NvbnRleHQmLCBDb250cm9sU3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRSYWRpbyhHcmFwaGljc0NvbnRleHQmLCBDb250cm9s
U3RhdGVzJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRCdXR0b24o
R3JhcGhpY3NDb250ZXh0JiwgQ29udHJvbFN0YXRlcyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dwZS9XaWRnZXRXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3BlL1dpZGdldFdQRS5jcHAKaW5kZXggNWY2NjMzMGM1MjMuLjk0NTMzODVkODdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvV2lkZ2V0V1BFLmNwcApAQCAtNTIsNyArNTIsMTIgQEAg
SW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWU7CiB9
CiAKLXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0Jiwg
U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSkKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNlY3VyaXR5T3JpZ2luUGFpbnRQ
b2xpY3kpCit7CisgICAgY29udGV4dC5kcmF3V2lkZ2V0KCp0aGlzLCByZWN0KTsKK30KKwordm9p
ZCBXaWRnZXQ6OnBsYXRmb3JtUGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCmluZGV4IDQ2ODQ3MmM2ODY1Li42YmI5ZTkxZTk2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC0zMDMsNyArMzAzLDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZTo6cGFpbnQoY29uc3QgUmVuZGVyQm94JiBib3gsIENvbnRyb2xTdGF0ZXMmIGNv
bnRyb2xTdGF0ZXMsIGNvbnMKICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBJbm5lclNw
aW5CdXR0b25QYXJ0OgogICAgICAgICB1cGRhdGVDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIoYm94
LCBjb250cm9sU3RhdGVzKTsKLSAgICAgICAgVGhlbWU6OnNpbmdsZXRvbigpLnBhaW50KHBhcnQs
IGNvbnRyb2xTdGF0ZXMsIHBhaW50SW5mby5jb250ZXh0KCksIGRldmljZVBpeGVsU25hcHBlZFJl
Y3QsIGJveC5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSwgJmJveC52aWV3KCkuZnJhbWVWaWV3KCks
IGRldmljZVNjYWxlRmFjdG9yLCBwYWdlU2NhbGVGYWN0b3IsIGJveC5wYWdlKCkudXNlU3lzdGVt
QXBwZWFyYW5jZSgpLCBib3gucGFnZSgpLnVzZURhcmtBcHBlYXJhbmNlKCkpOworICAgICAgICBU
aGVtZTo6c2luZ2xldG9uKCkucGFpbnQocGFpbnRJbmZvLmNvbnRleHQoKSwgcGFydCwgY29udHJv
bFN0YXRlcywgZGV2aWNlUGl4ZWxTbmFwcGVkUmVjdCwgYm94LnN0eWxlKCkuZWZmZWN0aXZlWm9v
bSgpLCAmYm94LnZpZXcoKS5mcmFtZVZpZXcoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIHBhZ2VTY2Fs
ZUZhY3RvciwgYm94LnBhZ2UoKS51c2VTeXN0ZW1BcHBlYXJhbmNlKCksIGJveC5wYWdlKCkudXNl
RGFya0FwcGVhcmFuY2UoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsK
</data>

          </attachment>
      

    </bug>

</bugzilla>