<?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>149329</bug_id>
          
          <creation_ts>2015-09-17 19:52:23 -0700</creation_ts>
          <short_desc>REGRESSION(r189938): Broke Web Workers (Requested by ap on #webkit).</short_desc>
          <delta_ts>2015-09-17 19:56:57 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147374</blocked>
    
    <blocked>149301</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127020</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 19:52:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/189938 broke the build:
Broke Web Workers (Requested by ap on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127024</commentid>
    <comment_count>1</comment_count>
      <attachid>261475</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 19:53:13 -0700</bug_when>
    <thetext>Created attachment 261475
ROLLOUT of r189938

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127027</commentid>
    <comment_count>2</comment_count>
      <attachid>261475</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 19:56:54 -0700</bug_when>
    <thetext>Comment on attachment 261475
ROLLOUT of r189938

Clearing flags on attachment: 261475

Committed r189961: &lt;http://trac.webkit.org/changeset/189961&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127028</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-17 19:56:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261475</attachid>
            <date>2015-09-17 19:53:13 -0700</date>
            <delta_ts>2015-09-17 19:56:54 -0700</delta_ts>
            <desc>ROLLOUT of r189938</desc>
            <filename>bug-149329-20150917195259.patch</filename>
            <type>text/plain</type>
            <size>224021</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZDQzZGJjMDFhOTUwYjk0YjU4ODdmZDkzOTIyMTZkOTIwN2JiMDk5Li45NDYzMmFmNWY0OTM3NzFi
MDBmMTcxMDgzMzlmNDkyYWM4MWExOTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxNS0wOS0xNyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE4OTkzOCwgcjE4OTk1
MiwgYW5kIHIxODk5NTYuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDkzMjkKKworICAgICAgICBCcm9rZSBXZWIgV29ya2VycyAoUmVxdWVzdGVkIGJ5
IGFwIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldHM6CisKKyAgICAg
ICAgIkltcGxlbWVudCB0cnkvY2F0Y2ggaW4gdGhlIERGRy4iCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDczNzQKKyAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTg5OTM4CisKKyAgICAgICAgIkNMb29wIGJ1aWxkIGZpeCBh
ZnRlciByMTg5OTM4LiIKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
MTg5OTUyCisKKyAgICAgICAgImFkZCBhIHJlZ3Jlc3MgdGVzdCBmb3IgcmljaGFyZHMgd2l0aCB0
cnkvY2F0Y2guIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ5MzAxCisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4OTk1
NgorCiAyMDE1LTA5LTE3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIENMb29wIGJ1aWxkIGZpeCBhZnRlciByMTg5OTM4LgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IGQ5MDhiYTFiZGUwY2E0N2I1NjEwMGJhMDIwZTE1YzYyZWY5MDI2OTIu
LmFkYjNmM2NmYzkxZjJhMmY2MjdmNDg1MjM1MGY0MTExZWQ1YzAwYTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE4NSw3ICsxODUsNiBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIGRmZy9ERkdGaXh1cFBoYXNlLmNwcAogICAgIGRmZy9ERkdGbHVzaEZv
cm1hdC5jcHAKICAgICBkZmcvREZHRmx1c2hlZEF0LmNwcAotICAgIGRmZy9ERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHAK
ICAgICBkZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCiAgICAgZGZnL0RGR0dyYXBoLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggODNmNDEzYjA1MDBhZjli
YzM0YmNhYjgzOWQ5ZTVlZDUzYmU1YTVjOS4uN2ViZGZjN2UwNGUzYTM4OWZkMjg0ZDk1Zjg3NGQx
NTIwZTlmNTUxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC00
MjEsNyArNDIxLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGaXh1cFBo
YXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGbHVzaGVkQXQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoRm9ybWF0LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdGcm96ZW5WYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0dyYXBoLmNwcCIgLz4KQEAgLTExNTEsNyArMTE1MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRml4dXBQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR0ZsdXNoRm9ybWF0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZvckFsbEtpbGxzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRlBSSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Zyb3plblZhbHVlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMzgxOTI5NDEwNmVhZmJjZWU0NDY5Nzgx
ODY4Y2ZmMzViM2ZhYjFlNC4uZDVjNmUyOGU5YzkxYjM2ZDgwMzEzMDg2Zjg0M2JlMzBmZmQyMTMy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwpAQCAtMTI0Miw5ICsxMjQyLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdGbHVzaEZvcm1hdC5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Z1bmN0
aW9uV2hpdGVsaXN0LmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgpAQCAtMzcwOSw5ICszNzA2LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdGbHVzaEZvcm1hdC5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRlBS
SW5mby5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFiMjBjZmE0ZWNkYThkY2VhNGE2ZDZjNWJi
YjNiNThhNmMwM2IzOWEuLmFjMmVhNGI4Y2ZhYTA3MWY0OTVjMjMxMGY0ZmMwNjIxODk2OWJmZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDMzLDggKzEwMzMsNiBAQAogCQk3
OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8q
IEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OTdFMDdBOTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Nzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNw
cCAqLzsgfTsKIAkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3OUM0
QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUM0QjE1QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAgKi87IH07Ci0JCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZl
Q2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBW
YXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmNwcCAqLzsgfTsKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52
aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlG
RUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYw
MENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0y
ODY4LDggKzI4NjYsNiBAQAogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0ds
b2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OUM0QjE1
QjFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NzlDNEIxNUMxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xpdmVDYXRjaFZhcmlh
YmxlUHJlc2VydmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlF
RTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBW
YXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
cmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZD
MUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01heGltYWxGbHVzaEluc2Vy
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MjMzLDggKzUyMjksNiBAQAogCQkJ
CTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4
OUNFODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAogCQkJCUE3RDg5
Q0U5MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oICovLAotCQkJCTc5QzRCMTVC
MUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
LmNwcCAqLywKLQkJCQk3OUM0QjE1QzFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFy
aWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oICovLAogCQkJCTBGMkREODEwMUFCM0Q4QkUwMEJCQjhF
OCAvKiBERkdGb3JBbGxLaWxscy5oICovLAogCQkJCTBGNjlDQzg2MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5jcHAgKi8sCiAJCQkJMEY2OUNDODcxOTNBQzYwQTAwNDU3NTlFIC8q
IERGR0Zyb3plblZhbHVlLmggKi8sCkBAIC01OTMwLDcgKzU5MjQsNiBAQAogCQkJCUExQTAwOUMx
MTgzMUEyNkUwMENGODcxMSAvKiBBUk02NEFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4OThGMzIxQjI3Njg5RjAwODNBMzNDIC8qIERGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJN
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUg
LyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlGOEZDMUYxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUYxQTcwMTFCOThGQkVDMDA0NjNCMjYgLyog
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5NjQ2NTZBMUI5
NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTgwMDcsNyAr
ODAwMCw2IEBACiAJCQkJQTE1ODdENzExQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZv
cm1hdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwQTE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJDOTUyQjkx
OUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3
OUM0QjE1RDFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0QTE1OEVCRTkxMDA0Q0I5RkYg
LyogdWRpczg2LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYg
LyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDMxNThFQkU5MTAw
NENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5jIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDY2NTI1Y2I4YTlmOTUwYzQxNjUw
ZDg2Mjk0NGFhYWE1ZmE3MzQwYmMuLjU2Njc2ZGI0MGVlODFmNjVjN2Q2YWJhYTFiYzVjMjFjYzhk
MmRiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CkBAIC0yODU3LDExICsyODU3LDcgQEAgYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxh
Y2VtZW50KCkKIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxl
cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygp
LnNpemUoKSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZU9mZnNldCwgcmVx
dWlyZWRIYW5kbGVyKTsKLX0KIAotSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZvcklu
ZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQotewog
ICAgIGlmICghbV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0yODczLDgg
KzI4NjksNyBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZAogCiAgICAgICAgIC8vIEhhbmRsZXJz
IGFyZSBvcmRlcmVkIGlubmVybW9zdCBmaXJzdCwgc28gdGhlIGZpcnN0IGhhbmRsZXIgd2UgZW5j
b3VudGVyCiAgICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIHRo
ZSBjb3JyZWN0IGhhbmRsZXIgdG8gdXNlLgotICAgICAgICAvLyBUaGlzIGluZGV4IHVzZWQgaXMg
ZWl0aGVyIHRoZSBCeXRlY29kZU9mZnNldCBvciBhIENhbGxTaXRlSW5kZXguCi0gICAgICAgIGlm
IChoYW5kbGVyLnN0YXJ0IDw9IGluZGV4ICYmIGhhbmRsZXIuZW5kID4gaW5kZXgpCisgICAgICAg
IGlmIChoYW5kbGVyLnN0YXJ0IDw9IGJ5dGVjb2RlT2Zmc2V0ICYmIGhhbmRsZXIuZW5kID4gYnl0
ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gJmhhbmRsZXI7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggZmRmZGY1ZDcwMjZj
YjE1N2FmNDhlM2M4YTI3MWQ2YTQzZDU5NzQ0ZS4uMjMxMGJiNTM0OTcyOTNkZmJhZDA5M2Q3NjNm
NmZjMmMyZDlmMDE5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaApAQCAtMTk1LDcgKzE5NSw2IEBAIHB1YmxpYzoKICAgICAgICAgQW55SGFuZGxlcgogICAg
IH07CiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5k
bGVyKTsKLSAgICBIYW5kbGVySW5mbyogaGFuZGxlckZvckluZGV4KHVuc2lnbmVkLCBSZXF1aXJl
ZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOwogICAgIHVuc2lnbmVkIGxp
bmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAg
dW5zaWduZWQgY29sdW1uTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCkBAIC05MTEsMTggKzkxMCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgRXZhbENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7CiAgICAgfTsKIAotICAg
IHZvaWQgY2xlYXJFeGNlcHRpb25IYW5kbGVycygpCi0gICAgewotICAgICAgICBpZiAobV9yYXJl
RGF0YSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuY2xlYXIo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIoY29uc3QgSGFuZGxl
ckluZm8mIGhhbmRsZXIpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7IC8vIFdlIG1heSBiZSBoYW5kbGluZyB0aGUgZXhjZXB0aW9uIG9mIGFuIGlubGluZWQgY2Fs
bCBmcmFtZS4KLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQo
aGFuZGxlcik7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vh
a1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKaW5kZXggZDYwZmRmN2Qz
Y2YzNjBlM2VjMTY5ODc3OWFiZTZiOWViOTA2ZDUxNC4uNDE0ZGZkOTdkM2RlNTk4Y2U5NTAxMDg0
NDE1NzU0ZWMyYjU2Nzc4NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKQEAgLTkzLDEyICs5Myw5IEBAIHZvaWQgY29t
cHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPHVuc2ln
bmVkLCAzMj4mIG91dCkKICAgICBpZiAoIWNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygp
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2Nr
LT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCk7IGktLTspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBjb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKTsgaS0tOykKICAgICAg
ICAgb3V0LmFwcGVuZChjb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSkudGFyZ2V0KTsKLSAg
ICAgICAgb3V0LmFwcGVuZChjb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXIoaSkuc3RhcnQpOwot
ICAgICAgICBvdXQuYXBwZW5kKGNvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcihpKS5lbmQpOwot
ICAgIH0KLQorICAgIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+
dm0oKS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggYWEwNDM2MWJi
MWNjNzEyYjI4M2E0OTM5MjNlZmIzYWYwNzJhMTZlZC4uOWZiZDgwY2ZlNTI4MzMzOGU4MGI2MWYy
MWI1NjBiNjhhNmQ4ZTVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKQEAgLTQzNCw2ICs0MzQsNyBAQCBwcml2YXRlOgogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSA9IG5vZGU7CiAgICAg
ICAgIHJldHVybiBub2RlOwogICAgIH0KKwogICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVP
cmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFs
dWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7CiAgICAgICAgIENvZGVPcmln
aW4gb2xkU2VtYW50aWNPcmlnaW4gPSBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsKQEAgLTM3Nzks
MTAgKzM3ODAsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxp
bWl0KQogICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAgICAgICAgICAgYWRkVG9H
cmFwaChVbnJlYWNoYWJsZSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0
aWNfZXJyb3IpOwotCi0gICAgICAgIGNhc2Ugb3BfY2F0Y2g6Ci0gICAgICAgICAgICBtX2dyYXBo
Lm1faGFzRXhjZXB0aW9uSGFuZGxlcnMgPSB0cnVlOwotICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2F0Y2gpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDoKICAgICAgICAg
ICAgIGhhbmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDb2RlRm9yQ2FsbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKaW5kZXggZjgx
NDNiMzMzODEwODA2OWYyMDg4ZGJiNDE5ZDAwMzJkZTM0ODNkMi4uMzRkODg0MjVkZDA0MDJmZmQ4
ZjY5MjZmOGUwZGYyMDUzNzA2ODY5NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjExLDcgKzIxMSw2IEBAIENhcGFiaWxpdHlMZXZlbCBj
YXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjCiAgICAgY2FzZSBvcF9uZXdfYXJyb3dfZnVuY19leHA6CiAgICAgY2FzZSBvcF9jcmVh
dGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6Ci0g
ICAgY2FzZSBvcF9jYXRjaDoKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAK
ICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKaW5kZXggOGNkMjhlMjNjODg0ZWZhMGYwZDBiZDE0YzUzNjdjMjUz
OTk0NGU1Ni4uMzBkNzRkNzZkMTE5MDAwNTYzM2UzZmJmMDI2OTM2MGRlNWUxMzcxMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC01NywxMiArNTcs
NiBAQCBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGluZGV4KTsKIH0KIAotQ2FsbFNp
dGVJbmRleCBDb21tb25EYXRhOjpsYXN0Q2FsbFNpdGUoKSBjb25zdAotewotICAgIEFTU0VSVChj
b2RlT3JpZ2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW5z
LnNpemUoKSAtIDEpOwotfQotCiB2b2lkIENvbW1vbkRhdGE6OnNocmlua1RvRml0KCkKIHsKICAg
ICBjb2RlT3JpZ2lucy5zaHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuaAppbmRleCA0YmU2MDEzNmE4OGE5MDcwNTkzYjQ5Mjk4YWUxNmRlNzdiOWNj
MzE2Li45ZTAxOTNmYTQ2ZjRmZGYzYWI2YjEwNzc4YzE3Yjc4NDA1NDFhNjE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaApAQCAtODAsNyArODAsNiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBs
YW4mLCBDb2RlQmxvY2sqLCBOb2RlKik7CiAgICAgQ2FsbFNpdGVJbmRleCBhZGRDb2RlT3JpZ2lu
KENvZGVPcmlnaW4pOwotICAgIENhbGxTaXRlSW5kZXggbGFzdENhbGxTaXRlKCkgY29uc3Q7CiAg
ICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCmluZGV4IDY5Nzc4MzFlMGI2NWQ4NWUzNDhiYTM0MWU4OWNiYzMzMTg0MGExMjIu
LjQ2NDc2ZDQ3OGIzZGYxMGQ3NWRmZjQ5YmEzMTBjNTllYTk4N2UwNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTg3NSw3ICs4NzUsNiBAQCBwdWJsaWM6CiAgICAgUGxh
blN0YWdlIG1fcGxhblN0YWdlIHsgUGxhblN0YWdlOjpJbml0aWFsIH07CiAgICAgUmVmQ291bnRT
dGF0ZSBtX3JlZkNvdW50U3RhdGU7CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKLSAg
ICBib29sIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgeyBmYWxzZSB9OwogcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xp
c3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAppbmRleCA2MTJkOWIzZmYzN2I0NmQxNWVl
YmI5ZWIwNmQyZjA1Y2U4YmUwMTYxLi4yZjY1YWU3MmZlMmU0Y2YyZTUwZDkxNzI3MjlhNGZkMDg4
ZTk4YzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cApAQCAtODUsMTggKzg1LDYgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAg
ICAgICAgICAgIGZhaWx1cmVKdW1wcy5saW5rKHRoaXMpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBpbmZvLm1fcmVwbGFjZW1lbnREZXN0aW5hdGlvbiA9IGxhYmVsKCk7Ci0KLSAgICAgICAg
aWYgKGV4aXQubV93aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUdlbmVyaWNVbndpbmQpIHsKLSAgICAg
ICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNoIGJlY2F1c2Ugd2Ug
YXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCi0gICAgICAgICAgICAvLyBTbywgd2Ug
bXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVyLgotICAgICAgICAg
ICAgbG9hZFB0cih2bSgpLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGdyYXBo
KCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHJlc3Rv
cmVDYWxsZWVTYXZlc0Zyb21WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoZXhpdC5tX2lzRXhjZXB0aW9uSGFuZGxlcikgewotICAgICAgICAgICAgQVNTRVJUKCFleGl0
Lm1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKTsKLSAgICAgICAgICAgIGNv
cHlDYWxsZWVTYXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZlcigpOwotICAgICAgICB9Ci0KICAgICAg
ICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoaSksICZ2bSgpLT5vc3JFeGl0SW5kZXgpOwogICAgICAgICBleGl0LnNldFBhdGNoYWJs
ZUNvZGVPZmZzZXQocGF0Y2hhYmxlSnVtcCgpKTsKQEAgLTI5NSwyNyArMjgzLDkgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIEFTU0VSVCghbV9leGl0U2l0ZUxhYmVscy5zaXplKCkpOwotCisgICAg
CiAgICAgbV9qaXRDb2RlLT5jb21tb24uY29tcGlsYXRpb24gPSBtX2dyYXBoLmNvbXBpbGF0aW9u
KCk7CiAgICAgCi0gICAgLy8gTGluayBuZXcgREZHIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQgcmVt
b3ZlIGJhc2VsaW5lIEpJVCBoYW5kbGVycy4KLSAgICBtX2NvZGVCbG9jay0+Y2xlYXJFeGNlcHRp
b25IYW5kbGVycygpOwotICAgIGZvciAodW5zaWduZWQgIGkgPSAwOyBpIDwgbV9leGNlcHRpb25I
YW5kbGVyT1NSRXhpdENhbGxTaXRlcy5zaXplKCk7IGkrKykgewotICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGNlcHRpb25IYW5kbGVyT1NSRXhpdENhbGxTaXRlc1tp
XS5leGl0SW5mbzsKLSAgICAgICAgaWYgKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0aW9uLmlz
U2V0KCkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgaXMgKm5vdCogc2V0LCBpdCBtZWFu
cyB0aGF0IHdlIGFscmVhZHkganVtcGVkIHRvIHRoZSBPU1IgZXhpdCBpbiBwdXJlIGdlbmVyYXRl
ZCBjb250cm9sIGZsb3cuCi0gICAgICAgICAgICAvLyBpLmUsIHdlIGV4cGxpY2l0bHkgZW1pdHRl
ZCBhbiBleGNlcHRpb25DaGVjayB0aGF0IHdlIGtub3cgd2lsbCBiZSBjYXVnaHQgaW4gdGhpcyBt
YWNoaW5lIGZyYW1lLgotICAgICAgICAgICAgLy8gSWYgdGhpcyAqaXMgc2V0KiwgaXQgbWVhbnMg
d2Ugd2lsbCBiZSBsYW5kaW5nIGF0IHRoaXMgY29kZSBsb2NhdGlvbiBmcm9tIGdlbmVyaWNVbndp
bmQgZnJvbSBhbgotICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHRocm93biBpbiBhIGNoaWxkIGNh
bGwgZnJhbWUuCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYXRjaExhYmVsID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV9yZXBsYWNlbWVudERlc3RpbmF0aW9uKTsKLSAgICAg
ICAgICAgIEhhbmRsZXJJbmZvIG5ld0V4Y2VwdGlvbkhhbmRsZXIgPSBtX2V4Y2VwdGlvbkhhbmRs
ZXJPU1JFeGl0Q2FsbFNpdGVzW2ldLmJhc2VsaW5lRXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2V4Y2VwdGlvbkhhbmRsZXJPU1JFeGl0Q2Fs
bFNpdGVzW2ldLmNhbGxTaXRlSW5kZXg7Ci0gICAgICAgICAgICBuZXdFeGNlcHRpb25IYW5kbGVy
LnN0YXJ0ID0gY2FsbFNpdGUuYml0cygpOwotICAgICAgICAgICAgbmV3RXhjZXB0aW9uSGFuZGxl
ci5lbmQgPSBjYWxsU2l0ZS5iaXRzKCkgKyAxOwotICAgICAgICAgICAgbmV3RXhjZXB0aW9uSGFu
ZGxlci5uYXRpdmVDb2RlID0gY2F0Y2hMYWJlbDsKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLT5h
cHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0V4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICB9Ci0g
ICAgfQogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKQEAgLTM2Nyw3ICszMzcsNyBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKICAgICAKICAgICBsaW5rKCpsaW5rQnVmZmVy
KTsKICAgICBtX3NwZWN1bGF0aXZlLT5saW5rT1NSRW50cmllcygqbGlua0J1ZmZlcik7Ci0KKyAg
ICAKICAgICBtX2ppdENvZGUtPnNocmlua1RvRml0KCk7CiAgICAgY29kZUJsb2NrKCktPnNocmlu
a1RvRml0KENvZGVCbG9jazo6TGF0ZVNocmluayk7CiAKQEAgLTU1Miw4NCArNTIyLDYgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklU
Q29tcGlsZXI6OkxhYmVsIGJsb2MKICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3Muc2hyaW5rVG9G
aXQoKTsKIH0KIAotdm9pZCBKSVRDb21waWxlcjo6YXBwZW5kRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0KHVuc2lnbmVkIGV2ZW50U3RyZWFtSW5kZXgsIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbiwg
SGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXIsIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbCkKLXsKLSAgICBPU1JFeGl0IGV4aXQo
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIGdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihudWxscHRyKSwgbV9zcGVjdWxhdGl2ZS5nZXQoKSwgZXZlbnRTdHJlYW1JbmRl
eCk7Ci0gICAgZXhpdC5tX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZCA9IGp1
bXBzVG9GYWlsLmVtcHR5KCk7IC8vIElmIGp1bXBzIGFyZSBlbXB0eSwgd2UncmUgZ29pbmcgdG8g
anVtcCBoZXJlIGZyb20gZ2VuZXJpY1Vud2luZCBmcm9tIGEgY2hpbGQgY2FsbCBmcmFtZS4KLSAg
ICBleGl0Lm1faXNFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKLSAgICBleGl0Lm1fY29kZU9yaWdp
biA9IG9wQ2F0Y2hPcmlnaW47Ci0gICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgZXhpdEluZm8g
PSBhcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7Ci0gICAgaml0Q29kZSgpLT5hcHBlbmRPU1JF
eGl0KGV4aXQpOwotICAgIG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXMuYXBwZW5k
KEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdEluZm8geyBleGl0SW5mbywgKmV4Y2VwdGlvbkhhbmRs
ZXIsIGNhbGxTaXRlIH0pOwotfQotCi1ib29sIEpJVENvbXBpbGVyOjp3aWxsQ2F0Y2hFeGNlcHRp
b25Jbk1hY2hpbmVGcmFtZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENvZGVPcmlnaW4mIG9wQ2F0
Y2hPcmlnaW5PdXQsIEhhbmRsZXJJbmZvKiYgY2F0Y2hIYW5kbGVyT3V0KQotewotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwotICAg
IHdoaWxlICgxKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwotICAgICAg
ICBpZiAoSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZUluZGV4VG9DaGVjaykpIHsKLSAgICAgICAgICAgIG9wQ2F0Y2hPcmln
aW5PdXQgPSBDb2RlT3JpZ2luKGhhbmRsZXItPnRhcmdldCwgaW5saW5lQ2FsbEZyYW1lKTsKLSAg
ICAgICAgICAgIGNhdGNoSGFuZGxlck91dCA9IGhhbmRsZXI7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7Ci0gICAgfQotCi0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBKSVRDb21waWxlcjo6ZXhjZXB0aW9u
Q2hlY2soKQotewotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgdXNlIG9yaWdpbi5mb3JF
eGl0IGhlcmUuIENvbnNpZGVyIGlmIHdlIGhvaXN0IHN0cmluZwotICAgIC8vIGFkZGl0aW9uIG91
dHNpZGUgYSBsb29wLCBhbmQgdGhhdCB3ZSBleGl0IGF0IHRoZSBwb2ludCBvZiB0aGF0IGNvbmNh
dGVuYXRpb24KLSAgICAvLyBmcm9tIGFuIG91dCBvZiBtZW1vcnkgZXhjZXB0aW9uLgotICAgIC8v
IElmIHRoZSBvcmlnaW5hbCBsb29wIGhhZCBhIHRyeS9jYXRjaCBhcm91bmQgc3RyaW5nIGNvbmNh
dGVuYXRpb24sIGlmIHdlICJjYXRjaCIKLSAgICAvLyB0aGF0IGV4Y2VwdGlvbiBpbnNpZGUgdGhl
IGxvb3AsIHRoZW4gdGhlIGxvb3BzIGluZHVjdGlvbiB2YXJpYWJsZSB3aWxsIGJlIHVuZGVmaW5l
ZCAKLSAgICAvLyBpbiB0aGUgT1NSIGV4aXQgdmFsdWUgcmVjb3ZlcnkuIEl0J3MgbW9yZSBkZWZl
bnNpYmxlIGZvciB0aGUgc3RyaW5nIGNvbmNhdGVuYXRpb24sIAotICAgIC8vIHRoZW4sIHRvIG5v
dCBiZSBjYXVnaHQgYnkgdGhlIGZvciBsb29wcycgdHJ5L2NhdGNoLgotICAgIC8vIEhlcmUgaXMg
dGhlIHByb2dyYW0gSSdtIHNwZWFraW5nIGFib3V0OgotICAgIC8vCi0gICAgLy8gPj4+PiBsZXRz
IHByZXN1bWUgImMgPSBhICsgYiIgZ2V0cyBob2lzdGVkIGhlcmUuCi0gICAgLy8gZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgIC8vICAgICB0cnkgewotICAgIC8vICAgICAg
ICAgYyA9IGEgKyBiCi0gICAgLy8gICAgIH0gY2F0Y2goZSkgeyAKLSAgICAvLyAgICAgICAgIElm
IHdlIHRocmV3IGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIGFuZCB3ZSBjb3VnaHQgdGhlIGV4Y2Vw
dGlvbgotICAgIC8vICAgICAgICAgcmlnaHQgaGVyZSwgdGhlbiAiaSIgd291bGQgYWxtb3N0IGNl
cnRhaW5seSBiZSB1bmRlZmluZWQsIHdoaWNoCi0gICAgLy8gICAgICAgICB3b3VsZCBtYWtlIG5v
IHNlbnNlLgotICAgIC8vICAgICAgICAgLi4uIAotICAgIC8vICAgICB9Ci0gICAgLy8gfQotICAg
IENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKLSAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFu
ZGxlcjsKLSAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IHdpbGxDYXRjaEV4Y2VwdGlvbklu
TWFjaGluZUZyYW1lKG1fc3BlY3VsYXRpdmUtPm1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0
LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsgCi0gICAgaWYgKHdpbGxDYXRjaEV4
Y2VwdGlvbikgewotICAgICAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCA9IG1fc3BlY3VsYXRpdmUt
Pm1fb3V0T2ZMaW5lU3RyZWFtSW5kZXggIT0gVUlOVF9NQVggPyBtX3NwZWN1bGF0aXZlLT5tX291
dE9mTGluZVN0cmVhbUluZGV4IDogbV9zcGVjdWxhdGl2ZS0+bV9zdHJlYW0tPnNpemUoKTsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaGFkRXhjZXB0aW9uID0gZW1pdE5vblBhdGNoYWJs
ZUV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIC8vIFdlIGFzc3VtZSBoZXJlIHRoYXQgdGhpcyBp
cyBjYWxsZWQgYWZ0ZXIgY2FsbE9wZWFydGlvbigpL2FwcGVuZENhbGwoKSBpcyBjYWxsZWQuCi0g
ICAgICAgIGFwcGVuZEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdChzdHJlYW1JbmRleCwgb3BDYXRj
aE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlciwgbV9qaXRDb2RlLT5jb21tb24ubGFzdENhbGxTaXRl
KCksIGhhZEV4Y2VwdGlvbik7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2soKSk7Ci19Ci0KLUNhbGxTaXRlSW5kZXggSklUQ29t
cGlsZXI6OnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb25zdCBDb2RlT3JpZ2luJiBjYWxsU2l0ZUNvZGVPcmlnaW4sIHVuc2lnbmVkIGV2
ZW50U3RyZWFtSW5kZXgpCi17Ci0gICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwotICAgIEhh
bmRsZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyOwotICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9u
ID0gd2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUoY2FsbFNpdGVDb2RlT3JpZ2luLCBv
cENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlID0gYWRkQ2FsbFNpdGUoY2FsbFNpdGVDb2RlT3JpZ2luKTsKLSAgICBpZiAod2lsbENhdGNo
RXhjZXB0aW9uKQotICAgICAgICBhcHBlbmRFeGNlcHRpb25IYW5kbGluZ09TUkV4aXQoZXZlbnRT
dHJlYW1JbmRleCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlciwgY2FsbFNpdGUpOwot
ICAgIHJldHVybiBjYWxsU2l0ZTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgKaW5kZXggM2Q0NTcwMDNhNDIzMjdlMDVkMDE5ODg5OTY2YjY2ODY2MzQ4ODEw
Yi4uN2RiNzQyNmVlODkyZmNkNTM3NzE3M2U3Nzk1MDVlNjk3Y2JlZGZjZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApAQCAtMzgsNyArMzgsNiBAQAogI2lu
Y2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRl
ICJHUFJJbmZvLmgiCi0jaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCkBAIC0xNTksMTEgKzE1OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVtaXRTdG9y
ZUNvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSA9IGFkZENhbGxTaXRlKGNvZGVPcmlnaW4pOwotICAgICAgICBlbWl0
U3RvcmVDYWxsU2l0ZUluZGV4KGNhbGxTaXRlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSkKLSAgICB7CiAgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxTaXRlLmJpdHMoKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgfQogCkBAIC0x
NzUsNyArMTY5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBleGNlcHRpb25DaGVjaygpOworICAgIHZvaWQgZXhjZXB0aW9u
Q2hlY2soKQorICAgIHsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGVtaXRFeGNl
cHRpb25DaGVjaygpKTsKKyAgICB9CiAKICAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrV2l0aENhbGxG
cmFtZVJvbGxiYWNrKCkKICAgICB7CkBAIC0yNjMsOCArMjYwLDYgQEAgcHVibGljOgogICAgIAog
ICAgIFZlY3RvcjxMYWJlbD4mIGJsb2NrSGVhZHMoKSB7IHJldHVybiBtX2Jsb2NrSGVhZHM7IH0K
IAotICAgIENhbGxTaXRlSW5kZXggcmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhh
bmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBldmVudFN0
cmVhbUluZGV4KTsKLQogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlcjsKICAgICAKQEAgLTI3OCwxMCArMjczLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVFeGNlcHRpb25IYW5kbGVycygpOwogICAgIHZvaWQgbGlua09TUkV4aXRzKCk7CiAgICAg
dm9pZCBkaXNhc3NlbWJsZShMaW5rQnVmZmVyJik7Ci0KLSAgICBib29sIHdpbGxDYXRjaEV4Y2Vw
dGlvbkluTWFjaGluZUZyYW1lKENvZGVPcmlnaW4sIENvZGVPcmlnaW4mIG9wQ2F0Y2hPcmlnaW5P
dXQsIEhhbmRsZXJJbmZvKiYgY2F0Y2hIYW5kbGVyT3V0KTsKLSAgICB2b2lkIGFwcGVuZEV4Y2Vw
dGlvbkhhbmRsaW5nT1NSRXhpdCh1bnNpZ25lZCBldmVudFN0cmVhbUluZGV4LCBDb2RlT3JpZ2lu
LCBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlciwgQ2FsbFNpdGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGp1bXBzVG9GYWlsID0gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCkp
OwotCisgICAgCiAgICAgLy8gVGhlIGRhdGFmbG93IGdyYXBoIGN1cnJlbnRseSBiZWluZyBnZW5l
cmF0ZWQuCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKQEAgLTMxOSwxMyArMzExLDYgQEAgcHJpdmF0
ZToKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbywgND4gbV9leGl0
Q29tcGlsYXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+PiBtX2V4aXRTaXRlTGFi
ZWxzOwogICAgIAotICAgIHN0cnVjdCBFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJbmZvIHsKLSAg
ICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgZXhpdEluZm87Ci0gICAgICAgIEhhbmRsZXJJ
bmZvIGJhc2VsaW5lRXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4OwotICAgIH07Ci0gICAgVmVjdG9yPEV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElu
Zm8+IG1fZXhjZXB0aW9uSGFuZGxlck9TUkV4aXRDYWxsU2l0ZXM7Ci0gICAgCiAgICAgQ2FsbCBt
X2NhbGxBcml0eUZpeHVwOwogICAgIExhYmVsIG1fYXJpdHlDaGVjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U3BlY3VsYXRpdmVKSVQ+IG1fc3BlY3VsYXRpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNl
cnZhdGlvblBoYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE1NTU1NDFi
NDdkNWZjYTI3MDQ0MjlmNTM3MDA3YWZmNTNkNjhiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVD
YXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2Vy
dmF0aW9uUGhhc2UuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHQmFz
aWNCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkRGR0lu
c2VydGlvblNldC5oIgotI2luY2x1ZGUgIkRGR1BoYXNlLmgiCi0jaW5jbHVkZSAiRnVsbEJ5dGVj
b2RlTGl2ZW5lc3MuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgRmx1c2hMaXZlQ2F0Y2hWYXJpYWJsZXNJbnNlcnRp
b25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7Ci1wdWJsaWM6Ci0gICAgRmx1c2hMaXZlQ2F0Y2hWYXJp
YWJsZXNJbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogUGhhc2UoZ3JhcGgs
ICJsaXZlIGNhdGNoIHZhcmlhYmxlIHByZXNlcnZhdGlvbiBwaGFzZSIpCi0gICAgewotICAgIH0K
LQotICAgIGJvb2wgcnVuKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX2hhc0V4Y2Vw
dGlvbkhhbmRsZXJzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZm9ybSA9PSBMb2FkU3RvcmUpOwotCi0g
ICAgICAgIG1fY3VycmVudEJsb2NrTGl2ZW5lc3MucmVzaXplKG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKLQotICAgICAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOwotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgICAgICBoYW5kbGVCbG9j
ayhibG9jaywgaW5zZXJ0aW9uU2V0KTsKLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRl
KGJsb2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uKENvZGVPcmlnaW4gb3JpZ2luKQotICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBvcmlnaW4uYnl0ZWNvZGVJbmRleDsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2tMaXZlbmVzcy5jbGVhckFsbCgpOwotCi0gICAgICAgIHdo
aWxlICgxKSB7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IG9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAg
ICAgICAgIGlmIChIYW5kbGVySW5mbyogaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXhUb0NoZWNrKSkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNhdGNoQnl0ZWNvZGVJbmRleCA9IGhhbmRsZXItPnRhcmdldDsKLSAgICAgICAgICAg
ICAgICBtX2dyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4oY2F0Y2hC
eXRlY29kZUluZGV4LCBpbmxpbmVDYWxsRnJhbWUpLCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrTGl2ZW5lc3Muc2V0KG9w
ZXJhbmQudG9Mb2NhbCgpLCB0cnVlKTsgCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29k
ZUluZGV4OwotICAgICAgICAgICAgb3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2Nr
LCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKLSAgICB7Ci0gICAgICAgIC8vIEJlY2F1c2Ug
cHJlY2lzZSBqdW1wIHRhcmdldHMgZW5zdXJlcyB0aGF0IHRoZSBzdGFydCBvZiBhICJ0cnkiIGJs
b2NrIGlzIGl0cwotICAgICAgICAvLyBvd24gYmFzaWMgYmxvY2ssIHdlIHdpbGwgbmV2ZXIgaGF2
ZSB0d28gInRyeSIgc3RhdGVtZW50cyBpbiB0aGUgc2FtZSBERkcKLSAgICAgICAgLy8gYmFzaWMg
YmxvY2suIFRoZXJlZm9yZSwgY2hlY2tpbmcgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGJsb2NrIGlz
IHN1ZmZpY2llbnQgCi0gICAgICAgIC8vIHRvIGNoZWNraW5nIGlmIHdlJ3JlIGluIGEgdHJ5IGJs
b2NrLgotICAgICAgICBpZiAoIXdpbGxDYXRjaEV4Y2VwdGlvbihibG9jay0+YXQoMCktPm9yaWdp
bi5zZW1hbnRpYykpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgT3BlcmFuZHM8VmFy
aWFibGVBY2Nlc3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKSwgbnVsbHB0cik7Ci0gICAgICAgIEhhc2hTZXQ8SW5saW5lQ2FsbEZyYW1lKj4g
c2VlbklubGluZUNhbGxGcmFtZXM7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc1ByaW1vcmRp
YWxTZXRBcmd1bWVudCA9IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgbm9kZS0+bG9jYWwo
KS5pc0FyZ3VtZW50KCkgJiYgbm9kZSA9PSBtX2dyYXBoLm1fYXJndW1lbnRzW25vZGUtPmxvY2Fs
KCkudG9Bcmd1bWVudCgpXTsKLSAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAgICAgICAgc2Vl
bklubGluZUNhbGxGcmFtZXMuYWRkKGlubGluZUNhbGxGcmFtZSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCB8fCAobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dCAmJiAhaXNQcmltb3JkaWFsU2V0QXJndW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKLQotICAgICAgICAgICAgICAg
ICAgICBpbnQgc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0IDogMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9j
YWwoKSAmJiBtX2N1cnJlbnRCbG9ja0xpdmVuZXNzLmdldChvcGVyYW5kLnRvTG9jYWwoKSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB8fCAob3BlcmFuZC5vZmZzZXQoKSA9PSBzdGFja09mZnNl
dCArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZmx1c2hBY2Nlc3NEYXRhID0gY3VycmVudEJs
b2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFmbHVzaEFjY2Vzc0RhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hB
Y2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpLCBTcGVjTm9uZSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2gsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGZsdXNo
QWNjZXNzRGF0YSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YShtX2dyYXBo
KSkKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGbHVzaCBldmVyeXRoaW5nIGF0IHRoZSBlbmQgb2Yg
dGhlIGJsb2NrLgotICAgICAgICAvLyBGSVhNRTogSSB0aGluayB0aGlzIHdpbGwgb25seSBiZSBu
ZWNlc3NhcnkgaWYgd2UgaGF2ZSBhbnkgc3VjY2Vzc29yCi0gICAgICAgIC8vIGJsb2NrcyB3aG8g
YXJlbid0IGluc2lkZSB0aGlzICJ0cnkiIHN0YXRlbWVudC4gSWYgYWxsIG91ciBzdWNjZXNzb3In
cwotICAgICAgICAvLyBhcmUgaW4gdGhpcyB0cnkgc3RhdGVtZW50LCB0aGV5IHdpbGwgaGF2ZSBG
bHVzaGVzIGZvciBhbnkgbGl2ZSAiY2F0Y2giCi0gICAgICAgIC8vIHZhcmlhYmxlcy4KLSAgICAg
ICAgewotICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBibG9jay0+YXQoYmxvY2stPnNp
emUoKSAtIDEpLT5vcmlnaW47Ci0gICAgICAgICAgICBhdXRvIGluc2VydEZsdXNoQXRFbmQgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBib29sIGFsd2F5c0ZsdXNoKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBtX2N1cnJlbnRCbG9ja0xpdmVuZXNz
LmdldChvcGVyYW5kLnRvTG9jYWwoKSkpIAotICAgICAgICAgICAgICAgICAgICB8fCBvcGVyYW5k
LmlzQXJndW1lbnQoKQotICAgICAgICAgICAgICAgICAgICB8fCBhbHdheXNGbHVzaCkgewotICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGFjY2Vzc0RhdGEgPSBjdXJyZW50
QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghYWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc0RhdGEgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY3VycmVu
dEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpID0gYWNjZXNzRGF0YTsKLQotICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShibG9jay0+c2l6ZSgpLCBTcGVj
Tm9uZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBGbHVzaCwgb3JpZ2luLCBPcEluZm8oYWNj
ZXNzRGF0YSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mTG9jYWxzKCk7IGxvY2FsKyspCi0gICAgICAgICAgICAgICAgaW5zZXJ0Rmx1c2hB
dEVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbCksIGZhbHNlKTsKLSAgICAgICAgICAg
IGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiBzZWVuSW5saW5lQ2FsbEZy
YW1lcykKLSAgICAgICAgICAgICAgICBpbnNlcnRGbHVzaEF0RW5kKFZpcnR1YWxSZWdpc3Rlcihp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSksIHRydWUpOwotICAgICAgICAgICAgaW5zZXJ0Rmx1c2hBdEVuZChWaXJ0dWFsUmVnaXN0
ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSksIHRydWUpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0gICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXND
b25zdGFudCgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0Rh
dGEuYXBwZW5kKFZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSk7Ci0gICAgICAgIHJldHVybiAm
bV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5sYXN0KCk7Ci0gICAgfQotCi0gICAgRmFzdEJp
dFZlY3RvciBtX2N1cnJlbnRCbG9ja0xpdmVuZXNzOwotfTsKLQotYm9vbCBwZXJmb3JtTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMaXZlIENhdGNoIFZhcmlhYmxlcyBQcmVzZXJ2
YXRpb24gUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8Rmx1c2hMaXZlQ2F0Y2hWYXJpYWJs
ZXNJbnNlcnRpb25QaGFzZT4oZ3JhcGgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBo
YXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0OTFjOWM5YTk3ZWI2OTA4MDJm
Y2MwM2YxZGViMzhmYTIxYjZjMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZV9oCi0jZGVmaW5lIERGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2VfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgR3JhcGg7Ci0KLS8vIFRoaXMgcGhh
c2UgZW5zdXJlcyB0aGF0IHdlIG1haW50YWluIGxpdmVuZXNzIGZvciBsb2NhbHMKLS8vIHRoYXQg
YXJlIGxpdmUgaW4gdGhlICJjYXRjaCIgYmxvY2suIEJlY2F1c2UgYSAiY2F0Y2giCi0vLyBibG9j
ayB3aWxsIG5vdCBiZSBpbiB0aGUgY29udHJvbCBmbG93IGdyYXBoLCB3ZSBuZWVkIHRvIGVuc3Vy
ZQotLy8gYW55dGhpbmcgbGl2ZSBpbnNpZGUgdGhlICJjYXRjaCIgYmxvY2sgaW4gYnl0ZWNvZGUg
d2lsbCBtYWludGFpbiAKLS8vIGxpdmVuZXNzIGluc2lkZSB0aGUgInRyeSIgYmxvY2sgZm9yIGFu
IE9TUiBleGl0IGZyb20gdGhlICJ0cnkiIAotLy8gYmxvY2sgaW50byB0aGUgImNhdGNoIiBibG9j
ayBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24gYmVpbmcgdGhyb3duLgotLy8KLS8vIFRoZSBt
ZWNoYW5pc20gY3VycmVudGx5IHVzZWQgdG8gZGVtb25zdHJhdGUgbGl2ZW5lc3MgdG8gT1NSIGV4
aXQKLS8vIGlzIGVuc3VyaW5nIGFsbCB2YXJpYWJsZXMgbGl2ZSBpbiBhICJjYXRjaCIgYXJlIGZs
dXNoZWQgdG8gdGhlCi0vLyBzdGFjayBpbnNpZGUgdGhlICJ0cnkiIGJsb2NrLgotCi1ib29sIHBl
cmZvcm1MaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlKEdyYXBoJik7Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5k
aWYgLy8gREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCA4NjdlMjMzYjEwZGM0ZWE0MzNhMTQ0
NDVlMjZmYzgyMzFhN2YzODdjLi45M2JmMWIwZTJhODBhY2U3N2I5Mjc3ODcwODgwYzZiNmJlZjJi
MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTMwLDcg
KzMwLDYgQEAKIAogI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCi0jaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZl
SklULmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBAIC00MywxNSArNDIsOCBAQCBPU1JF
eGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
TWV0aG9kT2ZHZXR0aW5nQVZhbAogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAg
LCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fc3RyZWFtSW5kZXgoc3Ry
ZWFtSW5kZXgpCi0gICAgLCBtX3dpbGxBcnJpdmVBdE9TUkV4aXRGcm9tR2VuZXJpY1Vud2luZChm
YWxzZSkKLSAgICAsIG1faXNFeGNlcHRpb25IYW5kbGVyKGZhbHNlKQogewotICAgIGJvb2wgY2Fu
RXhpdCA9IGppdC0+bV9vcmlnaW4uZXhpdE9LOwotICAgIGlmICghY2FuRXhpdCAmJiBqaXQtPm1f
Y3VycmVudE5vZGUpIHsKLSAgICAgICAgRXhpdE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KGppdC0+
bV9qaXQuZ3JhcGgoKSwgaml0LT5tX2N1cnJlbnROb2RlKTsKLSAgICAgICAgY2FuRXhpdCA9IGV4
aXRNb2RlID09IEV4aXRNb2RlOjpFeGl0cyB8fCBleGl0TW9kZSA9PSBFeGl0TW9kZTo6RXhpdHNG
b3JFeGNlcHRpb25zOwotICAgIH0KLSAgICBERkdfQVNTRVJUKGppdC0+bV9qaXQuZ3JhcGgoKSwg
aml0LT5tX2N1cnJlbnROb2RlLCBjYW5FeGl0KTsKKyAgICBERkdfQVNTRVJUKGppdC0+bV9qaXQu
Z3JhcGgoKSwgaml0LT5tX2N1cnJlbnROb2RlLCBqaXQtPm1fb3JpZ2luLmV4aXRPSyk7CiB9CiAK
IHZvaWQgT1NSRXhpdDo6c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBjaGVjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5k
ZXggMTNlNzY4NDY2ZGY0NzYzMjM4OTA5MmNiOThkOGVjYzYxNmQ3ODY4MC4uZDMzNmQwNDQzMzkw
NzM1MmExYmYxZTE2ODYwNGYwMzIyYzQ4NjhmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKQEAgLTkzLDE2ICs5MywxMyBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBP
U1JFeGl0QmFzZSB7CiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIAog
ICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKLQorICAgIAogICAgIHZvaWQgc2V0UGF0Y2hh
YmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNvbnN0OwogICAg
IENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25z
dDsKICAgICB2b2lkIGNvcnJlY3RKdW1wKExpbmtCdWZmZXImKTsKIAogICAgIHVuc2lnbmVkIG1f
c3RyZWFtSW5kZXg7Ci0KLSAgICBib29sIG1fd2lsbEFycml2ZUF0T1NSRXhpdEZyb21HZW5lcmlj
VW53aW5kIDogMTsKLSAgICBib29sIG1faXNFeGNlcHRpb25IYW5kbGVyIDogMTsKICAgICAKICAg
ICB2b2lkIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDNhODE0NTIxNmQ0YjJkMWMyOTc0NGU5ZGVhMWU5YTcz
YjM4NDZkZmEuLmVlZmMwNjM5YmY1ZWRiOGQ4MDkxNjk1ODJlMjcxY2M0MDRkMzhiNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKQEAg
LTExNSw5ICsxMTUsMTAgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRXhpdCBDb21waWxhdGlv
biIpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
CisgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7Ci0KKyAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICAKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0
IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CkBAIC0xMjcsMTIg
KzEyOCw2IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgIHVpbnQz
Ml90IGV4aXRJbmRleCA9IHZtLT5vc3JFeGl0SW5kZXg7CiAgICAgT1NSRXhpdCYgZXhpdCA9IGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRXhpdFtleGl0SW5kZXhdOwogICAgIAotICAg
IGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAgICAgIEFTU0VSVChleGl0Lm1fd2lsbEFy
cml2ZUF0T1NSRXhpdEZyb21HZW5lcmljVW53aW5kKTsKLSAgICBpZiAoZXhpdC5tX2lzRXhjZXB0
aW9uSGFuZGxlcikKLSAgICAgICAgQVNTRVJUKCEhdm0tPmV4Y2VwdGlvbigpKTsKLSAgICAgICAg
Ci0gICAgCiAgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2Rl
T3JpZ2luKTsKICAgICAKICAgICAvLyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgpAQCAt
MTU4LDcgKzE1Myw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFs
aWRhdGlvbik7CiAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291bnRl
ckFkZHJlc3MoKSkpOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIGV4aXRDb21waWxl
ci5jb21waWxlRXhpdChleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKICAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29kZUJsb2NrKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAK
aW5kZXggYzM5NzY2ODQzYmUwODNkMGM4YTJlYWRlMDRmNzUwYTg3NzM5MjRhMi4uMzQ4Njg4MzI3
MzE5YzIyZmZmNDJkNjY2YmM4NDNlNzk4NGUzYmM2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKQEAgLTM5NCw3ICsz
OTQsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYg
ZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdgogICAgIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMobV9qaXQsIGV4aXQpOwogICAgIAogICAgIC8vIEFuZCBmaW5pc2guCi0gICAgYWRqdXN0QW5k
SnVtcFRvVGFyZ2V0KG1faml0LCBleGl0LCBleGl0Lm1faXNFeGNlcHRpb25IYW5kbGVyKTsKKyAg
ICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4aXQpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlcjY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwCmluZGV4IDVhOTllOWYzZDNmODhjYWFhMzYyMzU0OGYzNzQ5OWIyMDY4
OWQ2MWEuLmIyMjU4NzkwYWI2M2VmN2UwNmM0NjJiODQ0NjEzN2EwZTdiMmNlYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCkBA
IC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3YKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfQotCisgICAgCiAgICAgLy8gTmVlZCB0byBlbnN1cmUgdGhh
dCB0aGUgc3RhY2sgcG9pbnRlciBhY2NvdW50cyBmb3IgdGhlIHdvcnN0LWNhc2Ugc3RhY2sgdXNh
Z2UgYXQgZXhpdC4gVGhpcwogICAgIC8vIGNvdWxkIHRvYXN0IHNvbWUgc3RhY2sgdGhhdCB0aGUg
REZHIHVzZWQuIFdlIG5lZWQgdG8gZG8gaXQgYmVmb3JlIHN0b3JpbmcgdG8gc3RhY2sgb2Zmc2V0
cwogICAgIC8vIHVzZWQgYnkgYmFzZWxpbmUuCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJh
bmRzPFZhbHVlUmVjb3YKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKG1faml0LCBleGl0KTsK
IAogICAgIC8vIEFuZCBmaW5pc2guCi0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KG1faml0LCBl
eGl0LCBleGl0Lm1faXNFeGNlcHRpb25IYW5kbGVyKTsKKyAgICBhZGp1c3RBbmRKdW1wVG9UYXJn
ZXQobV9qaXQsIGV4aXQpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKaW5kZXggNjhlMGE4MjljNWE3YWI0ODUzMGYwNzEyMGU5MjdhYzdhYTA5Nzg5MS4uYjI4Y2Zm
YWM4ZmVjNWJjYzc1NGY1ODFjODVhOWMwZjc2YWFiYzMxMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjQ4
LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGpp
dCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoR0dD
KQogCi12b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
T1NSRXhpdEJhc2UmIGV4aXQsIGJvb2wgaXNFeGl0aW5nVG9PcENhdGNoKQordm9pZCBhZGp1c3RB
bmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0
KQogewogI2lmIEVOQUJMRShHR0MpIAogICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihqaXQuY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKQEAgLTI3NywxMCArMjc3LDYgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9U
YXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0LCBib29sIGlz
RXgKICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVDb2RlQmxvY2stPmppdENvZGUoKS0+
ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsK
IAogICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSklUOjpzdGFj
a1BvaW50ZXJPZmZzZXRGb3IoYmFzZWxpbmVDb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBBc3NlbWJseUhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICBpZiAoaXNFeGl0aW5nVG9PcENhdGNoKSB7Ci0gICAgICAgIC8vIFNp
bmNlIHdlJ3JlIGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZv
ckNhdGNoLgotICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGppdC52bSgpLT5hZGRyZXNzT2ZDYWxsRnJhbWVGb3JDYXRjaCgpKTsKLSAgICB9CiAgICAgCiAg
ICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKaW5k
ZXggNDZiNDI2ZDYxNTBjNzJkOWUxMDE0ODA5MjdmZjkyZDc0ZjRiYmUyZC4uY2UxODM2ZmExNzcx
NGI2ZTE0YmI4NWE2NTQ2MGFjMjI0ZTg0YWNhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCkBAIC0zNSw3ICszNSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBoYW5kbGVFeGl0Q291bnRz
KENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7CiB2b2lkIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKLXZvaWQgYWRqdXN0
QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJiwgYm9vbCBp
c0V4aXRpbmdUb09wQ2F0Y2gpOwordm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxw
ZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAppbmRleCBhOThjZDQ1YzI1YzM3OTVl
NmVhZWI3OTAxMDNmMDFjYjIyNjc4ZDE5Li5lYzFmZjQ2ODBmN2E1MTJiMWRhNTMzZjczZGI0N2M4
YzUzN2JkZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKQEAgLTQ4LDcg
KzQ4LDYgQEAKICNpbmNsdWRlICJERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdMSUNNUGhhc2UuaCIK
LSNpbmNsdWRlICJERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhl
YWRlckNyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5oIgpAQCAtMjYwLDggKzI1OSw2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpj
b21waWxlSW5UaHJlYWRJbXBsKExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKICAgICAg
ICAgZGZnLmR1bXAoKTsKICAgICB9CiAKLSAgICBwZXJmb3JtTGl2ZUNhdGNoVmFyaWFibGVQcmVz
ZXJ2YXRpb25QaGFzZShkZmcpOwotCiAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZU1heGltYWxGbHVz
aEluc2VydGlvblBoYXNlKCkpCiAgICAgICAgIHBlcmZvcm1NYXhpbWFsRmx1c2hJbnNlcnRpb24o
ZGZnKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaAppbmRleCA4Y2RiZWRjYWY4ZDg1ZWMzNzAxNWNkMjgwMWVhYTZhMTYzNzRlYzYz
Li4xNjQ0NWFiMjE3Yjk0YjU0MGE2YmI1OTQxNjBjZThjODg0MmZjZWRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oCkBAIC00MCw4ICs0
MCw2IEBAIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTbG93UGF0aEdl
bmVyYXRvcihTcGVjdWxhdGl2ZUpJVCogaml0KQogICAgICAgICA6IG1fY3VycmVudE5vZGUoaml0
LT5tX2N1cnJlbnROb2RlKQotICAgICAgICAsIG1fc3RyZWFtSW5kZXgoaml0LT5tX3N0cmVhbS0+
c2l6ZSgpKQotICAgICAgICAsIG1fb3JpZ2luKGppdC0+bV9vcmlnaW4pIAogICAgIHsKICAgICB9
CiAgICAgdmlydHVhbCB+U2xvd1BhdGhHZW5lcmF0b3IoKSB7IH0KQEAgLTQ5LDEwICs0Nyw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fbGFiZWwgPSBqaXQtPm1faml0LmxhYmVsKCk7CiAg
ICAgICAgIGppdC0+bV9jdXJyZW50Tm9kZSA9IG1fY3VycmVudE5vZGU7Ci0gICAgICAgIGppdC0+
bV9vdXRPZkxpbmVTdHJlYW1JbmRleCA9IG1fc3RyZWFtSW5kZXg7Ci0gICAgICAgIGppdC0+bV9v
cmlnaW4gPSBtX29yaWdpbjsKICAgICAgICAgZ2VuZXJhdGVJbnRlcm5hbChqaXQpOwotICAgICAg
ICBqaXQtPm1fb3V0T2ZMaW5lU3RyZWFtSW5kZXggPSBVSU5UX01BWDsKICAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpCiAgICAgICAgICAgICBqaXQtPm1faml0LmFib3J0V2l0aFJlYXNvbihE
RkdTbG93UGF0aEdlbmVyYXRvckZlbGxUaHJvdWdoKTsKICAgICB9CkBAIC02Niw4ICs2MSw2IEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVJbnRlcm5hbChTcGVjdWxhdGl2
ZUpJVCopID0gMDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKICAgICBOb2Rl
KiBtX2N1cnJlbnROb2RlOwotICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7Ci0gICAgTm9kZU9y
aWdpbiBtX29yaWdpbjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEp1bXBUeXBlPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDc3YTM1OTVk
ZTFhYjBmYmExNWY5ZTVkMTA4OWMyOTVmZDRlYjAzNGQuLjllZmRkNTQ2MTY1YTczY2ZmMzBjOGRm
NDVmNmFhMWRlNjU4MTliODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKQEAgLTI0NzYsNyArMjQ3Niw2IEBAIHB1YmxpYzoKICAgICAKICAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiwgOD4gbV9zbG93UGF0aEdl
bmVyYXRvcnM7CiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4+IG1fcGxhbnM7Ci0g
ICAgdW5zaWduZWQgbV9vdXRPZkxpbmVTdHJlYW1JbmRleCB7IFVJTlRfTUFYIH07CiB9OwogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCmluZGV4IDUwMDcwZjY5YzVmNzEzM2ZhYWFkNzczMDBjYmU1NzAxMmI4YTBlOTkuLmRh
ZjYyZjViZjU5YjVkOWQzMDc1ZTFjNzdhNTU1NjVlMWNhYTEzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgy
LDkgKzE4Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoCiAgICAgICAg
IGJhc2VQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZEdQUjsKICAgICB9CiAgICAgCi0gICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNl
cHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgp
KTsKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2Nr
KCksIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzKCksCisgICAgICAgIG1faml0
LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCBtX2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwg
dXNlZFJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhiYXNlVGFnR1BST3JOb25lLCBi
YXNlUGF5bG9hZEdQUiksCiAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUiksIHNwaWxsTW9kZSk7CiAgICAgCkBAIC0yMTUsOSArMjE0LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2Fj
aGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwg
R1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgU3BpbGxSZWdpc3RlcnNNb2RlIHNwaWxsTW9kZSkK
IHsKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRH
ZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3Ry
ZWFtLT5zaXplKCkpOwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMoKSwKKyAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIG1faml0LmFkZENhbGxTaXRlKGNv
ZGVPcmlnaW4pLCB1c2VkUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShiYXNlUGF5bG9hZEdQUiksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxv
YWRHUFIpLAogICAgICAgICBzY3JhdGNoR1BSLCBzcGlsbE1vZGUsIG1faml0LmVjbWFNb2RlRm9y
KGNvZGVPcmlnaW4pLCBwdXRLaW5kKTsKICAgICAKQEAgLTc4Niw4ICs3ODQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVB
bmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJ
bmRleChjYWxsU2l0ZSk7CisgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1faml0LmNvZGVC
bG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggM2MyNzI5NzJlNThiNTc1MzAwMTk4
YjM4MzAwOGYwYWZkMGQ5M2Y0ZS4uMTFlYzdhNTQzZWJiZTQ4NjM1YmNiMWE2NmIwZGE2Mjg3NTRl
YzRhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCkBAIC0xNTMsMTAgKzE1Myw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bEpTVmFsdWUoRWRnZSBlZGdlKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlk
KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0LCBTcGlsbFJlZ2lzdGVyc01vZGUgc3BpbGxNb2RlKQogewotICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxp
bmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0KICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCB1c2VkUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKGJhc2VHUFIpLAor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgbV9qaXQuYWRkQ2FsbFNpdGUo
Y29kZU9yaWdpbiksIHVzZWRSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCiAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHNwaWxsTW9kZSk7CiAgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgobV9qaXQpOwogICAgIApAQCAtMTc1LDEwICsxNzMsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmln
aW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIFNwaWxsUmVnaXN0ZXJzTW9kZSBzcGlsbE1v
ZGUpCiB7Ci0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBt
X3N0cmVhbS0+c2l6ZSgpKTsKLQogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKSwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIHVzZWRSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksCisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2Rl
T3JpZ2luLCBtX2ppdC5hZGRDYWxsU2l0ZShjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycygpLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwKICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3Jh
dGNoR1BSLCBzcGlsbE1vZGUsIG1faml0LmVjbWFNb2RlRm9yKGNvZGVPcmlnaW4pLCBwdXRLaW5k
KTsKIAogICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKQEAgLTc1Niw4ICs3NTIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIEpJVENvbXBp
bGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aDsKIAotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxs
U2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICBtX2ppdC5lbWl0U3RvcmVDYWxs
U2l0ZUluZGV4KGNhbGxTaXRlKTsKKyAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8g
PSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmNwcAppbmRleCAwMzhkZjljNjFlODNlZWU0MTIyMGJjODY5NGVhMWJkMjA5ZGU2MDQ4Li41
ZjUwOWM0MWUwY2YxMWJhNmU0NGRjY2YzYTQxYzNhYjI3ODE4MzdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5jcHAKQEAgLTUyLDkgKzUyLDYgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgaWYgKG1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobV9ncmFwaC5tX2hhc0V4Y2VwdGlvbkhh
bmRsZXJzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKICAgICAgICAgRlRMOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBGVEw6OmNhbkNv
bXBpbGUobV9ncmFwaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKaW5kZXggZGRkNDIzOTQwNmVmZjBmYjUwZmUwNzRlNjgzN2NhZWUxNmNi
NDQ2MC4uMWIxOTA1MTIwOGEzYjUzNmExOTkyNjNmNmZkNWZiZDFmMjVjZjIxNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcApAQCAtNTE2
LDcgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIAogICAgIGhhbmRsZUV4
aXRDb3VudHMoaml0LCBleGl0KTsKICAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhp
dCk7Ci0gICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGppdCwgZXhpdCwgZmFsc2UpOworICAgIGFk
anVzdEFuZEp1bXBUb1RhcmdldChqaXQsIGV4aXQpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7CiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKaW5kZXggNjQ3MzJhMjg3MTRlOTNmZTcwODJjNzFiYWY1NzBkZDZiNWVhZDA1
OS4uMzE1Y2Y0OTg2YzkyYzYyNWRlNjU1OTNjNTc4Y2MzNGFkNzNkMWM1MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC02MTQs
MTkgKzYxNCwxMiBAQCBwdWJsaWM6CiAKICAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRv
cigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKICAgICB7Ci0gICAgICAgIHZpc2l0b3IudW53aW5k
VG9NYWNoaW5lQ29kZUJsb2NrRnJhbWUoKTsKLQogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwogCi0gICAgICAgIHVuc2lnbmVk
IGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgp
ICE9IEpJVENvZGU6OkRGR0pJVCkKLSAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9
IHZpc2l0b3ItPmNhbGxGcmFtZSgpLT5ieXRlY29kZU9mZnNldCgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBleGNlcHRpb25IYW5kbGVySW5kZXggPSB2aXNpdG9yLT5jYWxsRnJhbWUoKS0+
Y2FsbFNpdGVJbmRleCgpLmJpdHMoKTsKLQotICAgICAgICBtX2hhbmRsZXIgPSBjb2RlQmxvY2st
PmhhbmRsZXJGb3JJbmRleChleGNlcHRpb25IYW5kbGVySW5kZXgsIENvZGVCbG9jazo6UmVxdWly
ZWRIYW5kbGVyOjpDYXRjaEhhbmRsZXIpOworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgIG1faGFuZGxlciA9IGNvZGVC
bG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2s6
OlJlcXVpcmVkSGFuZGxlcjo6Q2F0Y2hIYW5kbGVyKTsKICAgICAgICAgaWYgKG1faGFuZGxlcikK
ICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CiAKQEAgLTY0OSwyMCArNjQy
LDE1IEBAIHB1YmxpYzoKIAogICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3Rh
Y2tWaXNpdG9yJiB2aXNpdG9yKQogICAgIHsKLSAgICAgICAgdmlzaXRvci51bndpbmRUb01hY2hp
bmVDb2RlQmxvY2tGcmFtZSgpOwogICAgICAgICBWTSYgdm0gPSBtX2NhbGxGcmFtZS0+dm0oKTsK
ICAgICAgICAgbV9jYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKICAgICAgICAgbV9j
b2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSB2aXNpdG9yLT5ieXRlY29kZU9mZnNldCgpOwogCi0gICAgICAgIHVuc2lnbmVk
IGV4Y2VwdGlvbkhhbmRsZXJJbmRleDsKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5qaXRUeXBl
KCkgIT0gSklUQ29kZTo6REZHSklUKQotICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckluZGV4
ID0gbV9jYWxsRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCA9IG1fY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCku
Yml0cygpOwogICAgICAgICBtX2hhbmRsZXIgPSBudWxscHRyOwogICAgICAgICBpZiAoIW1faXNU
ZXJtaW5hdGlvbikgewogICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrICYmICFpc1dlYkFzc2Vt
Ymx5RXhlY3V0YWJsZShtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKQotICAgICAgICAg
ICAgICAgIG1faGFuZGxlciA9IG1fY29kZUJsb2NrLT5oYW5kbGVyRm9ySW5kZXgoZXhjZXB0aW9u
SGFuZGxlckluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSBtX2NvZGVCbG9jay0+
aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtX2hhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCmluZGV4IDA1MWI0ZGI2NDA3OGQwNDYxZWYyM2RjZDNj
YWQyYzEzNzMzYzA0MzAuLjc1ZjE3NzIzYjE0YTQ3NTg2ZDllY2Q2NjM2ZWRmYTQ2OTgxN2IwMzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCkBAIC02OSwxNiArNjksNiBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFt
ZSgpCiAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2FsbGVyRnJhbWUoKSk7CiB9CiAKLUNvZGVCbG9j
ayogU3RhY2tWaXNpdG9yOjp1bndpbmRUb01hY2hpbmVDb2RlQmxvY2tGcmFtZSgpCi17Ci0jaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgd2hpbGUgKG1fZnJhbWUuaXNJbmxpbmVkRnJhbWUoKSkKLSAg
ICAgICAgZ290b05leHRGcmFtZSgpOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgIENv
ZGVCbG9jayogcmVzdWx0ID0gbV9mcmFtZS5jb2RlQmxvY2soKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCiB2b2lkIFN0YWNrVmlzaXRvcjo6cmVhZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewogICAgIGlmICghY2FsbEZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKaW5kZXggM2U4OTU1NjM5OGUzYzMzN2YxOGEzOTVl
Nzk1ZmEzM2I1OTExOGEyOC4uNDFiZmM3MDg4MjBlY2NmY2FjNzM1YjM5YjQyMjQ3MTNlYmU1MmQ2
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlz
aXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuaApAQCAtMTMxLDcgKzEzMSw2IEBAIHB1YmxpYzoKIAogICAgIEZyYW1lJiBvcGVyYXRvcioo
KSB7IHJldHVybiBtX2ZyYW1lOyB9CiAgICAgQUxXQVlTX0lOTElORSBGcmFtZSogb3BlcmF0b3It
PigpIHsgcmV0dXJuICZtX2ZyYW1lOyB9Ci0gICAgQ29kZUJsb2NrKiB1bndpbmRUb01hY2hpbmVD
b2RlQmxvY2tGcmFtZSgpOwogCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNr
VmlzaXRvcihDYWxsRnJhbWUqIHN0YXJ0RnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IGEyMzk0YWM3ODg0OGI3M2NmNTBlZDRiODdj
YmUwZjRkYWM0ODA5N2EuLjE0NTI4YzM5ZjFiZGE4NTQ2MzU1OTcwYjY5MmQ5NjViZmE1MjBkNDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAg
LTI3MywyMCArMjczLDYgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6
ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW4KICAgICByZXR1cm4gcmVh
bEp1bXAubV9qdW1wOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJz
OjplbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKQotewotICAgIGNhbGxFeGNlcHRpb25G
dXp6KCk7Ci0KLSAgICBKdW1wIHJlc3VsdDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHJlc3Vs
dCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09m
RXhjZXB0aW9uKCkpKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmVzdWx0ID0gYnJh
bmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRpb24o
KSksIFRydXN0ZWRJbW0zMigwKSk7Ci0jZW5kaWYKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZv
KEFzc2VtYmx5SGVscGVycyYgaml0LCBUcnVzdGVkSW1tUHRyIHN0cnVjdHVyZSwgUmVnaXN0ZXJJ
RCBkZXN0KQogewogICAgIGNvbnN0IFN0cnVjdHVyZSogc3RydWN0dXJlUHRyID0gc3RhdGljX2Nh
c3Q8Y29uc3QgU3RydWN0dXJlKj4oc3RydWN0dXJlLm1fdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMGMyZGFhYTYzMzU1ZTBkZWMwYzFh
Mzk0NjkzNWM0M2UyODI2NmNjNi4uOGI5MTRhNTJjNWY3MWRhNjM1YWFkMDViZWM2Y2JjYTVlODI5
ZjQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBA
IC0xMDIxLDcgKzEwMjEsNiBAQCBwdWJsaWM6CiAgICAgZW51bSBFeGNlcHRpb25KdW1wV2lkdGgg
eyBOb3JtYWxKdW1wV2lkdGgsIEZhckp1bXBXaWR0aCB9OwogICAgIEp1bXAgZW1pdEV4Y2VwdGlv
bkNoZWNrKAogICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVj
aywgRXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKLSAgICBKdW1wIGVtaXRO
b25QYXRjaGFibGVFeGNlcHRpb25DaGVjaygpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5U
RVJTKQogICAgIHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0
cmFjdFNhbXBsaW5nQ291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAKaW5kZXggMjc2Y2ZmYTk3
ZmI4MjhkNGEzMmM1NGEzZjBmNTRmYTU0NjNmYWJlMC4uOWIwMzAzYmM1OTNlNDJiYzA4ZDA4M2Q1
NGYzYzQwZjQ0OWRiODU0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRFeGNlcHRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2Vw
dGlvbnMuY3BwCkBAIC01NCwxNCArNTQsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBF
eGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3RhcnQpCiAgICAgdm9pZCog
Y2F0Y2hSb3V0aW5lOwogICAgIEluc3RydWN0aW9uKiBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAw
OwogICAgIGlmIChoYW5kbGVyKSB7Ci0gICAgICAgIC8vIGhhbmRsZXItPnRhcmdldCBpcyBtZWFu
aW5nbGVzcyBmb3IgZ2V0dGluZyBhIGNvZGUgb2Zmc2V0IHdoZW4gY2F0Y2hpbmcKLSAgICAgICAg
Ly8gdGhlIGV4Y2VwdGlvbiBpbiBhIERGRyBmcmFtZS4gVGhpcyBieXRlY29kZSB0YXJnZXQgb2Zm
c2V0IGNvdWxkIGJlCi0gICAgICAgIC8vIHNvbWV0aGluZyB0aGF0J3MgaW4gYW4gaW5saW5lZCBm
cmFtZSwgd2hpY2ggbWVhbnMgYW4gYXJyYXkgYWNjZXNzCi0gICAgICAgIC8vIHdpdGggdGhpcyBi
eXRlY29kZSBvZmZzZXQgaW4gdGhlIG1hY2hpbmUgZnJhbWUgaXMgdXR0ZXJseSBtZWFuaW5nbGVz
cwotICAgICAgICAvLyBhbmQgY2FuIGNhdXNlIGFuIG92ZXJmbG93LiBPU1IgZXhpdCBwcm9wZXJs
eSBleGl0cyB0byBoYW5kbGVyLT50YXJnZXQKLSAgICAgICAgLy8gaW4gdGhlIHByb3BlciBmcmFt
ZS4KLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmppdFR5cGUoKSAhPSBKSVRD
b2RlOjpERkdKSVQpCi0gICAgICAgICAgICBjYXRjaFBDRm9ySW50ZXJwcmV0ZXIgPSAmY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbaGFuZGxlci0+dGFyZ2V0XTsKKyAgICAg
ICAgY2F0Y2hQQ0ZvckludGVycHJldGVyID0gJmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmluc3Ry
dWN0aW9ucygpW2hhbmRsZXItPnRhcmdldF07CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgY2F0
Y2hSb3V0aW5lID0gaGFuZGxlci0+bmF0aXZlQ29kZS5leGVjdXRhYmxlQWRkcmVzcygpOwogI2Vs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGRmYWI2ZTI1
NDFlMzUwMDNiOTkyNThiYTY1Yzk2OGVkZjdlYjEzMTQuLmI3MDYyN2UwM2Q4MDIwYjc2YTk4NzMy
Mzc3YWFiZmFlNjRkYTg4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcApAQCAtNTAxLDcgKzUwMSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSks
IHJlZ1QzKTsKICAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNo
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkp
KTsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKaW5kZXggOTg1ODgxN2Q0Y2RlOTNmNjFlZjA3YmRjYzY3MjgyODgzZWI2MzNkMS4u
MWI1ZTE2YmIxMjJjZDI0ZmVjZWU4MTViNWJkN2MwNGI2NmE2NTY4NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtODA3LDcgKzgwNyw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CiAgICAgLy8gb3BlcmF0aW9u
VGhyb3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxlci4KICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhy
ZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKIAogICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCmluZGV4IGRkMTY2YTU5ODFiNjY3ZDQ3NGI0ZjUyZmQ2ZDFhOGQxM2RhN2IxZGIu
Ljg0OTdjZGMwMWVkOGNmMjU0NGY3YTRlMmU1YmUxMjMwYmZjNDRmYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCkBAIC0zMDQsNyArMzA0LDYgQEAgX2hhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxv
YWRwIE1hcmtlZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKICAgICBy
ZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1DYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCiAgICAgbG9h
ZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCi0gICAgc3RvcmVwIDAsIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaFt0M10KIAogICAgIGxvYWRwIENhbGxlckZyYW1lW2Nmcl0sIGNmcgogCkBA
IC0xODM4LDcgKzE4MzcsNiBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgbG9hZHAgTWFya2VkQmxv
Y2s6Om1fd2Vha1NldCArIFdlYWtTZXQ6Om1fdm1bdDNdLCB0MwogICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUNhbGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKICAgICBsb2FkcCBWTTo6Y2FsbEZy
YW1lRm9yQ2F0Y2hbdDNdLCBjZnIKLSAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZvckNhdGNo
W3QzXQogICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQogCiAgICAgbG9hZGkgVk06
OnRhcmdldEludGVycHJldGVyUENGb3JUaHJvd1t0M10sIFBDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IDdjYTE5
NzkyZmU2YjI5YzdiZGNiMDQwYTQ5MzI1MTI0ODY3N2VhYjMuLjgzMjdmZTA4YzkyOWE5YmQ4NDY4
NzBjNjZkZTM4YTZhZjdmMzgzNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0yNzYsNyArMjc2LDYgQEAgX2hh
bmRsZVVuY2F1Z2h0RXhjZXB0aW9uOgogICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3dlYWtTZXQg
KyBXZWFrU2V0OjptX3ZtW3QzXSwgdDMKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1DYWxs
ZWVTYXZlc0J1ZmZlcih0MywgdDApCiAgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3Qz
XSwgY2ZyCi0gICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KIAogICAgIGxv
YWRwIENhbGxlckZyYW1lW2Nmcl0sIGNmcgogICAgIHZtRW50cnlSZWNvcmQoY2ZyLCB0MikKQEAg
LTE3MjQsNyArMTcyMyw2IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICBsb2FkcCBNYXJrZWRCbG9j
azo6bV93ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0M10sIHQzCiAgICAgcmVzdG9yZUNhbGxlZVNh
dmVzRnJvbVZNQ2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQogICAgIGxvYWRwIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaFt0M10sIGNmcgotICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hb
dDNdCiAgICAgcmVzdG9yZVN0YWNrUG9pbnRlckFmdGVyQ2FsbCgpCiAKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgUEIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDM4NGQ1OGUx
MjY5ZjhjNDFkNmIyM2RkOTM1MDE3ZTA3OTQ2NTdiYjQuLmI4NWJhYmY5YzAwYzBiOTMxMDZlZTk1
YjgwMmY0MTVjYmFlMDI5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDA3
LDggKzQwNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2Vw
dGlvbiA9IG51bGxwdHI7IH0KICAgICB2b2lkIGNsZWFyTGFzdEV4Y2VwdGlvbigpIHsgbV9sYXN0
RXhjZXB0aW9uID0gbnVsbHB0cjsgfQogCi0gICAgRXhlY1N0YXRlKiogYWRkcmVzc09mQ2FsbEZy
YW1lRm9yQ2F0Y2goKSB7IHJldHVybiAmY2FsbEZyYW1lRm9yQ2F0Y2g7IH0KLQogICAgIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9leGNlcHRpb247IH0KICAgICBKU0Nl
bGwqKiBhZGRyZXNzT2ZFeGNlcHRpb24oKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2Vs
bCoqPigmbV9leGNlcHRpb24pOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZGZnLWV4Y2VwdGlvbi10cnktY2F0Y2gtaW4tY29uc3RydWN0b3Itd2l0
aC1pbmxpbmVkLXRocm93LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9k
ZmctZXhjZXB0aW9uLXRyeS1jYXRjaC1pbi1jb25zdHJ1Y3Rvci13aXRoLWlubGluZWQtdGhyb3cu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNDZjZWZlM2M4MTNmZTY3Mzc2NGUz
YTM5YTRlMzE0MTZjZmI2MTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctZXhjZXB0aW9u
LXRyeS1jYXRjaC1pbi1jb25zdHJ1Y3Rvci13aXRoLWlubGluZWQtdGhyb3cuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwyNyArMCwwIEBACi1mdW5jdGlvbiBmKCkgewotICAgIHJldHVybiAyMDsgCi19
Ci1ub0lubGluZShmKTsKLQotZnVuY3Rpb24gYmFyKGIpIHsgCi0gICAgaWYgKGIpCi0gICAgICAg
IHRocm93IG5ldyBFcnJvcigiYmxhaCEiKTsKLX0KLQotZnVuY3Rpb24gRm9vKGIpIHsKLSAgICB0
cnkgewotICAgICAgICB0aGlzLnZhbHVlID0gYmFyKGIpOwotICAgIH0gY2F0Y2goZSkgewotICAg
ICAgICB0aGlzLnZhbHVlID0gZS50b1N0cmluZygpOwotICAgIH0KLQotICAgIGYodGhpcy52YWx1
ZSwgYik7Ci19Ci1ub0lubGluZShGb28pOwotCi0KLWZvciAodmFyIGkgPSAxOyBpIDwgMTAwMDsg
aSsrKSB7Ci0gICAgbGV0IHZhbHVlID0gbmV3IEZvbyhpICUgMyA9PT0gMCk7Ci0gICAgaWYgKGkg
JSAzID09PSAwICYmIHZhbHVlLnZhbHVlICE9PSAgIkVycm9yOiBibGFoISIpCi0gICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHZhbHVlOiAiICsgdmFsdWUudmFsdWUpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9lczYtZm9yLW9mLWxvb3AtZXhj
ZXB0aW9uLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9lczYtZm9yLW9m
LWxvb3AtZXhjZXB0aW9uLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTNiNzU2
ZmJiN2Q3YWY4YzM2MmFlMWEwNzFlMTA0YzhmMTJmNjNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZXM2LWZvci1vZi1sb29wLWV4Y2VwdGlvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICsw
LDAgQEAKLWZ1bmN0aW9uIGFzc2VydChjb25kKSB7Ci0gICAgaWYgKCFjb25kKQotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoImJyb2tlIGFzc2VydGlvbiIpOwotfQotbm9JbmxpbmUoYXNzZXJ0KTsK
LQotZnVuY3Rpb24gc2hvdWxkVGhyb3dJbnZhbGlkQ29uc3RBc3NpZ25tZW50KGYpIHsKLSAgICB2
YXIgdGhyZXcgPSBmYWxzZTsKLSAgICB0cnkgewotICAgICAgICBmKCk7Ci0gICAgfSBjYXRjaChl
KSB7Ci0gICAgICAgIC8vcHJpbnQoZSk7Ci0gICAgICAgIGlmIChlLm5hbWUuaW5kZXhPZigiVHlw
ZUVycm9yIikgIT09IC0xICYmIGUubWVzc2FnZS5pbmRleE9mKCJyZWFkb25seSIpICE9PSAtMSkK
LSAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKLSAgICB9Ci0gICAgYXNzZXJ0KHRocmV3KTsKLX0K
LW5vSW5saW5lKHNob3VsZFRocm93SW52YWxpZENvbnN0QXNzaWdubWVudCk7Ci0KLWZ1bmN0aW9u
IGJheigpe30KLW5vSW5saW5lKGJheik7Ci0KLWZ1bmN0aW9uIGZvbygpIHsKLSAgICBmb3IgKGNv
bnN0IGl0ZW0gb2YgWzEsMiwzXSkgewotICAgICAgICBpdGVtID0gMjA7Ci0gICAgfQotfQotZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0gICAgc2hvdWxkVGhyb3dJbnZhbGlkQ29uc3RB
c3NpZ25tZW50KGZvbyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2V4Y2VwdGlvbi1kZmctaW5saW5lZC1mcmFtZS1ub3Qtc3RyaWN0LWVxdWFsLmpzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9leGNlcHRpb24tZGZnLWlubGluZWQt
ZnJhbWUtbm90LXN0cmljdC1lcXVhbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDE1YjE1ZDNmODJmYzNmMmVlNWFmYjMxMjU4YzEyMWE2ZWJhOWRhYS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2V4Y2VwdGlvbi1kZmctaW5saW5lZC1mcmFtZS1ub3Qtc3RyaWN0LWVxdWFsLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotZnVuY3Rpb24gYXNzZXJ0KGIpIHsKLSAg
ICBpZiAoIWIpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOwotfQot
bm9JbmxpbmUoYXNzZXJ0KTsKLXZhciBvID0gewotICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4ge307IH0sCi0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0KLX07
Ci1mdW5jdGlvbiByZWFkKCkgewotICAgIHJldHVybiAicmVhZCI7Ci19Ci1ub0lubGluZShyZWFk
KTsKLQotZnVuY3Rpb24gYmFyKGEsIGIpIHsKLSAgICByZXR1cm4gYSA9PSBiOwotfQotCi1mdW5j
dGlvbiBmb28oYSwgYikgewotICAgIHZhciByZXN1bHQgPSBudWxsOwotICAgIHZhciB2YWx1ZSA9
IHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgICByZXN1bHQgPSBiYXIoYSwgYik7Ci0gICAgfSBj
YXRjaChlKSB7Ci0gICAgICAgIGFzc2VydCgiIiArIHZhbHVlID09PSAicmVhZCIpOwotICAgIH0K
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci1ub0lubGluZShmb28pOwotCi1mb3IgKHZhciBpID0gMDsg
aSA8IDEwMDA7IGkrKykgewotICAgIGZvbygxMCwgMjApOwotICAgIGZvbyh7fSwge30pOwotICAg
IGZvbygxMCwgMTAuMCk7Ci0gICAgZm9vKCJoZWxsbyIsICJoZWxsbyIpOwotICAgIGZvbyhudWxs
LCB1bmRlZmluZWQpOwotICAgIGZvbyhmYWxzZSwgMCk7Ci19Ci1mb28obywgImhlbGxvIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1k
Zmctbm90LXN0cmljdC1lcXVhbC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZXhjZXB0aW9uLWRmZy1ub3Qtc3RyaWN0LWVxdWFsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlNGRkNDgwZGJhYWUxMmM0OTA3OGY3YWJmMWVkMjBiM2Q4NmQ1OTcwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhjZXB0aW9uLWRmZy1ub3Qtc3RyaWN0LWVxdWFsLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotOyhmdW5jdGlvbiAoKSB7Ci1mdW5jdGlvbiBm
b28oYSwgYikgewotICAgIHZhciByZXN1bHQgPSBudWxsOwotICAgIHRyeSB7Ci0gICAgICAgIHJl
c3VsdCA9IGEgPT0gYjsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICB9Ci19Ci1ub0lubGluZShmb28p
OwotCi1mb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgIGZvbygxMCwgMjApOwot
ICAgIGZvbyh7fSwge30pOwotICAgIGZvbygxMCwgMTAuMCk7Ci0gICAgZm9vKCJoZWxsbyIsICJo
ZWxsbyIpOwotICAgIGZvbyhudWxsLCB1bmRlZmluZWQpOwotICAgIGZvbyhmYWxzZSwgMCk7Ci19
Ci0KLXZhciBvID0gewotICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0sCi0g
ICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0KLX07Ci1mb28obywgImhlbGxv
Iik7Ci19KSgpOwotCi0KLWZ1bmN0aW9uIGFzc2VydChiKSB7Ci0gICAgaWYgKCFiKQotICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKLX0KLW5vSW5saW5lKGFzc2VydCk7
Ci0KLQotOyhmdW5jdGlvbigpIHsKLQotdmFyIF9zaG91bGREb1NvbWV0aGluZ0luRmluYWxseSA9
IGZhbHNlOwotZnVuY3Rpb24gc2hvdWxkRG9Tb21ldGhpbmdJbkZpbmFsbHkoKSB7IHJldHVybiBf
c2hvdWxkRG9Tb21ldGhpbmdJbkZpbmFsbHk7IH0KLW5vSW5saW5lKHNob3VsZERvU29tZXRoaW5n
SW5GaW5hbGx5KTsKLQotZnVuY3Rpb24gZm9vKGEsIGIpIHsKLSAgICB2YXIgcmVzdWx0ID0gbnVs
bDsKLSAgICB0cnkgewotICAgICAgICByZXN1bHQgPSBhID09IGI7Ci0gICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgaWYgKHNob3VsZERvU29tZXRoaW5nSW5GaW5hbGx5KCkpCi0gICAgICAgICAgICBh
c3NlcnQocmVzdWx0ID09PSBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLW5v
SW5saW5lKGZvbyk7Ci0KLWZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgZm9v
KDEwLCAyMCk7Ci0gICAgZm9vKHt9LCB7fSk7Ci0gICAgZm9vKDEwLCAxMC4wKTsKLSAgICBmb28o
ImhlbGxvIiwgImhlbGxvIik7Ci0gICAgZm9vKG51bGwsIHVuZGVmaW5lZCk7Ci0gICAgZm9vKGZh
bHNlLCAwKTsKLX0KLQotdmFyIG8gPSB7Ci0gICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7IHJldHVy
biB7fTsgfSwKLSAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7IHJldHVybiB7fTsgfQotfTsKLXRy
eSB7Ci0gICAgX3Nob3VsZERvU29tZXRoaW5nSW5GaW5hbGx5ID0gdHJ1ZTsKLSAgICBmb28obywg
ImhlbGxvIik7Ci19IGNhdGNoKGUpIHt9Ci0KLX0pKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1kZmctb3BlcmF0aW9uLXJlYWQtdmFs
dWUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1kZmct
b3BlcmF0aW9uLXJlYWQtdmFsdWUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYz
ODM1YTA2ZGFhOTlkNzEzYTViYWE3MmEwMWQ3Y2ZjZWZiMWQxZTMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9leGNlcHRpb24tZGZnLW9wZXJhdGlvbi1yZWFkLXZhbHVlLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMzUgKzAsMCBAQAotZnVuY3Rpb24gYXNzZXJ0KGIpIHsKLSAgICBpZiAoIWIpCi0g
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiIpOwotfQotbm9JbmxpbmUoYXNz
ZXJ0KTsKLXZhciBvID0gewotICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0s
Ci0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0KLX07Ci1mdW5jdGlvbiBy
ZWFkKCkgewotICAgIHJldHVybiAicmVhZCI7Ci19Ci1ub0lubGluZShyZWFkKTsKLQotZnVuY3Rp
b24gZm9vKGEsIGIpIHsKLSAgICB2YXIgcmVzdWx0ID0gbnVsbDsKLSAgICB2YXIgdmFsdWUgPSBy
ZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmVzdWx0ID0gYSA9PSBiOwotICAgIH0gY2F0Y2go
ZSkgewotICAgICAgICBhc3NlcnQoIiIgKyB2YWx1ZSA9PT0gInJlYWQiKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHZhbHVlOwotfQotbm9JbmxpbmUoZm9vKTsKLQotZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwOyBpKyspIHsKLSAgICBmb28oMTAsIDIwKTsKLSAgICBmb28oe30sIHt9KTsKLSAgICBmb28o
MTAsIDEwLjApOwotICAgIGZvbygiaGVsbG8iLCAiaGVsbG8iKTsKLSAgICBmb28obnVsbCwgdW5k
ZWZpbmVkKTsKLSAgICBmb28oZmFsc2UsIDApOwotfQotZm9vKG8sICJoZWxsbyIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9leGNlcHRpb24tZGZnLXRo
cm93LWZyb20tY2F0Y2gtYmxvY2suanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2V4Y2VwdGlvbi1kZmctdGhyb3ctZnJvbS1jYXRjaC1ibG9jay5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTQ2NDU0NWI0ZjFlMDhhOGY1M2E0MDIyNzkxNDlmNDUwZWQyNWVk
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2V4Y2VwdGlvbi1kZmctdGhyb3ctZnJvbS1jYXRj
aC1ibG9jay5qcworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSJ1c2Ugc3RyaWN0IjsK
LWZ1bmN0aW9uIGFzc2VydChjb25kLCBtKSB7Ci0gICAgaWYgKCFjb25kKQotICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoImJyb2tlIGFzc2VydGlvbjogJyIgKyBtICsgIiciKTsKLX0KLW5vSW5saW5l
KGFzc2VydCk7Ci0KLWZ1bmN0aW9uIGJheihiKSB7Ci0gICAgaWYgKGIpCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmF6Iik7Ci19Ci0KLWZ1bmN0aW9uIGJhcihiKSB7Ci0gICAgdmFyIGV4Y2Vw
dGlvbiA9IG51bGw7Ci0gICAgdHJ5IHsKLSAgICAgICAgYmF6KGIpOwotICAgIH0gY2F0Y2goZSkg
ewotICAgICAgICBleGNlcHRpb24gPSBlOwotICAgICAgICBiYXooYik7Ci0gICAgfSBmaW5hbGx5
IHsKLSAgICAgICAgaWYgKGIpIAotICAgICAgICAgICAgYXNzZXJ0KGV4Y2VwdGlvbik7Ci0gICAg
fQotfQotCi1mdW5jdGlvbiBmb28oYikgewotICAgIHZhciBleGNlcHRpb24gPSBudWxsOwotICAg
IHRyeSB7Ci0gICAgICAgIGJhcihiKTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgZXhjZXB0
aW9uID0gZTsKLSAgICB9Ci0gICAgaWYgKGIpCi0gICAgICAgIGFzc2VydChleGNlcHRpb24pOwot
fQotCi1jb25zdCBOVU1fTE9PUFMgPSAxMDAwOwotZm9yICh2YXIgaSA9IDA7IGkgPCBOVU1fTE9P
UFM7IGkrKykgewotICAgIGZvbyhpID09PSBOVU1fTE9PUFMgLSAxKTsKLX0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1YjRm
OWIxNDViMWViZGE1NDZkMzRkYmMyMzJlOTBhZDI5OTg4ZDQ0Li43M2MyNDgzN2NiOGUxZTIyNGEy
OTU0MGY0OWFmMDJhYzU2NmQ4YjM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTUtMDktMTcg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODk5MzgsIHIxODk5NTIsIGFuZCByMTg5OTU2LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzI5CisKKyAgICAg
ICAgQnJva2UgV2ViIFdvcmtlcnMgKFJlcXVlc3RlZCBieSBhcCBvbiAjd2Via2l0KS4KKworICAg
ICAgICBSZXZlcnRlZCBjaGFuZ2VzZXRzOgorCisgICAgICAgICJJbXBsZW1lbnQgdHJ5L2NhdGNo
IGluIHRoZSBERkcuIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ3Mzc0CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4
OTkzOAorCisgICAgICAgICJDTG9vcCBidWlsZCBmaXggYWZ0ZXIgcjE4OTkzOC4iCisgICAgICAg
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4OTk1MgorCisgICAgICAgICJhZGQg
YSByZWdyZXNzIHRlc3QgZm9yIHJpY2hhcmRzIHdpdGggdHJ5L2NhdGNoLiIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTMwMQorICAgICAgICBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xODk5NTYKKwogMjAxNS0wOS0xNyAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJJRExdIEFkZCBzdXBwb3J0
IGZvciBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRjaC1leHBlY3Rl
ZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZWVlMTQ3ZDUyMDNlZjA2MTIw
ZmM5MWJlMTBkYjViNWYzMTA5OTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9yYXl0cmFjZS13aXRoLWVtcHR5LXRy
eS1jYXRjaC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1KU1Jl
Z3Jlc3MvcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2gKLQotT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgotCi0KLVBBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgotUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2guaHRtbCBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2guaHRtbApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzMTY0ZjBjYzdhMDc5MTU3NTljOWNhOGY5YzIwMzBj
NmFiYjI3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3JheXRyYWNlLXdpdGgtZW1wdHktdHJ5LWNhdGNoLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRjaC5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3JheXRyYWNlLXdpdGgtdHJ5LWNhdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcmF5dHJhY2Utd2l0aC10cnktY2F0Y2gtZXhwZWN0ZWQudHh0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODg0NWNlMDA1MGZmNWM2MDdlNDA0NGE1YzQyZDI4NTM3
MDM3N2M3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmF5dHJhY2Utd2l0aC10cnktY2F0Y2gtZXhwZWN0ZWQudHh0
CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotSlNSZWdyZXNzL3JheXRyYWNlLXdpdGgt
dHJ5LWNhdGNoCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIG5vIGV4Y2Vw
dGlvbiB0aHJvd24KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01Q
TEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3JheXRyYWNlLXdpdGgt
dHJ5LWNhdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3JheXRyYWNlLXdpdGgtdHJ5
LWNhdGNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYmZmNDg2ZDI0NTAz
OTM4ZTYwN2FjOTZjMGI4ZGI5YTM3ZThmMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9yYXl0cmFjZS13aXRoLXRy
eS1jYXRjaC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHk+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcmF5dHJhY2Utd2l0aC10cnktY2F0
Y2guanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9yaWNoYXJkcy1lbXB0eS10cnktY2F0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9yaWNoYXJkcy1lbXB0eS10cnktY2F0Y2gtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDdmN2E5ZTkyZmIxOWQxMDY0MDVjNWE0
ZDcyNGE4MDg4YjM2M2RkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmljaGFyZHMtZW1wdHktdHJ5LWNhdGNoLWV4
cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLUpTUmVncmVzcy9yaWNo
YXJkcy1lbXB0eS10cnktY2F0Y2gKLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLVBB
U1Mgbm8gZXhjZXB0aW9uIHRocm93bgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQot
Ci1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvcmlj
aGFyZHMtZW1wdHktdHJ5LWNhdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3JpY2hh
cmRzLWVtcHR5LXRyeS1jYXRjaC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
ODliMTY3OWI3MTNiYzhmMTk1YTdlMTdiMTZmMzI4YWNkODBkMjZkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvcmlj
aGFyZHMtZW1wdHktdHJ5LWNhdGNoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBA
Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4K
LTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yaWNoYXJk
cy1lbXB0eS10cnktY2F0Y2guanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9yaWNoYXJkcy10cnktY2F0Y2gtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9yaWNoYXJkcy10cnktY2F0Y2gtZXhwZWN0ZWQu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWE0NGY0OGRlYTczMWI2OWUwN2Fl
ZDZhY2RlYmJjOGU3OWFkMmMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmljaGFyZHMtdHJ5LWNhdGNoLWV4cGVj
dGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLUpTUmVncmVzcy9yaWNoYXJk
cy10cnktY2F0Y2gKLQotT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgotCi0KLVBBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENP
TVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmljaGFyZHMtdHJ5
LWNhdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3JpY2hhcmRzLXRyeS1jYXRjaC5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmRjNGI5OTI3Y2UxZTg1MGU5MGFl
ODVkNmNmNTVjMjU1ZjFiOWY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcmljaGFyZHMtdHJ5LWNhdGNoLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yaWNoYXJkcy10cnktY2F0Y2guanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2guanMgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRjaC5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFmYWQxN2UyOTllODIzYWNlYTViNDU5MDhh
MWFiYzNlM2ZjNjZlZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9yYXl0cmFjZS13aXRoLWVt
cHR5LXRyeS1jYXRjaC5qcworKysgL2Rldi9udWxsCkBAIC0xLDUyOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0KLWZ1bmN0aW9uIGNyZWF0
ZVZlY3Rvcih4LHkseikgewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBuZXcgQXJyYXkoeCx5
LHopOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19Ci0KLWZ1bmN0aW9uIHNxckxlbmd0aFZlY3Rvcihz
ZWxmKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIHNlbGZbMF0gKiBzZWxmWzBdICsgc2Vs
ZlsxXSAqIHNlbGZbMV0gKyBzZWxmWzJdICogc2VsZlsyXTsKLSAgICB9IGNhdGNoKGUpIHsgfQot
fQotCi1mdW5jdGlvbiBsZW5ndGhWZWN0b3Ioc2VsZikgewotICAgIHRyeSB7Ci0gICAgICAgIHJl
dHVybiBNYXRoLnNxcnQoc2VsZlswXSAqIHNlbGZbMF0gKyBzZWxmWzFdICogc2VsZlsxXSArIHNl
bGZbMl0gKiBzZWxmWzJdKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi1mdW5jdGlvbiBhZGRW
ZWN0b3Ioc2VsZiwgdikgewotICAgIHRyeSB7Ci0gICAgICAgIHNlbGZbMF0gKz0gdlswXTsKLSAg
ICAgICAgc2VsZlsxXSArPSB2WzFdOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICBzZWxmWzJd
ICs9IHZbMl07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLWZ1bmN0aW9uIHN1YlZlY3RvcihzZWxm
LCB2KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgc2VsZlswXSAtPSB2WzBdOwotICAgICAgICBzZWxm
WzFdIC09IHZbMV07Ci0gICAgfSBjYXRjaChlKSB7IAotICAgIH0KLSAgICBzZWxmWzJdIC09IHZb
Ml07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLWZ1bmN0aW9uIHNjYWxlVmVjdG9yKHNlbGYsIHNj
YWxlKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgc2VsZlswXSAqPSBzY2FsZTsKLSAgICAgICAgc2Vs
ZlsxXSAqPSBzY2FsZTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHNlbGZbMl0gKj0gc2NhbGU7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLWZ1bmN0aW9uIG5vcm1hbGlzZVZlY3RvcihzZWxmKSB7
Ci0gICAgdmFyIGxlbiA9IE1hdGguc3FydChzZWxmWzBdICogc2VsZlswXSArIHNlbGZbMV0gKiBz
ZWxmWzFdICsgc2VsZlsyXSAqIHNlbGZbMl0pOwotICAgIHRyeSB7Ci0gICAgICAgIHNlbGZbMF0g
Lz0gbGVuOwotICAgICAgICBzZWxmWzFdIC89IGxlbjsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAg
IHNlbGZbMl0gLz0gbGVuOwotICAgIHJldHVybiBzZWxmOwotfQotCi1mdW5jdGlvbiBhZGQodjEs
IHYyKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIG5ldyBBcnJheSh2MVswXSArIHYyWzBd
LCB2MVsxXSArIHYyWzFdLCB2MVsyXSArIHYyWzJdKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfQot
Ci1mdW5jdGlvbiBzdWIodjEsIHYyKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIG5ldyBB
cnJheSh2MVswXSAtIHYyWzBdLCB2MVsxXSAtIHYyWzFdLCB2MVsyXSAtIHYyWzJdKTsKLSAgICB9
IGNhdGNoKGUpIHsgfQotfQotCi1mdW5jdGlvbiBzY2FsZXYodjEsIHYyKSB7Ci0gICAgdHJ5IHsK
LSAgICAgICAgcmV0dXJuIG5ldyBBcnJheSh2MVswXSAqIHYyWzBdLCB2MVsxXSAqIHYyWzFdLCB2
MVsyXSAqIHYyWzJdKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi1mdW5jdGlvbiBkb3QodjEs
IHYyKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIHYxWzBdICogdjJbMF0gKyB2MVsxXSAq
IHYyWzFdICsgdjFbMl0gKiB2MlsyXTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi1mdW5jdGlv
biBzY2FsZSh2LCBzY2FsZSkgewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBbdlswXSAqIHNj
YWxlLCB2WzFdICogc2NhbGUsIHZbMl0gKiBzY2FsZV07Ci0gICAgfSBjYXRjaChlKSB7IH0KLX0K
LQotZnVuY3Rpb24gY3Jvc3ModjEsIHYyKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIFt2
MVsxXSAqIHYyWzJdIC0gdjFbMl0gKiB2MlsxXSwgCi0gICAgICAgICAgICAgICAgdjFbMl0gKiB2
MlswXSAtIHYxWzBdICogdjJbMl0sCi0gICAgICAgICAgICAgICAgdjFbMF0gKiB2MlsxXSAtIHYx
WzFdICogdjJbMF1dOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0KLX0KLQotZnVuY3Rpb24gbm9ybWFs
aXNlKHYpIHsKLSAgICB2YXIgbGVuID0gbGVuZ3RoVmVjdG9yKHYpOwotICAgIHRyeSB7Ci0gICAg
fSBjYXRjaChlKSB7IH0KLSAgICByZXR1cm4gW3ZbMF0gLyBsZW4sIHZbMV0gLyBsZW4sIHZbMl0g
LyBsZW5dOwotfQotCi1mdW5jdGlvbiB0cmFuc2Zvcm1NYXRyaXgoc2VsZiwgdikgewotICAgIHRy
eSB7Ci0gICAgICAgIHZhciB2YWxzID0gc2VsZjsKLSAgICAgICAgdmFyIHggID0gdmFsc1swXSAq
IHZbMF0gKyB2YWxzWzFdICogdlsxXSArIHZhbHNbMl0gKiB2WzJdICsgdmFsc1szXTsKLSAgICAg
ICAgdmFyIHkgID0gdmFsc1s0XSAqIHZbMF0gKyB2YWxzWzVdICogdlsxXSArIHZhbHNbNl0gKiB2
WzJdICsgdmFsc1s3XTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHZhciB6ICA9IHZhbHNbOF0g
KiB2WzBdICsgdmFsc1s5XSAqIHZbMV0gKyB2YWxzWzEwXSAqIHZbMl0gKyB2YWxzWzExXTsKLSAg
ICByZXR1cm4gW3gsIHksIHpdOwotfQotCi1mdW5jdGlvbiBpbnZlcnRNYXRyaXgoc2VsZikgewot
ICAgIHRyeSB7Ci0gICAgICAgIHZhciB0ZW1wID0gbmV3IEFycmF5KDE2KTsKLSAgICAgICAgdmFy
IHR4ID0gLXNlbGZbM107Ci0gICAgICAgIHZhciB0eSA9IC1zZWxmWzddOwotICAgICAgICB2YXIg
dHogPSAtc2VsZlsxMV07Ci0gICAgICAgIGZvciAoaCA9IDA7IGggPCAzOyBoKyspIAotICAgICAg
ICAgICAgZm9yICh2ID0gMDsgdiA8IDM7IHYrKykgCi0gICAgICAgICAgICAgICAgdGVtcFtoICsg
diAqIDRdID0gc2VsZlt2ICsgaCAqIDRdOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgdHJ5IHsK
LSAgICAgICAgZm9yIChpID0gMDsgaSA8IDExOyBpKyspCi0gICAgICAgICAgICBzZWxmW2ldID0g
dGVtcFtpXTsKLSAgICAgICAgc2VsZlszXSA9IHR4ICogc2VsZlswXSArIHR5ICogc2VsZlsxXSAr
IHR6ICogc2VsZlsyXTsKLSAgICAgICAgc2VsZls3XSA9IHR4ICogc2VsZls0XSArIHR5ICogc2Vs
Zls1XSArIHR6ICogc2VsZls2XTsKLSAgICAgICAgc2VsZlsxMV0gPSB0eCAqIHNlbGZbOF0gKyB0
eSAqIHNlbGZbOV0gKyB0eiAqIHNlbGZbMTBdOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLQotLy8gVHJpYW5nbGUgaW50ZXJzZWN0aW9uIHVzaW5nIGJhcnljZW50
cmljIGNvb3JkIG1ldGhvZAotZnVuY3Rpb24gVHJpYW5nbGUocDEsIHAyLCBwMykgewotICAgIHRy
eSB7Ci0gICAgICAgIHZhciBlZGdlMSA9IHN1YihwMywgcDEpOwotICAgICAgICB2YXIgZWRnZTIg
PSBzdWIocDIsIHAxKTsKLSAgICAgICAgdmFyIG5vcm1hbCA9IGNyb3NzKGVkZ2UxLCBlZGdlMik7
Ci0gICAgICAgIGlmIChNYXRoLmFicyhub3JtYWxbMF0pID4gTWF0aC5hYnMobm9ybWFsWzFdKSkK
LSAgICAgICAgICAgIGlmIChNYXRoLmFicyhub3JtYWxbMF0pID4gTWF0aC5hYnMobm9ybWFsWzJd
KSkKLSAgICAgICAgICAgICAgICB0aGlzLmF4aXMgPSAwOyAKLSAgICAgICAgICAgIGVsc2UgCi0g
ICAgICAgICAgICAgICAgdGhpcy5heGlzID0gMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
aWYgKE1hdGguYWJzKG5vcm1hbFsxXSkgPiBNYXRoLmFicyhub3JtYWxbMl0pKSAKLSAgICAgICAg
ICAgICAgICB0aGlzLmF4aXMgPSAxOwotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAg
ICB0aGlzLmF4aXMgPSAyOwotICAgICAgICB2YXIgdSA9ICh0aGlzLmF4aXMgKyAxKSAlIDM7Ci0g
ICAgICAgIHZhciB2ID0gKHRoaXMuYXhpcyArIDIpICUgMzsKLSAgICAgICAgdmFyIHUxID0gZWRn
ZTFbdV07Ci0gICAgICAgIHZhciB2MSA9IGVkZ2UxW3ZdOwotICAgICAgICAKLSAgICAgICAgdmFy
IHUyID0gZWRnZTJbdV07Ci0gICAgICAgIHZhciB2MiA9IGVkZ2UyW3ZdOwotICAgICAgICB0aGlz
Lm5vcm1hbCA9IG5vcm1hbGlzZShub3JtYWwpOwotICAgICAgICB0aGlzLm51ID0gbm9ybWFsW3Vd
IC8gbm9ybWFsW3RoaXMuYXhpc107Ci0gICAgICAgIHRoaXMubnYgPSBub3JtYWxbdl0gLyBub3Jt
YWxbdGhpcy5heGlzXTsKLSAgICAgICAgdGhpcy5uZCA9IGRvdChub3JtYWwsIHAxKSAvIG5vcm1h
bFt0aGlzLmF4aXNdOwotICAgICAgICB2YXIgZGV0ID0gdTEgKiB2MiAtIHYxICogdTI7Ci0gICAg
ICAgIHRoaXMuZXUgPSBwMVt1XTsKLSAgICAgICAgdGhpcy5ldiA9IHAxW3ZdOyAKLSAgICAgICAg
dGhpcy5udTEgPSB1MSAvIGRldDsKLSAgICAgICAgdGhpcy5udjEgPSAtdjEgLyBkZXQ7Ci0gICAg
ICAgIHRoaXMubnUyID0gdjIgLyBkZXQ7Ci0gICAgICAgIHRoaXMubnYyID0gLXUyIC8gZGV0OyAK
LSAgICAgICAgdGhpcy5tYXRlcmlhbCA9IFswLjcsIDAuNywgMC43XTsKLSAgICB9IGNhdGNoKGUp
IHsgfQotfQotCi1UcmlhbmdsZS5wcm90b3R5cGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ob3JpZywg
ZGlyLCBuZWFyLCBmYXIpIHsKLSAgICB0cnkgewotICAgICAgICB2YXIgdSA9ICh0aGlzLmF4aXMg
KyAxKSAlIDM7Ci0gICAgICAgIHZhciB2ID0gKHRoaXMuYXhpcyArIDIpICUgMzsKLSAgICAgICAg
dmFyIGQgPSBkaXJbdGhpcy5heGlzXSArIHRoaXMubnUgKiBkaXJbdV0gKyB0aGlzLm52ICogZGly
W3ZdOwotICAgICAgICB2YXIgdCA9ICh0aGlzLm5kIC0gb3JpZ1t0aGlzLmF4aXNdIC0gdGhpcy5u
dSAqIG9yaWdbdV0gLSB0aGlzLm52ICogb3JpZ1t2XSkgLyBkOwotICAgIH0gY2F0Y2goZSkgeyB9
Ci0gICAgaWYgKHQgPCBuZWFyIHx8IHQgPiBmYXIpCi0gICAgICAgIHJldHVybiBudWxsOwotICAg
IHRyeSB7Ci0gICAgICAgIHZhciBQdSA9IG9yaWdbdV0gKyB0ICogZGlyW3VdIC0gdGhpcy5ldTsK
LSAgICAgICAgdmFyIFB2ID0gb3JpZ1t2XSArIHQgKiBkaXJbdl0gLSB0aGlzLmV2OwotICAgICAg
ICB2YXIgYTIgPSBQdiAqIHRoaXMubnUxICsgUHUgKiB0aGlzLm52MTsKLSAgICB9IGNhdGNoKGUp
IHsgfQotICAgIGlmIChhMiA8IDApIAotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB0cnkgewot
ICAgICAgICB2YXIgYTMgPSBQdSAqIHRoaXMubnUyICsgUHYgKiB0aGlzLm52MjsKLSAgICB9IGNh
dGNoKGUpIHsgfQotICAgIGlmIChhMyA8IDApIAotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
IGlmICgoYTIgKyBhMykgPiAxKSAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgcmV0dXJuIHQ7
Ci19Ci0KLWZ1bmN0aW9uIFNjZW5lKGFfdHJpYW5nbGVzKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAg
dGhpcy50cmlhbmdsZXMgPSBhX3RyaWFuZ2xlczsKLSAgICAgICAgdGhpcy5saWdodHMgPSBbXTsK
LSAgICAgICAgdGhpcy5hbWJpZW50ID0gWzAsMCwwXTsKLSAgICAgICAgdGhpcy5iYWNrZ3JvdW5k
ID0gWzAuOCwwLjgsMV07Ci0gICAgfSBjYXRjaChlKSB7IH0KLX0KLXZhciB6ZXJvID0gbmV3IEFy
cmF5KDAsMCwwKTsKLQotU2NlbmUucHJvdG90eXBlLmludGVyc2VjdCA9IGZ1bmN0aW9uKG9yaWdp
biwgZGlyLCBuZWFyLCBmYXIpIHsKLSAgICB2YXIgY2xvc2VzdCA9IG51bGw7Ci0gICAgZm9yIChp
ID0gMDsgaSA8IHRoaXMudHJpYW5nbGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSB0aGlzLnRyaWFuZ2xlc1tpXTsgICAKLSAgICAgICAg
ICAgIHZhciBkID0gdHJpYW5nbGUuaW50ZXJzZWN0KG9yaWdpbiwgZGlyLCBuZWFyLCBmYXIpOwot
ICAgICAgICAgICAgaWYgKGQgPT0gbnVsbCB8fCBkID4gZmFyIHx8IGQgPCBuZWFyKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZmFyID0gZDsKLSAgICAgICAgICAgIGNs
b3Nlc3QgPSB0cmlhbmdsZTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFjbG9zZXN0KQotICAgICAgICByZXR1cm4gW3RoaXMuYmFja2dyb3VuZFswXSx0aGlz
LmJhY2tncm91bmRbMV0sdGhpcy5iYWNrZ3JvdW5kWzJdXTsKLSAgICAgICAgCi0gICAgdHJ5IHsK
LSAgICAgICAgdmFyIG5vcm1hbCA9IGNsb3Nlc3Qubm9ybWFsOwotICAgICAgICB2YXIgaGl0ID0g
YWRkKG9yaWdpbiwgc2NhbGUoZGlyLCBmYXIpKTsgCi0gICAgICAgIGlmIChkb3QoZGlyLCBub3Jt
YWwpID4gMCkKLSAgICAgICAgICAgIG5vcm1hbCA9IFstbm9ybWFsWzBdLCAtbm9ybWFsWzFdLCAt
bm9ybWFsWzJdXTsKLSAgICAgICAgCi0gICAgICAgIHZhciBjb2xvdXIgPSBudWxsOwotICAgICAg
ICBpZiAoY2xvc2VzdC5zaGFkZXIpIHsKLSAgICAgICAgICAgIGNvbG91ciA9IGNsb3Nlc3Quc2hh
ZGVyKGNsb3Nlc3QsIGhpdCwgZGlyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNv
bG91ciA9IGNsb3Nlc3QubWF0ZXJpYWw7Ci0gICAgICAgIH0KLSAgICB9IGNhdGNoKGUpIHsgfQot
ICAgIAotICAgIC8vIGRvIHJlZmxlY3Rpb24KLSAgICB2YXIgcmVmbGVjdGVkID0gbnVsbDsKLSAg
ICBpZiAoY29sb3VyLnJlZmxlY3Rpb24gPiAwLjAwMSkgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgdmFyIHJlZmxlY3Rpb24gPSBhZGRWZWN0b3Ioc2NhbGUobm9ybWFsLCAtMipkb3QoZGly
LCBub3JtYWwpKSwgZGlyKTsKLSAgICAgICAgICAgIHJlZmxlY3RlZCA9IHRoaXMuaW50ZXJzZWN0
KGhpdCwgcmVmbGVjdGlvbiwgMC4wMDAxLCAxMDAwMDAwKTsKLSAgICAgICAgfSBjYXRjaChlKSB7
IH0KLSAgICAgICAgaWYgKGNvbG91ci5yZWZsZWN0aW9uID49IDAuOTk5OTk5KQotICAgICAgICAg
ICAgcmV0dXJuIHJlZmxlY3RlZDsKLSAgICB9Ci0gICAgCi0gICAgdmFyIGwgPSBbdGhpcy5hbWJp
ZW50WzBdLCB0aGlzLmFtYmllbnRbMV0sIHRoaXMuYW1iaWVudFsyXV07Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmxpZ2h0cy5sZW5ndGg7IGkrKykgewotICAgICAgICB0cnkgewotICAg
ICAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5saWdodHNbaV07Ci0gICAgICAgICAgICB2YXIgdG9M
aWdodCA9IHN1YihsaWdodCwgaGl0KTsKLSAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGxlbmd0
aFZlY3Rvcih0b0xpZ2h0KTsKLSAgICAgICAgICAgIHNjYWxlVmVjdG9yKHRvTGlnaHQsIDEuMC9k
aXN0YW5jZSk7Ci0gICAgICAgICAgICBkaXN0YW5jZSAtPSAwLjAwMDE7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5ibG9ja2VkKGhpdCwgdG9MaWdodCwgZGlzdGFuY2UpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIG5sID0gZG90KG5vcm1hbCwgdG9MaWdodCk7Ci0g
ICAgICAgICAgICBpZiAobmwgPiAwKQotICAgICAgICAgICAgICAgIGFkZFZlY3RvcihsLCBzY2Fs
ZShsaWdodC5jb2xvdXIsIG5sKSk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfQotICAg
IHRyeSB7Ci0gICAgICAgIGwgPSBzY2FsZXYobCwgY29sb3VyKTsKLSAgICAgICAgaWYgKHJlZmxl
Y3RlZCkgewotICAgICAgICAgICAgbCA9IGFkZFZlY3RvcihzY2FsZVZlY3RvcihsLCAxIC0gY29s
b3VyLnJlZmxlY3Rpb24pLCBzY2FsZVZlY3RvcihyZWZsZWN0ZWQsIGNvbG91ci5yZWZsZWN0aW9u
KSk7Ci0gICAgICAgIH0KLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHJldHVybiBsOwotfQotCi1T
Y2VuZS5wcm90b3R5cGUuYmxvY2tlZCA9IGZ1bmN0aW9uKE8sIEQsIGZhcikgewotICAgIHZhciBu
ZWFyID0gMC4wMDAxOwotICAgIHZhciBjbG9zZXN0ID0gbnVsbDsKLSAgICBmb3IgKGkgPSAwOyBp
IDwgdGhpcy50cmlhbmdsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgIHZhciB0cmlhbmdsZSA9IHRoaXMudHJpYW5nbGVzW2ldOyAgIAotICAgICAgICAgICAgdmFy
IGQgPSB0cmlhbmdsZS5pbnRlcnNlY3QoTywgRCwgbmVhciwgZmFyKTsKLSAgICAgICAgfSBjYXRj
aChlKSB7IH0KLSAgICAgICAgaWYgKGQgPT0gbnVsbCB8fCBkID4gZmFyIHx8IGQgPCBuZWFyKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLQotLy8gdGhpcyBjYW1lcmEgY29kZSBpcyBmcm9tIG5v
dGVzIGkgbWFkZSBhZ2VzIGFnbywgaXQgaXMgZnJvbSAqc29tZXdoZXJlKiAtLSBpIGNhbm5vdCBy
ZW1lbWJlciB3aGVyZQotLy8gdGhhdCBzb21ld2hlcmUgaXMKLWZ1bmN0aW9uIENhbWVyYShvcmln
aW4sIGxvb2thdCwgdXApIHsKLSAgICB0cnkgewotICAgICAgICB2YXIgemF4aXMgPSBub3JtYWxp
c2VWZWN0b3Ioc3ViVmVjdG9yKGxvb2thdCwgb3JpZ2luKSk7Ci0gICAgICAgIHZhciB4YXhpcyA9
IG5vcm1hbGlzZVZlY3Rvcihjcm9zcyh1cCwgemF4aXMpKTsKLSAgICAgICAgdmFyIHlheGlzID0g
bm9ybWFsaXNlVmVjdG9yKGNyb3NzKHhheGlzLCBzdWJWZWN0b3IoWzAsMCwwXSwgemF4aXMpKSk7
Ci0gICAgICAgIHZhciBtID0gbmV3IEFycmF5KDE2KTsKLSAgICAgICAgbVswXSA9IHhheGlzWzBd
OyBtWzFdID0geGF4aXNbMV07IG1bMl0gPSB4YXhpc1syXTsKLSAgICAgICAgbVs0XSA9IHlheGlz
WzBdOyBtWzVdID0geWF4aXNbMV07IG1bNl0gPSB5YXhpc1syXTsKLSAgICAgICAgbVs4XSA9IHph
eGlzWzBdOyBtWzldID0gemF4aXNbMV07IG1bMTBdID0gemF4aXNbMl07Ci0gICAgICAgIGludmVy
dE1hdHJpeChtKTsKLSAgICAgICAgbVszXSA9IDA7IG1bN10gPSAwOyBtWzExXSA9IDA7Ci0gICAg
ICAgIHRoaXMub3JpZ2luID0gb3JpZ2luOwotICAgICAgICB0aGlzLmRpcmVjdGlvbnMgPSBuZXcg
QXJyYXkoNCk7Ci0gICAgICAgIHRoaXMuZGlyZWN0aW9uc1swXSA9IG5vcm1hbGlzZShbLTAuNywg
IDAuNywgMV0pOwotICAgICAgICB0aGlzLmRpcmVjdGlvbnNbMV0gPSBub3JtYWxpc2UoWyAwLjcs
ICAwLjcsIDFdKTsKLSAgICAgICAgdGhpcy5kaXJlY3Rpb25zWzJdID0gbm9ybWFsaXNlKFsgMC43
LCAtMC43LCAxXSk7Ci0gICAgICAgIHRoaXMuZGlyZWN0aW9uc1szXSA9IG5vcm1hbGlzZShbLTAu
NywgLTAuNywgMV0pOwotICAgICAgICB0aGlzLmRpcmVjdGlvbnNbMF0gPSB0cmFuc2Zvcm1NYXRy
aXgobSwgdGhpcy5kaXJlY3Rpb25zWzBdKTsKLSAgICAgICAgdGhpcy5kaXJlY3Rpb25zWzFdID0g
dHJhbnNmb3JtTWF0cml4KG0sIHRoaXMuZGlyZWN0aW9uc1sxXSk7Ci0gICAgICAgIHRoaXMuZGly
ZWN0aW9uc1syXSA9IHRyYW5zZm9ybU1hdHJpeChtLCB0aGlzLmRpcmVjdGlvbnNbMl0pOwotICAg
ICAgICB0aGlzLmRpcmVjdGlvbnNbM10gPSB0cmFuc2Zvcm1NYXRyaXgobSwgdGhpcy5kaXJlY3Rp
b25zWzNdKTsKLQotICAgIH0gY2F0Y2goZSkgeyB9Ci19Ci0KLUNhbWVyYS5wcm90b3R5cGUuZ2Vu
ZXJhdGVSYXlQYWlyID0gZnVuY3Rpb24oeSkgewotICAgIHRyeSB7Ci0gICAgICAgIHJheXMgPSBu
ZXcgQXJyYXkobmV3IE9iamVjdCgpLCBuZXcgT2JqZWN0KCkpOwotICAgICAgICByYXlzWzBdLm9y
aWdpbiA9IHRoaXMub3JpZ2luOwotICAgICAgICByYXlzWzFdLm9yaWdpbiA9IHRoaXMub3JpZ2lu
OwotICAgICAgICByYXlzWzBdLmRpciA9IGFkZFZlY3RvcihzY2FsZSh0aGlzLmRpcmVjdGlvbnNb
MF0sIHkpLCBzY2FsZSh0aGlzLmRpcmVjdGlvbnNbM10sIDEgLSB5KSk7Ci0gICAgICAgIHJheXNb
MV0uZGlyID0gYWRkVmVjdG9yKHNjYWxlKHRoaXMuZGlyZWN0aW9uc1sxXSwgeSksIHNjYWxlKHRo
aXMuZGlyZWN0aW9uc1syXSwgMSAtIHkpKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHJldHVy
biByYXlzOwotfQotCi1mdW5jdGlvbiByZW5kZXJSb3dzKGNhbWVyYSwgc2NlbmUsIHBpeGVscywg
d2lkdGgsIGhlaWdodCwgc3RhcnR5LCBzdG9weSkgewotICAgIGZvciAodmFyIHkgPSBzdGFydHk7
IHkgPCBzdG9weTsgeSsrKSB7Ci0gICAgICAgIHZhciByYXlzID0gY2FtZXJhLmdlbmVyYXRlUmF5
UGFpcih5IC8gaGVpZ2h0KTsKLSAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHZhciB4cCA9IHggLyB3aWR0
aDsKLSAgICAgICAgICAgICAgICB2YXIgb3JpZ2luID0gYWRkVmVjdG9yKHNjYWxlKHJheXNbMF0u
b3JpZ2luLCB4cCksIHNjYWxlKHJheXNbMV0ub3JpZ2luLCAxIC0geHApKTsKLSAgICAgICAgICAg
ICAgICB2YXIgZGlyID0gbm9ybWFsaXNlVmVjdG9yKGFkZFZlY3RvcihzY2FsZShyYXlzWzBdLmRp
ciwgeHApLCBzY2FsZShyYXlzWzFdLmRpciwgMSAtIHhwKSkpOwotICAgICAgICAgICAgICAgIHZh
ciBsID0gc2NlbmUuaW50ZXJzZWN0KG9yaWdpbiwgZGlyKTsKLSAgICAgICAgICAgICAgICBwaXhl
bHNbeV1beF0gPSBsOwotICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotQ2FtZXJhLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihzY2VuZSwgcGl4ZWxz
LCB3aWR0aCwgaGVpZ2h0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdmFyIGNhbSA9IHRoaXM7Ci0g
ICAgICAgIHZhciByb3cgPSAwOwotICAgICAgICByZW5kZXJSb3dzKGNhbSwgc2NlbmUsIHBpeGVs
cywgd2lkdGgsIGhlaWdodCwgMCwgaGVpZ2h0KTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi0K
LQotZnVuY3Rpb24gcmF5dHJhY2VTY2VuZSgpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgdmFyIHN0
YXJ0RGF0ZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwotICAgICAgICB2YXIgbnVtVHJpYW5nbGVz
ID0gMiAqIDY7Ci0gICAgICAgIHZhciB0cmlhbmdsZXMgPSBuZXcgQXJyYXkoKTsvL251bVRyaWFu
Z2xlcyk7Ci0gICAgICAgIHZhciB0ZmwgPSBjcmVhdGVWZWN0b3IoLTEwLCAgMTAsIC0xMCk7Ci0g
ICAgICAgIHZhciB0ZnIgPSBjcmVhdGVWZWN0b3IoIDEwLCAgMTAsIC0xMCk7Ci0gICAgICAgIHZh
ciB0YmwgPSBjcmVhdGVWZWN0b3IoLTEwLCAgMTAsICAxMCk7Ci0gICAgICAgIHZhciB0YnIgPSBj
cmVhdGVWZWN0b3IoIDEwLCAgMTAsICAxMCk7Ci0gICAgICAgIHZhciBiZmwgPSBjcmVhdGVWZWN0
b3IoLTEwLCAtMTAsIC0xMCk7Ci0gICAgICAgIHZhciBiZnIgPSBjcmVhdGVWZWN0b3IoIDEwLCAt
MTAsIC0xMCk7Ci0gICAgICAgIHZhciBiYmwgPSBjcmVhdGVWZWN0b3IoLTEwLCAtMTAsICAxMCk7
Ci0gICAgICAgIHZhciBiYnIgPSBjcmVhdGVWZWN0b3IoIDEwLCAtMTAsICAxMCk7Ci0gICAgICAg
IAotICAgICAgICAvLyBjdWJlISEhCi0gICAgICAgIC8vIGZyb250Ci0gICAgICAgIHZhciBpID0g
MDsKLSAgICAgICAgCi0gICAgICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKHRmbCwg
dGZyLCBiZnIpOwotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmdsZSh0ZmwsIGJm
ciwgYmZsKTsKLSAgICAgICAgLy8gYmFjawotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBU
cmlhbmdsZSh0YmwsIHRiciwgYmJyKTsKLSAgICAgICAgdHJpYW5nbGVzW2krK10gPSBuZXcgVHJp
YW5nbGUodGJsLCBiYnIsIGJibCk7Ci0gICAgICAgIC8vICAgICAgICB0cmlhbmdsZXNbaS0xXS5t
YXRlcmlhbCA9IFswLjcsMC4yLDAuMl07Ci0gICAgICAgIC8vICAgICAgICAgICAgdHJpYW5nbGVz
W2ktMV0ubWF0ZXJpYWwucmVmbGVjdGlvbiA9IDAuODsKLSAgICAgICAgLy8gbGVmdAotICAgICAg
ICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmdsZSh0YmwsIHRmbCwgYmJsKTsKLSAgICAgICAg
Ly8gICAgICAgICAgICB0cmlhbmdsZXNbaS0xXS5yZWZsZWN0aW9uID0gMC42OwotICAgICAgICB0
cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmdsZSh0ZmwsIGJmbCwgYmJsKTsKLSAgICAgICAgLy8g
ICAgICAgICAgICB0cmlhbmdsZXNbaS0xXS5yZWZsZWN0aW9uID0gMC42OwotICAgICAgICAvLyBy
aWdodAotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmdsZSh0YnIsIHRmciwgYmJy
KTsKLSAgICAgICAgdHJpYW5nbGVzW2krK10gPSBuZXcgVHJpYW5nbGUodGZyLCBiZnIsIGJicik7
Ci0gICAgICAgIC8vIHRvcAotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmdsZSh0
YmwsIHRiciwgdGZyKTsKLSAgICAgICAgdHJpYW5nbGVzW2krK10gPSBuZXcgVHJpYW5nbGUodGJs
LCB0ZnIsIHRmbCk7Ci0gICAgICAgIC8vIGJvdHRvbQotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9
IG5ldyBUcmlhbmdsZShiYmwsIGJiciwgYmZyKTsKLSAgICAgICAgdHJpYW5nbGVzW2krK10gPSBu
ZXcgVHJpYW5nbGUoYmJsLCBiZnIsIGJmbCk7Ci0gICAgICAgIAotICAgICAgICAvL0Zsb29yISEh
IQotICAgICAgICB2YXIgZ3JlZW4gPSBjcmVhdGVWZWN0b3IoMC4wLCAwLjQsIDAuMCk7Ci0gICAg
ICAgIHZhciBncmV5ID0gY3JlYXRlVmVjdG9yKDAuNCwgMC40LCAwLjQpOwotICAgICAgICBncmV5
LnJlZmxlY3Rpb24gPSAxLjA7Ci0KLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHZhciBmbG9vclNo
YWRlciA9IGZ1bmN0aW9uKHRyaSwgcG9zLCB2aWV3KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICB2YXIgeCA9ICgocG9zWzBdLzMyKSAlIDIgKyAyKSAlIDI7Ci0gICAgICAgICAgICB2YXIg
eiA9ICgocG9zWzJdLzMyICsgMC4zKSAlIDIgKyAyKSAlIDI7Ci0gICAgICAgIH0gY2F0Y2goZSkg
eyB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoeCA8IDEgIT0geiA8IDEpIHsKLSAg
ICAgICAgICAgICAgICAvL2luIHRoZSByZWFsIHdvcmxkIHdlIHVzZSB0aGUgZnJlc25lbCB0ZXJt
Li4uCi0gICAgICAgICAgICAgICAgLy8gICAgdmFyIGFuZ2xlID0gMS1kb3QodmlldywgdHJpLm5v
cm1hbCk7Ci0gICAgICAgICAgICAgICAgLy8gICBhbmdsZSAqPSBhbmdsZTsKLSAgICAgICAgICAg
ICAgICAvLyAgYW5nbGUgKj0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgLy8gYW5nbGUgKj0gYW5n
bGU7Ci0gICAgICAgICAgICAgICAgLy9ncmV5LnJlZmxlY3Rpb24gPSBhbmdsZTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ3JleTsKLSAgICAgICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ3JlZW47Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfQotICAgIHZhciBm
ZmwgPSBjcmVhdGVWZWN0b3IoLTEwMDAsIC0zMCwgLTEwMDApOwotICAgIHZhciBmZnIgPSBjcmVh
dGVWZWN0b3IoIDEwMDAsIC0zMCwgLTEwMDApOwotICAgIHZhciBmYmwgPSBjcmVhdGVWZWN0b3Io
LTEwMDAsIC0zMCwgIDEwMDApOwotICAgIHZhciBmYnIgPSBjcmVhdGVWZWN0b3IoIDEwMDAsIC0z
MCwgIDEwMDApOwotICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKGZibCwgZmJyLCBm
ZnIpOwotICAgIHRyaWFuZ2xlc1tpLTFdLnNoYWRlciA9IGZsb29yU2hhZGVyOwotICAgIHRyaWFu
Z2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKGZibCwgZmZyLCBmZmwpOwotICAgIHRyaWFuZ2xlc1tp
LTFdLnNoYWRlciA9IGZsb29yU2hhZGVyOwotICAgIAotICAgIHZhciBfc2NlbmUgPSBuZXcgU2Nl
bmUodHJpYW5nbGVzKTsKLSAgICBfc2NlbmUubGlnaHRzWzBdID0gY3JlYXRlVmVjdG9yKDIwLCAz
OCwgLTIyKTsKLSAgICBfc2NlbmUubGlnaHRzWzBdLmNvbG91ciA9IGNyZWF0ZVZlY3RvcigwLjcs
IDAuMywgMC4zKTsKLSAgICBfc2NlbmUubGlnaHRzWzFdID0gY3JlYXRlVmVjdG9yKC0yMywgNDAs
IDE3KTsKLSAgICBfc2NlbmUubGlnaHRzWzFdLmNvbG91ciA9IGNyZWF0ZVZlY3RvcigwLjcsIDAu
MywgMC4zKTsKLSAgICBfc2NlbmUubGlnaHRzWzJdID0gY3JlYXRlVmVjdG9yKDIzLCAyMCwgMTcp
OwotICAgIF9zY2VuZS5saWdodHNbMl0uY29sb3VyID0gY3JlYXRlVmVjdG9yKDAuNywgMC43LCAw
LjcpOwotICAgIF9zY2VuZS5hbWJpZW50ID0gY3JlYXRlVmVjdG9yKDAuMSwgMC4xLCAwLjEpOwot
ICAgIC8vICBfc2NlbmUuYmFja2dyb3VuZCA9IGNyZWF0ZVZlY3RvcigwLjcsIDAuNywgMS4wKTsK
LSAgICAKLSAgICB2YXIgc2l6ZSA9IDMwOwotICAgIHZhciBwaXhlbHMgPSBuZXcgQXJyYXkoKTsK
LSAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHNpemU7IHkrKykgewotICAgICAgICB0cnkgewotICAg
ICAgICAgICAgcGl4ZWxzW3ldID0gbmV3IEFycmF5KCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9
Ci0gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgc2l6ZTsgeCsrKSB7Ci0gICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgIHBpeGVsc1t5XVt4XSA9IDA7Ci0gICAgICAgICAgICB9IGNh
dGNoKGUpIHsgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgICAgdmFyIF9j
YW1lcmEgPSBuZXcgQ2FtZXJhKGNyZWF0ZVZlY3RvcigtNDAsIDQwLCA0MCksIGNyZWF0ZVZlY3Rv
cigwLCAwLCAwKSwgY3JlYXRlVmVjdG9yKDAsIDEsIDApKTsKLSAgICAgICAgX2NhbWVyYS5yZW5k
ZXIoX3NjZW5lLCBwaXhlbHMsIHNpemUsIHNpemUpOwotICAgIH0gY2F0Y2goZSl7fQotCi0gICAg
cmV0dXJuIHBpeGVsczsKLX0KLQotZnVuY3Rpb24gYXJyYXlUb0NhbnZhc0NvbW1hbmRzKHBpeGVs
cykKLXsKLSAgICB2YXIgcyA9ICc8Y2FudmFzIGlkPSJyZW5kZXJDYW52YXMiIHdpZHRoPSIzMHB4
IiBoZWlnaHQ9IjMwcHgiPjwvY2FudmFzPjxzY3InICsgJ2lwdD5cbnZhciBwaXhlbHMgPSBbJzsK
LSAgICB2YXIgc2l6ZSA9IDMwOwotICAgIGZvciAodmFyIHkgPSAwOyB5IDwgc2l6ZTsgeSsrKSB7
Ci0gICAgICAgIHMgKz0gIlsiOwotICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHNpemU7IHgr
KykgewotICAgICAgICAgICAgcyArPSAiWyIgKyBwaXhlbHNbeV1beF0gKyAiXSwiOwotICAgICAg
ICB9Ci0gICAgICAgIHMrPSAiXSwiOwotICAgIH0KLSAgICBzICs9ICddO1xuICAgIHZhciBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVuZGVyQ2FudmFzIikuZ2V0Q29udGV4dCgi
MmQiKTtcblwKLVxuXAotXG5cCi0gICAgdmFyIHNpemUgPSAzMDtcblwKLSAgICBjYW52YXMuZmls
bFN0eWxlID0gInJlZCI7XG5cCi0gICAgY2FudmFzLmZpbGxSZWN0KDAsIDAsIHNpemUsIHNpemUp
O1xuXAotICAgIGNhbnZhcy5zY2FsZSgxLCAtMSk7XG5cCi0gICAgY2FudmFzLnRyYW5zbGF0ZSgw
LCAtc2l6ZSk7XG5cCi1cblwKLSAgICBpZiAoIWNhbnZhcy5zZXRGaWxsQ29sb3IpXG5cCi0gICAg
ICAgIGNhbnZhcy5zZXRGaWxsQ29sb3IgPSBmdW5jdGlvbihyLCBnLCBiLCBhKSB7XG5cCi0gICAg
ICAgICAgICB0aGlzLmZpbGxTdHlsZSA9ICJyZ2IoIitbTWF0aC5mbG9vcihyICogMjU1KSwgTWF0
aC5mbG9vcihnICogMjU1KSwgTWF0aC5mbG9vcihiICogMjU1KV0rIikiO1xuXAotICAgIH1cblwK
LVxuXAotZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5KyspIHtcblwKLSAgZm9yICh2YXIgeCA9
IDA7IHggPCBzaXplOyB4KyspIHtcblwKLSAgICB2YXIgbCA9IHBpeGVsc1t5XVt4XTtcblwKLSAg
ICBjYW52YXMuc2V0RmlsbENvbG9yKGxbMF0sIGxbMV0sIGxbMl0sIDEpO1xuXAotICAgIGNhbnZh
cy5maWxsUmVjdCh4LCB5LCAxLCAxKTtcblwKLSAgfVxuXAotfTwvc2NyJyArICdpcHQ+JzsKLQot
ICAgIHJldHVybiBzOwotfQotCi10ZXN0T3V0cHV0ID0gYXJyYXlUb0NhbnZhc0NvbW1hbmRzKHJh
eXRyYWNlU2NlbmUoKSk7Ci0KLXZhciBleHBlY3RlZExlbmd0aCA9IDIwOTcwOwotCi1pZiAodGVz
dE91dHB1dC5sZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpCi0gICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiBleHBlY3RlZCBsZW5ndGggIiArIGV4cGVjdGVkTGVuZ3RoICsgIiBidXQgZ290ICIg
KyB0ZXN0T3V0cHV0Lmxlbmd0aDsKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvcmF5dHJhY2Utd2l0aC10cnktY2F0Y2guanMgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9yYXl0cmFjZS13aXRoLXRyeS1jYXRjaC5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2OGViYmI0Y2ZkMmI3ZjMzZjMyMzk3ZGE0OGU1NGM5
ZjFiOTI4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9yYXl0cmFjZS13aXRoLXRyeS1jYXRj
aC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1sZXQgX19leGNlcHRpb25Db3VudGVyID0gMDsK
LWZ1bmN0aW9uIHJhbmRvbUV4Y2VwdGlvbigpIHsKLSAgICBfX2V4Y2VwdGlvbkNvdW50ZXIrKzsK
LSAgICBpZiAoX19leGNlcHRpb25Db3VudGVyICUgNTAwID09PSAwKSB7Ci0gICAgICAgIHRocm93
IG5ldyBFcnJvcigicmFuZG8iKTsKLSAgICB9Ci19Ci1ub0lubGluZShyYW5kb21FeGNlcHRpb24p
OwotCi0KLWZ1bmN0aW9uIGNyZWF0ZVZlY3Rvcih4LHkseikgewotICAgIHRyeSB7Ci0gICAgICAg
IHJldHVybiBuZXcgQXJyYXkoeCx5LHopOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19Ci0KLWZ1bmN0
aW9uIHNxckxlbmd0aFZlY3RvcihzZWxmKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIHNl
bGZbMF0gKiBzZWxmWzBdICsgc2VsZlsxXSAqIHNlbGZbMV0gKyBzZWxmWzJdICogc2VsZlsyXTsK
LSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi1mdW5jdGlvbiBsZW5ndGhWZWN0b3Ioc2VsZikgewot
ICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBNYXRoLnNxcnQoc2VsZlswXSAqIHNlbGZbMF0gKyBz
ZWxmWzFdICogc2VsZlsxXSArIHNlbGZbMl0gKiBzZWxmWzJdKTsKLSAgICB9IGNhdGNoKGUpIHsg
fQotfQotCi1mdW5jdGlvbiBhZGRWZWN0b3Ioc2VsZiwgdikgewotICAgIHRyeSB7Ci0gICAgICAg
IHNlbGZbMF0gKz0gdlswXTsKLSAgICAgICAgc2VsZlsxXSArPSB2WzFdOwotICAgICAgICByYW5k
b21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotCi0gICAgc2VsZlsyXSArPSB2WzJd
OwotICAgIHJldHVybiBzZWxmOwotfQotCi1mdW5jdGlvbiBzdWJWZWN0b3Ioc2VsZiwgdikgewot
ICAgIHRyeSB7Ci0gICAgICAgIHNlbGZbMF0gLT0gdlswXTsKLSAgICAgICAgc2VsZlsxXSAtPSB2
WzFdOwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsgCi0gICAg
fQotICAgIHNlbGZbMl0gLT0gdlsyXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotZnVuY3Rpb24g
c2NhbGVWZWN0b3Ioc2VsZiwgc2NhbGUpIHsKLSAgICB0cnkgewotICAgICAgICBzZWxmWzBdICo9
IHNjYWxlOwotICAgICAgICBzZWxmWzFdICo9IHNjYWxlOwotICAgICAgICByYW5kb21FeGNlcHRp
b24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHNlbGZbMl0gKj0gc2NhbGU7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLWZ1bmN0aW9uIG5vcm1hbGlzZVZlY3RvcihzZWxmKSB7Ci0gICAgdmFy
IGxlbiA9IE1hdGguc3FydChzZWxmWzBdICogc2VsZlswXSArIHNlbGZbMV0gKiBzZWxmWzFdICsg
c2VsZlsyXSAqIHNlbGZbMl0pOwotICAgIHRyeSB7Ci0gICAgICAgIHNlbGZbMF0gLz0gbGVuOwot
ICAgICAgICBzZWxmWzFdIC89IGxlbjsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAg
fSBjYXRjaChlKSB7IH0KLSAgICBzZWxmWzJdIC89IGxlbjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotZnVuY3Rpb24gYWRkKHYxLCB2MikgewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBuZXcg
QXJyYXkodjFbMF0gKyB2MlswXSwgdjFbMV0gKyB2MlsxXSwgdjFbMl0gKyB2MlsyXSk7Ci0gICAg
fSBjYXRjaChlKSB7IH0KLX0KLQotZnVuY3Rpb24gc3ViKHYxLCB2MikgewotICAgIHRyeSB7Ci0g
ICAgICAgIHJldHVybiBuZXcgQXJyYXkodjFbMF0gLSB2MlswXSwgdjFbMV0gLSB2MlsxXSwgdjFb
Ml0gLSB2MlsyXSk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX0KLQotZnVuY3Rpb24gc2NhbGV2KHYx
LCB2MikgewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBuZXcgQXJyYXkodjFbMF0gKiB2Mlsw
XSwgdjFbMV0gKiB2MlsxXSwgdjFbMl0gKiB2MlsyXSk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX0K
LQotZnVuY3Rpb24gZG90KHYxLCB2MikgewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiB2MVsw
XSAqIHYyWzBdICsgdjFbMV0gKiB2MlsxXSArIHYxWzJdICogdjJbMl07Ci0gICAgfSBjYXRjaChl
KSB7IH0KLX0KLQotZnVuY3Rpb24gc2NhbGUodiwgc2NhbGUpIHsKLSAgICB0cnkgewotICAgICAg
ICByZXR1cm4gW3ZbMF0gKiBzY2FsZSwgdlsxXSAqIHNjYWxlLCB2WzJdICogc2NhbGVdOwotICAg
IH0gY2F0Y2goZSkgeyB9Ci19Ci0KLWZ1bmN0aW9uIGNyb3NzKHYxLCB2MikgewotICAgIHRyeSB7
Ci0gICAgICAgIHJldHVybiBbdjFbMV0gKiB2MlsyXSAtIHYxWzJdICogdjJbMV0sIAotICAgICAg
ICAgICAgICAgIHYxWzJdICogdjJbMF0gLSB2MVswXSAqIHYyWzJdLAotICAgICAgICAgICAgICAg
IHYxWzBdICogdjJbMV0gLSB2MVsxXSAqIHYyWzBdXTsKLSAgICB9IGNhdGNoKGUpIHsgfQotCi19
Ci0KLWZ1bmN0aW9uIG5vcm1hbGlzZSh2KSB7Ci0gICAgdmFyIGxlbiA9IGxlbmd0aFZlY3Rvcih2
KTsKLSAgICB0cnkgewotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUp
IHsgfQotICAgIHJldHVybiBbdlswXSAvIGxlbiwgdlsxXSAvIGxlbiwgdlsyXSAvIGxlbl07Ci19
Ci0KLWZ1bmN0aW9uIHRyYW5zZm9ybU1hdHJpeChzZWxmLCB2KSB7Ci0gICAgdHJ5IHsKLSAgICAg
ICAgdmFyIHZhbHMgPSBzZWxmOwotICAgICAgICB2YXIgeCAgPSB2YWxzWzBdICogdlswXSArIHZh
bHNbMV0gKiB2WzFdICsgdmFsc1syXSAqIHZbMl0gKyB2YWxzWzNdOwotICAgICAgICB2YXIgeSAg
PSB2YWxzWzRdICogdlswXSArIHZhbHNbNV0gKiB2WzFdICsgdmFsc1s2XSAqIHZbMl0gKyB2YWxz
WzddOwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAg
IHZhciB6ICA9IHZhbHNbOF0gKiB2WzBdICsgdmFsc1s5XSAqIHZbMV0gKyB2YWxzWzEwXSAqIHZb
Ml0gKyB2YWxzWzExXTsKLSAgICByZXR1cm4gW3gsIHksIHpdOwotfQotCi1mdW5jdGlvbiBpbnZl
cnRNYXRyaXgoc2VsZikgewotICAgIHRyeSB7Ci0gICAgICAgIHZhciB0ZW1wID0gbmV3IEFycmF5
KDE2KTsKLSAgICAgICAgdmFyIHR4ID0gLXNlbGZbM107Ci0gICAgICAgIHZhciB0eSA9IC1zZWxm
WzddOwotICAgICAgICB2YXIgdHogPSAtc2VsZlsxMV07Ci0gICAgICAgIGZvciAoaCA9IDA7IGgg
PCAzOyBoKyspIAotICAgICAgICAgICAgZm9yICh2ID0gMDsgdiA8IDM7IHYrKykgCi0gICAgICAg
ICAgICAgICAgdGVtcFtoICsgdiAqIDRdID0gc2VsZlt2ICsgaCAqIDRdOwotICAgICAgICByYW5k
b21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHRyeSB7Ci0gICAgICAgIGZv
ciAoaSA9IDA7IGkgPCAxMTsgaSsrKQotICAgICAgICAgICAgc2VsZltpXSA9IHRlbXBbaV07Ci0g
ICAgICAgIHNlbGZbM10gPSB0eCAqIHNlbGZbMF0gKyB0eSAqIHNlbGZbMV0gKyB0eiAqIHNlbGZb
Ml07Ci0gICAgICAgIHNlbGZbN10gPSB0eCAqIHNlbGZbNF0gKyB0eSAqIHNlbGZbNV0gKyB0eiAq
IHNlbGZbNl07Ci0gICAgICAgIHNlbGZbMTFdID0gdHggKiBzZWxmWzhdICsgdHkgKiBzZWxmWzld
ICsgdHogKiBzZWxmWzEwXTsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRj
aChlKSB7IH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotCi0vLyBUcmlhbmdsZSBpbnRlcnNlY3Rp
b24gdXNpbmcgYmFyeWNlbnRyaWMgY29vcmQgbWV0aG9kCi1mdW5jdGlvbiBUcmlhbmdsZShwMSwg
cDIsIHAzKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdmFyIGVkZ2UxID0gc3ViKHAzLCBwMSk7Ci0g
ICAgICAgIHZhciBlZGdlMiA9IHN1YihwMiwgcDEpOwotICAgICAgICB2YXIgbm9ybWFsID0gY3Jv
c3MoZWRnZTEsIGVkZ2UyKTsKLSAgICAgICAgaWYgKE1hdGguYWJzKG5vcm1hbFswXSkgPiBNYXRo
LmFicyhub3JtYWxbMV0pKQotICAgICAgICAgICAgaWYgKE1hdGguYWJzKG5vcm1hbFswXSkgPiBN
YXRoLmFicyhub3JtYWxbMl0pKQotICAgICAgICAgICAgICAgIHRoaXMuYXhpcyA9IDA7IAotICAg
ICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICB0aGlzLmF4aXMgPSAyOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBpZiAoTWF0aC5hYnMobm9ybWFsWzFdKSA+IE1hdGguYWJzKG5vcm1h
bFsyXSkpIAotICAgICAgICAgICAgICAgIHRoaXMuYXhpcyA9IDE7Ci0gICAgICAgICAgICBlbHNl
IAotICAgICAgICAgICAgICAgIHRoaXMuYXhpcyA9IDI7Ci0gICAgICAgIHZhciB1ID0gKHRoaXMu
YXhpcyArIDEpICUgMzsKLSAgICAgICAgdmFyIHYgPSAodGhpcy5heGlzICsgMikgJSAzOwotICAg
ICAgICB2YXIgdTEgPSBlZGdlMVt1XTsKLSAgICAgICAgdmFyIHYxID0gZWRnZTFbdl07Ci0gICAg
ICAgIAotICAgICAgICB2YXIgdTIgPSBlZGdlMlt1XTsKLSAgICAgICAgdmFyIHYyID0gZWRnZTJb
dl07Ci0gICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFsaXNlKG5vcm1hbCk7Ci0gICAgICAgIHRo
aXMubnUgPSBub3JtYWxbdV0gLyBub3JtYWxbdGhpcy5heGlzXTsKLSAgICAgICAgdGhpcy5udiA9
IG5vcm1hbFt2XSAvIG5vcm1hbFt0aGlzLmF4aXNdOwotICAgICAgICB0aGlzLm5kID0gZG90KG5v
cm1hbCwgcDEpIC8gbm9ybWFsW3RoaXMuYXhpc107Ci0gICAgICAgIHZhciBkZXQgPSB1MSAqIHYy
IC0gdjEgKiB1MjsKLSAgICAgICAgdGhpcy5ldSA9IHAxW3VdOwotICAgICAgICB0aGlzLmV2ID0g
cDFbdl07IAotICAgICAgICB0aGlzLm51MSA9IHUxIC8gZGV0OwotICAgICAgICB0aGlzLm52MSA9
IC12MSAvIGRldDsKLSAgICAgICAgdGhpcy5udTIgPSB2MiAvIGRldDsKLSAgICAgICAgdGhpcy5u
djIgPSAtdTIgLyBkZXQ7IAotICAgICAgICB0aGlzLm1hdGVyaWFsID0gWzAuNywgMC43LCAwLjdd
OwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi1U
cmlhbmdsZS5wcm90b3R5cGUuaW50ZXJzZWN0ID0gZnVuY3Rpb24ob3JpZywgZGlyLCBuZWFyLCBm
YXIpIHsKLSAgICB0cnkgewotICAgICAgICB2YXIgdSA9ICh0aGlzLmF4aXMgKyAxKSAlIDM7Ci0g
ICAgICAgIHZhciB2ID0gKHRoaXMuYXhpcyArIDIpICUgMzsKLSAgICAgICAgdmFyIGQgPSBkaXJb
dGhpcy5heGlzXSArIHRoaXMubnUgKiBkaXJbdV0gKyB0aGlzLm52ICogZGlyW3ZdOwotICAgICAg
ICB2YXIgdCA9ICh0aGlzLm5kIC0gb3JpZ1t0aGlzLmF4aXNdIC0gdGhpcy5udSAqIG9yaWdbdV0g
LSB0aGlzLm52ICogb3JpZ1t2XSkgLyBkOwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAg
ICB9IGNhdGNoKGUpIHsgfQotICAgIGlmICh0IDwgbmVhciB8fCB0ID4gZmFyKQotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICB0cnkgewotICAgICAgICB2YXIgUHUgPSBvcmlnW3VdICsgdCAqIGRp
clt1XSAtIHRoaXMuZXU7Ci0gICAgICAgIHZhciBQdiA9IG9yaWdbdl0gKyB0ICogZGlyW3ZdIC0g
dGhpcy5ldjsKLSAgICAgICAgdmFyIGEyID0gUHYgKiB0aGlzLm51MSArIFB1ICogdGhpcy5udjE7
Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgaWYg
KGEyIDwgMCkgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIHRyeSB7Ci0gICAgICAgIHZhciBh
MyA9IFB1ICogdGhpcy5udTIgKyBQdiAqIHRoaXMubnYyOwotICAgICAgICByYW5kb21FeGNlcHRp
b24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotICAgIGlmIChhMyA8IDApIAotICAgICAgICByZXR1
cm4gbnVsbDsKLQotICAgIGlmICgoYTIgKyBhMykgPiAxKSAKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLWZ1bmN0aW9uIFNjZW5lKGFfdHJpYW5nbGVzKSB7Ci0gICAg
dHJ5IHsKLSAgICAgICAgdGhpcy50cmlhbmdsZXMgPSBhX3RyaWFuZ2xlczsKLSAgICAgICAgdGhp
cy5saWdodHMgPSBbXTsKLSAgICAgICAgdGhpcy5hbWJpZW50ID0gWzAsMCwwXTsKLSAgICAgICAg
dGhpcy5iYWNrZ3JvdW5kID0gWzAuOCwwLjgsMV07Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigp
OwotICAgIH0gY2F0Y2goZSkgeyB9Ci19Ci12YXIgemVybyA9IG5ldyBBcnJheSgwLDAsMCk7Ci0K
LVNjZW5lLnByb3RvdHlwZS5pbnRlcnNlY3QgPSBmdW5jdGlvbihvcmlnaW4sIGRpciwgbmVhciwg
ZmFyKSB7Ci0gICAgdmFyIGNsb3Nlc3QgPSBudWxsOwotICAgIGZvciAoaSA9IDA7IGkgPCB0aGlz
LnRyaWFuZ2xlcy5sZW5ndGg7IGkrKykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFy
IHRyaWFuZ2xlID0gdGhpcy50cmlhbmdsZXNbaV07ICAgCi0gICAgICAgICAgICB2YXIgZCA9IHRy
aWFuZ2xlLmludGVyc2VjdChvcmlnaW4sIGRpciwgbmVhciwgZmFyKTsKLSAgICAgICAgICAgIGlm
IChkID09IG51bGwgfHwgZCA+IGZhciB8fCBkIDwgbmVhcikKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGZhciA9IGQ7Ci0gICAgICAgICAgICBjbG9zZXN0ID0gdHJpYW5n
bGU7Ci0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7
IH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKCFjbG9zZXN0KQotICAgICAgICByZXR1cm4gW3RoaXMu
YmFja2dyb3VuZFswXSx0aGlzLmJhY2tncm91bmRbMV0sdGhpcy5iYWNrZ3JvdW5kWzJdXTsKLSAg
ICAgICAgCi0gICAgdHJ5IHsKLSAgICAgICAgdmFyIG5vcm1hbCA9IGNsb3Nlc3Qubm9ybWFsOwot
ICAgICAgICB2YXIgaGl0ID0gYWRkKG9yaWdpbiwgc2NhbGUoZGlyLCBmYXIpKTsgCi0gICAgICAg
IGlmIChkb3QoZGlyLCBub3JtYWwpID4gMCkKLSAgICAgICAgICAgIG5vcm1hbCA9IFstbm9ybWFs
WzBdLCAtbm9ybWFsWzFdLCAtbm9ybWFsWzJdXTsKLSAgICAgICAgCi0gICAgICAgIHZhciBjb2xv
dXIgPSBudWxsOwotICAgICAgICBpZiAoY2xvc2VzdC5zaGFkZXIpIHsKLSAgICAgICAgICAgIGNv
bG91ciA9IGNsb3Nlc3Quc2hhZGVyKGNsb3Nlc3QsIGhpdCwgZGlyKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGNvbG91ciA9IGNsb3Nlc3QubWF0ZXJpYWw7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICAKLSAgICAv
LyBkbyByZWZsZWN0aW9uCi0gICAgdmFyIHJlZmxlY3RlZCA9IG51bGw7Ci0gICAgaWYgKGNvbG91
ci5yZWZsZWN0aW9uID4gMC4wMDEpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBy
ZWZsZWN0aW9uID0gYWRkVmVjdG9yKHNjYWxlKG5vcm1hbCwgLTIqZG90KGRpciwgbm9ybWFsKSks
IGRpcik7Ci0gICAgICAgICAgICByZWZsZWN0ZWQgPSB0aGlzLmludGVyc2VjdChoaXQsIHJlZmxl
Y3Rpb24sIDAuMDAwMSwgMTAwMDAwMCk7Ci0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsK
LSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgaWYgKGNvbG91ci5yZWZsZWN0aW9uID49
IDAuOTk5OTk5KQotICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3RlZDsKLSAgICB9Ci0gICAgCi0g
ICAgdmFyIGwgPSBbdGhpcy5hbWJpZW50WzBdLCB0aGlzLmFtYmllbnRbMV0sIHRoaXMuYW1iaWVu
dFsyXV07Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpZ2h0cy5sZW5ndGg7IGkrKykg
ewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5saWdodHNbaV07
Ci0gICAgICAgICAgICB2YXIgdG9MaWdodCA9IHN1YihsaWdodCwgaGl0KTsKLSAgICAgICAgICAg
IHZhciBkaXN0YW5jZSA9IGxlbmd0aFZlY3Rvcih0b0xpZ2h0KTsKLSAgICAgICAgICAgIHNjYWxl
VmVjdG9yKHRvTGlnaHQsIDEuMC9kaXN0YW5jZSk7Ci0gICAgICAgICAgICBkaXN0YW5jZSAtPSAw
LjAwMDE7Ci0gICAgICAgICAgICBpZiAodGhpcy5ibG9ja2VkKGhpdCwgdG9MaWdodCwgZGlzdGFu
Y2UpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFyIG5sID0gZG90
KG5vcm1hbCwgdG9MaWdodCk7Ci0gICAgICAgICAgICBpZiAobmwgPiAwKQotICAgICAgICAgICAg
ICAgIGFkZFZlY3RvcihsLCBzY2FsZShsaWdodC5jb2xvdXIsIG5sKSk7Ci0gICAgICAgICAgICBy
YW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9Ci0gICAgdHJ5
IHsKLSAgICAgICAgbCA9IHNjYWxldihsLCBjb2xvdXIpOwotICAgICAgICBpZiAocmVmbGVjdGVk
KSB7Ci0gICAgICAgICAgICBsID0gYWRkVmVjdG9yKHNjYWxlVmVjdG9yKGwsIDEgLSBjb2xvdXIu
cmVmbGVjdGlvbiksIHNjYWxlVmVjdG9yKHJlZmxlY3RlZCwgY29sb3VyLnJlZmxlY3Rpb24pKTsK
LSAgICAgICAgfQotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsg
fQotICAgIHJldHVybiBsOwotfQotCi1TY2VuZS5wcm90b3R5cGUuYmxvY2tlZCA9IGZ1bmN0aW9u
KE8sIEQsIGZhcikgewotICAgIHZhciBuZWFyID0gMC4wMDAxOwotICAgIHZhciBjbG9zZXN0ID0g
bnVsbDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50cmlhbmdsZXMubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciB0cmlhbmdsZSA9IHRoaXMudHJpYW5nbGVz
W2ldOyAgIAotICAgICAgICAgICAgdmFyIGQgPSB0cmlhbmdsZS5pbnRlcnNlY3QoTywgRCwgbmVh
ciwgZmFyKTsKLSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNo
KGUpIHsgfQotICAgICAgICBpZiAoZCA9PSBudWxsIHx8IGQgPiBmYXIgfHwgZCA8IG5lYXIpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi0vLyB0aGlzIGNhbWVyYSBjb2RlIGlzIGZyb20gbm90
ZXMgaSBtYWRlIGFnZXMgYWdvLCBpdCBpcyBmcm9tICpzb21ld2hlcmUqIC0tIGkgY2Fubm90IHJl
bWVtYmVyIHdoZXJlCi0vLyB0aGF0IHNvbWV3aGVyZSBpcwotZnVuY3Rpb24gQ2FtZXJhKG9yaWdp
biwgbG9va2F0LCB1cCkgewotICAgIHRyeSB7Ci0gICAgICAgIHZhciB6YXhpcyA9IG5vcm1hbGlz
ZVZlY3RvcihzdWJWZWN0b3IobG9va2F0LCBvcmlnaW4pKTsKLSAgICAgICAgdmFyIHhheGlzID0g
bm9ybWFsaXNlVmVjdG9yKGNyb3NzKHVwLCB6YXhpcykpOwotICAgICAgICB2YXIgeWF4aXMgPSBu
b3JtYWxpc2VWZWN0b3IoY3Jvc3MoeGF4aXMsIHN1YlZlY3RvcihbMCwwLDBdLCB6YXhpcykpKTsK
LSAgICAgICAgdmFyIG0gPSBuZXcgQXJyYXkoMTYpOwotICAgICAgICBtWzBdID0geGF4aXNbMF07
IG1bMV0gPSB4YXhpc1sxXTsgbVsyXSA9IHhheGlzWzJdOwotICAgICAgICBtWzRdID0geWF4aXNb
MF07IG1bNV0gPSB5YXhpc1sxXTsgbVs2XSA9IHlheGlzWzJdOwotICAgICAgICBtWzhdID0gemF4
aXNbMF07IG1bOV0gPSB6YXhpc1sxXTsgbVsxMF0gPSB6YXhpc1syXTsKLSAgICAgICAgaW52ZXJ0
TWF0cml4KG0pOwotICAgICAgICBtWzNdID0gMDsgbVs3XSA9IDA7IG1bMTFdID0gMDsKLSAgICAg
ICAgdGhpcy5vcmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuZGlyZWN0aW9ucyA9IG5ldyBB
cnJheSg0KTsKLSAgICAgICAgdGhpcy5kaXJlY3Rpb25zWzBdID0gbm9ybWFsaXNlKFstMC43LCAg
MC43LCAxXSk7Ci0gICAgICAgIHRoaXMuZGlyZWN0aW9uc1sxXSA9IG5vcm1hbGlzZShbIDAuNywg
IDAuNywgMV0pOwotICAgICAgICB0aGlzLmRpcmVjdGlvbnNbMl0gPSBub3JtYWxpc2UoWyAwLjcs
IC0wLjcsIDFdKTsKLSAgICAgICAgdGhpcy5kaXJlY3Rpb25zWzNdID0gbm9ybWFsaXNlKFstMC43
LCAtMC43LCAxXSk7Ci0gICAgICAgIHRoaXMuZGlyZWN0aW9uc1swXSA9IHRyYW5zZm9ybU1hdHJp
eChtLCB0aGlzLmRpcmVjdGlvbnNbMF0pOwotICAgICAgICB0aGlzLmRpcmVjdGlvbnNbMV0gPSB0
cmFuc2Zvcm1NYXRyaXgobSwgdGhpcy5kaXJlY3Rpb25zWzFdKTsKLSAgICAgICAgdGhpcy5kaXJl
Y3Rpb25zWzJdID0gdHJhbnNmb3JtTWF0cml4KG0sIHRoaXMuZGlyZWN0aW9uc1syXSk7Ci0gICAg
ICAgIHRoaXMuZGlyZWN0aW9uc1szXSA9IHRyYW5zZm9ybU1hdHJpeChtLCB0aGlzLmRpcmVjdGlv
bnNbM10pOwotCi0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9
Ci19Ci0KLUNhbWVyYS5wcm90b3R5cGUuZ2VuZXJhdGVSYXlQYWlyID0gZnVuY3Rpb24oeSkgewot
ICAgIHRyeSB7Ci0gICAgICAgIHJheXMgPSBuZXcgQXJyYXkobmV3IE9iamVjdCgpLCBuZXcgT2Jq
ZWN0KCkpOwotICAgICAgICByYXlzWzBdLm9yaWdpbiA9IHRoaXMub3JpZ2luOwotICAgICAgICBy
YXlzWzFdLm9yaWdpbiA9IHRoaXMub3JpZ2luOwotICAgICAgICByYXlzWzBdLmRpciA9IGFkZFZl
Y3RvcihzY2FsZSh0aGlzLmRpcmVjdGlvbnNbMF0sIHkpLCBzY2FsZSh0aGlzLmRpcmVjdGlvbnNb
M10sIDEgLSB5KSk7Ci0gICAgICAgIHJheXNbMV0uZGlyID0gYWRkVmVjdG9yKHNjYWxlKHRoaXMu
ZGlyZWN0aW9uc1sxXSwgeSksIHNjYWxlKHRoaXMuZGlyZWN0aW9uc1syXSwgMSAtIHkpKTsKLSAg
ICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICByZXR1cm4g
cmF5czsKLX0KLQotZnVuY3Rpb24gcmVuZGVyUm93cyhjYW1lcmEsIHNjZW5lLCBwaXhlbHMsIHdp
ZHRoLCBoZWlnaHQsIHN0YXJ0eSwgc3RvcHkpIHsKLSAgICBmb3IgKHZhciB5ID0gc3RhcnR5OyB5
IDwgc3RvcHk7IHkrKykgewotICAgICAgICB2YXIgcmF5cyA9IGNhbWVyYS5nZW5lcmF0ZVJheVBh
aXIoeSAvIGhlaWdodCk7Ci0gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykg
ewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgeHAgPSB4IC8gd2lkdGg7
Ci0gICAgICAgICAgICAgICAgdmFyIG9yaWdpbiA9IGFkZFZlY3RvcihzY2FsZShyYXlzWzBdLm9y
aWdpbiwgeHApLCBzY2FsZShyYXlzWzFdLm9yaWdpbiwgMSAtIHhwKSk7Ci0gICAgICAgICAgICAg
ICAgdmFyIGRpciA9IG5vcm1hbGlzZVZlY3RvcihhZGRWZWN0b3Ioc2NhbGUocmF5c1swXS5kaXIs
IHhwKSwgc2NhbGUocmF5c1sxXS5kaXIsIDEgLSB4cCkpKTsKLSAgICAgICAgICAgICAgICB2YXIg
bCA9IHNjZW5lLmludGVyc2VjdChvcmlnaW4sIGRpcik7Ci0gICAgICAgICAgICAgICAgcGl4ZWxz
W3ldW3hdID0gbDsKLSAgICAgICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAg
ICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNhbWVyYS5wcm90b3R5
cGUucmVuZGVyID0gZnVuY3Rpb24oc2NlbmUsIHBpeGVscywgd2lkdGgsIGhlaWdodCkgewotICAg
IHRyeSB7Ci0gICAgICAgIHZhciBjYW0gPSB0aGlzOwotICAgICAgICB2YXIgcm93ID0gMDsKLSAg
ICAgICAgcmVuZGVyUm93cyhjYW0sIHNjZW5lLCBwaXhlbHMsIHdpZHRoLCBoZWlnaHQsIDAsIGhl
aWdodCk7Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19
Ci0KLQotCi1mdW5jdGlvbiByYXl0cmFjZVNjZW5lKCkKLXsKLSAgICB0cnkgewotICAgICAgICB2
YXIgc3RhcnREYXRlID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIHZhciBudW1Ucmlh
bmdsZXMgPSAyICogNjsKLSAgICAgICAgdmFyIHRyaWFuZ2xlcyA9IG5ldyBBcnJheSgpOy8vbnVt
VHJpYW5nbGVzKTsKLSAgICAgICAgdmFyIHRmbCA9IGNyZWF0ZVZlY3RvcigtMTAsICAxMCwgLTEw
KTsKLSAgICAgICAgdmFyIHRmciA9IGNyZWF0ZVZlY3RvciggMTAsICAxMCwgLTEwKTsKLSAgICAg
ICAgdmFyIHRibCA9IGNyZWF0ZVZlY3RvcigtMTAsICAxMCwgIDEwKTsKLSAgICAgICAgdmFyIHRi
ciA9IGNyZWF0ZVZlY3RvciggMTAsICAxMCwgIDEwKTsKLSAgICAgICAgdmFyIGJmbCA9IGNyZWF0
ZVZlY3RvcigtMTAsIC0xMCwgLTEwKTsKLSAgICAgICAgdmFyIGJmciA9IGNyZWF0ZVZlY3Rvcigg
MTAsIC0xMCwgLTEwKTsKLSAgICAgICAgdmFyIGJibCA9IGNyZWF0ZVZlY3RvcigtMTAsIC0xMCwg
IDEwKTsKLSAgICAgICAgdmFyIGJiciA9IGNyZWF0ZVZlY3RvciggMTAsIC0xMCwgIDEwKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIGN1YmUhISEKLSAgICAgICAgLy8gZnJvbnQKLSAgICAgICAgdmFy
IGkgPSAwOwotICAgICAgICAKLSAgICAgICAgdHJpYW5nbGVzW2krK10gPSBuZXcgVHJpYW5nbGUo
dGZsLCB0ZnIsIGJmcik7Ci0gICAgICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKHRm
bCwgYmZyLCBiZmwpOwotICAgICAgICAvLyBiYWNrCi0gICAgICAgIHRyaWFuZ2xlc1tpKytdID0g
bmV3IFRyaWFuZ2xlKHRibCwgdGJyLCBiYnIpOwotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5l
dyBUcmlhbmdsZSh0YmwsIGJiciwgYmJsKTsKLSAgICAgICAgLy8gICAgICAgIHRyaWFuZ2xlc1tp
LTFdLm1hdGVyaWFsID0gWzAuNywwLjIsMC4yXTsKLSAgICAgICAgLy8gICAgICAgICAgICB0cmlh
bmdsZXNbaS0xXS5tYXRlcmlhbC5yZWZsZWN0aW9uID0gMC44OwotICAgICAgICAvLyBsZWZ0Ci0g
ICAgICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKHRibCwgdGZsLCBiYmwpOwotICAg
ICAgICAvLyAgICAgICAgICAgIHRyaWFuZ2xlc1tpLTFdLnJlZmxlY3Rpb24gPSAwLjY7Ci0gICAg
ICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKHRmbCwgYmZsLCBiYmwpOwotICAgICAg
ICAvLyAgICAgICAgICAgIHRyaWFuZ2xlc1tpLTFdLnJlZmxlY3Rpb24gPSAwLjY7Ci0gICAgICAg
IC8vIHJpZ2h0Ci0gICAgICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFuZ2xlKHRiciwgdGZy
LCBiYnIpOwotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmdsZSh0ZnIsIGJmciwg
YmJyKTsKLSAgICAgICAgLy8gdG9wCi0gICAgICAgIHRyaWFuZ2xlc1tpKytdID0gbmV3IFRyaWFu
Z2xlKHRibCwgdGJyLCB0ZnIpOwotICAgICAgICB0cmlhbmdsZXNbaSsrXSA9IG5ldyBUcmlhbmds
ZSh0YmwsIHRmciwgdGZsKTsKLSAgICAgICAgLy8gYm90dG9tCi0gICAgICAgIHRyaWFuZ2xlc1tp
KytdID0gbmV3IFRyaWFuZ2xlKGJibCwgYmJyLCBiZnIpOwotICAgICAgICB0cmlhbmdsZXNbaSsr
XSA9IG5ldyBUcmlhbmdsZShiYmwsIGJmciwgYmZsKTsKLSAgICAgICAgCi0gICAgICAgIC8vRmxv
b3IhISEhCi0gICAgICAgIHZhciBncmVlbiA9IGNyZWF0ZVZlY3RvcigwLjAsIDAuNCwgMC4wKTsK
LSAgICAgICAgdmFyIGdyZXkgPSBjcmVhdGVWZWN0b3IoMC40LCAwLjQsIDAuNCk7Ci0gICAgICAg
IGdyZXkucmVmbGVjdGlvbiA9IDEuMDsKLQotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAg
ICB9IGNhdGNoKGUpIHsgfQotICAgIHZhciBmbG9vclNoYWRlciA9IGZ1bmN0aW9uKHRyaSwgcG9z
LCB2aWV3KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgeCA9ICgocG9zWzBdLzMy
KSAlIDIgKyAyKSAlIDI7Ci0gICAgICAgICAgICB2YXIgeiA9ICgocG9zWzJdLzMyICsgMC4zKSAl
IDIgKyAyKSAlIDI7Ci0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBj
YXRjaChlKSB7IH0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICh4IDwgMSAhPSB6IDwg
MSkgewotICAgICAgICAgICAgICAgIC8vaW4gdGhlIHJlYWwgd29ybGQgd2UgdXNlIHRoZSBmcmVz
bmVsIHRlcm0uLi4KLSAgICAgICAgICAgICAgICAvLyAgICB2YXIgYW5nbGUgPSAxLWRvdCh2aWV3
LCB0cmkubm9ybWFsKTsKLSAgICAgICAgICAgICAgICAvLyAgIGFuZ2xlICo9IGFuZ2xlOwotICAg
ICAgICAgICAgICAgIC8vICBhbmdsZSAqPSBhbmdsZTsKLSAgICAgICAgICAgICAgICAvLyBhbmds
ZSAqPSBhbmdsZTsKLSAgICAgICAgICAgICAgICAvL2dyZXkucmVmbGVjdGlvbiA9IGFuZ2xlOwot
ICAgICAgICAgICAgICAgIHJldHVybiBncmV5OwotICAgICAgICAgICAgfSBlbHNlIAotICAgICAg
ICAgICAgICAgIHJldHVybiBncmVlbjsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9Ci0g
ICAgdmFyIGZmbCA9IGNyZWF0ZVZlY3RvcigtMTAwMCwgLTMwLCAtMTAwMCk7Ci0gICAgdmFyIGZm
ciA9IGNyZWF0ZVZlY3RvciggMTAwMCwgLTMwLCAtMTAwMCk7Ci0gICAgdmFyIGZibCA9IGNyZWF0
ZVZlY3RvcigtMTAwMCwgLTMwLCAgMTAwMCk7Ci0gICAgdmFyIGZiciA9IGNyZWF0ZVZlY3Rvcigg
MTAwMCwgLTMwLCAgMTAwMCk7Ci0gICAgdHJpYW5nbGVzW2krK10gPSBuZXcgVHJpYW5nbGUoZmJs
LCBmYnIsIGZmcik7Ci0gICAgdHJpYW5nbGVzW2ktMV0uc2hhZGVyID0gZmxvb3JTaGFkZXI7Ci0g
ICAgdHJpYW5nbGVzW2krK10gPSBuZXcgVHJpYW5nbGUoZmJsLCBmZnIsIGZmbCk7Ci0gICAgdHJp
YW5nbGVzW2ktMV0uc2hhZGVyID0gZmxvb3JTaGFkZXI7Ci0gICAgCi0gICAgdmFyIF9zY2VuZSA9
IG5ldyBTY2VuZSh0cmlhbmdsZXMpOwotICAgIF9zY2VuZS5saWdodHNbMF0gPSBjcmVhdGVWZWN0
b3IoMjAsIDM4LCAtMjIpOwotICAgIF9zY2VuZS5saWdodHNbMF0uY29sb3VyID0gY3JlYXRlVmVj
dG9yKDAuNywgMC4zLCAwLjMpOwotICAgIF9zY2VuZS5saWdodHNbMV0gPSBjcmVhdGVWZWN0b3Io
LTIzLCA0MCwgMTcpOwotICAgIF9zY2VuZS5saWdodHNbMV0uY29sb3VyID0gY3JlYXRlVmVjdG9y
KDAuNywgMC4zLCAwLjMpOwotICAgIF9zY2VuZS5saWdodHNbMl0gPSBjcmVhdGVWZWN0b3IoMjMs
IDIwLCAxNyk7Ci0gICAgX3NjZW5lLmxpZ2h0c1syXS5jb2xvdXIgPSBjcmVhdGVWZWN0b3IoMC43
LCAwLjcsIDAuNyk7Ci0gICAgX3NjZW5lLmFtYmllbnQgPSBjcmVhdGVWZWN0b3IoMC4xLCAwLjEs
IDAuMSk7Ci0gICAgLy8gIF9zY2VuZS5iYWNrZ3JvdW5kID0gY3JlYXRlVmVjdG9yKDAuNywgMC43
LCAxLjApOwotICAgIAotICAgIHZhciBzaXplID0gMzA7Ci0gICAgdmFyIHBpeGVscyA9IG5ldyBB
cnJheSgpOwotICAgIGZvciAodmFyIHkgPSAwOyB5IDwgc2l6ZTsgeSsrKSB7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICBwaXhlbHNbeV0gPSBuZXcgQXJyYXkoKTsKLSAgICAgICAgICAgIHJh
bmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICBmb3IgKHZh
ciB4ID0gMDsgeCA8IHNpemU7IHgrKykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICBwaXhlbHNbeV1beF0gPSAwOwotICAgICAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigp
OwotICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHRy
eSB7Ci0gICAgICAgIHZhciBfY2FtZXJhID0gbmV3IENhbWVyYShjcmVhdGVWZWN0b3IoLTQwLCA0
MCwgNDApLCBjcmVhdGVWZWN0b3IoMCwgMCwgMCksIGNyZWF0ZVZlY3RvcigwLCAxLCAwKSk7Ci0g
ICAgICAgIF9jYW1lcmEucmVuZGVyKF9zY2VuZSwgcGl4ZWxzLCBzaXplLCBzaXplKTsKLSAgICAg
ICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKXt9Ci0KLSAgICByZXR1cm4gcGl4
ZWxzOwotfQotCi1mdW5jdGlvbiBhcnJheVRvQ2FudmFzQ29tbWFuZHMocGl4ZWxzKQotewotICAg
IHZhciBzID0gJzxjYW52YXMgaWQ9InJlbmRlckNhbnZhcyIgd2lkdGg9IjMwcHgiIGhlaWdodD0i
MzBweCI+PC9jYW52YXM+PHNjcicgKyAnaXB0PlxudmFyIHBpeGVscyA9IFsnOwotICAgIHZhciBz
aXplID0gMzA7Ci0gICAgZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5KyspIHsKLSAgICAgICAg
cyArPSAiWyI7Ci0gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgc2l6ZTsgeCsrKSB7Ci0gICAg
ICAgICAgICBzICs9ICJbIiArIHBpeGVsc1t5XVt4XSArICJdLCI7Ci0gICAgICAgIH0KLSAgICAg
ICAgcys9ICJdLCI7Ci0gICAgfQotICAgIHMgKz0gJ107XG4gICAgdmFyIGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZW5kZXJDYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO1xuXAot
XG5cCi1cblwKLSAgICB2YXIgc2l6ZSA9IDMwO1xuXAotICAgIGNhbnZhcy5maWxsU3R5bGUgPSAi
cmVkIjtcblwKLSAgICBjYW52YXMuZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XG5cCi0gICAg
Y2FudmFzLnNjYWxlKDEsIC0xKTtcblwKLSAgICBjYW52YXMudHJhbnNsYXRlKDAsIC1zaXplKTtc
blwKLVxuXAotICAgIGlmICghY2FudmFzLnNldEZpbGxDb2xvcilcblwKLSAgICAgICAgY2FudmFz
LnNldEZpbGxDb2xvciA9IGZ1bmN0aW9uKHIsIGcsIGIsIGEpIHtcblwKLSAgICAgICAgICAgIHRo
aXMuZmlsbFN0eWxlID0gInJnYigiK1tNYXRoLmZsb29yKHIgKiAyNTUpLCBNYXRoLmZsb29yKGcg
KiAyNTUpLCBNYXRoLmZsb29yKGIgKiAyNTUpXSsiKSI7XG5cCi0gICAgfVxuXAotXG5cCi1mb3Ig
KHZhciB5ID0gMDsgeSA8IHNpemU7IHkrKykge1xuXAotICBmb3IgKHZhciB4ID0gMDsgeCA8IHNp
emU7IHgrKykge1xuXAotICAgIHZhciBsID0gcGl4ZWxzW3ldW3hdO1xuXAotICAgIGNhbnZhcy5z
ZXRGaWxsQ29sb3IobFswXSwgbFsxXSwgbFsyXSwgMSk7XG5cCi0gICAgY2FudmFzLmZpbGxSZWN0
KHgsIHksIDEsIDEpO1xuXAotICB9XG5cCi19PC9zY3InICsgJ2lwdD4nOwotCi0gICAgcmV0dXJu
IHM7Ci19Ci0KLXRlc3RPdXRwdXQgPSBhcnJheVRvQ2FudmFzQ29tbWFuZHMocmF5dHJhY2VTY2Vu
ZSgpKTsKLQotdmFyIGV4cGVjdGVkTGVuZ3RoID0gMjA5NzA7Ci0KLWlmICh0ZXN0T3V0cHV0Lmxl
bmd0aCAhPSBleHBlY3RlZExlbmd0aCkKLSAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6IGV4
cGVjdGVkIGxlbmd0aCAiICsgZXhwZWN0ZWRMZW5ndGggKyAiIGJ1dCBnb3QgIiArIHRlc3RPdXRw
dXQubGVuZ3RoOwotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9yaWNoYXJkcy1lbXB0eS10cnktY2F0Y2guanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9yaWNoYXJkcy1lbXB0eS10cnktY2F0Y2guanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdlYjk2YzczZmFlNzQyNzAxY2Y2NTYxY2QzOGE1NmM0ZmQ5MDZmYWIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcmljaGFyZHMtZW1wdHktdHJ5LWNhdGNoLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNjQ2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA2LTIwMDggdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0KLS8vIFRoaXMgaXMgYSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBS
aWNoYXJkcwotLy8gYmVuY2htYXJrIGZyb206Ci0vLwotLy8gICAgaHR0cDovL3d3dy5jbC5jYW0u
YWMudWsvfm1yMTAvQmVuY2guaHRtbAotLy8KLS8vIFRoZSBiZW5jaG1hcmsgd2FzIG9yaWdpbmFs
bHkgaW1wbGVtZW50ZWQgaW4gQkNQTCBieQotLy8gTWFydGluIFJpY2hhcmRzLgotCi0KLS8qKgot
ICogVGhlIFJpY2hhcmRzIGJlbmNobWFyayBzaW11bGF0ZXMgdGhlIHRhc2sgZGlzcGF0Y2hlciBv
ZiBhbgotICogb3BlcmF0aW5nIHN5c3RlbS4KLSAqKi8KLWZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewotICAgIHRyeSB7Ci0gICAgICAgIHZhciBzY2hlZHVsZXIgPSBuZXcgU2NoZWR1bGVyKCk7Ci0g
ICAgICAgIHNjaGVkdWxlci5hZGRJZGxlVGFzayhJRF9JRExFLCAwLCBudWxsLCBDT1VOVCk7Ci0K
LSAgICAgICAgdmFyIHF1ZXVlID0gbmV3IFBhY2tldChudWxsLCBJRF9XT1JLRVIsIEtJTkRfV09S
Syk7Ci0gICAgICAgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX1dPUktFUiwgS0lORF9X
T1JLKTsKLSAgICAgICAgc2NoZWR1bGVyLmFkZFdvcmtlclRhc2soSURfV09SS0VSLCAxMDAwLCBx
dWV1ZSk7Ci0KLSAgICAgICAgcXVldWUgPSBuZXcgUGFja2V0KG51bGwsIElEX0RFVklDRV9BLCBL
SU5EX0RFVklDRSk7Ci0gICAgICAgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX0RFVklD
RV9BLCBLSU5EX0RFVklDRSk7Ci0gICAgICAgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElE
X0RFVklDRV9BLCBLSU5EX0RFVklDRSk7Ci0gICAgICAgIHNjaGVkdWxlci5hZGRIYW5kbGVyVGFz
ayhJRF9IQU5ETEVSX0EsIDIwMDAsIHF1ZXVlKTsKLQotICAgICAgICBxdWV1ZSA9IG5ldyBQYWNr
ZXQobnVsbCwgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKLSAgICAgICAgcXVldWUgPSBuZXcg
UGFja2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKLSAgICAgICAgcXVldWUg
PSBuZXcgUGFja2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKLSAgICAgICAg
c2NoZWR1bGVyLmFkZEhhbmRsZXJUYXNrKElEX0hBTkRMRVJfQiwgMzAwMCwgcXVldWUpOwotCi0g
ICAgICAgIHNjaGVkdWxlci5hZGREZXZpY2VUYXNrKElEX0RFVklDRV9BLCA0MDAwLCBudWxsKTsK
LQotICAgICAgICBzY2hlZHVsZXIuYWRkRGV2aWNlVGFzayhJRF9ERVZJQ0VfQiwgNTAwMCwgbnVs
bCk7Ci0KLSAgICAgICAgc2NoZWR1bGVyLnNjaGVkdWxlKCk7Ci0KLSAgICAgICAgaWYgKHNjaGVk
dWxlci5xdWV1ZUNvdW50ICE9IEVYUEVDVEVEX1FVRVVFX0NPVU5UIHx8Ci0gICAgICAgICAgICAg
ICAgc2NoZWR1bGVyLmhvbGRDb3VudCAhPSBFWFBFQ1RFRF9IT0xEX0NPVU5UKSB7Ci0gICAgICAg
ICAgICB2YXIgbXNnID0KLSAgICAgICAgICAgICAgICAiRXJyb3IgZHVyaW5nIGV4ZWN1dGlvbjog
cXVldWVDb3VudCA9ICIgKyBzY2hlZHVsZXIucXVldWVDb3VudCArCi0gICAgICAgICAgICAgICAg
IiwgaG9sZENvdW50ID0gIiArIHNjaGVkdWxlci5ob2xkQ291bnQgKyAiLiI7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IobXNnKTsKLSAgICAgICAgfQotICAgIH0gY2F0Y2goZSkgeyB9Ci19
Ci0KLXZhciBDT1VOVCA9IDEwMDA7Ci0KLS8qKgotICogVGhlc2UgdHdvIGNvbnN0YW50cyBzcGVj
aWZ5IGhvdyBtYW55IHRpbWVzIGEgcGFja2V0IGlzIHF1ZXVlZCBhbmQKLSAqIGhvdyBtYW55IHRp
bWVzIGEgdGFzayBpcyBwdXQgb24gaG9sZCBpbiBhIGNvcnJlY3QgcnVuIG9mIHJpY2hhcmRzLgot
ICogVGhleSBkb24ndCBoYXZlIGFueSBtZWFuaW5nIGEgc3VjaCBidXQgYXJlIGNoYXJhY3Rlcmlz
dGljIG9mIGEKLSAqIGNvcnJlY3QgcnVuIHNvIGlmIHRoZSBhY3R1YWwgcXVldWUgb3IgaG9sZCBj
b3VudCBpcyBkaWZmZXJlbnQgZnJvbQotICogdGhlIGV4cGVjdGVkIHRoZXJlIG11c3QgYmUgYSBi
dWcgaW4gdGhlIGltcGxlbWVudGF0aW9uLgotICoqLwotdmFyIEVYUEVDVEVEX1FVRVVFX0NPVU5U
ID0gMjMyMjsKLXZhciBFWFBFQ1RFRF9IT0xEX0NPVU5UID0gOTI4OwotCi0KLS8qKgotICogQSBz
Y2hlZHVsZXIgY2FuIGJlIHVzZWQgdG8gc2NoZWR1bGUgYSBzZXQgb2YgdGFza3MgYmFzZWQgb24g
dGhlaXIgcmVsYXRpdmUKLSAqIHByaW9yaXRpZXMuICBTY2hlZHVsaW5nIGlzIGRvbmUgYnkgbWFp
bnRhaW5pbmcgYSBsaXN0IG9mIHRhc2sgY29udHJvbCBibG9ja3MKLSAqIHdoaWNoIGhvbGRzIHRh
c2tzIGFuZCB0aGUgZGF0YSBxdWV1ZSB0aGV5IGFyZSBwcm9jZXNzaW5nLgotICogQGNvbnN0cnVj
dG9yCi0gKi8KLWZ1bmN0aW9uIFNjaGVkdWxlcigpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlz
LnF1ZXVlQ291bnQgPSAwOwotICAgICAgICB0aGlzLmhvbGRDb3VudCA9IDA7Ci0gICAgICAgIHRo
aXMuYmxvY2tzID0gbmV3IEFycmF5KE5VTUJFUl9PRl9JRFMpOwotICAgICAgICB0aGlzLmxpc3Qg
PSBudWxsOwotICAgICAgICB0aGlzLmN1cnJlbnRUY2IgPSBudWxsOwotICAgICAgICB0aGlzLmN1
cnJlbnRJZCA9IG51bGw7Ci0KLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi12YXIgSURfSURMRSAg
ICAgICA9IDA7Ci12YXIgSURfV09SS0VSICAgICA9IDE7Ci12YXIgSURfSEFORExFUl9BICA9IDI7
Ci12YXIgSURfSEFORExFUl9CICA9IDM7Ci12YXIgSURfREVWSUNFX0EgICA9IDQ7Ci12YXIgSURf
REVWSUNFX0IgICA9IDU7Ci12YXIgTlVNQkVSX09GX0lEUyA9IDY7Ci0KLXZhciBLSU5EX0RFVklD
RSAgID0gMDsKLXZhciBLSU5EX1dPUksgICAgID0gMTsKLQotLyoqCi0gKiBBZGQgYW4gaWRsZSB0
YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgotICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBv
ZiB0aGUgdGFzawotICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkK
LSAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNz
ZWQgYnkgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50fSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVz
IHRvIHNjaGVkdWxlIHRoZSB0YXNrCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUuYWRkSWRsZVRh
c2sgPSBmdW5jdGlvbiAoaWQsIHByaW9yaXR5LCBxdWV1ZSwgY291bnQpIHsKLSAgICB0cnkgewot
ICAgICAgICB0aGlzLmFkZFJ1bm5pbmdUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUsIG5ldyBJZGxl
VGFzayh0aGlzLCAxLCBjb3VudCkpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19OwotCi0vKioKLSAq
IEFkZCBhIHdvcmsgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KLSAqIEBwYXJhbSB7aW50fSBpZCB0
aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFz
aydzIHByaW9yaXR5Ci0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsg
dG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUuYWRk
V29ya2VyVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlKSB7Ci0gICAgdHJ5IHsK
LSAgICAgICAgdGhpcy5hZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUsIG5ldyBXb3JrZXJUYXNr
KHRoaXMsIElEX0hBTkRMRVJfQSwgMCkpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19OwotCi0vKioK
LSAqIEFkZCBhIGhhbmRsZXIgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KLSAqIEBwYXJhbSB7aW50
fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0
aGUgdGFzaydzIHByaW9yaXR5Ci0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9m
IHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5
cGUuYWRkSGFuZGxlclRhc2sgPSBmdW5jdGlvbiAoaWQsIHByaW9yaXR5LCBxdWV1ZSkgewotICAg
IHRyeSB7Ci0gICAgICAgIHRoaXMuYWRkVGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCBuZXcgSGFu
ZGxlclRhc2sodGhpcykpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19OwotCi0vKioKLSAqIEFkZCBh
IGhhbmRsZXIgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KLSAqIEBwYXJhbSB7aW50fSBpZCB0aGUg
aWRlbnRpdHkgb2YgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFzaydz
IHByaW9yaXR5Ci0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsgdG8g
YmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUuYWRkRGV2
aWNlVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlKSB7Ci0gICAgdHJ5IHsKLSAg
ICAgICAgdGhpcy5hZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUsIG5ldyBEZXZpY2VUYXNrKHRo
aXMpKQotICAgIH0gY2F0Y2goZSkgeyB9Ci19OwotCi0vKioKLSAqIEFkZCB0aGUgc3BlY2lmaWVk
IHRhc2sgYW5kIG1hcmsgaXQgYXMgcnVubmluZy4KLSAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWRl
bnRpdHkgb2YgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFzaydzIHBy
aW9yaXR5Ci0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsgdG8gYmUg
cHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCi0gKiBAcGFyYW0ge1Rhc2t9IHRhc2sgdGhlIHRhc2sgdG8g
YWRkCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUuYWRkUnVubmluZ1Rhc2sgPSBmdW5jdGlvbiAo
aWQsIHByaW9yaXR5LCBxdWV1ZSwgdGFzaykgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMuYWRk
VGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKTsKLSAgICAgICAgdGhpcy5jdXJyZW50VGNi
LnNldFJ1bm5pbmcoKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotLyoqCi0gKiBBZGQgdGhl
IHNwZWNpZmllZCB0YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgotICogQHBhcmFtIHtpbnR9IGlkIHRo
ZSBpZGVudGl0eSBvZiB0aGUgdGFzawotICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNr
J3MgcHJpb3JpdHkKLSAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0
byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sKLSAqIEBwYXJhbSB7VGFza30gdGFzayB0aGUgdGFz
ayB0byBhZGQKLSAqLwotU2NoZWR1bGVyLnByb3RvdHlwZS5hZGRUYXNrID0gZnVuY3Rpb24gKGlk
LCBwcmlvcml0eSwgcXVldWUsIHRhc2spIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLmN1cnJl
bnRUY2IgPSBuZXcgVGFza0NvbnRyb2xCbG9jayh0aGlzLmxpc3QsIGlkLCBwcmlvcml0eSwgcXVl
dWUsIHRhc2spOwotICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmN1cnJlbnRUY2I7Ci0gICAgICAg
IHRoaXMuYmxvY2tzW2lkXSA9IHRoaXMuY3VycmVudFRjYjsKLSAgICB9IGNhdGNoKGUpIHsgfQot
fTsKLQotLyoqCi0gKiBFeGVjdXRlIHRoZSB0YXNrcyBtYW5hZ2VkIGJ5IHRoaXMgc2NoZWR1bGVy
LgotICovCi1TY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKCkgewotICAg
IHRoaXMuY3VycmVudFRjYiA9IHRoaXMubGlzdDsKLSAgICB3aGlsZSAodGhpcy5jdXJyZW50VGNi
ICE9IG51bGwpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRU
Y2IuaXNIZWxkT3JTdXNwZW5kZWQoKSkgewotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRj
YiA9IHRoaXMuY3VycmVudFRjYi5saW5rOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLmN1cnJlbnRJZCA9IHRoaXMuY3VycmVudFRjYi5pZDsKLSAgICAgICAgICAg
ICAgICB0aGlzLmN1cnJlbnRUY2IgPSB0aGlzLmN1cnJlbnRUY2IucnVuKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfQotfTsKLQotLyoqCi0gKiBSZWxlYXNl
IGEgdGFzayB0aGF0IGlzIGN1cnJlbnRseSBibG9ja2VkIGFuZCByZXR1cm4gdGhlIG5leHQgYmxv
Y2sgdG8gcnVuLgotICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZCBvZiB0aGUgdGFzayB0byBzdXNw
ZW5kCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uIChpZCkgewot
ICAgIHRyeSB7Ci0gICAgICAgIHZhciB0Y2IgPSB0aGlzLmJsb2Nrc1tpZF07Ci0gICAgICAgIGlm
ICh0Y2IgPT0gbnVsbCkgcmV0dXJuIHRjYjsKLSAgICAgICAgdGNiLm1hcmtBc05vdEhlbGQoKTsK
LSAgICB9IGNhdGNoKGUpIHsgfQotICAgIHRyeSB7Ci0gICAgICAgIGlmICh0Y2IucHJpb3JpdHkg
PiB0aGlzLmN1cnJlbnRUY2IucHJpb3JpdHkpIHsKLSAgICAgICAgICAgIHJldHVybiB0Y2I7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGNiOwotICAg
ICAgICB9Ci0gICAgfSBjYXRjaChlKSB7IH0KLX07Ci0KLS8qKgotICogQmxvY2sgdGhlIGN1cnJl
bnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0IHRhc2sgY29udHJvbCBibG9j
awotICogdG8gcnVuLiAgVGhlIGJsb2NrZWQgdGFzayB3aWxsIG5vdCBiZSBtYWRlIHJ1bm5hYmxl
IHVudGlsIGl0IGlzIGV4cGxpY2l0bHkKLSAqIHJlbGVhc2VkLCBldmVuIGlmIG5ldyB3b3JrIGlz
IGFkZGVkIHRvIGl0LgotICovCi1TY2hlZHVsZXIucHJvdG90eXBlLmhvbGRDdXJyZW50ID0gZnVu
Y3Rpb24gKCkgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMuaG9sZENvdW50Kys7Ci0gICAgICAg
IHRoaXMuY3VycmVudFRjYi5tYXJrQXNIZWxkKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICBy
ZXR1cm4gdGhpcy5jdXJyZW50VGNiLmxpbms7Ci19OwotCi0vKioKLSAqIFN1c3BlbmQgdGhlIGN1
cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0IHRhc2sgY29udHJvbCBi
bG9jawotICogdG8gcnVuLiAgSWYgbmV3IHdvcmsgaXMgYWRkZWQgdG8gdGhlIHN1c3BlbmRlZCB0
YXNrIGl0IHdpbGwgYmUgbWFkZSBydW5uYWJsZS4KLSAqLwotU2NoZWR1bGVyLnByb3RvdHlwZS5z
dXNwZW5kQ3VycmVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLmN1
cnJlbnRUY2IubWFya0FzU3VzcGVuZGVkKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICB0cnkg
ewotICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGNiOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19
OwotCi0vKioKLSAqIEFkZCB0aGUgc3BlY2lmaWVkIHBhY2tldCB0byB0aGUgZW5kIG9mIHRoZSB3
b3JrbGlzdCB1c2VkIGJ5IHRoZSB0YXNrCi0gKiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhY2tldCBh
bmQgbWFrZSB0aGUgdGFzayBydW5uYWJsZSBpZiBpdCBpcyBjdXJyZW50bHkKLSAqIHN1c3BlbmRl
ZC4KLSAqIEBwYXJhbSB7UGFja2V0fSBwYWNrZXQgdGhlIHBhY2tldCB0byBhZGQKLSAqLwotU2No
ZWR1bGVyLnByb3RvdHlwZS5xdWV1ZSA9IGZ1bmN0aW9uIChwYWNrZXQpIHsKLSAgICB0cnkgewot
ICAgICAgICB2YXIgdCA9IHRoaXMuYmxvY2tzW3BhY2tldC5pZF07Ci0gICAgICAgIGlmICh0ID09
IG51bGwpIHJldHVybiB0OwotICAgICAgICB0aGlzLnF1ZXVlQ291bnQrKzsKLSAgICAgICAgcGFj
a2V0LmxpbmsgPSBudWxsOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgcGFja2V0LmlkID0gdGhp
cy5jdXJyZW50SWQ7Ci0gICAgcmV0dXJuIHQuY2hlY2tQcmlvcml0eUFkZCh0aGlzLmN1cnJlbnRU
Y2IsIHBhY2tldCk7Ci19OwotCi0vKioKLSAqIEEgdGFzayBjb250cm9sIGJsb2NrIG1hbmFnZXMg
YSB0YXNrIGFuZCB0aGUgcXVldWUgb2Ygd29yayBwYWNrYWdlcyBhc3NvY2lhdGVkCi0gKiB3aXRo
IGl0LgotICogQHBhcmFtIHtUYXNrQ29udHJvbEJsb2NrfSBsaW5rIHRoZSBwcmVjZWRpbmcgYmxv
Y2sgaW4gdGhlIGxpbmtlZCBibG9jayBsaXN0Ci0gKiBAcGFyYW0ge2ludH0gaWQgdGhlIGlkIG9m
IHRoaXMgYmxvY2sKLSAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgcHJpb3JpdHkgb2YgdGhp
cyBibG9jawotICogQHBhcmFtIHtQYWNrZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiBwYWNrYWdlcyB0
byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sKLSAqIEBwYXJhbSB7VGFza30gdGFzayB0aGUgdGFz
awotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIFRhc2tDb250cm9sQmxvY2sobGluaywg
aWQsIHByaW9yaXR5LCBxdWV1ZSwgdGFzaykgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMubGlu
ayA9IGxpbms7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgICAgdGhpcy5wcmlvcml0eSA9
IHByaW9yaXR5OwotICAgICAgICB0aGlzLnF1ZXVlID0gcXVldWU7Ci0gICAgICAgIHRoaXMudGFz
ayA9IHRhc2s7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICB0cnkgewotICAgICAgICBpZiAocXVl
dWUgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1NVU1BFTkRFRDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9TVVNQRU5E
RURfUlVOTkFCTEU7Ci0gICAgICAgIH0KLSAgICB9IGNhdGNoKGUpIHsgfQotfQotCi0vKioKLSAq
IFRoZSB0YXNrIGlzIHJ1bm5pbmcgYW5kIGlzIGN1cnJlbnRseSBzY2hlZHVsZWQuCi0gKi8KLXZh
ciBTVEFURV9SVU5OSU5HID0gMDsKLQotLyoqCi0gKiBUaGUgdGFzayBoYXMgcGFja2V0cyBsZWZ0
IHRvIHByb2Nlc3MuCi0gKi8KLXZhciBTVEFURV9SVU5OQUJMRSA9IDE7Ci0KLS8qKgotICogVGhl
IHRhc2sgaXMgbm90IGN1cnJlbnRseSBydW5uaW5nLiAgVGhlIHRhc2sgaXMgbm90IGJsb2NrZWQg
YXMgc3VjaCBhbmQgbWF5Ci0gKiBiZSBzdGFydGVkIGJ5IHRoZSBzY2hlZHVsZXIuCi0gKi8KLXZh
ciBTVEFURV9TVVNQRU5ERUQgPSAyOwotCi0vKioKLSAqIFRoZSB0YXNrIGlzIGJsb2NrZWQgYW5k
IGNhbm5vdCBiZSBydW4gdW50aWwgaXQgaXMgZXhwbGljaXRseSByZWxlYXNlZC4KLSAqLwotdmFy
IFNUQVRFX0hFTEQgPSA0OwotCi12YXIgU1RBVEVfU1VTUEVOREVEX1JVTk5BQkxFID0gU1RBVEVf
U1VTUEVOREVEIHwgU1RBVEVfUlVOTkFCTEU7Ci12YXIgU1RBVEVfTk9UX0hFTEQgPSB+U1RBVEVf
SEVMRDsKLQotVGFza0NvbnRyb2xCbG9jay5wcm90b3R5cGUuc2V0UnVubmluZyA9IGZ1bmN0aW9u
ICgpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUlVOTklORzsKLSAg
ICB9IGNhdGNoKGUpe30KLX07Ci0KLVRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1hcmtBc05v
dEhlbGQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHRo
aXMuc3RhdGUgJiBTVEFURV9OT1RfSEVMRDsKLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotVGFz
a0NvbnRyb2xCbG9jay5wcm90b3R5cGUubWFya0FzSGVsZCA9IGZ1bmN0aW9uICgpIHsKLSAgICB0
cnkgewotICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSB8IFNUQVRFX0hFTEQ7Ci0gICAg
fSBjYXRjaChlKSB7IH0KLX07Ci0KLVRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLmlzSGVsZE9y
U3VzcGVuZGVkID0gZnVuY3Rpb24gKCkgewotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiAodGhp
cy5zdGF0ZSAmIFNUQVRFX0hFTEQpICE9IDAgfHwgKHRoaXMuc3RhdGUgPT0gU1RBVEVfU1VTUEVO
REVEKTsKLSAgICB9IGNhdGNoKGUpIHsgCi0gICAgICAgIHJldHVybiAodGhpcy5zdGF0ZSAmIFNU
QVRFX0hFTEQpICE9IDAgfHwgKHRoaXMuc3RhdGUgPT0gU1RBVEVfU1VTUEVOREVEKTsKLSAgICB9
Ci19OwotCi1UYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5tYXJrQXNTdXNwZW5kZWQgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgfCBT
VEFURV9TVVNQRU5ERUQ7Ci0gICAgfSBjYXRjaChlKSB7IAotICAgICAgICB0aGlzLnN0YXRlID0g
dGhpcy5zdGF0ZSB8IFNUQVRFX1NVU1BFTkRFRDsKLSAgICB9Ci19OwotCi1UYXNrQ29udHJvbEJs
b2NrLnByb3RvdHlwZS5tYXJrQXNSdW5uYWJsZSA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewot
ICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSB8IFNUQVRFX1JVTk5BQkxFOwotICAgIH0g
Y2F0Y2goZSkgewotICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSB8IFNUQVRFX1JVTk5B
QkxFOwotICAgIH0KLX07Ci0KLS8qKgotICogUnVucyB0aGlzIHRhc2ssIGlmIGl0IGlzIHJlYWR5
IHRvIGJlIHJ1biwgYW5kIHJldHVybnMgdGhlIG5leHQgdGFzayB0byBydW4uCi0gKi8KLVRhc2tD
b250cm9sQmxvY2sucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgcGFja2V0
OwotICAgIHRyeSB7Ci0gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFNUQVRFX1NVU1BFTkRFRF9S
VU5OQUJMRSkgewotICAgICAgICAgICAgcGFja2V0ID0gdGhpcy5xdWV1ZTsKLSAgICAgICAgICAg
IHRoaXMucXVldWUgPSBwYWNrZXQubGluazsKLSAgICAgICAgICAgIGlmICh0aGlzLnF1ZXVlID09
IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUlVOTklORzsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JV
Tk5BQkxFOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFj
a2V0ID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgcmV0dXJuIHRo
aXMudGFzay5ydW4ocGFja2V0KTsKLX07Ci0KLS8qKgotICogQWRkcyBhIHBhY2tldCB0byB0aGUg
d29ya2xpc3Qgb2YgdGhpcyBibG9jaydzIHRhc2ssIG1hcmtzIHRoaXMgYXMgcnVubmFibGUgaWYK
LSAqIG5lY2Vzc2FyeSwgYW5kIHJldHVybnMgdGhlIG5leHQgcnVubmFibGUgb2JqZWN0IHRvIHJ1
biAodGhlIG9uZQotICogd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSkuCi0gKi8KLVRhc2tDb250
cm9sQmxvY2sucHJvdG90eXBlLmNoZWNrUHJpb3JpdHlBZGQgPSBmdW5jdGlvbiAodGFzaywgcGFj
a2V0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgaWYgKHRoaXMucXVldWUgPT0gbnVsbCkgewotICAg
ICAgICAgICAgdGhpcy5xdWV1ZSA9IHBhY2tldDsKLSAgICAgICAgICAgIHRoaXMubWFya0FzUnVu
bmFibGUoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnByaW9yaXR5ID4gdGFzay5wcmlvcml0eSkg
cmV0dXJuIHRoaXM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLnF1ZXVlID0g
cGFja2V0LmFkZFRvKHRoaXMucXVldWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRh
c2s7Ci0gICAgfSBjYXRjaChlKSB7IAotICAgICAgICByZXR1cm4gdGFzazsKLSAgICB9Ci19Owot
Ci1UYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKLSAg
ICB0cnkgewotICAgICAgICByZXR1cm4gInRjYiB7ICIgKyB0aGlzLnRhc2sgKyAiQCIgKyB0aGlz
LnN0YXRlICsgIiB9IjsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgcmV0dXJuICJ0Y2IgeyAi
ICsgdGhpcy50YXNrICsgIkAiICsgdGhpcy5zdGF0ZSArICIgfSI7Ci0gICAgfQotfTsKLQotLyoq
Ci0gKiBBbiBpZGxlIHRhc2sgZG9lc24ndCBkbyBhbnkgd29yayBpdHNlbGYgYnV0IGN5Y2xlcyBj
b250cm9sIGJldHdlZW4gdGhlIHR3bwotICogZGV2aWNlIHRhc2tzLgotICogQHBhcmFtIHtTY2hl
ZHVsZXJ9IHNjaGVkdWxlciB0aGUgc2NoZWR1bGVyIHRoYXQgbWFuYWdlcyB0aGlzIHRhc2sKLSAq
IEBwYXJhbSB7aW50fSB2MSBhIHNlZWQgdmFsdWUgdGhhdCBjb250cm9scyBob3cgdGhlIGRldmlj
ZSB0YXNrcyBhcmUgc2NoZWR1bGVkCi0gKiBAcGFyYW0ge2ludH0gY291bnQgdGhlIG51bWJlciBv
ZiB0aW1lcyB0aGlzIHRhc2sgc2hvdWxkIGJlIHNjaGVkdWxlZAotICogQGNvbnN0cnVjdG9yCi0g
Ki8KLWZ1bmN0aW9uIElkbGVUYXNrKHNjaGVkdWxlciwgdjEsIGNvdW50KSB7Ci0gICAgdHJ5IHsK
LSAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7Ci0gICAgICAgIHRoaXMudjEgPSB2
MTsKLSAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50OwotICAgIH0gY2F0Y2goZSkgewotICAgICAg
ICB0aGlzLmNvdW50ID0gY291bnQ7Ci0gICAgfQotfQotCi1JZGxlVGFzay5wcm90b3R5cGUucnVu
ID0gZnVuY3Rpb24gKHBhY2tldCkgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMuY291bnQtLTsK
LSAgICAgICAgaWYgKHRoaXMuY291bnQgPT0gMCkgcmV0dXJuIHRoaXMuc2NoZWR1bGVyLmhvbGRD
dXJyZW50KCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLQotICAgIHRyeSB7Ci0gICAgICAgIGlmICgo
dGhpcy52MSAmIDEpID09IDApIHsKLSAgICAgICAgICAgIHRoaXMudjEgPSB0aGlzLnYxID4+IDE7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIucmVsZWFzZShJRF9ERVZJQ0VfQSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLnYxID0gKHRoaXMudjEgPj4gMSkg
XiAweEQwMDg7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIucmVsZWFzZShJRF9E
RVZJQ0VfQik7Ci0gICAgICAgIH0KLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotSWRsZVRhc2su
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewotICAgIHRyeSB7Ci0gICAgICAgIHJl
dHVybiAiSWRsZVRhc2siCi0gICAgfSBjYXRjaChlKSB7Ci0gICAgICAgIHJldHVybiAiSWRsZVRh
c2siCi0gICAgfQotfTsKLQotLyoqCi0gKiBBIHRhc2sgdGhhdCBzdXNwZW5kcyBpdHNlbGYgYWZ0
ZXIgZWFjaCB0aW1lIGl0IGhhcyBiZWVuIHJ1biB0byBzaW11bGF0ZQotICogd2FpdGluZyBmb3Ig
ZGF0YSBmcm9tIGFuIGV4dGVybmFsIGRldmljZS4KLSAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hl
ZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0YXNrCi0gKiBAY29uc3RydWN0
b3IKLSAqLwotZnVuY3Rpb24gRGV2aWNlVGFzayhzY2hlZHVsZXIpIHsKLSAgICB0cnkgewotICAg
ICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKLSAgICAgICAgdGhpcy52MSA9IG51bGw7
Ci0gICAgfSBjYXRjaChlKSB7IH0KLX0KLQotRGV2aWNlVGFzay5wcm90b3R5cGUucnVuID0gZnVu
Y3Rpb24gKHBhY2tldCkgewotICAgIGlmIChwYWNrZXQgPT0gbnVsbCkgewotICAgICAgICB0cnkg
ewotICAgICAgICAgICAgaWYgKHRoaXMudjEgPT0gbnVsbCkgcmV0dXJuIHRoaXMuc2NoZWR1bGVy
LnN1c3BlbmRDdXJyZW50KCk7Ci0gICAgICAgICAgICB2YXIgdiA9IHRoaXMudjE7Ci0gICAgICAg
ICAgICB0aGlzLnYxID0gbnVsbDsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgcmV0
dXJuIHRoaXMuc2NoZWR1bGVyLnF1ZXVlKHYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICB0aGlzLnYxID0gcGFja2V0OwotICAgICAgICB9IGNhdGNoKGUpIHsgfQot
ICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIuaG9sZEN1cnJlbnQoKTsKLSAgICB9Ci19Owot
Ci1EZXZpY2VUYXNrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkg
ewotICAgICAgICByZXR1cm4gIkRldmljZVRhc2siOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19Owot
Ci0vKioKLSAqIEEgdGFzayB0aGF0IG1hbmlwdWxhdGVzIHdvcmsgcGFja2V0cy4KLSAqIEBwYXJh
bSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0
YXNrCi0gKiBAcGFyYW0ge2ludH0gdjEgYSBzZWVkIHVzZWQgdG8gc3BlY2lmeSBob3cgd29yayBw
YWNrZXRzIGFyZSBtYW5pcHVsYXRlZAotICogQHBhcmFtIHtpbnR9IHYyIGFub3RoZXIgc2VlZCB1
c2VkIHRvIHNwZWNpZnkgaG93IHdvcmsgcGFja2V0cyBhcmUgbWFuaXB1bGF0ZWQKLSAqIEBjb25z
dHJ1Y3RvcgotICovCi1mdW5jdGlvbiBXb3JrZXJUYXNrKHNjaGVkdWxlciwgdjEsIHYyKSB7Ci0g
ICAgdHJ5IHsKLSAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7Ci0gICAgICAgIHRo
aXMudjEgPSB2MTsKLSAgICAgICAgdGhpcy52MiA9IHYyOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19
Ci0KLVdvcmtlclRhc2sucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChwYWNrZXQpIHsKLSAgICBp
ZiAocGFja2V0ID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyLnN1c3Bl
bmRDdXJyZW50KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLnYxID09IElEX0hBTkRMRVJfQSkgewotICAgICAgICAgICAgICAgIHRoaXMudjEgPSBJ
RF9IQU5ETEVSX0I7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMu
djEgPSBJRF9IQU5ETEVSX0E7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYWNrZXQuaWQg
PSB0aGlzLnYxOwotICAgICAgICAgICAgcGFja2V0LmExID0gMDsKLSAgICAgICAgfSBjYXRjaChl
KSB7IH0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBEQVRBX1NJWkU7IGkrKykgewotICAg
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0aGlzLnYyKys7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMudjIgPiAyNikgdGhpcy52MiA9IDE7Ci0gICAgICAgICAgICAgICAgcGFja2V0
LmEyW2ldID0gdGhpcy52MjsKLSAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyLnF1ZXVlKHBhY2tldCk7Ci0gICAgfQotfTsK
LQotV29ya2VyVGFzay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdHJ5
IHsKLSAgICAgICAgcmV0dXJuICJXb3JrZXJUYXNrIjsKLSAgICB9IGNhdGNoKGUpIHsgfQotfTsK
LQotLyoqCi0gKiBBIHRhc2sgdGhhdCBtYW5pcHVsYXRlcyB3b3JrIHBhY2tldHMgYW5kIHRoZW4g
c3VzcGVuZHMgaXRzZWxmLgotICogQHBhcmFtIHtTY2hlZHVsZXJ9IHNjaGVkdWxlciB0aGUgc2No
ZWR1bGVyIHRoYXQgbWFuYWdlcyB0aGlzIHRhc2sKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5j
dGlvbiBIYW5kbGVyVGFzayhzY2hlZHVsZXIpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLnNj
aGVkdWxlciA9IHNjaGVkdWxlcjsKLSAgICAgICAgdGhpcy52MSA9IG51bGw7Ci0gICAgICAgIHRo
aXMudjIgPSBudWxsOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19Ci0KLUhhbmRsZXJUYXNrLnByb3Rv
dHlwZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgaWYgKHBh
Y2tldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAocGFja2V0LmtpbmQgPT0gS0lORF9XT1JL
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52MSA9IHBhY2tldC5hZGRUbyh0aGlzLnYxKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52MiA9IHBhY2tldC5hZGRU
byh0aGlzLnYyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gY2F0Y2goZSkgeyB9
Ci0KLSAgICB0cnkgewotICAgICAgICBpZiAodGhpcy52MSAhPSBudWxsKSB7Ci0gICAgICAgICAg
ICB2YXIgY291bnQgPSB0aGlzLnYxLmExOwotICAgICAgICAgICAgdmFyIHY7Ci0gICAgICAgICAg
ICBpZiAoY291bnQgPCBEQVRBX1NJWkUpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy52MiAh
PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLnYyOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLnYyID0gdGhpcy52Mi5saW5rOwotICAgICAgICAgICAgICAgICAgICB2LmEx
ID0gdGhpcy52MS5hMltjb3VudF07Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudjEuYTEgPSBj
b3VudCArIDE7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlci5xdWV1
ZSh2KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHYgPSB0aGlzLnYxOwotICAgICAgICAgICAgICAgIHRoaXMudjEgPSB0aGlzLnYxLmxp
bms7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyLnF1ZXVlKHYpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICByZXR1cm4gdGhp
cy5zY2hlZHVsZXIuc3VzcGVuZEN1cnJlbnQoKTsKLX07Ci0KLUhhbmRsZXJUYXNrLnByb3RvdHlw
ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICByZXR1cm4gIkhh
bmRsZXJUYXNrIjsKLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotLyogLS0tICoKLSAqIFAgYSBj
IGsgZSB0Ci0gKiAtLS0gKi8KLQotdmFyIERBVEFfU0laRSA9IDQ7Ci0KLS8qKgotICogQSBzaW1w
bGUgcGFja2FnZSBvZiBkYXRhIHRoYXQgaXMgbWFuaXB1bGF0ZWQgYnkgdGhlIHRhc2tzLiAgVGhl
IGV4YWN0IGxheW91dAotICogb2YgdGhlIHBheWxvYWQgZGF0YSBjYXJyaWVkIGJ5IGEgcGFja2V0
IGlzIG5vdCBpbXBvcnRhaW50LCBhbmQgbmVpdGhlciBpcyB0aGUKLSAqIG5hdHVyZSBvZiB0aGUg
d29yayBwZXJmb3JtZWQgb24gcGFja2V0cyBieSB0aGUgdGFza3MuCi0gKgotICogQmVzaWRlcyBj
YXJyeWluZyBkYXRhLCBwYWNrZXRzIGZvcm0gbGlua2VkIGxpc3RzIGFuZCBhcmUgaGVuY2UgdXNl
ZCBib3RoIGFzCi0gKiBkYXRhIGFuZCB3b3JrbGlzdHMuCi0gKiBAcGFyYW0ge1BhY2tldH0gbGlu
ayB0aGUgdGFpbCBvZiB0aGUgbGlua2VkIGxpc3Qgb2YgcGFja2V0cwotICogQHBhcmFtIHtpbnR9
IGlkIGFuIElEIGZvciB0aGlzIHBhY2tldAotICogQHBhcmFtIHtpbnR9IGtpbmQgdGhlIHR5cGUg
b2YgdGhpcyBwYWNrZXQKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBQYWNrZXQobGlu
aywgaWQsIGtpbmQpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLmxpbmsgPSBsaW5rOwotICAg
ICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7Ci0gICAgICAgIHRo
aXMuYTEgPSAwOwotICAgICAgICB0aGlzLmEyID0gbmV3IEFycmF5KERBVEFfU0laRSk7Ci0gICAg
fSBjYXRjaChlKSB7IH0KLX0KLQotLyoqCi0gKiBBZGQgdGhpcyBwYWNrZXQgdG8gdGhlIGVuZCBv
ZiBhIHdvcmtsaXN0LCBhbmQgcmV0dXJuIHRoZSB3b3JrbGlzdC4KLSAqIEBwYXJhbSB7UGFja2V0
fSBxdWV1ZSB0aGUgd29ya2xpc3QgdG8gYWRkIHRoaXMgcGFja2V0IHRvCi0gKi8KLVBhY2tldC5w
cm90b3R5cGUuYWRkVG8gPSBmdW5jdGlvbiAocXVldWUpIHsKLSAgICB0aGlzLmxpbmsgPSBudWxs
OwotICAgIGlmIChxdWV1ZSA9PSBudWxsKSByZXR1cm4gdGhpczsKLSAgICB2YXIgcGVlaywgbmV4
dCA9IHF1ZXVlOwotICAgIHdoaWxlICgocGVlayA9IG5leHQubGluaykgIT0gbnVsbCkgewotICAg
ICAgICB0cnkgewotICAgICAgICAgICAgbmV4dCA9IHBlZWs7Ci0gICAgICAgIH0gY2F0Y2goZSkg
eyB9Ci0gICAgfQotICAgIG5leHQubGluayA9IHRoaXM7Ci0gICAgcmV0dXJuIHF1ZXVlOwotfTsK
LQotUGFja2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewot
ICAgICAgICByZXR1cm4gIlBhY2tldCI7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX07Ci0KLWZvciAo
bGV0IGkgPSAwOyBpIDwgMzUwOyArK2kpCi0gIHJ1blJpY2hhcmRzKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9yaWNoYXJkcy10cnktY2F0Y2guanMg
Yi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9yaWNoYXJkcy10cnktY2F0Y2gu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MzdmOTdmNTNhYTg5MTcyNzRkMjdi
NmQyNDFmMGFmMDdiZTRkMDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcmljaGFyZHMtdHJ5
LWNhdGNoLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjk1ICswLDAgQEAKLS8vIENvcHlyaWdodCAy
MDA2LTIwMDggdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0v
LyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8v
ICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi0KLS8vIFRoaXMgaXMgYSBKYXZhU2NyaXB0IGltcGxlbWVudGF0
aW9uIG9mIHRoZSBSaWNoYXJkcwotLy8gYmVuY2htYXJrIGZyb206Ci0vLwotLy8gICAgaHR0cDov
L3d3dy5jbC5jYW0uYWMudWsvfm1yMTAvQmVuY2guaHRtbAotLy8KLS8vIFRoZSBiZW5jaG1hcmsg
d2FzIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgaW4gQkNQTCBieQotLy8gTWFydGluIFJpY2hhcmRz
LgotCi0KLWxldCBfX2V4Y2VwdGlvbkNvdW50ZXIgPSAwOwotZnVuY3Rpb24gcmFuZG9tRXhjZXB0
aW9uKCkgewotICAgIF9fZXhjZXB0aW9uQ291bnRlcisrOwotICAgIGlmIChfX2V4Y2VwdGlvbkNv
dW50ZXIgJSA1MDAwID09PSAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigicmFuZG8iKTsK
LSAgICB9Ci19Ci1ub0lubGluZShyYW5kb21FeGNlcHRpb24pOwotCi0vKioKLSAqIFRoZSBSaWNo
YXJkcyBiZW5jaG1hcmsgc2ltdWxhdGVzIHRoZSB0YXNrIGRpc3BhdGNoZXIgb2YgYW4KLSAqIG9w
ZXJhdGluZyBzeXN0ZW0uCi0gKiovCi1mdW5jdGlvbiBydW5SaWNoYXJkcygpIHsKLSAgICB0cnkg
ewotICAgICAgICB2YXIgc2NoZWR1bGVyID0gbmV3IFNjaGVkdWxlcigpOwotICAgICAgICBzY2hl
ZHVsZXIuYWRkSWRsZVRhc2soSURfSURMRSwgMCwgbnVsbCwgQ09VTlQpOwotCi0gICAgICAgIHZh
ciBxdWV1ZSA9IG5ldyBQYWNrZXQobnVsbCwgSURfV09SS0VSLCBLSU5EX1dPUkspOwotICAgICAg
ICBxdWV1ZSA9IG5ldyBQYWNrZXQocXVldWUsICBJRF9XT1JLRVIsIEtJTkRfV09SSyk7Ci0gICAg
ICAgIHNjaGVkdWxlci5hZGRXb3JrZXJUYXNrKElEX1dPUktFUiwgMTAwMCwgcXVldWUpOwotCi0g
ICAgICAgIHF1ZXVlID0gbmV3IFBhY2tldChudWxsLCBJRF9ERVZJQ0VfQSwgS0lORF9ERVZJQ0Up
OwotICAgICAgICBxdWV1ZSA9IG5ldyBQYWNrZXQocXVldWUsICBJRF9ERVZJQ0VfQSwgS0lORF9E
RVZJQ0UpOwotICAgICAgICBxdWV1ZSA9IG5ldyBQYWNrZXQocXVldWUsICBJRF9ERVZJQ0VfQSwg
S0lORF9ERVZJQ0UpOwotICAgICAgICBzY2hlZHVsZXIuYWRkSGFuZGxlclRhc2soSURfSEFORExF
Ul9BLCAyMDAwLCBxdWV1ZSk7Ci0KLSAgICAgICAgcXVldWUgPSBuZXcgUGFja2V0KG51bGwsIElE
X0RFVklDRV9CLCBLSU5EX0RFVklDRSk7Ci0gICAgICAgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1
ZSwgIElEX0RFVklDRV9CLCBLSU5EX0RFVklDRSk7Ci0gICAgICAgIHF1ZXVlID0gbmV3IFBhY2tl
dChxdWV1ZSwgIElEX0RFVklDRV9CLCBLSU5EX0RFVklDRSk7Ci0gICAgICAgIHNjaGVkdWxlci5h
ZGRIYW5kbGVyVGFzayhJRF9IQU5ETEVSX0IsIDMwMDAsIHF1ZXVlKTsKLQotICAgICAgICBzY2hl
ZHVsZXIuYWRkRGV2aWNlVGFzayhJRF9ERVZJQ0VfQSwgNDAwMCwgbnVsbCk7Ci0KLSAgICAgICAg
c2NoZWR1bGVyLmFkZERldmljZVRhc2soSURfREVWSUNFX0IsIDUwMDAsIG51bGwpOwotCi0gICAg
ICAgIHNjaGVkdWxlci5zY2hlZHVsZSgpOwotCi0gICAgICAgIGlmIChzY2hlZHVsZXIucXVldWVD
b3VudCAhPSBFWFBFQ1RFRF9RVUVVRV9DT1VOVCB8fAotICAgICAgICAgICAgICAgIHNjaGVkdWxl
ci5ob2xkQ291bnQgIT0gRVhQRUNURURfSE9MRF9DT1VOVCkgewotICAgICAgICAgICAgdmFyIG1z
ZyA9Ci0gICAgICAgICAgICAgICAgIkVycm9yIGR1cmluZyBleGVjdXRpb246IHF1ZXVlQ291bnQg
PSAiICsgc2NoZWR1bGVyLnF1ZXVlQ291bnQgKwotICAgICAgICAgICAgICAgICIsIGhvbGRDb3Vu
dCA9ICIgKyBzY2hlZHVsZXIuaG9sZENvdW50ICsgIi4iOwotICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKG1zZyk7Ci0gICAgICAgIH0KLQotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAg
ICB9IGNhdGNoKGUpIHsgfQotfQotCi12YXIgQ09VTlQgPSAxMDAwOwotCi0vKioKLSAqIFRoZXNl
IHR3byBjb25zdGFudHMgc3BlY2lmeSBob3cgbWFueSB0aW1lcyBhIHBhY2tldCBpcyBxdWV1ZWQg
YW5kCi0gKiBob3cgbWFueSB0aW1lcyBhIHRhc2sgaXMgcHV0IG9uIGhvbGQgaW4gYSBjb3JyZWN0
IHJ1biBvZiByaWNoYXJkcy4KLSAqIFRoZXkgZG9uJ3QgaGF2ZSBhbnkgbWVhbmluZyBhIHN1Y2gg
YnV0IGFyZSBjaGFyYWN0ZXJpc3RpYyBvZiBhCi0gKiBjb3JyZWN0IHJ1biBzbyBpZiB0aGUgYWN0
dWFsIHF1ZXVlIG9yIGhvbGQgY291bnQgaXMgZGlmZmVyZW50IGZyb20KLSAqIHRoZSBleHBlY3Rl
ZCB0aGVyZSBtdXN0IGJlIGEgYnVnIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KLSAqKi8KLXZhciBF
WFBFQ1RFRF9RVUVVRV9DT1VOVCA9IDIzMjI7Ci12YXIgRVhQRUNURURfSE9MRF9DT1VOVCA9IDky
ODsKLQotCi0vKioKLSAqIEEgc2NoZWR1bGVyIGNhbiBiZSB1c2VkIHRvIHNjaGVkdWxlIGEgc2V0
IG9mIHRhc2tzIGJhc2VkIG9uIHRoZWlyIHJlbGF0aXZlCi0gKiBwcmlvcml0aWVzLiAgU2NoZWR1
bGluZyBpcyBkb25lIGJ5IG1haW50YWluaW5nIGEgbGlzdCBvZiB0YXNrIGNvbnRyb2wgYmxvY2tz
Ci0gKiB3aGljaCBob2xkcyB0YXNrcyBhbmQgdGhlIGRhdGEgcXVldWUgdGhleSBhcmUgcHJvY2Vz
c2luZy4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBTY2hlZHVsZXIoKSB7Ci0gICAg
dHJ5IHsKLSAgICAgICAgdGhpcy5xdWV1ZUNvdW50ID0gMDsKLSAgICAgICAgdGhpcy5ob2xkQ291
bnQgPSAwOwotICAgICAgICB0aGlzLmJsb2NrcyA9IG5ldyBBcnJheShOVU1CRVJfT0ZfSURTKTsK
LSAgICAgICAgdGhpcy5saXN0ID0gbnVsbDsKLSAgICAgICAgdGhpcy5jdXJyZW50VGNiID0gbnVs
bDsKLSAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBudWxsOwotCi0gICAgICAgIHJhbmRvbUV4Y2Vw
dGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19Ci0KLXZhciBJRF9JRExFICAgICAgID0gMDsK
LXZhciBJRF9XT1JLRVIgICAgID0gMTsKLXZhciBJRF9IQU5ETEVSX0EgID0gMjsKLXZhciBJRF9I
QU5ETEVSX0IgID0gMzsKLXZhciBJRF9ERVZJQ0VfQSAgID0gNDsKLXZhciBJRF9ERVZJQ0VfQiAg
ID0gNTsKLXZhciBOVU1CRVJfT0ZfSURTID0gNjsKLQotdmFyIEtJTkRfREVWSUNFICAgPSAwOwot
dmFyIEtJTkRfV09SSyAgICAgPSAxOwotCi0vKioKLSAqIEFkZCBhbiBpZGxlIHRhc2sgdG8gdGhp
cyBzY2hlZHVsZXIuCi0gKiBAcGFyYW0ge2ludH0gaWQgdGhlIGlkZW50aXR5IG9mIHRoZSB0YXNr
Ci0gKiBAcGFyYW0ge2ludH0gcHJpb3JpdHkgdGhlIHRhc2sncyBwcmlvcml0eQotICogQHBhcmFt
IHtQYWNrZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiB3b3JrIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUg
dGFzawotICogQHBhcmFtIHtpbnR9IGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gc2NoZWR1
bGUgdGhlIHRhc2sKLSAqLwotU2NoZWR1bGVyLnByb3RvdHlwZS5hZGRJZGxlVGFzayA9IGZ1bmN0
aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlLCBjb3VudCkgewotICAgIHRyeSB7Ci0gICAgICAgIHRo
aXMuYWRkUnVubmluZ1Rhc2soaWQsIHByaW9yaXR5LCBxdWV1ZSwgbmV3IElkbGVUYXNrKHRoaXMs
IDEsIGNvdW50KSk7Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkg
eyB9Ci19OwotCi0vKioKLSAqIEFkZCBhIHdvcmsgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KLSAq
IEBwYXJhbSB7aW50fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50
fSBwcmlvcml0eSB0aGUgdGFzaydzIHByaW9yaXR5Ci0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUg
dGhlIHF1ZXVlIG9mIHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCi0gKi8KLVNjaGVk
dWxlci5wcm90b3R5cGUuYWRkV29ya2VyVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1
ZXVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhpcy5hZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVl
dWUsIG5ldyBXb3JrZXJUYXNrKHRoaXMsIElEX0hBTkRMRVJfQSwgMCkpOwotICAgICAgICByYW5k
b21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotLyoqCi0gKiBBZGQgYSBo
YW5kbGVyIHRhc2sgdG8gdGhpcyBzY2hlZHVsZXIuCi0gKiBAcGFyYW0ge2ludH0gaWQgdGhlIGlk
ZW50aXR5IG9mIHRoZSB0YXNrCi0gKiBAcGFyYW0ge2ludH0gcHJpb3JpdHkgdGhlIHRhc2sncyBw
cmlvcml0eQotICogQHBhcmFtIHtQYWNrZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiB3b3JrIHRvIGJl
IHByb2Nlc3NlZCBieSB0aGUgdGFzawotICovCi1TY2hlZHVsZXIucHJvdG90eXBlLmFkZEhhbmRs
ZXJUYXNrID0gZnVuY3Rpb24gKGlkLCBwcmlvcml0eSwgcXVldWUpIHsKLSAgICB0cnkgewotICAg
ICAgICB0aGlzLmFkZFRhc2soaWQsIHByaW9yaXR5LCBxdWV1ZSwgbmV3IEhhbmRsZXJUYXNrKHRo
aXMpKTsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX07
Ci0KLS8qKgotICogQWRkIGEgaGFuZGxlciB0YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgotICogQHBh
cmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBvZiB0aGUgdGFzawotICogQHBhcmFtIHtpbnR9IHBy
aW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkKLSAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUg
cXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sKLSAqLwotU2NoZWR1bGVy
LnByb3RvdHlwZS5hZGREZXZpY2VUYXNrID0gZnVuY3Rpb24gKGlkLCBwcmlvcml0eSwgcXVldWUp
IHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLmFkZFRhc2soaWQsIHByaW9yaXR5LCBxdWV1ZSwg
bmV3IERldmljZVRhc2sodGhpcykpCi0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0g
Y2F0Y2goZSkgeyB9Ci19OwotCi0vKioKLSAqIEFkZCB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIG1h
cmsgaXQgYXMgcnVubmluZy4KLSAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhl
IHRhc2sKLSAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFzaydzIHByaW9yaXR5Ci0gKiBA
cGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5
IHRoZSB0YXNrCi0gKiBAcGFyYW0ge1Rhc2t9IHRhc2sgdGhlIHRhc2sgdG8gYWRkCi0gKi8KLVNj
aGVkdWxlci5wcm90b3R5cGUuYWRkUnVubmluZ1Rhc2sgPSBmdW5jdGlvbiAoaWQsIHByaW9yaXR5
LCBxdWV1ZSwgdGFzaykgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMuYWRkVGFzayhpZCwgcHJp
b3JpdHksIHF1ZXVlLCB0YXNrKTsKLSAgICAgICAgdGhpcy5jdXJyZW50VGNiLnNldFJ1bm5pbmco
KTsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX07Ci0K
LS8qKgotICogQWRkIHRoZSBzcGVjaWZpZWQgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KLSAqIEBw
YXJhbSB7aW50fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKLSAqIEBwYXJhbSB7aW50fSBw
cmlvcml0eSB0aGUgdGFzaydzIHByaW9yaXR5Ci0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhl
IHF1ZXVlIG9mIHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCi0gKiBAcGFyYW0ge1Rh
c2t9IHRhc2sgdGhlIHRhc2sgdG8gYWRkCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUuYWRkVGFz
ayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKSB7Ci0gICAgdHJ5IHsKLSAg
ICAgICAgdGhpcy5jdXJyZW50VGNiID0gbmV3IFRhc2tDb250cm9sQmxvY2sodGhpcy5saXN0LCBp
ZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKTsKLSAgICAgICAgdGhpcy5saXN0ID0gdGhpcy5jdXJy
ZW50VGNiOwotICAgICAgICB0aGlzLmJsb2Nrc1tpZF0gPSB0aGlzLmN1cnJlbnRUY2I7Ci0gICAg
ICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci19OwotCi0vKioKLSAq
IEV4ZWN1dGUgdGhlIHRhc2tzIG1hbmFnZWQgYnkgdGhpcyBzY2hlZHVsZXIuCi0gKi8KLVNjaGVk
dWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5jdXJyZW50
VGNiID0gdGhpcy5saXN0OwotICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUY2IgIT0gbnVsbCkgewot
ICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRjYi5pc0hlbGRPclN1
c3BlbmRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VGNiID0gdGhpcy5jdXJy
ZW50VGNiLmxpbms7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMu
Y3VycmVudElkID0gdGhpcy5jdXJyZW50VGNiLmlkOwotICAgICAgICAgICAgICAgIHRoaXMuY3Vy
cmVudFRjYiA9IHRoaXMuY3VycmVudFRjYi5ydW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0KLX07
Ci0KLS8qKgotICogUmVsZWFzZSBhIHRhc2sgdGhhdCBpcyBjdXJyZW50bHkgYmxvY2tlZCBhbmQg
cmV0dXJuIHRoZSBuZXh0IGJsb2NrIHRvIHJ1bi4KLSAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWQg
b2YgdGhlIHRhc2sgdG8gc3VzcGVuZAotICovCi1TY2hlZHVsZXIucHJvdG90eXBlLnJlbGVhc2Ug
PSBmdW5jdGlvbiAoaWQpIHsKLSAgICB0cnkgewotICAgICAgICB2YXIgdGNiID0gdGhpcy5ibG9j
a3NbaWRdOwotICAgICAgICBpZiAodGNiID09IG51bGwpIHJldHVybiB0Y2I7Ci0gICAgICAgIHRj
Yi5tYXJrQXNOb3RIZWxkKCk7Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0
Y2goZSkgeyB9Ci0gICAgdHJ5IHsKLSAgICAgICAgaWYgKHRjYi5wcmlvcml0eSA+IHRoaXMuY3Vy
cmVudFRjYi5wcmlvcml0eSkgewotICAgICAgICAgICAgcmV0dXJuIHRjYjsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUY2I7Ci0gICAgICAgIH0KLSAg
ICB9IGNhdGNoKGUpIHsgfQotfTsKLQotLyoqCi0gKiBCbG9jayB0aGUgY3VycmVudGx5IGV4ZWN1
dGluZyB0YXNrIGFuZCByZXR1cm4gdGhlIG5leHQgdGFzayBjb250cm9sIGJsb2NrCi0gKiB0byBy
dW4uICBUaGUgYmxvY2tlZCB0YXNrIHdpbGwgbm90IGJlIG1hZGUgcnVubmFibGUgdW50aWwgaXQg
aXMgZXhwbGljaXRseQotICogcmVsZWFzZWQsIGV2ZW4gaWYgbmV3IHdvcmsgaXMgYWRkZWQgdG8g
aXQuCi0gKi8KLVNjaGVkdWxlci5wcm90b3R5cGUuaG9sZEN1cnJlbnQgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhpcy5ob2xkQ291bnQrKzsKLSAgICAgICAgdGhpcy5jdXJy
ZW50VGNiLm1hcmtBc0hlbGQoKTsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBj
YXRjaChlKSB7IH0KLSAgICByZXR1cm4gdGhpcy5jdXJyZW50VGNiLmxpbms7Ci19OwotCi0vKioK
LSAqIFN1c3BlbmQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBu
ZXh0IHRhc2sgY29udHJvbCBibG9jawotICogdG8gcnVuLiAgSWYgbmV3IHdvcmsgaXMgYWRkZWQg
dG8gdGhlIHN1c3BlbmRlZCB0YXNrIGl0IHdpbGwgYmUgbWFkZSBydW5uYWJsZS4KLSAqLwotU2No
ZWR1bGVyLnByb3RvdHlwZS5zdXNwZW5kQ3VycmVudCA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkg
ewotICAgICAgICB0aGlzLmN1cnJlbnRUY2IubWFya0FzU3VzcGVuZGVkKCk7Ci0gICAgICAgIHJh
bmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgdHJ5IHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuY3VycmVudFRjYjsKLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotLyoqCi0g
KiBBZGQgdGhlIHNwZWNpZmllZCBwYWNrZXQgdG8gdGhlIGVuZCBvZiB0aGUgd29ya2xpc3QgdXNl
ZCBieSB0aGUgdGFzawotICogYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrZXQgYW5kIG1ha2UgdGhl
IHRhc2sgcnVubmFibGUgaWYgaXQgaXMgY3VycmVudGx5Ci0gKiBzdXNwZW5kZWQuCi0gKiBAcGFy
YW0ge1BhY2tldH0gcGFja2V0IHRoZSBwYWNrZXQgdG8gYWRkCi0gKi8KLVNjaGVkdWxlci5wcm90
b3R5cGUucXVldWUgPSBmdW5jdGlvbiAocGFja2V0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdmFy
IHQgPSB0aGlzLmJsb2Nrc1twYWNrZXQuaWRdOwotICAgICAgICBpZiAodCA9PSBudWxsKSByZXR1
cm4gdDsKLSAgICAgICAgdGhpcy5xdWV1ZUNvdW50Kys7Ci0gICAgICAgIHBhY2tldC5saW5rID0g
bnVsbDsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAg
ICBwYWNrZXQuaWQgPSB0aGlzLmN1cnJlbnRJZDsKLSAgICByZXR1cm4gdC5jaGVja1ByaW9yaXR5
QWRkKHRoaXMuY3VycmVudFRjYiwgcGFja2V0KTsKLX07Ci0KLS8qKgotICogQSB0YXNrIGNvbnRy
b2wgYmxvY2sgbWFuYWdlcyBhIHRhc2sgYW5kIHRoZSBxdWV1ZSBvZiB3b3JrIHBhY2thZ2VzIGFz
c29jaWF0ZWQKLSAqIHdpdGggaXQuCi0gKiBAcGFyYW0ge1Rhc2tDb250cm9sQmxvY2t9IGxpbmsg
dGhlIHByZWNlZGluZyBibG9jayBpbiB0aGUgbGlua2VkIGJsb2NrIGxpc3QKLSAqIEBwYXJhbSB7
aW50fSBpZCB0aGUgaWQgb2YgdGhpcyBibG9jawotICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRo
ZSBwcmlvcml0eSBvZiB0aGlzIGJsb2NrCi0gKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1
ZXVlIG9mIHBhY2thZ2VzIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgdGFzawotICogQHBhcmFtIHtU
YXNrfSB0YXNrIHRoZSB0YXNrCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gVGFza0Nv
bnRyb2xCbG9jayhsaW5rLCBpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKSB7Ci0gICAgdHJ5IHsK
LSAgICAgICAgdGhpcy5saW5rID0gbGluazsKLSAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAg
ICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTsK
LSAgICAgICAgdGhpcy50YXNrID0gdGFzazsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0g
ICAgfSBjYXRjaChlKSB7IH0KLSAgICB0cnkgewotICAgICAgICBpZiAocXVldWUgPT0gbnVsbCkg
ewotICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1NVU1BFTkRFRDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9TVVNQRU5ERURfUlVOTkFCTEU7
Ci0gICAgICAgIH0KLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7
IH0KLX0KLQotLyoqCi0gKiBUaGUgdGFzayBpcyBydW5uaW5nIGFuZCBpcyBjdXJyZW50bHkgc2No
ZWR1bGVkLgotICovCi12YXIgU1RBVEVfUlVOTklORyA9IDA7Ci0KLS8qKgotICogVGhlIHRhc2sg
aGFzIHBhY2tldHMgbGVmdCB0byBwcm9jZXNzLgotICovCi12YXIgU1RBVEVfUlVOTkFCTEUgPSAx
OwotCi0vKioKLSAqIFRoZSB0YXNrIGlzIG5vdCBjdXJyZW50bHkgcnVubmluZy4gIFRoZSB0YXNr
IGlzIG5vdCBibG9ja2VkIGFzIHN1Y2ggYW5kIG1heQotICogYmUgc3RhcnRlZCBieSB0aGUgc2No
ZWR1bGVyLgotICovCi12YXIgU1RBVEVfU1VTUEVOREVEID0gMjsKLQotLyoqCi0gKiBUaGUgdGFz
ayBpcyBibG9ja2VkIGFuZCBjYW5ub3QgYmUgcnVuIHVudGlsIGl0IGlzIGV4cGxpY2l0bHkgcmVs
ZWFzZWQuCi0gKi8KLXZhciBTVEFURV9IRUxEID0gNDsKLQotdmFyIFNUQVRFX1NVU1BFTkRFRF9S
VU5OQUJMRSA9IFNUQVRFX1NVU1BFTkRFRCB8IFNUQVRFX1JVTk5BQkxFOwotdmFyIFNUQVRFX05P
VF9IRUxEID0gflNUQVRFX0hFTEQ7Ci0KLVRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLnNldFJ1
bm5pbmcgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IFNU
QVRFX1JVTk5JTkc7Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSl7
fQotfTsKLQotVGFza0NvbnRyb2xCbG9jay5wcm90b3R5cGUubWFya0FzTm90SGVsZCA9IGZ1bmN0
aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSAmIFNU
QVRFX05PVF9IRUxEOwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUp
IHsgfQotfTsKLQotVGFza0NvbnRyb2xCbG9jay5wcm90b3R5cGUubWFya0FzSGVsZCA9IGZ1bmN0
aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSB8IFNU
QVRFX0hFTEQ7Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9
Ci19OwotCi1UYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5pc0hlbGRPclN1c3BlbmRlZCA9IGZ1
bmN0aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAg
ICAgcmV0dXJuICh0aGlzLnN0YXRlICYgU1RBVEVfSEVMRCkgIT0gMCB8fCAodGhpcy5zdGF0ZSA9
PSBTVEFURV9TVVNQRU5ERUQpOwotICAgIH0gY2F0Y2goZSkgeyAKLSAgICAgICAgcmV0dXJuICh0
aGlzLnN0YXRlICYgU1RBVEVfSEVMRCkgIT0gMCB8fCAodGhpcy5zdGF0ZSA9PSBTVEFURV9TVVNQ
RU5ERUQpOwotICAgIH0KLX07Ci0KLVRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1hcmtBc1N1
c3BlbmRlZCA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICByYW5kb21FeGNlcHRp
b24oKTsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgfCBTVEFURV9TVVNQRU5ERUQ7
Ci0gICAgfSBjYXRjaChlKSB7IAotICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZSB8IFNU
QVRFX1NVU1BFTkRFRDsKLSAgICB9Ci19OwotCi1UYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5t
YXJrQXNSdW5uYWJsZSA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICByYW5kb21F
eGNlcHRpb24oKTsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgfCBTVEFURV9SVU5O
QUJMRTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUg
fCBTVEFURV9SVU5OQUJMRTsKLSAgICB9Ci19OwotCi0vKioKLSAqIFJ1bnMgdGhpcyB0YXNrLCBp
ZiBpdCBpcyByZWFkeSB0byBiZSBydW4sIGFuZCByZXR1cm5zIHRoZSBuZXh0IHRhc2sgdG8gcnVu
LgotICovCi1UYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIHBhY2tldDsKLSAgICB0cnkgewotICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBTVEFU
RV9TVVNQRU5ERURfUlVOTkFCTEUpIHsKLSAgICAgICAgICAgIHBhY2tldCA9IHRoaXMucXVldWU7
Ci0gICAgICAgICAgICB0aGlzLnF1ZXVlID0gcGFja2V0Lmxpbms7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5xdWV1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRF
X1JVTk5JTkc7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuc3Rh
dGUgPSBTVEFURV9SVU5OQUJMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHBhY2tldCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmFuZG9tRXhjZXB0
aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLSAgICByZXR1cm4gdGhpcy50YXNrLnJ1bihwYWNr
ZXQpOwotfTsKLQotLyoqCi0gKiBBZGRzIGEgcGFja2V0IHRvIHRoZSB3b3JrbGlzdCBvZiB0aGlz
IGJsb2NrJ3MgdGFzaywgbWFya3MgdGhpcyBhcyBydW5uYWJsZSBpZgotICogbmVjZXNzYXJ5LCBh
bmQgcmV0dXJucyB0aGUgbmV4dCBydW5uYWJsZSBvYmplY3QgdG8gcnVuICh0aGUgb25lCi0gKiB3
aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5KS4KLSAqLwotVGFza0NvbnRyb2xCbG9jay5wcm90b3R5
cGUuY2hlY2tQcmlvcml0eUFkZCA9IGZ1bmN0aW9uICh0YXNrLCBwYWNrZXQpIHsKLSAgICB0cnkg
ewotICAgICAgICBpZiAodGhpcy5xdWV1ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aGlzLnF1
ZXVlID0gcGFja2V0OwotICAgICAgICAgICAgdGhpcy5tYXJrQXNSdW5uYWJsZSgpOwotICAgICAg
ICAgICAgaWYgKHRoaXMucHJpb3JpdHkgPiB0YXNrLnByaW9yaXR5KSByZXR1cm4gdGhpczsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMucXVldWUgPSBwYWNrZXQuYWRkVG8odGhp
cy5xdWV1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAg
ICAgcmV0dXJuIHRhc2s7Ci0gICAgfSBjYXRjaChlKSB7IAotICAgICAgICByZXR1cm4gdGFzazsK
LSAgICB9Ci19OwotCi1UYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0
aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAg
cmV0dXJuICJ0Y2IgeyAiICsgdGhpcy50YXNrICsgIkAiICsgdGhpcy5zdGF0ZSArICIgfSI7Ci0g
ICAgfSBjYXRjaChlKSB7Ci0gICAgICAgIHJldHVybiAidGNiIHsgIiArIHRoaXMudGFzayArICJA
IiArIHRoaXMuc3RhdGUgKyAiIH0iOwotICAgIH0KLX07Ci0KLS8qKgotICogQW4gaWRsZSB0YXNr
IGRvZXNuJ3QgZG8gYW55IHdvcmsgaXRzZWxmIGJ1dCBjeWNsZXMgY29udHJvbCBiZXR3ZWVuIHRo
ZSB0d28KLSAqIGRldmljZSB0YXNrcy4KLSAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIg
dGhlIHNjaGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0YXNrCi0gKiBAcGFyYW0ge2ludH0gdjEg
YSBzZWVkIHZhbHVlIHRoYXQgY29udHJvbHMgaG93IHRoZSBkZXZpY2UgdGFza3MgYXJlIHNjaGVk
dWxlZAotICogQHBhcmFtIHtpbnR9IGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyB0YXNr
IHNob3VsZCBiZSBzY2hlZHVsZWQKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBJZGxl
VGFzayhzY2hlZHVsZXIsIHYxLCBjb3VudCkgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMuc2No
ZWR1bGVyID0gc2NoZWR1bGVyOwotICAgICAgICB0aGlzLnYxID0gdjE7Ci0gICAgICAgIHJhbmRv
bUV4Y2VwdGlvbigpOwotICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7Ci0gICAgfSBjYXRjaChl
KSB7Ci0gICAgICAgIHRoaXMuY291bnQgPSBjb3VudDsKLSAgICB9Ci19Ci0KLUlkbGVUYXNrLnBy
b3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhp
cy5jb3VudC0tOwotICAgICAgICBpZiAodGhpcy5jb3VudCA9PSAwKSByZXR1cm4gdGhpcy5zY2hl
ZHVsZXIuaG9sZEN1cnJlbnQoKTsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBj
YXRjaChlKSB7IH0KLQotICAgIHRyeSB7Ci0gICAgICAgIGlmICgodGhpcy52MSAmIDEpID09IDAp
IHsKLSAgICAgICAgICAgIHRoaXMudjEgPSB0aGlzLnYxID4+IDE7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpcy5zY2hlZHVsZXIucmVsZWFzZShJRF9ERVZJQ0VfQSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB0aGlzLnYxID0gKHRoaXMudjEgPj4gMSkgXiAweEQwMDg7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIucmVsZWFzZShJRF9ERVZJQ0VfQik7Ci0gICAgICAg
IH0KLSAgICB9IGNhdGNoKGUpIHsgfQotfTsKLQotSWRsZVRhc2sucHJvdG90eXBlLnRvU3RyaW5n
ID0gZnVuY3Rpb24gKCkgewotICAgIHRyeSB7Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwot
ICAgICAgICByZXR1cm4gIklkbGVUYXNrIgotICAgIH0gY2F0Y2goZSkgewotICAgICAgICByZXR1
cm4gIklkbGVUYXNrIgotICAgIH0KLX07Ci0KLS8qKgotICogQSB0YXNrIHRoYXQgc3VzcGVuZHMg
aXRzZWxmIGFmdGVyIGVhY2ggdGltZSBpdCBoYXMgYmVlbiBydW4gdG8gc2ltdWxhdGUKLSAqIHdh
aXRpbmcgZm9yIGRhdGEgZnJvbSBhbiBleHRlcm5hbCBkZXZpY2UuCi0gKiBAcGFyYW0ge1NjaGVk
dWxlcn0gc2NoZWR1bGVyIHRoZSBzY2hlZHVsZXIgdGhhdCBtYW5hZ2VzIHRoaXMgdGFzawotICog
QGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIERldmljZVRhc2soc2NoZWR1bGVyKSB7Ci0gICAg
dHJ5IHsKLSAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7Ci0gICAgICAgIHRoaXMu
djEgPSBudWxsOwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNhdGNoKGUpIHsg
fQotfQotCi1EZXZpY2VUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7Ci0g
ICAgaWYgKHBhY2tldCA9PSBudWxsKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAo
dGhpcy52MSA9PSBudWxsKSByZXR1cm4gdGhpcy5zY2hlZHVsZXIuc3VzcGVuZEN1cnJlbnQoKTsK
LSAgICAgICAgICAgIHZhciB2ID0gdGhpcy52MTsKLSAgICAgICAgICAgIHRoaXMudjEgPSBudWxs
OwotICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9
Ci0gICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlci5xdWV1ZSh2KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy52MSA9IHBhY2tldDsKLSAgICAgICAgICAg
IHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICByZXR1
cm4gdGhpcy5zY2hlZHVsZXIuaG9sZEN1cnJlbnQoKTsKLSAgICB9Ci19OwotCi1EZXZpY2VUYXNr
LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKLSAgICB0cnkgewotICAgICAgICBy
YW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuICJEZXZpY2VUYXNrIjsKLSAgICB9IGNh
dGNoKGUpIHsgfQotfTsKLQotLyoqCi0gKiBBIHRhc2sgdGhhdCBtYW5pcHVsYXRlcyB3b3JrIHBh
Y2tldHMuCi0gKiBAcGFyYW0ge1NjaGVkdWxlcn0gc2NoZWR1bGVyIHRoZSBzY2hlZHVsZXIgdGhh
dCBtYW5hZ2VzIHRoaXMgdGFzawotICogQHBhcmFtIHtpbnR9IHYxIGEgc2VlZCB1c2VkIHRvIHNw
ZWNpZnkgaG93IHdvcmsgcGFja2V0cyBhcmUgbWFuaXB1bGF0ZWQKLSAqIEBwYXJhbSB7aW50fSB2
MiBhbm90aGVyIHNlZWQgdXNlZCB0byBzcGVjaWZ5IGhvdyB3b3JrIHBhY2tldHMgYXJlIG1hbmlw
dWxhdGVkCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gV29ya2VyVGFzayhzY2hlZHVs
ZXIsIHYxLCB2MikgewotICAgIHRyeSB7Ci0gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1
bGVyOwotICAgICAgICB0aGlzLnYxID0gdjE7Ci0gICAgICAgIHRoaXMudjIgPSB2MjsKLSAgICAg
ICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX0KLQotV29ya2VyVGFz
ay5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKHBhY2tldCkgewotICAgIGlmIChwYWNrZXQgPT0g
bnVsbCkgewotICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIuc3VzcGVuZEN1cnJlbnQoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKHRoaXMudjEgPT0g
SURfSEFORExFUl9BKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52MSA9IElEX0hBTkRMRVJfQjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52MSA9IElEX0hBTkRM
RVJfQTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhY2tldC5pZCA9IHRoaXMudjE7Ci0g
ICAgICAgICAgICBwYWNrZXQuYTEgPSAwOwotICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7
Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgREFU
QV9TSVpFOyBpKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52
MisrOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLnYyID4gMjYpIHRoaXMudjIgPSAxOwotICAg
ICAgICAgICAgICAgIHBhY2tldC5hMltpXSA9IHRoaXMudjI7Ci0gICAgICAgICAgICAgICAgcmFu
ZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlci5xdWV1ZShwYWNrZXQpOwotICAgIH0KLX07Ci0K
LVdvcmtlclRhc2sucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewotICAgIHRyeSB7
Ci0gICAgICAgIHJldHVybiAiV29ya2VyVGFzayI7Ci0gICAgfSBjYXRjaChlKSB7IH0KLX07Ci0K
LS8qKgotICogQSB0YXNrIHRoYXQgbWFuaXB1bGF0ZXMgd29yayBwYWNrZXRzIGFuZCB0aGVuIHN1
c3BlbmRzIGl0c2VsZi4KLSAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNjaGVk
dWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0YXNrCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rp
b24gSGFuZGxlclRhc2soc2NoZWR1bGVyKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgdGhpcy5zY2hl
ZHVsZXIgPSBzY2hlZHVsZXI7Ci0gICAgICAgIHRoaXMudjEgPSBudWxsOwotICAgICAgICB0aGlz
LnYyID0gbnVsbDsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgfSBjYXRjaChlKSB7
IH0KLX0KLQotSGFuZGxlclRhc2sucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChwYWNrZXQpIHsK
LSAgICB0cnkgewotICAgICAgICBpZiAocGFja2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlm
IChwYWNrZXQua2luZCA9PSBLSU5EX1dPUkspIHsKLSAgICAgICAgICAgICAgICB0aGlzLnYxID0g
cGFja2V0LmFkZFRvKHRoaXMudjEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLnYyID0gcGFja2V0LmFkZFRvKHRoaXMudjIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0Y2goZSkgeyB9Ci0K
LSAgICB0cnkgewotICAgICAgICBpZiAodGhpcy52MSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB2
YXIgY291bnQgPSB0aGlzLnYxLmExOwotICAgICAgICAgICAgdmFyIHY7Ci0gICAgICAgICAgICBp
ZiAoY291bnQgPCBEQVRBX1NJWkUpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy52MiAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLnYyOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLnYyID0gdGhpcy52Mi5saW5rOwotICAgICAgICAgICAgICAgICAgICB2LmExID0g
dGhpcy52MS5hMltjb3VudF07Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudjEuYTEgPSBjb3Vu
dCArIDE7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlci5xdWV1ZSh2
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHYgPSB0aGlzLnYxOwotICAgICAgICAgICAgICAgIHRoaXMudjEgPSB0aGlzLnYxLmxpbms7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyLnF1ZXVlKHYpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgIH0gY2F0
Y2goZSkgeyB9Ci0gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyLnN1c3BlbmRDdXJyZW50KCk7Ci19
OwotCi1IYW5kbGVyVGFzay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
dHJ5IHsKLSAgICAgICAgcmV0dXJuICJIYW5kbGVyVGFzayI7Ci0gICAgfSBjYXRjaChlKSB7IH0K
LX07Ci0KLS8qIC0tLSAqCi0gKiBQIGEgYyBrIGUgdAotICogLS0tICovCi0KLXZhciBEQVRBX1NJ
WkUgPSA0OwotCi0vKioKLSAqIEEgc2ltcGxlIHBhY2thZ2Ugb2YgZGF0YSB0aGF0IGlzIG1hbmlw
dWxhdGVkIGJ5IHRoZSB0YXNrcy4gIFRoZSBleGFjdCBsYXlvdXQKLSAqIG9mIHRoZSBwYXlsb2Fk
IGRhdGEgY2FycmllZCBieSBhIHBhY2tldCBpcyBub3QgaW1wb3J0YWludCwgYW5kIG5laXRoZXIg
aXMgdGhlCi0gKiBuYXR1cmUgb2YgdGhlIHdvcmsgcGVyZm9ybWVkIG9uIHBhY2tldHMgYnkgdGhl
IHRhc2tzLgotICoKLSAqIEJlc2lkZXMgY2FycnlpbmcgZGF0YSwgcGFja2V0cyBmb3JtIGxpbmtl
ZCBsaXN0cyBhbmQgYXJlIGhlbmNlIHVzZWQgYm90aCBhcwotICogZGF0YSBhbmQgd29ya2xpc3Rz
LgotICogQHBhcmFtIHtQYWNrZXR9IGxpbmsgdGhlIHRhaWwgb2YgdGhlIGxpbmtlZCBsaXN0IG9m
IHBhY2tldHMKLSAqIEBwYXJhbSB7aW50fSBpZCBhbiBJRCBmb3IgdGhpcyBwYWNrZXQKLSAqIEBw
YXJhbSB7aW50fSBraW5kIHRoZSB0eXBlIG9mIHRoaXMgcGFja2V0Ci0gKiBAY29uc3RydWN0b3IK
LSAqLwotZnVuY3Rpb24gUGFja2V0KGxpbmssIGlkLCBraW5kKSB7Ci0gICAgdHJ5IHsKLSAgICAg
ICAgdGhpcy5saW5rID0gbGluazsKLSAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAgICB0aGlz
LmtpbmQgPSBraW5kOwotICAgICAgICB0aGlzLmExID0gMDsKLSAgICAgICAgdGhpcy5hMiA9IG5l
dyBBcnJheShEQVRBX1NJWkUpOwotICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICB9IGNh
dGNoKGUpIHsgfQotfQotCi0vKioKLSAqIEFkZCB0aGlzIHBhY2tldCB0byB0aGUgZW5kIG9mIGEg
d29ya2xpc3QsIGFuZCByZXR1cm4gdGhlIHdvcmtsaXN0LgotICogQHBhcmFtIHtQYWNrZXR9IHF1
ZXVlIHRoZSB3b3JrbGlzdCB0byBhZGQgdGhpcyBwYWNrZXQgdG8KLSAqLwotUGFja2V0LnByb3Rv
dHlwZS5hZGRUbyA9IGZ1bmN0aW9uIChxdWV1ZSkgewotICAgIHRoaXMubGluayA9IG51bGw7Ci0g
ICAgaWYgKHF1ZXVlID09IG51bGwpIHJldHVybiB0aGlzOwotICAgIHZhciBwZWVrLCBuZXh0ID0g
cXVldWU7Ci0gICAgd2hpbGUgKChwZWVrID0gbmV4dC5saW5rKSAhPSBudWxsKSB7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICBuZXh0ID0gcGVlazsKLSAgICAgICAgICAgIHJhbmRvbUV4Y2Vw
dGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0KLSAgICBuZXh0LmxpbmsgPSB0
aGlzOwotICAgIHJldHVybiBxdWV1ZTsKLX07Ci0KLVBhY2tldC5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuICJQYWNrZXQiOwotICAg
IH0gY2F0Y2goZSkgeyB9Ci19OwotCi1mb3IgKGxldCBpID0gMDsgaSA8IDM1MDsgKytpKQotICBy
dW5SaWNoYXJkcygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvdjgtcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2guanMgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy92OC1yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRjaC5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyMjJkYmZjZjI4ZDBmNzE4OWI1OWVk
MjEyNTA4NzcwNjQzMWY3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy92OC1yYXl0cmFjZS13
aXRoLWVtcHR5LXRyeS1jYXRjaC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwNDggKzAsMCBAQAot
Ly8gVGhlIHJheSB0cmFjZXIgY29kZSBpbiB0aGlzIGZpbGUgaXMgd3JpdHRlbiBieSBBZGFtIEJ1
cm1pc3Rlci4gSXQKLS8vIGlzIGF2YWlsYWJsZSBpbiBpdHMgb3JpZ2luYWwgZm9ybSBmcm9tOgot
Ly8KLS8vICAgaHR0cDovL2xhYnMuZmxvZy5uei5jby9yYXl0cmFjZXIvCi0vLwotLy8gSXQgaGFz
IGJlZW4gbW9kaWZpZWQgc2xpZ2h0bHkgYnkgR29vZ2xlIHRvIHdvcmsgYXMgYSBzdGFuZGFsb25l
Ci0vLyBiZW5jaG1hcmssIGJ1dCB0aGUgYWxsIHRoZSBjb21wdXRhdGlvbmFsIGNvZGUgcmVtYWlu
cwotLy8gdW50b3VjaGVkLiBUaGlzIGZpbGUgYWxzbyBjb250YWlucyBhIGNvcHkgb2YgcGFydHMg
b2YgdGhlIFByb3RvdHlwZQotLy8gSmF2YVNjcmlwdCBmcmFtZXdvcmsgd2hpY2ggaXMgdXNlZCBi
eSB0aGUgcmF5IHRyYWNlci4KLQotLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIGEgbnVtYmVyIHRo
YXQgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQKLS8vIHRoZSBzY2VuZSB3YXMgcmF5IHRyYWNl
ZCBjb3JyZWN0bHkuCi12YXIgY2hlY2tOdW1iZXI7Ci0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIGNvcHkgb2YgcGFydHMg
b2YgdGhlIFByb3RvdHlwZSBKYXZhU2NyaXB0IGxpYnJhcnk6Ci0KLS8vIFByb3RvdHlwZSBKYXZh
U2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjUuMAotLy8gKGMpIDIwMDUtMjAwNyBTYW0gU3Rl
cGhlbnNvbgotLy8KLS8vIFByb3RvdHlwZSBpcyBmcmVlbHkgZGlzdHJpYnV0YWJsZSB1bmRlciB0
aGUgdGVybXMgb2YgYW4gTUlULXN0eWxlIGxpY2Vuc2UuCi0vLyBGb3IgZGV0YWlscywgc2VlIHRo
ZSBQcm90b3R5cGUgd2ViIHNpdGU6IGh0dHA6Ly9wcm90b3R5cGUuY29uaW8ubmV0LwotCi12YXIg
Q2xhc3MgPSB7Ci0gICAgY3JlYXRlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxp
emUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19OwotCi0KLU9iamVjdC5leHRlbmQgPSBmdW5jdGlvbihkZXN0aW5h
dGlvbiwgc291cmNlKSB7Ci0gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKSB7Ci0gICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJv
cGVydHldOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0KLSAgICByZXR1cm4gZGVzdGlu
YXRpb247Ci19OwotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LS8vIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyB0aGUgYWN0dWFsIHJheSB0cmFjZXIgd3JpdHRl
biBieSBBZGFtCi0vLyBCdXJtaXN0ZXIuIEl0J3MgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBmb2xs
b3dpbmcgZmlsZXM6Ci0vLwotLy8gICBmbG9nL2NvbG9yLmpzCi0vLyAgIGZsb2cvbGlnaHQuanMK
LS8vICAgZmxvZy92ZWN0b3IuanMKLS8vICAgZmxvZy9yYXkuanMKLS8vICAgZmxvZy9zY2VuZS5q
cwotLy8gICBmbG9nL21hdGVyaWFsL2Jhc2VtYXRlcmlhbC5qcwotLy8gICBmbG9nL21hdGVyaWFs
L3NvbGlkLmpzCi0vLyAgIGZsb2cvbWF0ZXJpYWwvY2hlc3Nib2FyZC5qcwotLy8gICBmbG9nL3No
YXBlL2Jhc2VzaGFwZS5qcwotLy8gICBmbG9nL3NoYXBlL3NwaGVyZS5qcwotLy8gICBmbG9nL3No
YXBlL3BsYW5lLmpzCi0vLyAgIGZsb2cvaW50ZXJzZWN0aW9uaW5mby5qcwotLy8gICBmbG9nL2Nh
bWVyYS5qcwotLy8gICBmbG9nL2JhY2tncm91bmQuanMKLS8vICAgZmxvZy9lbmdpbmUuanMKLQot
Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRl
ZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5k
ZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKLQotRmxvZy5SYXlUcmFjZXIuQ29sb3IgPSBD
bGFzcy5jcmVhdGUoKTsKLQotRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90eXBlID0gewotICAg
IHJlZCA6IDAuMCwKLSAgICBncmVlbiA6IDAuMCwKLSAgICBibHVlIDogMC4wLAotCi0gICAgaW5p
dGlhbGl6ZSA6IGZ1bmN0aW9uKHIsIGcsIGIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IGlmKCFyKSByID0gMC4wOwotICAgICAgICAgICAgaWYoIWcpIGcgPSAwLjA7Ci0gICAgICAgICAg
ICBpZighYikgYiA9IDAuMDsKLQotICAgICAgICAgICAgdGhpcy5yZWQgPSByOwotICAgICAgICAg
ICAgdGhpcy5ncmVlbiA9IGc7Ci0gICAgICAgICAgICB0aGlzLmJsdWUgPSBiOwotICAgICAgICB9
IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBhZGQgOiBmdW5jdGlvbihjMSwgYzIpewotICAg
ICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5D
b2xvcigwLDAsMCk7Ci0KLSAgICAgICAgICAgIHJlc3VsdC5yZWQgPSBjMS5yZWQgKyBjMi5yZWQ7
Ci0gICAgICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiArIGMyLmdyZWVuOwotICAgICAg
ICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICsgYzIuYmx1ZTsKLQotICAgICAgICB9IGNhdGNo
KGUpIHsgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGFkZFNjYWxh
cjogZnVuY3Rpb24oYzEsIHMpewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHJlc3Vs
dCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7Ci0KLSAgICAgICAgICAgIHJlc3Vs
dC5yZWQgPSBjMS5yZWQgKyBzOwotICAgICAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4g
KyBzOwotICAgICAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICsgczsKLQotICAgICAgICAg
ICAgcmVzdWx0LmxpbWl0KCk7Ci0KLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYzEsIGMyKXsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFj
ZXIuQ29sb3IoMCwwLDApOwotCi0gICAgICAgICAgICByZXN1bHQucmVkID0gYzEucmVkIC0gYzIu
cmVkOwotICAgICAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gLSBjMi5ncmVlbjsKLSAg
ICAgICAgICAgIHJlc3VsdC5ibHVlID0gYzEuYmx1ZSAtIGMyLmJsdWU7Ci0KLSAgICAgICAgfSBj
YXRjaChlKSB7IH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBtdWx0
aXBseSA6IGZ1bmN0aW9uKGMxLCBjMikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7Ci0KLSAgICAgICAgICAg
IHJlc3VsdC5yZWQgPSBjMS5yZWQgKiBjMi5yZWQ7Ci0gICAgICAgICAgICByZXN1bHQuZ3JlZW4g
PSBjMS5ncmVlbiAqIGMyLmdyZWVuOwotICAgICAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVl
ICogYzIuYmx1ZTsKLQotICAgICAgICB9IGNhdGNoKGUpIHsgfQotCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfSwKLQotICAgIG11bHRpcGx5U2NhbGFyIDogZnVuY3Rpb24oYzEsIGYpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFj
ZXIuQ29sb3IoMCwwLDApOwotCi0gICAgICAgICAgICByZXN1bHQucmVkID0gYzEucmVkICogZjsK
LSAgICAgICAgICAgIHJlc3VsdC5ncmVlbiA9IGMxLmdyZWVuICogZjsKLSAgICAgICAgICAgIHJl
c3VsdC5ibHVlID0gYzEuYmx1ZSAqIGY7Ci0KLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBkaXZpZGVGYWN0b3IgOiBmdW5jdGlv
bihjMSwgZikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBG
bG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7Ci0KLSAgICAgICAgICAgIHJlc3VsdC5yZWQgPSBj
MS5yZWQgLyBmOwotICAgICAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gLyBmOwotICAg
ICAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlIC8gZjsKLQotICAgICAgICB9IGNhdGNoKGUp
IHsgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGxpbWl0OiBmdW5j
dGlvbigpewotICAgICAgICB0cnkgeyAKLSAgICAgICAgICAgIHRoaXMucmVkID0gKHRoaXMucmVk
ID4gMC4wKSA/ICggKHRoaXMucmVkID4gMS4wKSA/IDEuMCA6IHRoaXMucmVkICkgOiAwLjA7Ci0g
ICAgICAgICAgICB0aGlzLmdyZWVuID0gKHRoaXMuZ3JlZW4gPiAwLjApID8gKCAodGhpcy5ncmVl
biA+IDEuMCkgPyAxLjAgOiB0aGlzLmdyZWVuICkgOiAwLjA7Ci0gICAgICAgICAgICB0aGlzLmJs
dWUgPSAodGhpcy5ibHVlID4gMC4wKSA/ICggKHRoaXMuYmx1ZSA+IDEuMCkgPyAxLjAgOiB0aGlz
LmJsdWUgKSA6IDAuMDsKLQotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBk
aXN0YW5jZSA6IGZ1bmN0aW9uKGNvbG9yKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2
YXIgZCA9IE1hdGguYWJzKHRoaXMucmVkIC0gY29sb3IucmVkKSArIE1hdGguYWJzKHRoaXMuZ3Jl
ZW4gLSBjb2xvci5ncmVlbikgKyBNYXRoLmFicyh0aGlzLmJsdWUgLSBjb2xvci5ibHVlKTsKLSAg
ICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgcmV0dXJuIGQ7Ci0gICAgfSwKLQotICAgIGJs
ZW5kOiBmdW5jdGlvbihjMSwgYzIsIHcpewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkKAotICAgICAgICAgICAg
ICAgICAgICBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoYzEs
IDEgLSB3KSwKLSAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90
eXBlLm11bHRpcGx5U2NhbGFyKGMyLCB3KQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAg
ICB9IGNhdGNoKGUpIHsgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBi
cmlnaHRuZXNzIDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIg
ciA9IE1hdGguZmxvb3IodGhpcy5yZWQqMjU1KTsKLSAgICAgICAgICAgIHZhciBnID0gTWF0aC5m
bG9vcih0aGlzLmdyZWVuKjI1NSk7Ci0gICAgICAgICAgICB2YXIgYiA9IE1hdGguZmxvb3IodGhp
cy5ibHVlKjI1NSk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJldHVybiAociAq
IDc3ICsgZyAqIDE1MCArIGIgKiAyOSkgPj4gODsKLSAgICB9LAotCi0gICAgdG9TdHJpbmcgOiBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgciA9IE1hdGguZmxv
b3IodGhpcy5yZWQqMjU1KTsKLSAgICAgICAgICAgIHZhciBnID0gTWF0aC5mbG9vcih0aGlzLmdy
ZWVuKjI1NSk7Ci0gICAgICAgICAgICB2YXIgYiA9IE1hdGguZmxvb3IodGhpcy5ibHVlKjI1NSk7
Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICAgICAgcmV0dXJuICJyZ2IoIisgciArIiwi
KyBnICsiLCIrIGIgKyIpIjsKLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAq
LwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlw
ZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsK
LQotRmxvZy5SYXlUcmFjZXIuTGlnaHQgPSBDbGFzcy5jcmVhdGUoKTsKLQotRmxvZy5SYXlUcmFj
ZXIuTGlnaHQucHJvdG90eXBlID0gewotICAgIHBvc2l0aW9uOiBudWxsLAotICAgIGNvbG9yOiBu
dWxsLAotICAgIGludGVuc2l0eTogMTAuMCwKLQotICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihw
b3MsIGNvbG9yLCBpbnRlbnNpdHkpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMu
cG9zaXRpb24gPSBwb3M7Ci0gICAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7Ci0gICAgICAg
ICAgICB0aGlzLmludGVuc2l0eSA9IChpbnRlbnNpdHkgPyBpbnRlbnNpdHkgOiAxMC4wKTsKLQot
ICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSAnTGlnaHQgWycg
KyB0aGlzLnBvc2l0aW9uLnggKyAnLCcgKyB0aGlzLnBvc2l0aW9uLnkgKyAnLCcgKyB0aGlzLnBv
c2l0aW9uLnogKyAnXSc7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotfQotLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KLWlmKHR5cGVv
ZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKLWlmKHR5cGVvZihGbG9nLlJh
eVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307Ci0KLUZsb2cuUmF5
VHJhY2VyLlZlY3RvciA9IENsYXNzLmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5WZWN0b3Iu
cHJvdG90eXBlID0gewotICAgIHggOiAwLjAsCi0gICAgeSA6IDAuMCwKLSAgICB6IDogMC4wLAot
Ci0gICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHgsIHksIHopIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIHRoaXMueCA9ICh4ID8geCA6IDApOwotICAgICAgICAgICAgdGhpcy55ID0gKHkg
PyB5IDogMCk7Ci0gICAgICAgICAgICB0aGlzLnogPSAoeiA/IHogOiAwKTsKLSAgICAgICAgfSBj
YXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgY29weTogZnVuY3Rpb24odmVjdG9yKXsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMueCA9IHZlY3Rvci54OwotICAgICAgICAgICAgdGhp
cy55ID0gdmVjdG9yLnk7Ci0gICAgICAgICAgICB0aGlzLnogPSB2ZWN0b3IuejsKLSAgICAgICAg
fSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgbm9ybWFsaXplIDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgbSA9IHRoaXMubWFnbml0dWRlKCk7Ci0gICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih0aGlzLnggLyBt
LCB0aGlzLnkgLyBtLCB0aGlzLnogLyBtKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgbWFnbml0dWRlIDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCh0aGlzLnggKiB0
aGlzLngpICsgKHRoaXMueSAqIHRoaXMueSkgKyAodGhpcy56ICogdGhpcy56KSk7Ci0gICAgICAg
IH0gY2F0Y2goZSkgIHsgfQotICAgIH0sCi0KLSAgICBjcm9zcyA6IGZ1bmN0aW9uKHcpIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9y
KAotICAgICAgICAgICAgICAgICAgICAtdGhpcy56ICogdy55ICsgdGhpcy55ICogdy56LAotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnogKiB3LnggLSB0aGlzLnggKiB3LnosCi0gICAgICAgICAg
ICAgICAgICAgIC10aGlzLnkgKiB3LnggKyB0aGlzLnggKiB3LnkpOwotICAgICAgICB9IGNhdGNo
KGUpIHsgfQotICAgIH0sCi0KLSAgICBkb3QgOiBmdW5jdGlvbih3KSB7Ci0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy54ICogdy54ICsgdGhpcy55ICogdy55ICsgdGhpcy56
ICogdy56OwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBhZGQgOiBmdW5j
dGlvbih2LCB3KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2cu
UmF5VHJhY2VyLlZlY3Rvcih3LnggKyB2LngsIHcueSArIHYueSwgdy56ICsgdi56KTsKLSAgICAg
ICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgc3VidHJhY3QgOiBmdW5jdGlvbih2LCB3
KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZighdyB8fCAhdikgdGhyb3cgJ1ZlY3Rv
cnMgbXVzdCBiZSBkZWZpbmVkIFsnICsgdiArICcsJyArIHcgKyAnXSc7Ci0gICAgICAgICAgICBy
ZXR1cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih2LnggLSB3LngsIHYueSAtIHcueSwgdi56
IC0gdy56KTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgbXVsdGlwbHlW
ZWN0b3IgOiBmdW5jdGlvbih2LCB3KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih2LnggKiB3LngsIHYueSAqIHcueSwgdi56ICog
dy56KTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgbXVsdGlwbHlTY2Fs
YXIgOiBmdW5jdGlvbih2LCB3KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih2LnggKiB3LCB2LnkgKiB3LCB2LnogKiB3KTsKLSAg
ICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gJ1ZlY3RvciBbJyArIHRoaXMu
eCArICcsJyArIHRoaXMueSArICcsJyArIHRoaXMueiArICddJzsKLSAgICAgICAgfSBjYXRjaChl
KSB7IH0KLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYodHlwZW9m
KEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5
VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKLQotRmxvZy5SYXlU
cmFjZXIuUmF5ID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2VyLlJheS5wcm90b3R5
cGUgPSB7Ci0gICAgcG9zaXRpb24gOiBudWxsLAotICAgIGRpcmVjdGlvbiA6IG51bGwsCi0gICAg
aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHBvcywgZGlyKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICB0aGlzLnBvc2l0aW9uID0gcG9zOwotICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBk
aXI7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nIDogZnVu
Y3Rpb24gKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuICdSYXkgWycgKyB0
aGlzLnBvc2l0aW9uICsgJywnICsgdGhpcy5kaXJlY3Rpb24gKyAnXSc7Ci0gICAgICAgIH0gY2F0
Y2goZSkgeyB9Ci0gICAgfQotfQotLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KLWlmKHR5
cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKLWlmKHR5cGVvZihGbG9n
LlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307Ci0KLUZsb2cu
UmF5VHJhY2VyLlNjZW5lID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2VyLlNjZW5l
LnByb3RvdHlwZSA9IHsKLSAgICBjYW1lcmEgOiBudWxsLAotICAgIHNoYXBlcyA6IFtdLAotICAg
IGxpZ2h0cyA6IFtdLAotICAgIGJhY2tncm91bmQgOiBudWxsLAotCi0gICAgaW5pdGlhbGl6ZSA6
IGZ1bmN0aW9uKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5jYW1lcmEgPSBu
ZXcgRmxvZy5SYXlUcmFjZXIuQ2FtZXJhKAotICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5S
YXlUcmFjZXIuVmVjdG9yKDAsMCwtNSksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJh
eVRyYWNlci5WZWN0b3IoMCwwLDEpLAotICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlU
cmFjZXIuVmVjdG9yKDAsMSwwKQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg
dGhpcy5zaGFwZXMgPSBuZXcgQXJyYXkoKTsKLSAgICAgICAgICAgIHRoaXMubGlnaHRzID0gbmV3
IEFycmF5KCk7Ci0gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBuZXcgRmxvZy5SYXlUcmFj
ZXIuQmFja2dyb3VuZChuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDAuNSksIDAuMik7Ci0K
LSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVz
cGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9Owot
aWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIg
PSB7fTsKLWlmKHR5cGVvZihGbG9nLlJheVRyYWNlci5NYXRlcmlhbCkgPT0gJ3VuZGVmaW5lZCcp
IEZsb2cuUmF5VHJhY2VyLk1hdGVyaWFsID0ge307Ci0KLUZsb2cuUmF5VHJhY2VyLk1hdGVyaWFs
LkJhc2VNYXRlcmlhbCA9IENsYXNzLmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5NYXRlcmlh
bC5CYXNlTWF0ZXJpYWwucHJvdG90eXBlID0gewotCi0gICAgZ2xvc3M6IDIuMCwgICAgICAgICAg
ICAgLy8gWzAuLi5pbmZpbml0eV0gMCA9IG1hdHQKLSAgICB0cmFuc3BhcmVuY3k6IDAuMCwgICAg
ICAvLyAwPW9wYXF1ZQotICAgIHJlZmxlY3Rpb246IDAuMCwgICAgICAgIC8vIFswLi4uaW5maW5p
dHldIDAgPSBubyByZWZsZWN0aW9uCi0gICAgcmVmcmFjdGlvbjogMC41MCwKLSAgICBoYXNUZXh0
dXJlOiBmYWxzZSwKLQotICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKLQotICAgIH0sCi0K
LSAgICBnZXRDb2xvcjogZnVuY3Rpb24odSwgdil7Ci0KLSAgICB9LAotCi0gICAgd3JhcFVwOiBm
dW5jdGlvbih0KXsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHQgPSB0ICUgMi4wOwotICAg
ICAgICAgICAgaWYodCA8IC0xKSB0ICs9IDIuMDsKLSAgICAgICAgICAgIGlmKHQgPj0gMSkgdCAt
PSAyLjA7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJldHVybiB0OwotICAgIH0s
Ci0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgIHJldHVybiAnTWF0ZXJpYWwgW2dsb3NzPScgKyB0aGlzLmdsb3NzICsgJywgdHJhbnNwYXJl
bmN5PScgKyB0aGlzLnRyYW5zcGFyZW5jeSArICcsIGhhc1RleHR1cmU9JyArIHRoaXMuaGFzVGV4
dHVyZSArJ10nOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0KLX0KLS8qIEZha2UgYSBG
bG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBG
bG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9n
LlJheVRyYWNlciA9IHt9OwotCi1GbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZCA9IENsYXNz
LmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZC5wcm90b3R5cGUgPSBP
YmplY3QuZXh0ZW5kKAotICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuQmFzZU1h
dGVyaWFsKCksIHsKLSAgICAgICAgICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihjb2xvciwgcmVm
bGVjdGlvbiwgcmVmcmFjdGlvbiwgdHJhbnNwYXJlbmN5LCBnbG9zcykgewotICAgICAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5yZWZsZWN0aW9uID0gcmVmbGVjdGlvbjsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kgPSB0cmFuc3BhcmVuY3k7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuZ2xvc3MgPSBnbG9zczsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNU
ZXh0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGdldENvbG9yOiBmdW5jdGlvbih1LCB2KXsKLSAgICAgICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjsKLSAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICdTb2xpZE1hdGVyaWFsIFtnbG9zcz0nICsgdGhpcy5nbG9z
cyArICcsIHRyYW5zcGFyZW5jeT0nICsgdGhpcy50cmFuc3BhcmVuY3kgKyAnLCBoYXNUZXh0dXJl
PScgKyB0aGlzLmhhc1RleHR1cmUgKyddJzsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICk7Ci0vKiBGYWtlIGEgRmxvZy4q
IG5hbWVzcGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9
IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlU
cmFjZXIgPSB7fTsKLQotRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuQ2hlc3Nib2FyZCA9IENsYXNz
LmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5NYXRlcmlhbC5DaGVzc2JvYXJkLnByb3RvdHlw
ZSA9IE9iamVjdC5leHRlbmQoCi0gICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5C
YXNlTWF0ZXJpYWwoKSwgewotICAgICAgICAgICAgY29sb3JFdmVuOiBudWxsLAotICAgICAgICAg
ICAgY29sb3JPZGQ6IG51bGwsCi0gICAgICAgICAgICBkZW5zaXR5OiAwLjUsCi0KLSAgICAgICAg
ICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihjb2xvckV2ZW4sIGNvbG9yT2RkLCByZWZsZWN0aW9u
LCB0cmFuc3BhcmVuY3ksIGdsb3NzLCBkZW5zaXR5KSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvckV2ZW4gPSBjb2xvckV2ZW47Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29sb3JPZGQgPSBjb2xvck9kZDsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5yZWZsZWN0aW9uID0gcmVmbGVjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy50cmFuc3BhcmVuY3kgPSB0cmFuc3BhcmVuY3k7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
Z2xvc3MgPSBnbG9zczsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kZW5zaXR5ID0gZGVuc2l0
eTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNUZXh0dXJlID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZ2V0
Q29sb3I6IGZ1bmN0aW9uKHUsIHYpewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhciB0ID0gdGhpcy53cmFwVXAodSAqIHRoaXMuZGVuc2l0eSkgKiB0aGlzLndy
YXBVcCh2ICogdGhpcy5kZW5zaXR5KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQot
Ci0gICAgICAgICAgICAgICAgaWYodCA8IDAuMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuY29sb3JFdmVuOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuY29sb3JPZGQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0
b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJ0NoZXNzTWF0ZXJpYWwgW2dsb3NzPScgKyB0aGlzLmdsb3NzICsg
JywgdHJhbnNwYXJlbmN5PScgKyB0aGlzLnRyYW5zcGFyZW5jeSArICcsIGhhc1RleHR1cmU9JyAr
IHRoaXMuaGFzVGV4dHVyZSArJ10nOwotICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSk7Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAq
LwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlw
ZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsK
LWlmKHR5cGVvZihGbG9nLlJheVRyYWNlci5TaGFwZSkgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5
VHJhY2VyLlNoYXBlID0ge307Ci0KLUZsb2cuUmF5VHJhY2VyLlNoYXBlLlNwaGVyZSA9IENsYXNz
LmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5TaGFwZS5TcGhlcmUucHJvdG90eXBlID0gewot
ICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIHJhZGl1cywgbWF0ZXJpYWwpIHsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzOwotICAgICAgICAgICAg
dGhpcy5wb3NpdGlvbiA9IHBvczsKLSAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlh
bDsKLQotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBpbnRlcnNlY3Q6IGZ1
bmN0aW9uKHJheSl7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgaW5mbyA9IG5ldyBG
bG9nLlJheVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7Ci0gICAgICAgICAgICBpbmZvLnNoYXBl
ID0gdGhpczsKLQotICAgICAgICAgICAgdmFyIGRzdCA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5w
cm90b3R5cGUuc3VidHJhY3QocmF5LnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTsKLQotICAgICAg
ICAgICAgdmFyIEIgPSBkc3QuZG90KHJheS5kaXJlY3Rpb24pOwotICAgICAgICAgICAgdmFyIEMg
PSBkc3QuZG90KGRzdCkgLSAodGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyk7Ci0gICAgICAgICAg
ICB2YXIgRCA9IChCICogQikgLSBDOwotCi0gICAgICAgICAgICBpZihEID4gMCl7IC8vIGludGVy
c2VjdGlvbiEKLSAgICAgICAgICAgICAgICBpbmZvLmlzSGl0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBpbmZvLmRpc3RhbmNlID0gKC1CKSAtIE1hdGguc3FydChEKTsKLSAgICAgICAgICAgICAg
ICBpbmZvLnBvc2l0aW9uID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICByYXkucG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJheS5kaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5kaXN0YW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkK
LSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgaW5mby5ub3JtYWwg
PSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5wb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
cG9zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICkubm9ybWFsaXplKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpbmZvLmNvbG9yID0gdGhpcy5tYXRlcmlhbC5nZXRDb2xvcigwLDApOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbmZvLmlzSGl0ID0gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgcmV0dXJuIGlu
Zm87Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgewotICAgICAgICB0cnkg
ewotICAgICAgICAgICAgcmV0dXJuICdTcGhlcmUgW3Bvc2l0aW9uPScgKyB0aGlzLnBvc2l0aW9u
ICsgJywgcmFkaXVzPScgKyB0aGlzLnJhZGl1cyArICddJzsKLSAgICAgICAgfSBjYXRjaChlKSB7
IH0KLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYodHlwZW9mKEZs
b2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5VHJh
Y2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKLWlmKHR5cGVvZihGbG9n
LlJheVRyYWNlci5TaGFwZSkgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyLlNoYXBlID0g
e307Ci0KLUZsb2cuUmF5VHJhY2VyLlNoYXBlLlBsYW5lID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZs
b2cuUmF5VHJhY2VyLlNoYXBlLlBsYW5lLnByb3RvdHlwZSA9IHsKLSAgICBkOiAwLjAsCi0KLSAg
ICBpbml0aWFsaXplIDogZnVuY3Rpb24ocG9zLCBkLCBtYXRlcmlhbCkgewotICAgICAgICB0cnkg
ewotICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKLSAgICAgICAgICAgIHRoaXMuZCA9
IGQ7Ci0gICAgICAgICAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7Ci0gICAgICAgIH0gY2F0
Y2goZSkgeyB9Ci0gICAgfSwKLQotICAgIGludGVyc2VjdDogZnVuY3Rpb24ocmF5KXsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBpbmZvID0gbmV3IEZsb2cuUmF5VHJhY2VyLkludGVy
c2VjdGlvbkluZm8oKTsKLQotICAgICAgICAgICAgdmFyIFZkID0gdGhpcy5wb3NpdGlvbi5kb3Qo
cmF5LmRpcmVjdGlvbik7Ci0gICAgICAgICAgICBpZihWZCA9PSAwKSByZXR1cm4gaW5mbzsgLy8g
bm8gaW50ZXJzZWN0aW9uCi0KLSAgICAgICAgICAgIHZhciB0ID0gLSh0aGlzLnBvc2l0aW9uLmRv
dChyYXkucG9zaXRpb24pICsgdGhpcy5kKSAvIFZkOwotICAgICAgICAgICAgaWYodCA8PSAwKSBy
ZXR1cm4gaW5mbzsKLQotICAgICAgICAgICAgaW5mby5zaGFwZSA9IHRoaXM7Ci0gICAgICAgICAg
ICBpbmZvLmlzSGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8ucG9zaXRpb24gPSBGbG9nLlJh
eVRyYWNlci5WZWN0b3IucHJvdG90eXBlLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgcmF5LnBv
c2l0aW9uLAotICAgICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90
eXBlLm11bHRpcGx5U2NhbGFyKAotICAgICAgICAgICAgICAgICAgICAgICAgcmF5LmRpcmVjdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgIHQKLSAgICAgICAgICAgICAgICAgICAgICAgICkK
LSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGluZm8ubm9ybWFsID0gdGhpcy5w
b3NpdGlvbjsKLSAgICAgICAgICAgIGluZm8uZGlzdGFuY2UgPSB0OwotCi0gICAgICAgICAgICBp
Zih0aGlzLm1hdGVyaWFsLmhhc1RleHR1cmUpewotICAgICAgICAgICAgICAgIHZhciB2VSA9IG5l
dyBGbG9nLlJheVRyYWNlci5WZWN0b3IodGhpcy5wb3NpdGlvbi55LCB0aGlzLnBvc2l0aW9uLnos
IC10aGlzLnBvc2l0aW9uLngpOwotICAgICAgICAgICAgICAgIHZhciB2ViA9IHZVLmNyb3NzKHRo
aXMucG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHZhciB1ID0gaW5mby5wb3NpdGlvbi5kb3Qo
dlUpOwotICAgICAgICAgICAgICAgIHZhciB2ID0gaW5mby5wb3NpdGlvbi5kb3QodlYpOwotICAg
ICAgICAgICAgICAgIGluZm8uY29sb3IgPSB0aGlzLm1hdGVyaWFsLmdldENvbG9yKHUsdik7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGluZm8uY29sb3IgPSB0aGlzLm1h
dGVyaWFsLmdldENvbG9yKDAsMCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBjYXRjaChl
KSB7IH0KLSAgICAgICAgcmV0dXJuIGluZm87Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nIDogZnVu
Y3Rpb24gKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuICdQbGFuZSBbJyAr
IHRoaXMucG9zaXRpb24gKyAnLCBkPScgKyB0aGlzLmQgKyAnXSc7Ci0gICAgICAgIH0gY2F0Y2go
ZSkgeyB9Ci0gICAgfQotfQotLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KLWlmKHR5cGVv
ZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKLWlmKHR5cGVvZihGbG9nLlJh
eVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307Ci0KLUZsb2cuUmF5
VHJhY2VyLkludGVyc2VjdGlvbkluZm8gPSBDbGFzcy5jcmVhdGUoKTsKLQotRmxvZy5SYXlUcmFj
ZXIuSW50ZXJzZWN0aW9uSW5mby5wcm90b3R5cGUgPSB7Ci0gICAgaXNIaXQ6IGZhbHNlLAotICAg
IGhpdENvdW50OiAwLAotICAgIHNoYXBlOiBudWxsLAotICAgIHBvc2l0aW9uOiBudWxsLAotICAg
IG5vcm1hbDogbnVsbCwKLSAgICBjb2xvcjogbnVsbCwKLSAgICBkaXN0YW5jZTogbnVsbCwKLQot
ICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHRoaXMuY29sb3IgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApOwotICAgICAgICB9
IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiAnSW50ZXJzZWN0aW9uIFsnICsgdGhpcy5w
b3NpdGlvbiArICddJzsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9Ci19Ci0vKiBGYWtl
IGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2
YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykg
RmxvZy5SYXlUcmFjZXIgPSB7fTsKLQotRmxvZy5SYXlUcmFjZXIuQ2FtZXJhID0gQ2xhc3MuY3Jl
YXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2VyLkNhbWVyYS5wcm90b3R5cGUgPSB7Ci0gICAgcG9zaXRp
b246IG51bGwsCi0gICAgbG9va0F0OiBudWxsLAotICAgIGVxdWF0b3I6IG51bGwsCi0gICAgdXA6
IG51bGwsCi0gICAgc2NyZWVuOiBudWxsLAotCi0gICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHBv
cywgbG9va0F0LCB1cCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5wb3NpdGlv
biA9IHBvczsKLSAgICAgICAgICAgIHRoaXMubG9va0F0ID0gbG9va0F0OwotICAgICAgICAgICAg
dGhpcy51cCA9IHVwOwotICAgICAgICAgICAgdGhpcy5lcXVhdG9yID0gbG9va0F0Lm5vcm1hbGl6
ZSgpLmNyb3NzKHRoaXMudXApOwotICAgICAgICAgICAgdGhpcy5zY3JlZW4gPSBGbG9nLlJheVRy
YWNlci5WZWN0b3IucHJvdG90eXBlLmFkZCh0aGlzLnBvc2l0aW9uLCB0aGlzLmxvb2tBdCk7Ci0g
ICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfSwKLQotICAgIGdldFJheTogZnVuY3Rpb24odngs
IHZ5KXsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBwb3MgPSBGbG9nLlJheVRyYWNl
ci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAotICAgICAgICAgICAgICAgICAgICB0aGlzLnNj
cmVlbiwKLSAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlw
ZS5zdWJ0cmFjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLlZlY3Rv
ci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIodGhpcy5lcXVhdG9yLCB2eCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2Nh
bGFyKHRoaXMudXAsIHZ5KQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAg
ICAgICAgICApOwotICAgICAgICAgICAgcG9zLnkgPSBwb3MueSAqIC0xOwotICAgICAgICAgICAg
dmFyIGRpciA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCi0gICAg
ICAgICAgICAgICAgICAgIHBvcywKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbgot
ICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICB2YXIgcmF5ID0gbmV3IEZsb2cu
UmF5VHJhY2VyLlJheShwb3MsIGRpci5ub3JtYWxpemUoKSk7Ci0KLSAgICAgICAgfSBjYXRjaChl
KSB7IH0KLSAgICAgICAgcmV0dXJuIHJheTsKLSAgICB9LAotCi0gICAgdG9TdHJpbmcgOiBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gJ1JheSBbXSc7Ci0g
ICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfQotfQotLyogRmFrZSBhIEZsb2cuKiBuYW1lc3Bh
Y2UgKi8KLWlmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKLWlm
KHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0g
e307Ci0KLUZsb2cuUmF5VHJhY2VyLkJhY2tncm91bmQgPSBDbGFzcy5jcmVhdGUoKTsKLQotRmxv
Zy5SYXlUcmFjZXIuQmFja2dyb3VuZC5wcm90b3R5cGUgPSB7Ci0gICAgY29sb3IgOiBudWxsLAot
ICAgIGFtYmllbmNlIDogMC4wLAotCi0gICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKGNvbG9yLCBh
bWJpZW5jZSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9y
OwotICAgICAgICAgICAgdGhpcy5hbWJpZW5jZSA9IGFtYmllbmNlOwotICAgICAgICB9IGNhdGNo
KGUpIHsgfQotICAgIH0KLX0KLS8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBl
b2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5S
YXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OwotCi1GbG9nLlJh
eVRyYWNlci5FbmdpbmUgPSBDbGFzcy5jcmVhdGUoKTsKLQotRmxvZy5SYXlUcmFjZXIuRW5naW5l
LnByb3RvdHlwZSA9IHsKLSAgICBjYW52YXM6IG51bGwsIC8qIDJkIGNvbnRleHQgd2UgY2FuIHJl
bmRlciB0byAqLwotCi0gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucyl7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKLSAgICAg
ICAgICAgICAgICBjYW52YXNIZWlnaHQ6IDEwMCwKLSAgICAgICAgICAgICAgICBjYW52YXNXaWR0
aDogMTAwLAotICAgICAgICAgICAgICAgIHBpeGVsV2lkdGg6IDIsCi0gICAgICAgICAgICAgICAg
cGl4ZWxIZWlnaHQ6IDIsCi0gICAgICAgICAgICAgICAgcmVuZGVyRGlmZnVzZTogZmFsc2UsCi0g
ICAgICAgICAgICAgICAgcmVuZGVyU2hhZG93czogZmFsc2UsCi0gICAgICAgICAgICAgICAgcmVu
ZGVySGlnaGxpZ2h0czogZmFsc2UsCi0gICAgICAgICAgICAgICAgcmVuZGVyUmVmbGVjdGlvbnM6
IGZhbHNlLAotICAgICAgICAgICAgICAgIHJheURlcHRoOiAyCi0gICAgICAgICAgICB9LCBvcHRp
b25zIHx8IHt9KTsKLQotICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNhbnZhc0hlaWdodCAvPSB0
aGlzLm9wdGlvbnMucGl4ZWxIZWlnaHQ7Ci0gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFz
V2lkdGggLz0gdGhpcy5vcHRpb25zLnBpeGVsV2lkdGg7Ci0KLSAgICAgICAgfSBjYXRjaChlKSB7
IH0KLQotICAgICAgICAvKiBUT0RPOiBkeW5hbWljYWxseSBpbmNsdWRlIG90aGVyIHNjcmlwdHMg
Ki8KLSAgICB9LAotCi0gICAgc2V0UGl4ZWw6IGZ1bmN0aW9uKHgsIHksIGNvbG9yKXsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBweFcsIHB4SDsKLSAgICAgICAgICAgIHB4VyA9IHRo
aXMub3B0aW9ucy5waXhlbFdpZHRoOwotICAgICAgICAgICAgcHhIID0gdGhpcy5vcHRpb25zLnBp
eGVsSGVpZ2h0OwotCi0gICAgICAgICAgICBpZiAodGhpcy5jYW52YXMpIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLmNhbnZhcy5maWxsU3R5bGUgPSBjb2xvci50b1N0cmluZygpOwotICAgICAgICAg
ICAgICAgIHRoaXMuY2FudmFzLmZpbGxSZWN0ICh4ICogcHhXLCB5ICogcHhILCBweFcsIHB4SCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh4ID09PSAgeSkgewot
ICAgICAgICAgICAgICAgICAgICBjaGVja051bWJlciArPSBjb2xvci5icmlnaHRuZXNzKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIHByaW50KHggKiBweFcsIHkgKiBw
eEgsIHB4VywgcHhIKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGNhdGNoKGUpIHsgfQot
ICAgIH0sCi0KLSAgICByZW5kZXJTY2VuZTogZnVuY3Rpb24oc2NlbmUsIGNhbnZhcyl7Ci0gICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICBjaGVja051bWJlciA9IDA7Ci0gICAgICAgICAgICAvKiBH
ZXQgY2FudmFzICovCi0gICAgICAgICAgICBpZiAoY2FudmFzKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5jYW52YXMgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgY2FudmFzSGVpZ2h0ID0gdGhpcy5vcHRpb25zLmNhbnZhc0hlaWdo
dDsKLSAgICAgICAgICAgIHZhciBjYW52YXNXaWR0aCA9IHRoaXMub3B0aW9ucy5jYW52YXNXaWR0
aDsKLQotICAgICAgICAgICAgZm9yKHZhciB5PTA7IHkgPCBjYW52YXNIZWlnaHQ7IHkrKyl7Ci0g
ICAgICAgICAgICAgICAgZm9yKHZhciB4PTA7IHggPCBjYW52YXNXaWR0aDsgeCsrKXsKLSAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5cCA9IHkg
KiAxLjAgLyBjYW52YXNIZWlnaHQgKiAyIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB4cCA9IHggKiAxLjAgLyBjYW52YXNXaWR0aCAqIDIgLSAxOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcmF5ID0gc2NlbmUuY2FtZXJhLmdldFJheSh4cCwgeXApOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLmdldFBpeGVsQ29sb3IocmF5LCBzY2Vu
ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UGl4ZWwoeCwgeSwgY29sb3Ip
OwotCi0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICBpZiAoY2hl
Y2tOdW1iZXIgIT09IDIzMjEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU2NlbmUg
cmVuZGVyZWQgaW5jb3JyZWN0bHkiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXRQaXhl
bENvbG9yOiBmdW5jdGlvbihyYXksIHNjZW5lKXsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHZhciBpbmZvID0gdGhpcy50ZXN0SW50ZXJzZWN0aW9uKHJheSwgc2NlbmUsIG51bGwpOwotICAg
ICAgICAgICAgaWYoaW5mby5pc0hpdCl7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gdGhp
cy5yYXlUcmFjZShpbmZvLCByYXksIHNjZW5lLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y29sb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NlbmUuYmFja2dyb3Vu
ZC5jb2xvcjsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgdGVzdEludGVy
c2VjdGlvbjogZnVuY3Rpb24ocmF5LCBzY2VuZSwgZXhjbHVkZSl7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICB2YXIgaGl0cyA9IDA7Ci0gICAgICAgICAgICB2YXIgYmVzdCA9IG5ldyBGbG9n
LlJheVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7Ci0gICAgICAgICAgICBiZXN0LmRpc3RhbmNl
ID0gMjAwMDsKLQotICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8c2NlbmUuc2hhcGVzLmxlbmd0
aDsgaSsrKXsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
c2hhcGUgPSBzY2VuZS5zaGFwZXNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcGUg
IT0gZXhjbHVkZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHNoYXBlLmlu
dGVyc2VjdChyYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5mby5pc0hpdCAmJiBp
bmZvLmRpc3RhbmNlID49IDAgJiYgaW5mby5kaXN0YW5jZSA8IGJlc3QuZGlzdGFuY2UpewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBpbmZvOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhpdHMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJlc3QuaGl0Q291bnQgPSBoaXRzOwotCi0gICAgICAgIH0gY2F0Y2go
ZSkgeyB9Ci0gICAgICAgIHJldHVybiBiZXN0OwotICAgIH0sCi0KLSAgICBnZXRSZWZsZWN0aW9u
UmF5OiBmdW5jdGlvbihQLE4sVil7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgYzEg
PSAtTi5kb3QoVik7Ci0gICAgICAgICAgICB2YXIgUjEgPSBGbG9nLlJheVRyYWNlci5WZWN0b3Iu
cHJvdG90eXBlLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9y
LnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihOLCAyKmMxKSwKLSAgICAgICAgICAgICAgICAgICAg
VgotICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAg
ICAgIHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuUmF5KFAsIFIxKTsKLSAgICB9LAotCi0gICAg
cmF5VHJhY2U6IGZ1bmN0aW9uKGluZm8sIHJheSwgc2NlbmUsIGRlcHRoKXsKLSAgICAgICAgLy8g
Q2FsYyBhbWJpZW50Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgY29sb3IgPSBGbG9n
LlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoaW5mby5jb2xvciwgc2Nl
bmUuYmFja2dyb3VuZC5hbWJpZW5jZSk7Ci0gICAgICAgICAgICB2YXIgb2xkQ29sb3IgPSBjb2xv
cjsKLSAgICAgICAgICAgIHZhciBzaGluaW5lc3MgPSBNYXRoLnBvdygxMCwgaW5mby5zaGFwZS5t
YXRlcmlhbC5nbG9zcyArIDEpOwotCi0gICAgICAgICAgICBmb3IodmFyIGk9MDsgaTxzY2VuZS5s
aWdodHMubGVuZ3RoOyBpKyspewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBDYWxjIGRpZmZ1c2UgbGlnaHRpbmcKLSAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBG
bG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpZ2h0LnBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZm8ucG9zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1hbGl6ZSgp
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW5kZXJEaWZmdXNlKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMID0gdi5kb3QoaW5mby5ub3JtYWwpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoTCA+IDAuMCl7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHko
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5jb2xvciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5Db2xv
ci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpZ2h0LmNvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGNhdGNoKGUp
IHsgfQotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IGdyZWF0ZXIgdGhlIGRlcHRoIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSBjb2xvdXJzLCBidXQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBleHBvbmVudGlhbGx5ICghKSBleHBlbnNpdmUK
LSAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGggPD0gdGhpcy5vcHRpb25zLnJheURlcHRoKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSByZWZsZWN0aW9uIHJheQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbmRlclJlZmxlY3Rpb25zICYm
IGluZm8uc2hhcGUubWF0ZXJpYWwucmVmbGVjdGlvbiA+IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmxlY3Rpb25SYXkgPSB0
aGlzLmdldFJlZmxlY3Rpb25SYXkoaW5mby5wb3NpdGlvbiwgaW5mby5ub3JtYWwsIHJheS5kaXJl
Y3Rpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZsID0gdGhpcy50ZXN0
SW50ZXJzZWN0aW9uKHJlZmxlY3Rpb25SYXksIHNjZW5lLCBpbmZvLnNoYXBlKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZsLmlzSGl0ICYmIHJlZmwuZGlzdGFuY2UgPiAw
KXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbC5jb2xvciA9IHRoaXMucmF5
VHJhY2UocmVmbCwgcmVmbGVjdGlvblJheSwgc2NlbmUsIGRlcHRoICsgMSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVmbC5jb2xvciA9IHNjZW5lLmJhY2tncm91bmQuY29sb3I7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBGbG9n
LlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYmxlbmQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZmwuY29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnNo
YXBlLm1hdGVyaWFsLnJlZmxlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlZnJhY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE8gKi8KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gIGNhdGNoKGUpIHsgfQotCi0g
ICAgICAgICAgICAgICAgLyogUmVuZGVyIHNoYWRvd3MgYW5kIGhpZ2hsaWdodHMgKi8KLQotICAg
ICAgICAgICAgICAgIHZhciBzaGFkb3dJbmZvID0gbmV3IEZsb2cuUmF5VHJhY2VyLkludGVyc2Vj
dGlvbkluZm8oKTsKLQotICAgICAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW5kZXJTaGFk
b3dzKXsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRvd1JheSA9IG5ldyBGbG9nLlJheVRy
YWNlci5SYXkoaW5mby5wb3NpdGlvbiwgdik7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2hhZG93
SW5mbyA9IHRoaXMudGVzdEludGVyc2VjdGlvbihzaGFkb3dSYXksIHNjZW5lLCBpbmZvLnNoYXBl
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhZG93SW5mby5pc0hpdCAmJiBzaGFkb3dJbmZv
LnNoYXBlICE9IGluZm8uc2hhcGUgLyomJiBzaGFkb3dJbmZvLnNoYXBlLnR5cGUgIT0gJ1BMQU5F
JyovKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2QSA9IEZsb2cuUmF5VHJhY2VyLkNv
bG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihjb2xvciwgMC41KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBkQiA9ICgwLjUgKiBNYXRoLnBvdyhzaGFkb3dJbmZvLnNoYXBlLm1hdGVy
aWFsLnRyYW5zcGFyZW5jeSwgMC41KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9
IEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5hZGRTY2FsYXIodkEsZEIpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUGhvbmcgc3BlY3VsYXIgaGlnaGxpZ2h0cwotICAg
ICAgICAgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMucmVuZGVySGlnaGxpZ2h0cyAmJiAhc2hh
ZG93SW5mby5pc0hpdCAmJiBpbmZvLnNoYXBlLm1hdGVyaWFsLmdsb3NzID4gMCl7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgTHYgPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBl
LnN1YnRyYWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnNoYXBlLnBv
c2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodC5wb3NpdGlvbgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1hbGl6ZSgpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgRSA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUu
c3VidHJhY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lLmNhbWVyYS5w
b3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zaGFwZS5wb3Np
dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1hbGl6ZSgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgSCA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90
b3R5cGUuc3VidHJhY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEx2Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkubm9ybWFsaXplKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbG9z
c1dlaWdodCA9IE1hdGgucG93KE1hdGgubWF4KGluZm8ubm9ybWFsLmRvdChIKSwgMCksIHNoaW5p
bmVzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IEZsb2cuUmF5VHJhY2VyLkNv
bG9yLnByb3RvdHlwZS5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cu
UmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihsaWdodC5jb2xvciwgZ2xv
c3NXZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNv
bG9yLmxpbWl0KCk7Ci0KLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgcmV0dXJuIGNv
bG9yOwotICAgIH0KLX07Ci0KLQotZnVuY3Rpb24gcmVuZGVyU2NlbmUoKXsKLSAgICB0cnkgewot
ICAgICAgICB2YXIgc2NlbmUgPSBuZXcgRmxvZy5SYXlUcmFjZXIuU2NlbmUoKTsKLQotICAgICAg
ICBzY2VuZS5jYW1lcmEgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQ2FtZXJhKAotICAgICAgICAgICAg
ICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoMCwgMCwgLTE1KSwKLSAgICAgICAgICAgICAg
ICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKC0wLjIsIDAsIDUpLAotICAgICAgICAgICAgICAg
IG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoMCwgMSwgMCkKLSAgICAgICAgICAgICAgICApOwot
Ci0gICAgICAgIHNjZW5lLmJhY2tncm91bmQgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQmFja2dyb3Vu
ZCgKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMC41LCAwLjUsIDAu
NSksCi0gICAgICAgICAgICAgICAgMC40Ci0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICB2
YXIgc3BoZXJlID0gbmV3IEZsb2cuUmF5VHJhY2VyLlNoYXBlLlNwaGVyZSgKLSAgICAgICAgICAg
ICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKC0xLjUsIDEuNSwgMiksCi0gICAgICAgICAg
ICAgICAgMS41LAotICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5T
b2xpZCgKLSAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMC41
LDAuNSksCi0gICAgICAgICAgICAgICAgICAgIDAuMywKLSAgICAgICAgICAgICAgICAgICAgMC4w
LAotICAgICAgICAgICAgICAgICAgICAwLjAsCi0gICAgICAgICAgICAgICAgICAgIDIuMAotICAg
ICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICB2YXIgc3Bo
ZXJlMSA9IG5ldyBGbG9nLlJheVRyYWNlci5TaGFwZS5TcGhlcmUoCi0gICAgICAgICAgICAgICAg
bmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigxLCAwLjI1LCAxKSwKLSAgICAgICAgICAgICAgICAw
LjUsCi0gICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLk1hdGVyaWFsLlNvbGlkKAot
ICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMC45LDAuOSwwLjkp
LAotICAgICAgICAgICAgICAgICAgICAwLjEsCi0gICAgICAgICAgICAgICAgICAgIDAuMCwKLSAg
ICAgICAgICAgICAgICAgICAgMC4wLAotICAgICAgICAgICAgICAgICAgICAxLjUKLSAgICAgICAg
ICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgdmFyIHBsYW5lID0g
bmV3IEZsb2cuUmF5VHJhY2VyLlNoYXBlLlBsYW5lKAotICAgICAgICAgICAgICAgIG5ldyBGbG9n
LlJheVRyYWNlci5WZWN0b3IoMC4xLCAwLjksIC0wLjUpLm5vcm1hbGl6ZSgpLAotICAgICAgICAg
ICAgICAgIDEuMiwKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwu
Q2hlc3Nib2FyZCgKLSAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9y
KDEsMSwxKSwKLSAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAs
MCwwKSwKLSAgICAgICAgICAgICAgICAgICAgMC4yLAotICAgICAgICAgICAgICAgICAgICAwLjAs
Ci0gICAgICAgICAgICAgICAgICAgIDEuMCwKLSAgICAgICAgICAgICAgICAgICAgMC43Ci0gICAg
ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgIHNjZW5lLnNo
YXBlcy5wdXNoKHBsYW5lKTsKLSAgICAgICAgc2NlbmUuc2hhcGVzLnB1c2goc3BoZXJlKTsKLSAg
ICAgICAgc2NlbmUuc2hhcGVzLnB1c2goc3BoZXJlMSk7Ci0KLSAgICAgICAgdmFyIGxpZ2h0ID0g
bmV3IEZsb2cuUmF5VHJhY2VyLkxpZ2h0KAotICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRy
YWNlci5WZWN0b3IoNSwgMTAsIC0xKSwKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFj
ZXIuQ29sb3IoMC44LCAwLjgsIDAuOCkKLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgIHZh
ciBsaWdodDEgPSBuZXcgRmxvZy5SYXlUcmFjZXIuTGlnaHQoCi0gICAgICAgICAgICAgICAgbmV3
IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigtMywgNSwgLTE1KSwKLSAgICAgICAgICAgICAgICBuZXcg
RmxvZy5SYXlUcmFjZXIuQ29sb3IoMC44LCAwLjgsIDAuOCksCi0gICAgICAgICAgICAgICAgMTAw
Ci0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICBzY2VuZS5saWdodHMucHVzaChsaWdodCk7
Ci0gICAgICAgIHNjZW5lLmxpZ2h0cy5wdXNoKGxpZ2h0MSk7Ci0KLSAgICAgICAgdmFyIGltYWdl
V2lkdGggPSAxMDA7IC8vICRGKCdpbWFnZVdpZHRoJyk7Ci0gICAgICAgIHZhciBpbWFnZUhlaWdo
dCA9IDEwMDsgLy8gJEYoJ2ltYWdlSGVpZ2h0Jyk7Ci0gICAgICAgIHZhciBwaXhlbFNpemUgPSAi
NSw1Ii5zcGxpdCgnLCcpOyAvLyAgJEYoJ3BpeGVsU2l6ZScpLnNwbGl0KCcsJyk7Ci0gICAgICAg
IHZhciByZW5kZXJEaWZmdXNlID0gdHJ1ZTsgLy8gJEYoJ3JlbmRlckRpZmZ1c2UnKTsKLSAgICAg
ICAgdmFyIHJlbmRlclNoYWRvd3MgPSB0cnVlOyAvLyAkRigncmVuZGVyU2hhZG93cycpOwotICAg
ICAgICB2YXIgcmVuZGVySGlnaGxpZ2h0cyA9IHRydWU7IC8vICRGKCdyZW5kZXJIaWdobGlnaHRz
Jyk7Ci0gICAgICAgIHZhciByZW5kZXJSZWZsZWN0aW9ucyA9IHRydWU7IC8vICRGKCdyZW5kZXJS
ZWZsZWN0aW9ucycpOwotICAgICAgICB2YXIgcmF5RGVwdGggPSAyOy8vJEYoJ3JheURlcHRoJyk7
Ci0KLSAgICAgICAgdmFyIHJheXRyYWNlciA9IG5ldyBGbG9nLlJheVRyYWNlci5FbmdpbmUoCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYW52YXNXaWR0aDogaW1hZ2VX
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzSGVpZ2h0OiBpbWFnZUhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxXaWR0aDogcGl4ZWxTaXplWzBdLAotICAgICAgICAgICAg
ICAgICAgICBwaXhlbEhlaWdodDogcGl4ZWxTaXplWzFdLAotICAgICAgICAgICAgICAgICAgICAi
cmVuZGVyRGlmZnVzZSI6IHJlbmRlckRpZmZ1c2UsCi0gICAgICAgICAgICAgICAgICAgICJyZW5k
ZXJIaWdobGlnaHRzIjogcmVuZGVySGlnaGxpZ2h0cywKLSAgICAgICAgICAgICAgICAgICAgInJl
bmRlclNoYWRvd3MiOiByZW5kZXJTaGFkb3dzLAotICAgICAgICAgICAgICAgICAgICAicmVuZGVy
UmVmbGVjdGlvbnMiOiByZW5kZXJSZWZsZWN0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgInJh
eURlcHRoIjogcmF5RGVwdGgKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKTsK
LQotICAgICAgICByYXl0cmFjZXIucmVuZGVyU2NlbmUoc2NlbmUsIG51bGwsIDApOwotICAgIH0g
Y2F0Y2goZSkgeyB9Ci19Ci0KLWZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKQotICAgIHJlbmRl
clNjZW5lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy92OC1yYXl0cmFjZS13aXRoLXRyeS1jYXRjaC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3Y4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlOGJhYzE4MzQxOTJkNjhlMTRiZjkzMzMzZmUwNjkzZGQ0M2E5ZjBm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3Y4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMTEwMSArMCwwIEBACi0vLyBUaGUgcmF5IHRyYWNlciBjb2Rl
IGluIHRoaXMgZmlsZSBpcyB3cml0dGVuIGJ5IEFkYW0gQnVybWlzdGVyLiBJdAotLy8gaXMgYXZh
aWxhYmxlIGluIGl0cyBvcmlnaW5hbCBmb3JtIGZyb206Ci0vLwotLy8gICBodHRwOi8vbGFicy5m
bG9nLm56LmNvL3JheXRyYWNlci8KLS8vCi0vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBzbGlnaHRs
eSBieSBHb29nbGUgdG8gd29yayBhcyBhIHN0YW5kYWxvbmUKLS8vIGJlbmNobWFyaywgYnV0IHRo
ZSBhbGwgdGhlIGNvbXB1dGF0aW9uYWwgY29kZSByZW1haW5zCi0vLyB1bnRvdWNoZWQuIFRoaXMg
ZmlsZSBhbHNvIGNvbnRhaW5zIGEgY29weSBvZiBwYXJ0cyBvZiB0aGUgUHJvdG90eXBlCi0vLyBK
YXZhU2NyaXB0IGZyYW1ld29yayB3aGljaCBpcyB1c2VkIGJ5IHRoZSByYXkgdHJhY2VyLgotCi0v
LyBWYXJpYWJsZSB1c2VkIHRvIGhvbGQgYSBudW1iZXIgdGhhdCBjYW4gYmUgdXNlZCB0byB2ZXJp
ZnkgdGhhdAotLy8gdGhlIHNjZW5lIHdhcyByYXkgdHJhY2VkIGNvcnJlY3RseS4KLXZhciBjaGVj
a051bWJlcjsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0v
LyBUaGUgZm9sbG93aW5nIGlzIGEgY29weSBvZiBwYXJ0cyBvZiB0aGUgUHJvdG90eXBlIEphdmFT
Y3JpcHQgbGlicmFyeToKLQotLy8gUHJvdG90eXBlIEphdmFTY3JpcHQgZnJhbWV3b3JrLCB2ZXJz
aW9uIDEuNS4wCi0vLyAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uCi0vLwotLy8gUHJvdG90
eXBlIGlzIGZyZWVseSBkaXN0cmlidXRhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5
bGUgbGljZW5zZS4KLS8vIEZvciBkZXRhaWxzLCBzZWUgdGhlIFByb3RvdHlwZSB3ZWIgc2l0ZTog
aHR0cDovL3Byb3RvdHlwZS5jb25pby5uZXQvCi0KLWxldCBfX2V4Y2VwdGlvbkNvdW50ZXIgPSAw
OwotZnVuY3Rpb24gcmFuZG9tRXhjZXB0aW9uKCkgewotICAgIF9fZXhjZXB0aW9uQ291bnRlcisr
OwotICAgIGlmIChfX2V4Y2VwdGlvbkNvdW50ZXIgJSA1MDAgPT09IDApIHsKLSAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJyYW5kbyIpOwotICAgIH0KLX0KLW5vSW5saW5lKHJhbmRvbUV4Y2VwdGlv
bik7Ci0KLXZhciBDbGFzcyA9IHsKLSAgICBjcmVhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHRo
aXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIHJh
bmRvbUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgfQot
ICAgIH0KLX07Ci0KLQotT2JqZWN0LmV4dGVuZCA9IGZ1bmN0aW9uKGRlc3RpbmF0aW9uLCBzb3Vy
Y2UpIHsKLSAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpIHsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07Ci0g
ICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uOwotfTsKLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgdGhlIGFj
dHVhbCByYXkgdHJhY2VyIHdyaXR0ZW4gYnkgQWRhbQotLy8gQnVybWlzdGVyLiBJdCdzIGEgY29u
Y2F0ZW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZpbGVzOgotLy8KLS8vICAgZmxvZy9jb2xvci5q
cwotLy8gICBmbG9nL2xpZ2h0LmpzCi0vLyAgIGZsb2cvdmVjdG9yLmpzCi0vLyAgIGZsb2cvcmF5
LmpzCi0vLyAgIGZsb2cvc2NlbmUuanMKLS8vICAgZmxvZy9tYXRlcmlhbC9iYXNlbWF0ZXJpYWwu
anMKLS8vICAgZmxvZy9tYXRlcmlhbC9zb2xpZC5qcwotLy8gICBmbG9nL21hdGVyaWFsL2NoZXNz
Ym9hcmQuanMKLS8vICAgZmxvZy9zaGFwZS9iYXNlc2hhcGUuanMKLS8vICAgZmxvZy9zaGFwZS9z
cGhlcmUuanMKLS8vICAgZmxvZy9zaGFwZS9wbGFuZS5qcwotLy8gICBmbG9nL2ludGVyc2VjdGlv
bmluZm8uanMKLS8vICAgZmxvZy9jYW1lcmEuanMKLS8vICAgZmxvZy9iYWNrZ3JvdW5kLmpzCi0v
LyAgIGZsb2cvZW5naW5lLmpzCi0KLQotLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KLWlm
KHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKLWlmKHR5cGVvZihG
bG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307Ci0KLUZs
b2cuUmF5VHJhY2VyLkNvbG9yID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2VyLkNv
bG9yLnByb3RvdHlwZSA9IHsKLSAgICByZWQgOiAwLjAsCi0gICAgZ3JlZW4gOiAwLjAsCi0gICAg
Ymx1ZSA6IDAuMCwKLQotICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihyLCBnLCBiKSB7Ci0gICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICBpZighcikgciA9IDAuMDsKLSAgICAgICAgICAgIGlmKCFn
KSBnID0gMC4wOwotICAgICAgICAgICAgaWYoIWIpIGIgPSAwLjA7Ci0KLSAgICAgICAgICAgIHRo
aXMucmVkID0gcjsKLSAgICAgICAgICAgIHRoaXMuZ3JlZW4gPSBnOwotICAgICAgICAgICAgdGhp
cy5ibHVlID0gYjsKLSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNh
dGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBhZGQgOiBmdW5jdGlvbihjMSwgYzIpewotICAgICAg
ICB0cnkgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xv
cigwLDAsMCk7Ci0KLSAgICAgICAgICAgIHJlc3VsdC5yZWQgPSBjMS5yZWQgKyBjMi5yZWQ7Ci0g
ICAgICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiArIGMyLmdyZWVuOwotICAgICAgICAg
ICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICsgYzIuYmx1ZTsKLQotICAgICAgICAgICAgcmFuZG9t
RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9LAotCi0gICAgYWRkU2NhbGFyOiBmdW5jdGlvbihjMSwgcyl7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9y
KDAsMCwwKTsKLQotICAgICAgICAgICAgcmVzdWx0LnJlZCA9IGMxLnJlZCArIHM7Ci0gICAgICAg
ICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiArIHM7Ci0gICAgICAgICAgICByZXN1bHQuYmx1
ZSA9IGMxLmJsdWUgKyBzOwotCi0gICAgICAgICAgICByZXN1bHQubGltaXQoKTsKLQotICAgICAg
ICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGMxLCBj
Mil7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5
VHJhY2VyLkNvbG9yKDAsMCwwKTsKLQotICAgICAgICAgICAgcmVzdWx0LnJlZCA9IGMxLnJlZCAt
IGMyLnJlZDsKLSAgICAgICAgICAgIHJlc3VsdC5ncmVlbiA9IGMxLmdyZWVuIC0gYzIuZ3JlZW47
Ci0gICAgICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJsdWUgLSBjMi5ibHVlOwotCi0gICAgICAg
ICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBtdWx0aXBseSA6IGZ1bmN0aW9uKGMxLCBj
MikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJh
eVRyYWNlci5Db2xvcigwLDAsMCk7Ci0KLSAgICAgICAgICAgIHJlc3VsdC5yZWQgPSBjMS5yZWQg
KiBjMi5yZWQ7Ci0gICAgICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiAqIGMyLmdyZWVu
OwotICAgICAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICogYzIuYmx1ZTsKLQotICAgICAg
ICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgbXVsdGlwbHlTY2FsYXIgOiBmdW5jdGlv
bihjMSwgZikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBG
bG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7Ci0KLSAgICAgICAgICAgIHJlc3VsdC5yZWQgPSBj
MS5yZWQgKiBmOwotICAgICAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gKiBmOwotICAg
ICAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICogZjsKLQotICAgICAgICAgICAgcmFuZG9t
RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9LAotCi0gICAgZGl2aWRlRmFjdG9yIDogZnVuY3Rpb24oYzEsIGYpIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFjZXIu
Q29sb3IoMCwwLDApOwotCi0gICAgICAgICAgICByZXN1bHQucmVkID0gYzEucmVkIC8gZjsKLSAg
ICAgICAgICAgIHJlc3VsdC5ncmVlbiA9IGMxLmdyZWVuIC8gZjsKLSAgICAgICAgICAgIHJlc3Vs
dC5ibHVlID0gYzEuYmx1ZSAvIGY7Ci0KLSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwot
ICAgICAgICB9IGNhdGNoKGUpIHsgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwK
LQotICAgIGxpbWl0OiBmdW5jdGlvbigpewotICAgICAgICB0cnkgeyAKLSAgICAgICAgICAgIHRo
aXMucmVkID0gKHRoaXMucmVkID4gMC4wKSA/ICggKHRoaXMucmVkID4gMS4wKSA/IDEuMCA6IHRo
aXMucmVkICkgOiAwLjA7Ci0gICAgICAgICAgICB0aGlzLmdyZWVuID0gKHRoaXMuZ3JlZW4gPiAw
LjApID8gKCAodGhpcy5ncmVlbiA+IDEuMCkgPyAxLjAgOiB0aGlzLmdyZWVuICkgOiAwLjA7Ci0g
ICAgICAgICAgICB0aGlzLmJsdWUgPSAodGhpcy5ibHVlID4gMC4wKSA/ICggKHRoaXMuYmx1ZSA+
IDEuMCkgPyAxLjAgOiB0aGlzLmJsdWUgKSA6IDAuMDsKLQotICAgICAgICAgICAgcmFuZG9tRXhj
ZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfSwKLQotICAgIGRpc3RhbmNl
IDogZnVuY3Rpb24oY29sb3IpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBkID0g
TWF0aC5hYnModGhpcy5yZWQgLSBjb2xvci5yZWQpICsgTWF0aC5hYnModGhpcy5ncmVlbiAtIGNv
bG9yLmdyZWVuKSArIE1hdGguYWJzKHRoaXMuYmx1ZSAtIGNvbG9yLmJsdWUpOwotICAgICAgICAg
ICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJl
dHVybiBkOwotICAgIH0sCi0KLSAgICBibGVuZDogZnVuY3Rpb24oYzEsIGMyLCB3KXsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQ29s
b3IoMCwwLDApOwotICAgICAgICAgICAgcmVzdWx0ID0gRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJv
dG90eXBlLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJv
dG90eXBlLm11bHRpcGx5U2NhbGFyKGMxLCAxIC0gdyksCi0gICAgICAgICAgICAgICAgICAgIEZs
b2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihjMiwgdykKLSAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAg
ICB9IGNhdGNoKGUpIHsgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBi
cmlnaHRuZXNzIDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIg
ciA9IE1hdGguZmxvb3IodGhpcy5yZWQqMjU1KTsKLSAgICAgICAgICAgIHZhciBnID0gTWF0aC5m
bG9vcih0aGlzLmdyZWVuKjI1NSk7Ci0gICAgICAgICAgICB2YXIgYiA9IE1hdGguZmxvb3IodGhp
cy5ibHVlKjI1NSk7Ci0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBj
YXRjaChlKSB7IH0KLSAgICAgICAgcmV0dXJuIChyICogNzcgKyBnICogMTUwICsgYiAqIDI5KSA+
PiA4OwotICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgIHZhciByID0gTWF0aC5mbG9vcih0aGlzLnJlZCoyNTUpOwotICAgICAg
ICAgICAgdmFyIGcgPSBNYXRoLmZsb29yKHRoaXMuZ3JlZW4qMjU1KTsKLSAgICAgICAgICAgIHZh
ciBiID0gTWF0aC5mbG9vcih0aGlzLmJsdWUqMjU1KTsKLSAgICAgICAgICAgIHJhbmRvbUV4Y2Vw
dGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotCi0gICAgICAgIHJldHVybiAicmdiKCIr
IHIgKyIsIisgZyArIiwiKyBiICsiKSI7Ci0gICAgfQotfQotLyogRmFrZSBhIEZsb2cuKiBuYW1l
c3BhY2UgKi8KLWlmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsK
LWlmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2Vy
ID0ge307Ci0KLUZsb2cuUmF5VHJhY2VyLkxpZ2h0ID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cu
UmF5VHJhY2VyLkxpZ2h0LnByb3RvdHlwZSA9IHsKLSAgICBwb3NpdGlvbjogbnVsbCwKLSAgICBj
b2xvcjogbnVsbCwKLSAgICBpbnRlbnNpdHk6IDEwLjAsCi0KLSAgICBpbml0aWFsaXplIDogZnVu
Y3Rpb24ocG9zLCBjb2xvciwgaW50ZW5zaXR5KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICB0aGlzLnBvc2l0aW9uID0gcG9zOwotICAgICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yOwot
ICAgICAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSAoaW50ZW5zaXR5ID8gaW50ZW5zaXR5IDogMTAu
MCk7Ci0KLSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUp
IHsgfQotICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSAnTGlnaHQgWycgKyB0aGlzLnBvc2l0aW9uLngg
KyAnLCcgKyB0aGlzLnBvc2l0aW9uLnkgKyAnLCcgKyB0aGlzLnBvc2l0aW9uLnogKyAnXSc7Ci0g
ICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFj
ZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYo
dHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7
fTsKLQotRmxvZy5SYXlUcmFjZXIuVmVjdG9yID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5
VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUgPSB7Ci0gICAgeCA6IDAuMCwKLSAgICB5IDogMC4wLAot
ICAgIHogOiAwLjAsCi0KLSAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oeCwgeSwgeikgewotICAg
ICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy54ID0gKHggPyB4IDogMCk7Ci0gICAgICAgICAg
ICB0aGlzLnkgPSAoeSA/IHkgOiAwKTsKLSAgICAgICAgICAgIHRoaXMueiA9ICh6ID8geiA6IDAp
OwotICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9
Ci0gICAgfSwKLQotICAgIGNvcHk6IGZ1bmN0aW9uKHZlY3Rvcil7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICB0aGlzLnggPSB2ZWN0b3IueDsKLSAgICAgICAgICAgIHRoaXMueSA9IHZlY3Rv
ci55OwotICAgICAgICAgICAgdGhpcy56ID0gdmVjdG9yLno7Ci0gICAgICAgICAgICByYW5kb21F
eGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgbm9ybWFs
aXplIDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgbSA9IHRo
aXMubWFnbml0dWRlKCk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJh
Y2VyLlZlY3Rvcih0aGlzLnggLyBtLCB0aGlzLnkgLyBtLCB0aGlzLnogLyBtKTsKLSAgICAgICAg
ICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBtYWduaXR1ZGUgOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoKHRoaXMueCAqIHRoaXMu
eCkgKyAodGhpcy55ICogdGhpcy55KSArICh0aGlzLnogKiB0aGlzLnopKTsKLSAgICAgICAgfSBj
YXRjaChlKSAgeyB9Ci0gICAgfSwKLQotICAgIGNyb3NzIDogZnVuY3Rpb24odykgewotICAgICAg
ICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoCi0g
ICAgICAgICAgICAgICAgICAgIC10aGlzLnogKiB3LnkgKyB0aGlzLnkgKiB3LnosCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXMueiAqIHcueCAtIHRoaXMueCAqIHcueiwKLSAgICAgICAgICAgICAg
ICAgICAgLXRoaXMueSAqIHcueCArIHRoaXMueCAqIHcueSk7Ci0gICAgICAgIH0gY2F0Y2goZSkg
eyB9Ci0gICAgfSwKLQotICAgIGRvdCA6IGZ1bmN0aW9uKHcpIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLnggKiB3LnggKyB0aGlzLnkgKiB3LnkgKyB0aGlzLnogKiB3
Lno7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgfSwKLQotICAgIGFkZCA6IGZ1bmN0aW9u
KHYsIHcpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmxvZy5SYXlU
cmFjZXIuVmVjdG9yKHcueCArIHYueCwgdy55ICsgdi55LCB3LnogKyB2LnopOwotICAgICAgICB9
IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBzdWJ0cmFjdCA6IGZ1bmN0aW9uKHYsIHcpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmKCF3IHx8ICF2KSB0aHJvdyAnVmVjdG9ycyBt
dXN0IGJlIGRlZmluZWQgWycgKyB2ICsgJywnICsgdyArICddJzsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKHYueCAtIHcueCwgdi55IC0gdy55LCB2LnogLSB3
LnopOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBtdWx0aXBseVZlY3Rv
ciA6IGZ1bmN0aW9uKHYsIHcpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKHYueCAqIHcueCwgdi55ICogdy55LCB2LnogKiB3Lnop
OwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICBtdWx0aXBseVNjYWxhciA6
IGZ1bmN0aW9uKHYsIHcpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
RmxvZy5SYXlUcmFjZXIuVmVjdG9yKHYueCAqIHcsIHYueSAqIHcsIHYueiAqIHcpOwotICAgICAg
ICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiAnVmVjdG9yIFsnICsgdGhpcy54ICsg
JywnICsgdGhpcy55ICsgJywnICsgdGhpcy56ICsgJ10nOwotICAgICAgICB9IGNhdGNoKGUpIHsg
fQotICAgIH0KLX0KLS8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBlb2YoRmxv
ZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5SYXlUcmFj
ZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OwotCi1GbG9nLlJheVRyYWNl
ci5SYXkgPSBDbGFzcy5jcmVhdGUoKTsKLQotRmxvZy5SYXlUcmFjZXIuUmF5LnByb3RvdHlwZSA9
IHsKLSAgICBwb3NpdGlvbiA6IG51bGwsCi0gICAgZGlyZWN0aW9uIDogbnVsbCwKLSAgICBpbml0
aWFsaXplIDogZnVuY3Rpb24ocG9zLCBkaXIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
IHRoaXMucG9zaXRpb24gPSBwb3M7Ci0gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcjsK
LSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQot
ICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIHJldHVybiAnUmF5IFsnICsgdGhpcy5wb3NpdGlvbiArICcsJyArIHRoaXMuZGly
ZWN0aW9uICsgJ10nOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0KLX0KLS8qIEZha2Ug
YSBGbG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZh
ciBGbG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBG
bG9nLlJheVRyYWNlciA9IHt9OwotCi1GbG9nLlJheVRyYWNlci5TY2VuZSA9IENsYXNzLmNyZWF0
ZSgpOwotCi1GbG9nLlJheVRyYWNlci5TY2VuZS5wcm90b3R5cGUgPSB7Ci0gICAgY2FtZXJhIDog
bnVsbCwKLSAgICBzaGFwZXMgOiBbXSwKLSAgICBsaWdodHMgOiBbXSwKLSAgICBiYWNrZ3JvdW5k
IDogbnVsbCwKLQotICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgIHRoaXMuY2FtZXJhID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNhbWVyYSgKLSAg
ICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigwLDAsLTUpLAotICAg
ICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAsMCwxKSwKLSAgICAg
ICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigwLDEsMCkKLSAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHRoaXMuc2hhcGVzID0gbmV3IEFycmF5KCk7Ci0g
ICAgICAgICAgICB0aGlzLmxpZ2h0cyA9IG5ldyBBcnJheSgpOwotICAgICAgICAgICAgdGhpcy5i
YWNrZ3JvdW5kID0gbmV3IEZsb2cuUmF5VHJhY2VyLkJhY2tncm91bmQobmV3IEZsb2cuUmF5VHJh
Y2VyLkNvbG9yKDAsMCwwLjUpLCAwLjIpOwotCi0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24o
KTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5h
bWVzcGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9
OwotaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFj
ZXIgPSB7fTsKLWlmKHR5cGVvZihGbG9nLlJheVRyYWNlci5NYXRlcmlhbCkgPT0gJ3VuZGVmaW5l
ZCcpIEZsb2cuUmF5VHJhY2VyLk1hdGVyaWFsID0ge307Ci0KLUZsb2cuUmF5VHJhY2VyLk1hdGVy
aWFsLkJhc2VNYXRlcmlhbCA9IENsYXNzLmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5NYXRl
cmlhbC5CYXNlTWF0ZXJpYWwucHJvdG90eXBlID0gewotCi0gICAgZ2xvc3M6IDIuMCwgICAgICAg
ICAgICAgLy8gWzAuLi5pbmZpbml0eV0gMCA9IG1hdHQKLSAgICB0cmFuc3BhcmVuY3k6IDAuMCwg
ICAgICAvLyAwPW9wYXF1ZQotICAgIHJlZmxlY3Rpb246IDAuMCwgICAgICAgIC8vIFswLi4uaW5m
aW5pdHldIDAgPSBubyByZWZsZWN0aW9uCi0gICAgcmVmcmFjdGlvbjogMC41MCwKLSAgICBoYXNU
ZXh0dXJlOiBmYWxzZSwKLQotICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKLQotICAgIH0s
Ci0KLSAgICBnZXRDb2xvcjogZnVuY3Rpb24odSwgdil7Ci0KLSAgICB9LAotCi0gICAgd3JhcFVw
OiBmdW5jdGlvbih0KXsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHQgPSB0ICUgMi4wOwot
ICAgICAgICAgICAgaWYodCA8IC0xKSB0ICs9IDIuMDsKLSAgICAgICAgICAgIGlmKHQgPj0gMSkg
dCAtPSAyLjA7Ci0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRj
aChlKSB7IH0KLSAgICAgICAgcmV0dXJuIHQ7Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nIDogZnVu
Y3Rpb24gKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuICdNYXRlcmlhbCBb
Z2xvc3M9JyArIHRoaXMuZ2xvc3MgKyAnLCB0cmFuc3BhcmVuY3k9JyArIHRoaXMudHJhbnNwYXJl
bmN5ICsgJywgaGFzVGV4dHVyZT0nICsgdGhpcy5oYXNUZXh0dXJlICsnXSc7Ci0gICAgICAgIH0g
Y2F0Y2goZSkgeyB9Ci0gICAgfQotfQotLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KLWlm
KHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKLWlmKHR5cGVvZihG
bG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307Ci0KLUZs
b2cuUmF5VHJhY2VyLk1hdGVyaWFsLlNvbGlkID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5
VHJhY2VyLk1hdGVyaWFsLlNvbGlkLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQoCi0gICAgICAg
IG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5CYXNlTWF0ZXJpYWwoKSwgewotICAgICAgICAg
ICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKGNvbG9yLCByZWZsZWN0aW9uLCByZWZyYWN0aW9uLCB0
cmFuc3BhcmVuY3ksIGdsb3NzKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJl
ZmxlY3Rpb24gPSByZWZsZWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcGFy
ZW5jeSA9IHRyYW5zcGFyZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9zcyA9IGds
b3NzOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1RleHR1cmUgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRj
aChlKSB7IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdldENvbG9yOiBmdW5jdGlv
bih1LCB2KXsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5jb2xvcjsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdTb2xpZE1hdGVyaWFsIFtn
bG9zcz0nICsgdGhpcy5nbG9zcyArICcsIHRyYW5zcGFyZW5jeT0nICsgdGhpcy50cmFuc3BhcmVu
Y3kgKyAnLCBoYXNUZXh0dXJlPScgKyB0aGlzLmhhc1RleHR1cmUgKyddJzsKLSAgICAgICAgICAg
ICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICk7
Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1bmRl
ZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5k
ZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKLQotRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwu
Q2hlc3Nib2FyZCA9IENsYXNzLmNyZWF0ZSgpOwotCi1GbG9nLlJheVRyYWNlci5NYXRlcmlhbC5D
aGVzc2JvYXJkLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQoCi0gICAgICAgIG5ldyBGbG9nLlJh
eVRyYWNlci5NYXRlcmlhbC5CYXNlTWF0ZXJpYWwoKSwgewotICAgICAgICAgICAgY29sb3JFdmVu
OiBudWxsLAotICAgICAgICAgICAgY29sb3JPZGQ6IG51bGwsCi0gICAgICAgICAgICBkZW5zaXR5
OiAwLjUsCi0KLSAgICAgICAgICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihjb2xvckV2ZW4sIGNv
bG9yT2RkLCByZWZsZWN0aW9uLCB0cmFuc3BhcmVuY3ksIGdsb3NzLCBkZW5zaXR5KSB7Ci0gICAg
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvckV2ZW4gPSBj
b2xvckV2ZW47Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JPZGQgPSBjb2xvck9kZDsK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZsZWN0aW9uID0gcmVmbGVjdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kgPSB0cmFuc3BhcmVuY3k7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuZ2xvc3MgPSBnbG9zczsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5kZW5zaXR5ID0gZGVuc2l0eTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNUZXh0dXJl
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAg
ICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGdl
dENvbG9yOiBmdW5jdGlvbih1LCB2KXsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgdCA9IHRoaXMud3JhcFVwKHUgKiB0aGlzLmRlbnNpdHkpICogdGhpcy53
cmFwVXAodiAqIHRoaXMuZGVuc2l0eSk7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmRvbUV4Y2Vw
dGlvbigpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0KLSAgICAgICAgICAgICAg
ICBpZih0IDwgMC4wKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xvckV2ZW47
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5j
b2xvck9kZDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHRvU3RyaW5nIDogZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAnQ2hlc3NNYXRlcmlhbCBbZ2xvc3M9JyArIHRoaXMuZ2xvc3MgKyAnLCB0cmFuc3BhcmVuY3k9
JyArIHRoaXMudHJhbnNwYXJlbmN5ICsgJywgaGFzVGV4dHVyZT0nICsgdGhpcy5oYXNUZXh0dXJl
ICsnXSc7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotKTsKLS8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBlb2YoRmxv
ZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5SYXlUcmFj
ZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OwotaWYodHlwZW9mKEZsb2cu
UmF5VHJhY2VyLlNoYXBlKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIuU2hhcGUgPSB7
fTsKLQotRmxvZy5SYXlUcmFjZXIuU2hhcGUuU3BoZXJlID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZs
b2cuUmF5VHJhY2VyLlNoYXBlLlNwaGVyZS5wcm90b3R5cGUgPSB7Ci0gICAgaW5pdGlhbGl6ZSA6
IGZ1bmN0aW9uKHBvcywgcmFkaXVzLCBtYXRlcmlhbCkgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7Ci0gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0g
cG9zOwotICAgICAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsOwotCi0gICAgICAgICAg
ICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0g
ICAgaW50ZXJzZWN0OiBmdW5jdGlvbihyYXkpewotICAgICAgICB0cnkgewotICAgICAgICAgICAg
dmFyIGluZm8gPSBuZXcgRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0aW9uSW5mbygpOwotICAgICAg
ICAgICAgaW5mby5zaGFwZSA9IHRoaXM7Ci0KLSAgICAgICAgICAgIHZhciBkc3QgPSBGbG9nLlJh
eVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KHJheS5wb3NpdGlvbiwgdGhpcy5wb3Np
dGlvbik7Ci0KLSAgICAgICAgICAgIHZhciBCID0gZHN0LmRvdChyYXkuZGlyZWN0aW9uKTsKLSAg
ICAgICAgICAgIHZhciBDID0gZHN0LmRvdChkc3QpIC0gKHRoaXMucmFkaXVzICogdGhpcy5yYWRp
dXMpOwotICAgICAgICAgICAgdmFyIEQgPSAoQiAqIEIpIC0gQzsKLQotICAgICAgICAgICAgaWYo
RCA+IDApeyAvLyBpbnRlcnNlY3Rpb24hCi0gICAgICAgICAgICAgICAgaW5mby5pc0hpdCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgaW5mby5kaXN0YW5jZSA9ICgtQikgLSBNYXRoLnNxcnQoRCk7
Ci0gICAgICAgICAgICAgICAgaW5mby5wb3NpdGlvbiA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5w
cm90b3R5cGUuYWRkKAotICAgICAgICAgICAgICAgICAgICAgICAgcmF5LnBvc2l0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5tdWx0
aXBseVNjYWxhcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXkuZGlyZWN0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGlzdGFuY2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAg
ICAgIGluZm8ubm9ybWFsID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFj
dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucG9zaXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLnBvc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1h
bGl6ZSgpOwotCi0gICAgICAgICAgICAgICAgaW5mby5jb2xvciA9IHRoaXMubWF0ZXJpYWwuZ2V0
Q29sb3IoMCwwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5mby5p
c0hpdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByYW5kb21FeGNlcHRp
b24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAgcmV0dXJuIGluZm87Ci0gICAg
fSwKLQotICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgcmV0dXJuICdTcGhlcmUgW3Bvc2l0aW9uPScgKyB0aGlzLnBvc2l0aW9uICsgJywgcmFk
aXVzPScgKyB0aGlzLnJhZGl1cyArICddJzsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9
Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYodHlwZW9mKEZsb2cpID09ICd1
bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAn
dW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKLWlmKHR5cGVvZihGbG9nLlJheVRyYWNl
ci5TaGFwZSkgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyLlNoYXBlID0ge307Ci0KLUZs
b2cuUmF5VHJhY2VyLlNoYXBlLlBsYW5lID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJh
Y2VyLlNoYXBlLlBsYW5lLnByb3RvdHlwZSA9IHsKLSAgICBkOiAwLjAsCi0KLSAgICBpbml0aWFs
aXplIDogZnVuY3Rpb24ocG9zLCBkLCBtYXRlcmlhbCkgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKLSAgICAgICAgICAgIHRoaXMuZCA9IGQ7Ci0gICAg
ICAgICAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7Ci0gICAgICAgICAgICByYW5kb21FeGNl
cHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgaW50ZXJzZWN0
OiBmdW5jdGlvbihyYXkpewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIGluZm8gPSBu
ZXcgRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0aW9uSW5mbygpOwotCi0gICAgICAgICAgICB2YXIg
VmQgPSB0aGlzLnBvc2l0aW9uLmRvdChyYXkuZGlyZWN0aW9uKTsKLSAgICAgICAgICAgIGlmKFZk
ID09IDApIHJldHVybiBpbmZvOyAvLyBubyBpbnRlcnNlY3Rpb24KLQotICAgICAgICAgICAgdmFy
IHQgPSAtKHRoaXMucG9zaXRpb24uZG90KHJheS5wb3NpdGlvbikgKyB0aGlzLmQpIC8gVmQ7Ci0g
ICAgICAgICAgICBpZih0IDw9IDApIHJldHVybiBpbmZvOwotCi0gICAgICAgICAgICBpbmZvLnNo
YXBlID0gdGhpczsKLSAgICAgICAgICAgIGluZm8uaXNIaXQgPSB0cnVlOwotICAgICAgICAgICAg
aW5mby5wb3NpdGlvbiA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuYWRkKAotICAg
ICAgICAgICAgICAgICAgICByYXkucG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIEZsb2cu
UmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoCi0gICAgICAgICAgICAg
ICAgICAgICAgICByYXkuZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgdAotICAg
ICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAg
ICAgaW5mby5ub3JtYWwgPSB0aGlzLnBvc2l0aW9uOwotICAgICAgICAgICAgaW5mby5kaXN0YW5j
ZSA9IHQ7Ci0KLSAgICAgICAgICAgIGlmKHRoaXMubWF0ZXJpYWwuaGFzVGV4dHVyZSl7Ci0gICAg
ICAgICAgICAgICAgdmFyIHZVID0gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih0aGlzLnBvc2l0
aW9uLnksIHRoaXMucG9zaXRpb24ueiwgLXRoaXMucG9zaXRpb24ueCk7Ci0gICAgICAgICAgICAg
ICAgdmFyIHZWID0gdlUuY3Jvc3ModGhpcy5wb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgdmFy
IHUgPSBpbmZvLnBvc2l0aW9uLmRvdCh2VSk7Ci0gICAgICAgICAgICAgICAgdmFyIHYgPSBpbmZv
LnBvc2l0aW9uLmRvdCh2Vik7Ci0gICAgICAgICAgICAgICAgaW5mby5jb2xvciA9IHRoaXMubWF0
ZXJpYWwuZ2V0Q29sb3IodSx2KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaW5mby5jb2xvciA9IHRoaXMubWF0ZXJpYWwuZ2V0Q29sb3IoMCwwKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkg
eyB9Ci0gICAgICAgIHJldHVybiBpbmZvOwotICAgIH0sCi0KLSAgICB0b1N0cmluZyA6IGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiAnUGxhbmUgWycgKyB0
aGlzLnBvc2l0aW9uICsgJywgZD0nICsgdGhpcy5kICsgJ10nOwotICAgICAgICB9IGNhdGNoKGUp
IHsgfQotICAgIH0KLX0KLS8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBlb2Yo
RmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5SYXlU
cmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OwotCi1GbG9nLlJheVRy
YWNlci5JbnRlcnNlY3Rpb25JbmZvID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2Vy
LkludGVyc2VjdGlvbkluZm8ucHJvdG90eXBlID0gewotICAgIGlzSGl0OiBmYWxzZSwKLSAgICBo
aXRDb3VudDogMCwKLSAgICBzaGFwZTogbnVsbCwKLSAgICBwb3NpdGlvbjogbnVsbCwKLSAgICBu
b3JtYWw6IG51bGwsCi0gICAgY29sb3I6IG51bGwsCi0gICAgZGlzdGFuY2U6IG51bGwsCi0KLSAg
ICBpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0
aGlzLmNvbG9yID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsKLSAgICAgICAgICAg
IHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0sCi0KLSAg
ICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJl
dHVybiAnSW50ZXJzZWN0aW9uIFsnICsgdGhpcy5wb3NpdGlvbiArICddJzsKLSAgICAgICAgfSBj
YXRjaChlKSB7IH0KLSAgICB9Ci19Ci0vKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwotaWYo
dHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OwotaWYodHlwZW9mKEZs
b2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKLQotRmxv
Zy5SYXlUcmFjZXIuQ2FtZXJhID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2VyLkNh
bWVyYS5wcm90b3R5cGUgPSB7Ci0gICAgcG9zaXRpb246IG51bGwsCi0gICAgbG9va0F0OiBudWxs
LAotICAgIGVxdWF0b3I6IG51bGwsCi0gICAgdXA6IG51bGwsCi0gICAgc2NyZWVuOiBudWxsLAot
Ci0gICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHBvcywgbG9va0F0LCB1cCkgewotICAgICAgICB0
cnkgewotICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKLSAgICAgICAgICAgIHRoaXMu
bG9va0F0ID0gbG9va0F0OwotICAgICAgICAgICAgdGhpcy51cCA9IHVwOwotICAgICAgICAgICAg
dGhpcy5lcXVhdG9yID0gbG9va0F0Lm5vcm1hbGl6ZSgpLmNyb3NzKHRoaXMudXApOwotICAgICAg
ICAgICAgdGhpcy5zY3JlZW4gPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLmFkZCh0
aGlzLnBvc2l0aW9uLCB0aGlzLmxvb2tBdCk7Ci0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24o
KTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgZ2V0UmF5OiBmdW5jdGlv
bih2eCwgdnkpewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdmFyIHBvcyA9IEZsb2cuUmF5
VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCi0gICAgICAgICAgICAgICAgICAgIHRo
aXMuc2NyZWVuLAotICAgICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJv
dG90eXBlLnN1YnRyYWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIu
VmVjdG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcih0aGlzLmVxdWF0b3IsIHZ4KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUubXVsdGlw
bHlTY2FsYXIodGhpcy51cCwgdnkpCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBwb3MueSA9IHBvcy55ICogLTE7Ci0gICAgICAg
ICAgICB2YXIgZGlyID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgK
LSAgICAgICAgICAgICAgICAgICAgcG9zLAotICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0
aW9uCi0gICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICAgIHZhciByYXkgPSBuZXcg
RmxvZy5SYXlUcmFjZXIuUmF5KHBvcywgZGlyLm5vcm1hbGl6ZSgpKTsKLQotICAgICAgICAgICAg
cmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJldHVy
biByYXk7Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgewotICAgICAgICB0
cnkgewotICAgICAgICAgICAgcmV0dXJuICdSYXkgW10nOwotICAgICAgICB9IGNhdGNoKGUpIHsg
fQotICAgIH0KLX0KLS8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCi1pZih0eXBlb2YoRmxv
ZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307Ci1pZih0eXBlb2YoRmxvZy5SYXlUcmFj
ZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OwotCi1GbG9nLlJheVRyYWNl
ci5CYWNrZ3JvdW5kID0gQ2xhc3MuY3JlYXRlKCk7Ci0KLUZsb2cuUmF5VHJhY2VyLkJhY2tncm91
bmQucHJvdG90eXBlID0gewotICAgIGNvbG9yIDogbnVsbCwKLSAgICBhbWJpZW5jZSA6IDAuMCwK
LQotICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihjb2xvciwgYW1iaWVuY2UpIHsKLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjsKLSAgICAgICAgICAgIHRoaXMu
YW1iaWVuY2UgPSBhbWJpZW5jZTsKLSAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAg
ICAgICB9IGNhdGNoKGUpIHsgfQotICAgIH0KLX0KLS8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNl
ICovCi1pZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307Ci1pZih0
eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9
OwotCi1GbG9nLlJheVRyYWNlci5FbmdpbmUgPSBDbGFzcy5jcmVhdGUoKTsKLQotRmxvZy5SYXlU
cmFjZXIuRW5naW5lLnByb3RvdHlwZSA9IHsKLSAgICBjYW52YXM6IG51bGwsIC8qIDJkIGNvbnRl
eHQgd2UgY2FuIHJlbmRlciB0byAqLwotCi0gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9u
cyl7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuZXh0
ZW5kKHsKLSAgICAgICAgICAgICAgICBjYW52YXNIZWlnaHQ6IDEwMCwKLSAgICAgICAgICAgICAg
ICBjYW52YXNXaWR0aDogMTAwLAotICAgICAgICAgICAgICAgIHBpeGVsV2lkdGg6IDIsCi0gICAg
ICAgICAgICAgICAgcGl4ZWxIZWlnaHQ6IDIsCi0gICAgICAgICAgICAgICAgcmVuZGVyRGlmZnVz
ZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgcmVuZGVyU2hhZG93czogZmFsc2UsCi0gICAgICAg
ICAgICAgICAgcmVuZGVySGlnaGxpZ2h0czogZmFsc2UsCi0gICAgICAgICAgICAgICAgcmVuZGVy
UmVmbGVjdGlvbnM6IGZhbHNlLAotICAgICAgICAgICAgICAgIHJheURlcHRoOiAyCi0gICAgICAg
ICAgICB9LCBvcHRpb25zIHx8IHt9KTsKLQotICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNhbnZh
c0hlaWdodCAvPSB0aGlzLm9wdGlvbnMucGl4ZWxIZWlnaHQ7Ci0gICAgICAgICAgICB0aGlzLm9w
dGlvbnMuY2FudmFzV2lkdGggLz0gdGhpcy5vcHRpb25zLnBpeGVsV2lkdGg7Ci0KLSAgICAgICAg
ICAgIHJhbmRvbUV4Y2VwdGlvbigpOwotICAgICAgICB9IGNhdGNoKGUpIHsgfQotCi0gICAgICAg
IC8qIFRPRE86IGR5bmFtaWNhbGx5IGluY2x1ZGUgb3RoZXIgc2NyaXB0cyAqLwotICAgIH0sCi0K
LSAgICBzZXRQaXhlbDogZnVuY3Rpb24oeCwgeSwgY29sb3IpewotICAgICAgICB0cnkgewotICAg
ICAgICAgICAgdmFyIHB4VywgcHhIOwotICAgICAgICAgICAgcHhXID0gdGhpcy5vcHRpb25zLnBp
eGVsV2lkdGg7Ci0gICAgICAgICAgICBweEggPSB0aGlzLm9wdGlvbnMucGl4ZWxIZWlnaHQ7Ci0K
LSAgICAgICAgICAgIGlmICh0aGlzLmNhbnZhcykgewotICAgICAgICAgICAgICAgIHRoaXMuY2Fu
dmFzLmZpbGxTdHlsZSA9IGNvbG9yLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5j
YW52YXMuZmlsbFJlY3QgKHggKiBweFcsIHkgKiBweEgsIHB4VywgcHhIKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT09ICB5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoZWNrTnVtYmVyICs9IGNvbG9yLmJyaWdodG5lc3MoKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgLy8gcHJpbnQoeCAqIHB4VywgeSAqIHB4SCwgcHhXLCBweEgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAg
ICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgcmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHNj
ZW5lLCBjYW52YXMpewotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2hlY2tOdW1iZXIgPSAw
OwotICAgICAgICAgICAgLyogR2V0IGNhbnZhcyAqLwotICAgICAgICAgICAgaWYgKGNhbnZhcykg
ewotICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVs
bDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbnZhc0hlaWdodCA9IHRoaXMu
b3B0aW9ucy5jYW52YXNIZWlnaHQ7Ci0gICAgICAgICAgICB2YXIgY2FudmFzV2lkdGggPSB0aGlz
Lm9wdGlvbnMuY2FudmFzV2lkdGg7Ci0KLSAgICAgICAgICAgIGZvcih2YXIgeT0wOyB5IDwgY2Fu
dmFzSGVpZ2h0OyB5KyspewotICAgICAgICAgICAgICAgIGZvcih2YXIgeD0wOyB4IDwgY2FudmFz
V2lkdGg7IHgrKyl7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgeXAgPSB5ICogMS4wIC8gY2FudmFzSGVpZ2h0ICogMiAtIDE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgeHAgPSB4ICogMS4wIC8gY2FudmFzV2lkdGggKiAyIC0gMTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJheSA9IHNjZW5lLmNhbWVyYS5nZXRSYXko
eHAsIHlwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gdGhpcy5nZXRQ
aXhlbENvbG9yKHJheSwgc2NlbmUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNl
dFBpeGVsKHgsIHksIGNvbG9yKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tRXhj
ZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICBp
ZiAoY2hlY2tOdW1iZXIgIT09IDIzMjEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
U2NlbmUgcmVuZGVyZWQgaW5jb3JyZWN0bHkiKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBn
ZXRQaXhlbENvbG9yOiBmdW5jdGlvbihyYXksIHNjZW5lKXsKLSAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgIHZhciBpbmZvID0gdGhpcy50ZXN0SW50ZXJzZWN0aW9uKHJheSwgc2NlbmUsIG51bGwp
OwotICAgICAgICAgICAgaWYoaW5mby5pc0hpdCl7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbG9y
ID0gdGhpcy5yYXlUcmFjZShpbmZvLCByYXksIHNjZW5lLCAwKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY29sb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NlbmUuYmFj
a2dyb3VuZC5jb2xvcjsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICB9LAotCi0gICAgdGVz
dEludGVyc2VjdGlvbjogZnVuY3Rpb24ocmF5LCBzY2VuZSwgZXhjbHVkZSl7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICB2YXIgaGl0cyA9IDA7Ci0gICAgICAgICAgICB2YXIgYmVzdCA9IG5l
dyBGbG9nLlJheVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7Ci0gICAgICAgICAgICBiZXN0LmRp
c3RhbmNlID0gMjAwMDsKLQotICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8c2NlbmUuc2hhcGVz
Lmxlbmd0aDsgaSsrKXsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAg
ICB2YXIgc2hhcGUgPSBzY2VuZS5zaGFwZXNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYo
c2hhcGUgIT0gZXhjbHVkZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IHNo
YXBlLmludGVyc2VjdChyYXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5mby5pc0hp
dCAmJiBpbmZvLmRpc3RhbmNlID49IDAgJiYgaW5mby5kaXN0YW5jZSA8IGJlc3QuZGlzdGFuY2Up
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBpbmZvOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhpdHMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJhbmRvbUV4Y2VwdGlvbigp
OwotICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBiZXN0LmhpdENvdW50ID0gaGl0czsKLQotICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9u
KCk7Ci0gICAgICAgIH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJldHVybiBiZXN0OwotICAgIH0s
Ci0KLSAgICBnZXRSZWZsZWN0aW9uUmF5OiBmdW5jdGlvbihQLE4sVil7Ci0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICB2YXIgYzEgPSAtTi5kb3QoVik7Ci0gICAgICAgICAgICB2YXIgUjEgPSBG
bG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLmFkZCgKLSAgICAgICAgICAgICAgICAgICAg
RmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihOLCAyKmMxKSwK
LSAgICAgICAgICAgICAgICAgICAgVgotICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgICAg
ICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgfSBjYXRjaChlKSB7IH0KLSAgICAgICAg
cmV0dXJuIG5ldyBGbG9nLlJheVRyYWNlci5SYXkoUCwgUjEpOwotICAgIH0sCi0KLSAgICByYXlU
cmFjZTogZnVuY3Rpb24oaW5mbywgcmF5LCBzY2VuZSwgZGVwdGgpewotICAgICAgICAvLyBDYWxj
IGFtYmllbnQKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZhciBjb2xvciA9IEZsb2cuUmF5
VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihpbmZvLmNvbG9yLCBzY2VuZS5i
YWNrZ3JvdW5kLmFtYmllbmNlKTsKLSAgICAgICAgICAgIHZhciBvbGRDb2xvciA9IGNvbG9yOwot
ICAgICAgICAgICAgdmFyIHNoaW5pbmVzcyA9IE1hdGgucG93KDEwLCBpbmZvLnNoYXBlLm1hdGVy
aWFsLmdsb3NzICsgMSk7Ci0KLSAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPHNjZW5lLmxpZ2h0
cy5sZW5ndGg7IGkrKyl7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAg
ICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IENhbGMgZGlmZnVzZSBsaWdodGluZwotICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IEZsb2cu
UmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlnaHQucG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5wb3NpdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkubm9ybWFsaXplKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbmRlckRpZmZ1c2UpewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIEwgPSB2LmRvdChpbmZvLm5vcm1hbCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZihMID4gMC4wKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvciA9IEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5hZGQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBseSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmNvbG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnBy
b3RvdHlwZS5tdWx0aXBseVNjYWxhcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlnaHQuY29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByYW5kb21FeGNl
cHRpb24oKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQotCi0gICAgICAgICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGdyZWF0ZXIgdGhlIGRlcHRoIHRo
ZSBtb3JlIGFjY3VyYXRlIHRoZSBjb2xvdXJzLCBidXQKLSAgICAgICAgICAgICAgICAgICAgLy8g
dGhpcyBpcyBleHBvbmVudGlhbGx5ICghKSBleHBlbnNpdmUKLSAgICAgICAgICAgICAgICAgICAg
aWYoZGVwdGggPD0gdGhpcy5vcHRpb25zLnJheURlcHRoKXsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNhbGN1bGF0ZSByZWZsZWN0aW9uIHJheQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYodGhpcy5vcHRpb25zLnJlbmRlclJlZmxlY3Rpb25zICYmIGluZm8uc2hhcGUubWF0ZXJpYWwu
cmVmbGVjdGlvbiA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHJlZmxlY3Rpb25SYXkgPSB0aGlzLmdldFJlZmxlY3Rpb25SYXko
aW5mby5wb3NpdGlvbiwgaW5mby5ub3JtYWwsIHJheS5kaXJlY3Rpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciByZWZsID0gdGhpcy50ZXN0SW50ZXJzZWN0aW9uKHJlZmxlY3Rp
b25SYXksIHNjZW5lLCBpbmZvLnNoYXBlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWZsLmlzSGl0ICYmIHJlZmwuZGlzdGFuY2UgPiAwKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVmbC5jb2xvciA9IHRoaXMucmF5VHJhY2UocmVmbCwgcmVmbGVjdGlv
blJheSwgc2NlbmUsIGRlcHRoICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbC5jb2xvciA9IHNjZW5l
LmJhY2tncm91bmQuY29sb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90
b3R5cGUuYmxlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmwuY29sb3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnNoYXBlLm1hdGVyaWFsLnJlZmxlY3Rp
b24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZnJhY3Rpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE8gKi8KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9
ICBjYXRjaChlKSB7IH0KLQotICAgICAgICAgICAgICAgIC8qIFJlbmRlciBzaGFkb3dzIGFuZCBo
aWdobGlnaHRzICovCi0KLSAgICAgICAgICAgICAgICB2YXIgc2hhZG93SW5mbyA9IG5ldyBGbG9n
LlJheVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7Ci0KLSAgICAgICAgICAgICAgICBpZih0aGlz
Lm9wdGlvbnMucmVuZGVyU2hhZG93cyl7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkb3dS
YXkgPSBuZXcgRmxvZy5SYXlUcmFjZXIuUmF5KGluZm8ucG9zaXRpb24sIHYpOwotCi0gICAgICAg
ICAgICAgICAgICAgIHNoYWRvd0luZm8gPSB0aGlzLnRlc3RJbnRlcnNlY3Rpb24oc2hhZG93UmF5
LCBzY2VuZSwgaW5mby5zaGFwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKHNoYWRvd0luZm8u
aXNIaXQgJiYgc2hhZG93SW5mby5zaGFwZSAhPSBpbmZvLnNoYXBlIC8qJiYgc2hhZG93SW5mby5z
aGFwZS50eXBlICE9ICdQTEFORScqLyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdkEg
PSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoY29sb3IsIDAu
NSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZEIgPSAoMC41ICogTWF0aC5wb3coc2hh
ZG93SW5mby5zaGFwZS5tYXRlcmlhbC50cmFuc3BhcmVuY3ksIDAuNSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkU2Nh
bGFyKHZBLGRCKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFBob25nIHNwZWN1
bGFyIGhpZ2hsaWdodHMKLSAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbmRl
ckhpZ2hsaWdodHMgJiYgIXNoYWRvd0luZm8uaXNIaXQgJiYgaW5mby5zaGFwZS5tYXRlcmlhbC5n
bG9zcyA+IDApewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEx2ID0gRmxvZy5SYXlUcmFj
ZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5zaGFwZS5wb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlnaHQucG9zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5ub3Jt
YWxpemUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEUgPSBGbG9nLlJheVRyYWNl
ci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY2VuZS5jYW1lcmEucG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm8uc2hhcGUucG9zaXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KS5ub3JtYWxpemUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEggPSBGbG9nLlJh
eVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMdgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1hbGl6ZSgpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZ2xvc3NXZWlnaHQgPSBNYXRoLnBvdyhNYXRoLm1heChpbmZvLm5vcm1h
bC5kb3QoSCksIDApLCBzaGluaW5lc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Ig
PSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2Fs
YXIobGlnaHQuY29sb3IsIGdsb3NzV2VpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByYW5kb21FeGNlcHRpb24oKTsKLSAg
ICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y29sb3IubGltaXQoKTsKLQotICAgICAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0gICAgICAg
IH0gY2F0Y2goZSkgeyB9Ci0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICB9Ci19OwotCi0KLWZ1
bmN0aW9uIHJlbmRlclNjZW5lKCl7Ci0gICAgdHJ5IHsKLSAgICAgICAgdmFyIHNjZW5lID0gbmV3
IEZsb2cuUmF5VHJhY2VyLlNjZW5lKCk7Ci0KLSAgICAgICAgc2NlbmUuY2FtZXJhID0gbmV3IEZs
b2cuUmF5VHJhY2VyLkNhbWVyYSgKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIu
VmVjdG9yKDAsIDAsIC0xNSksCi0gICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZl
Y3RvcigtMC4yLCAwLCA1KSwKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVj
dG9yKDAsIDEsIDApCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICBzY2VuZS5iYWNrZ3Jv
dW5kID0gbmV3IEZsb2cuUmF5VHJhY2VyLkJhY2tncm91bmQoCi0gICAgICAgICAgICAgICAgbmV3
IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAuNSwgMC41LCAwLjUpLAotICAgICAgICAgICAgICAgIDAu
NAotICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgdmFyIHNwaGVyZSA9IG5ldyBGbG9nLlJh
eVRyYWNlci5TaGFwZS5TcGhlcmUoCi0gICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2Vy
LlZlY3RvcigtMS41LCAxLjUsIDIpLAotICAgICAgICAgICAgICAgIDEuNSwKLSAgICAgICAgICAg
ICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuU29saWQoCi0gICAgICAgICAgICAgICAg
ICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAuNSwwLjUpLAotICAgICAgICAgICAgICAg
ICAgICAwLjMsCi0gICAgICAgICAgICAgICAgICAgIDAuMCwKLSAgICAgICAgICAgICAgICAgICAg
MC4wLAotICAgICAgICAgICAgICAgICAgICAyLjAKLSAgICAgICAgICAgICAgICAgICAgKQotICAg
ICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgdmFyIHNwaGVyZTEgPSBuZXcgRmxvZy5SYXlUcmFj
ZXIuU2hhcGUuU3BoZXJlKAotICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0
b3IoMSwgMC4yNSwgMSksCi0gICAgICAgICAgICAgICAgMC41LAotICAgICAgICAgICAgICAgIG5l
dyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZCgKLSAgICAgICAgICAgICAgICAgICAgbmV3
IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAuOSwwLjksMC45KSwKLSAgICAgICAgICAgICAgICAgICAg
MC4xLAotICAgICAgICAgICAgICAgICAgICAwLjAsCi0gICAgICAgICAgICAgICAgICAgIDAuMCwK
LSAgICAgICAgICAgICAgICAgICAgMS41Ci0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg
ICAgICAgICApOwotCi0gICAgICAgIHZhciBwbGFuZSA9IG5ldyBGbG9nLlJheVRyYWNlci5TaGFw
ZS5QbGFuZSgKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAuMSwg
MC45LCAtMC41KS5ub3JtYWxpemUoKSwKLSAgICAgICAgICAgICAgICAxLjIsCi0gICAgICAgICAg
ICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLk1hdGVyaWFsLkNoZXNzYm9hcmQoCi0gICAgICAgICAg
ICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigxLDEsMSksCi0gICAgICAgICAgICAg
ICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCksCi0gICAgICAgICAgICAgICAg
ICAgIDAuMiwKLSAgICAgICAgICAgICAgICAgICAgMC4wLAotICAgICAgICAgICAgICAgICAgICAx
LjAsCi0gICAgICAgICAgICAgICAgICAgIDAuNwotICAgICAgICAgICAgICAgICAgICApCi0gICAg
ICAgICAgICAgICAgKTsKLQotICAgICAgICBzY2VuZS5zaGFwZXMucHVzaChwbGFuZSk7Ci0gICAg
ICAgIHNjZW5lLnNoYXBlcy5wdXNoKHNwaGVyZSk7Ci0gICAgICAgIHNjZW5lLnNoYXBlcy5wdXNo
KHNwaGVyZTEpOwotCi0gICAgICAgIHZhciBsaWdodCA9IG5ldyBGbG9nLlJheVRyYWNlci5MaWdo
dCgKLSAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDUsIDEwLCAtMSks
Ci0gICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAuOCwgMC44LCAwLjgp
Ci0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICB2YXIgbGlnaHQxID0gbmV3IEZsb2cuUmF5
VHJhY2VyLkxpZ2h0KAotICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3Io
LTMsIDUsIC0xNSksCi0gICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAu
OCwgMC44LCAwLjgpLAotICAgICAgICAgICAgICAgIDEwMAotICAgICAgICAgICAgICAgICk7Ci0K
LSAgICAgICAgc2NlbmUubGlnaHRzLnB1c2gobGlnaHQpOwotICAgICAgICBzY2VuZS5saWdodHMu
cHVzaChsaWdodDEpOwotCi0gICAgICAgIHZhciBpbWFnZVdpZHRoID0gMTAwOyAvLyAkRignaW1h
Z2VXaWR0aCcpOwotICAgICAgICB2YXIgaW1hZ2VIZWlnaHQgPSAxMDA7IC8vICRGKCdpbWFnZUhl
aWdodCcpOwotICAgICAgICB2YXIgcGl4ZWxTaXplID0gIjUsNSIuc3BsaXQoJywnKTsgLy8gICRG
KCdwaXhlbFNpemUnKS5zcGxpdCgnLCcpOwotICAgICAgICB2YXIgcmVuZGVyRGlmZnVzZSA9IHRy
dWU7IC8vICRGKCdyZW5kZXJEaWZmdXNlJyk7Ci0gICAgICAgIHZhciByZW5kZXJTaGFkb3dzID0g
dHJ1ZTsgLy8gJEYoJ3JlbmRlclNoYWRvd3MnKTsKLSAgICAgICAgdmFyIHJlbmRlckhpZ2hsaWdo
dHMgPSB0cnVlOyAvLyAkRigncmVuZGVySGlnaGxpZ2h0cycpOwotICAgICAgICB2YXIgcmVuZGVy
UmVmbGVjdGlvbnMgPSB0cnVlOyAvLyAkRigncmVuZGVyUmVmbGVjdGlvbnMnKTsKLSAgICAgICAg
dmFyIHJheURlcHRoID0gMjsvLyRGKCdyYXlEZXB0aCcpOwotCi0gICAgICAgIHZhciByYXl0cmFj
ZXIgPSBuZXcgRmxvZy5SYXlUcmFjZXIuRW5naW5lKAotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FudmFzV2lkdGg6IGltYWdlV2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgIGNhbnZhc0hlaWdodDogaW1hZ2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgIHBpeGVs
V2lkdGg6IHBpeGVsU2l6ZVswXSwKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxIZWlnaHQ6IHBp
eGVsU2l6ZVsxXSwKLSAgICAgICAgICAgICAgICAgICAgInJlbmRlckRpZmZ1c2UiOiByZW5kZXJE
aWZmdXNlLAotICAgICAgICAgICAgICAgICAgICAicmVuZGVySGlnaGxpZ2h0cyI6IHJlbmRlckhp
Z2hsaWdodHMsCi0gICAgICAgICAgICAgICAgICAgICJyZW5kZXJTaGFkb3dzIjogcmVuZGVyU2hh
ZG93cywKLSAgICAgICAgICAgICAgICAgICAgInJlbmRlclJlZmxlY3Rpb25zIjogcmVuZGVyUmVm
bGVjdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICJyYXlEZXB0aCI6IHJheURlcHRoCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgcmF5dHJhY2VyLnJl
bmRlclNjZW5lKHNjZW5lLCBudWxsLCAwKTsKLSAgICAgICAgcmFuZG9tRXhjZXB0aW9uKCk7Ci0g
ICAgfSBjYXRjaChlKSB7IH0KLX0KLQotZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAg
cmVuZGVyU2NlbmUoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvdjgtcmF5
dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy92OC1yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRjaC1leHBlY3RlZC50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMDcwM2ZkYzRlYmZjNWNjYmZiNTcwZDQ1OTk3
YTRkMzZmOGZhYzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy92OC1yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1jYXRj
aC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1KU1JlZ3Jlc3Mv
djgtcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2gKLQotT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgotCi0KLVBBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgotUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvdjgtcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2guaHRtbCBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvdjgtcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2guaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxNDAzZWZjNzM2MjUxZTJhZWNmYWM5ODUwZjc3
MmMwZDQ2NjM5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Y4LXJheXRyYWNlLXdpdGgtZW1wdHktdHJ5LWNhdGNo
Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy92OC1yYXl0cmFjZS13aXRoLWVtcHR5LXRyeS1j
YXRjaC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cG9zdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3Y4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvdjgtcmF5dHJhY2Utd2l0aC10cnktY2F0Y2gtZXhwZWN0
ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGM3M2FiN2RlYjQ3OTY3MmQ5
NzM2YTcwMDdjMjhjMTExOTM3ODFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvdjgtcmF5dHJhY2Utd2l0aC10cnkt
Y2F0Y2gtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotSlNSZWdy
ZXNzL3Y4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KLQotCi1QQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3Y4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3Y4LXJheXRyYWNlLXdpdGgtdHJ5LWNhdGNoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZmYjM0OTYzY2YxOGJmM2NmYTMyMzczMzBlOTI2NTkwYjc3NmM5MDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy92OC1yYXl0cmFjZS13aXRoLXRyeS1jYXRjaC5odG1sCisrKyAvZGV2L251bGwK
QEAgLTEsMTIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvdjgtcmF5dHJhY2Utd2l0aC10cnktY2F0Y2guanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>