<?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>189210</bug_id>
          
          <creation_ts>2018-08-31 14:20:18 -0700</creation_ts>
          <short_desc>[WHLSL] Allow uniform buffers to be used in the interpreter</short_desc>
          <delta_ts>2018-10-13 15:02:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=177093</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>189986</dependson>
          <blocked>176199</blocked>
    
    <blocked>189202</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>rmorisset</cc>
    
    <cc>tdenney</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1455856</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-08-31 14:20:18 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459208</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-12 18:50:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/44402996&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462358</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-22 04:03:15 -0700</bug_when>
    <thetext>We also have to figure out how to do things like

device atomic_uint[] x : register(u0);
InterlockedAdd(&amp;x[0], 1, null);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462449</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-22 16:52:12 -0700</bug_when>
    <thetext>*** Bug 177093 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462655</commentid>
    <comment_count>4</comment_count>
      <attachid>350627</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-24 02:16:20 -0700</bug_when>
    <thetext>Created attachment 350627
Buffers already work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462656</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-24 02:17:43 -0700</bug_when>
    <thetext>The only things remaining are just to make sure you can&apos;t write to the constant address space, and make sure pointers the standard library functions work with all the appropriate address spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462657</commentid>
    <comment_count>6</comment_count>
      <attachid>350627</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-24 02:18:15 -0700</bug_when>
    <thetext>Comment on attachment 350627
Buffers already work

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

&gt; Tools/WebGPUShadingLanguageRI/Test.js:809
&gt; +tests.threadArrayLoad = function()

Poorly named</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463080</commentid>
    <comment_count>7</comment_count>
      <attachid>350731</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-24 20:23:42 -0700</bug_when>
    <thetext>Created attachment 350731
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463358</commentid>
    <comment_count>8</comment_count>
      <attachid>350796</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-25 15:00:22 -0700</bug_when>
    <thetext>Created attachment 350796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463528</commentid>
    <comment_count>9</comment_count>
      <attachid>350849</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-25 22:37:48 -0700</bug_when>
    <thetext>Created attachment 350849
Depends on pointer equality</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464684</commentid>
    <comment_count>10</comment_count>
      <attachid>350849</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-28 19:28:05 -0700</bug_when>
    <thetext>Comment on attachment 350849
Depends on pointer equality

Clearing flags on attachment: 350849

Committed r236635: &lt;https://trac.webkit.org/changeset/236635&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464685</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-28 19:28:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464725</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-28 23:55:17 -0700</bug_when>
    <thetext>Committed r236639: &lt;https://trac.webkit.org/changeset/236639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468869</commentid>
    <comment_count>13</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 15:02:27 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/46</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350627</attachid>
            <date>2018-09-24 02:16:20 -0700</date>
            <delta_ts>2018-09-24 20:23:41 -0700</delta_ts>
            <desc>Buffers already work</desc>
            <filename>bug-189210-20180924021619.patch</filename>
            <type>text/plain</type>
            <size>6656</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MzkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTY2YzBjMDU1YjcxYmVhNjM2YWZlYTVlMDE2YjAzODUw
ODg5OTM3MC4uZDAzZmM2N2I1OGVmY2Q3M2M1MGFjNjhjMGM4OTI0Y2U2ZGZlY2E2NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDE4LTA5LTI0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dITFNMXSBBbGxvdyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmUgdXNlZCBpbiB0
aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4OTIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qczoKKyAgICAgICAgKHRlc3Rz
LnRocmVhZEFycmF5UmVmTG9hZCk6CisgICAgICAgICh0ZXN0cy50aHJlYWRBcnJheVJlZkxvYWRJ
bnRMaXRlcmFsKToKKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5UmVmTG9hZCk6CisgICAgICAg
ICh0ZXN0cy50aHJlYWRBcnJheVJlZlN0b3JlKToKKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5
UmVmU3RvcmUpOgorICAgICAgICAodGVzdHMuZGV2aWNlQXJyYXlSZWZTdG9yZUludExpdGVyYWwp
OgorICAgICAgICAodGVzdHMudGhyZWFkUG9pbnRlckxvYWQpOgorICAgICAgICAodGVzdHMudGhy
ZWFkUG9pbnRlclN0b3JlKToKKyAgICAgICAgKHRlc3RzLmRldmljZVBvaW50ZXJMb2FkKToKKyAg
ICAgICAgKHRlc3RzLmRldmljZVBvaW50ZXJTdG9yZSk6CisgICAgICAgICh0ZXN0cy50aHJlYWRB
cnJheUxvYWQpOgorICAgICAgICAodGVzdHMudGhyZWFkQXJyYXlMb2FkSW50TGl0ZXJhbCk6IERl
bGV0ZWQuCisgICAgICAgICh0ZXN0cy5kZXZpY2VBcnJheUxvYWQpOiBEZWxldGVkLgorICAgICAg
ICAodGVzdHMudGhyZWFkQXJyYXlTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgICh0ZXN0cy5kZXZp
Y2VBcnJheVN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5U3RvcmVJ
bnRMaXRlcmFsKTogRGVsZXRlZC4KKwogMjAxOC0wOS0yMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSFNMXSBOZWVkIGdyYW1tYXIgdG8gc3Bl
Y2lmeSBrZXJuZWwgZ3JvdXAgc2l6ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMK
aW5kZXggZTkyMzU0YjgyZTE0NWMwY2E0Yzc0MzE1ZTBlOTc0MGJjMjE2NmY5My4uOWY4MjM4NTIz
ZDM4NDc0ZjU4NjYwM2M5MjAxNmMxZjc1MDAzZWEyZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UZXN0LmpzCkBAIC02MzUsNyArNjM1LDcgQEAgdGVzdHMuc2ltcGxlTWFrZVB0ciA9IGZ1
bmN0aW9uKCkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCA0MiBidXQgZ290OiAi
ICsgdmFsdWUpOwogfQogCi10ZXN0cy50aHJlYWRBcnJheUxvYWQgPSBmdW5jdGlvbigpCit0ZXN0
cy50aHJlYWRBcnJheVJlZkxvYWQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAogICAgICAgICB0ZXN0IGludCBmb28odGhyZWFkIGludFtdIGFycmF5KQpAQCAtNjQ5
LDcgKzY0OSw3IEBAIHRlc3RzLnRocmVhZEFycmF5TG9hZCA9IGZ1bmN0aW9uKCkKICAgICBjaGVj
a0ludChwcm9ncmFtLCByZXN1bHQsIDg5KTsKIH0KIAotdGVzdHMudGhyZWFkQXJyYXlMb2FkSW50
TGl0ZXJhbCA9IGZ1bmN0aW9uKCkKK3Rlc3RzLnRocmVhZEFycmF5UmVmTG9hZEludExpdGVyYWwg
PSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAgICAgICB0ZXN0
IGludCBmb28odGhyZWFkIGludFtdIGFycmF5KQpAQCAtNjYzLDcgKzY2Myw3IEBAIHRlc3RzLnRo
cmVhZEFycmF5TG9hZEludExpdGVyYWwgPSBmdW5jdGlvbigpCiAgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgcmVzdWx0LCA4OSk7CiB9CiAKLXRlc3RzLmRldmljZUFycmF5TG9hZCA9IGZ1bmN0aW9uKCkK
K3Rlc3RzLmRldmljZUFycmF5UmVmTG9hZCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3Jh
bSA9IGRvUHJlcChgCiAgICAgICAgIHRlc3QgaW50IGZvbyhkZXZpY2UgaW50W10gYXJyYXkpCkBA
IC02NzcsNyArNjc3LDcgQEAgdGVzdHMuZGV2aWNlQXJyYXlMb2FkID0gZnVuY3Rpb24oKQogICAg
IGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkpOwogfQogCi10ZXN0cy50aHJlYWRBcnJheVN0
b3JlID0gZnVuY3Rpb24oKQordGVzdHMudGhyZWFkQXJyYXlSZWZTdG9yZSA9IGZ1bmN0aW9uKCkK
IHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCiAgICAgICAgIHRlc3Qgdm9pZCBmb28odGhy
ZWFkIGludFtdIGFycmF5LCBpbnQgdmFsdWUpCkBAIC02OTgsNyArNjk4LDcgQEAgdGVzdHMudGhy
ZWFkQXJyYXlTdG9yZSA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
dmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQo
MCkpOwogfQogCi10ZXN0cy5kZXZpY2VBcnJheVN0b3JlID0gZnVuY3Rpb24oKQordGVzdHMuZGV2
aWNlQXJyYXlSZWZTdG9yZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCiAgICAgICAgIHRlc3Qgdm9pZCBmb28oZGV2aWNlIGludFtdIGFycmF5LCBpbnQgdmFsdWUp
CkBAIC03MTksNyArNzE5LDcgQEAgdGVzdHMuZGV2aWNlQXJyYXlTdG9yZSA9IGZ1bmN0aW9uKCkK
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChl
eHBlY3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQoMCkpOwogfQogCi10ZXN0cy5kZXZpY2VBcnJh
eVN0b3JlSW50TGl0ZXJhbCA9IGZ1bmN0aW9uKCkKK3Rlc3RzLmRldmljZUFycmF5UmVmU3RvcmVJ
bnRMaXRlcmFsID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKICAg
ICAgICAgdGVzdCB2b2lkIGZvbyhkZXZpY2UgaW50W10gYXJyYXksIGludCB2YWx1ZSkKQEAgLTc0
MCw2ICs3NDAsMTAyIEBAIHRlc3RzLmRldmljZUFycmF5U3RvcmVJbnRMaXRlcmFsID0gZnVuY3Rp
b24oKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBidWZm
ZXIgKGV4cGVjdGVkIC0xMTEpOiAiICsgYnVmZmVyLmdldCgwKSk7CiB9CiAKK3Rlc3RzLnRocmVh
ZFBvaW50ZXJMb2FkID0gZnVuY3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
KyAgICAgICAgdGVzdCBpbnQgZm9vKHRocmVhZCBpbnQqIHB0cikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICpwdHI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgYnVmZmVyID0g
bmV3IEVCdWZmZXIoMSk7CisgICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAgbGV0IHJlc3VsdCA9
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW1R5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBl
KGV4dGVybmFsT3JpZ2luLCAidGhyZWFkIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBF
UHRyKGJ1ZmZlciwgMCkpXSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7Cit9
CisKK3Rlc3RzLnRocmVhZFBvaW50ZXJTdG9yZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3Qgdm9pZCBmb28odGhyZWFkIGludCogcHRyLCBp
bnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwdHIgPSB2YWx1ZTsKKyAgICAgICAg
fQorICAgIGApOworICAgIGxldCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigxKTsKKyAgICBidWZmZXIu
c2V0KDAsIDg5KTsKKyAgICBsZXQgcG9pbnRlciA9IFR5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBl
KGV4dGVybmFsT3JpZ2luLCAidGhyZWFkIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBF
UHRyKGJ1ZmZlciwgMCkpOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbyIsIFtwb2ludGVyLCBtYWtlSW50KHByb2dyYW0sIDEyMyldKTsKKyAgICBpZiAoYnVmZmVy
LmdldCgwKSAhPSAxMjMpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3Jl
ZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgMTIzKTogIiArIGJ1ZmZlci5nZXQoMCkpOworICAgIHJl
c3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW3BvaW50ZXIsIG1ha2VJbnQocHJv
Z3JhbSwgMzIxKV0pOworICAgIGlmIChidWZmZXIuZ2V0KDApICE9IDMyMSkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAzMjEp
OiAiICsgYnVmZmVyLmdldCgwKSk7Cit9CisKK3Rlc3RzLmRldmljZVBvaW50ZXJMb2FkID0gZnVu
Y3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQg
Zm9vKGRldmljZSBpbnQqIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpwdHI7
CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMSk7Cisg
ICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAgbGV0IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW1R5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBlKGV4dGVybmFsT3JpZ2luLCAi
ZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBFUHRyKGJ1ZmZlciwgMCkpXSk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7Cit9CisKK3Rlc3RzLmRldmljZVBv
aW50ZXJTdG9yZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHRlc3Qgdm9pZCBmb28oZGV2aWNlIGludCogcHRyLCBpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpwdHIgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgIGApOworICAgIGxl
dCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigxKTsKKyAgICBidWZmZXIuc2V0KDAsIDg5KTsKKyAgICBs
ZXQgcG9pbnRlciA9IFR5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBlKGV4dGVybmFsT3JpZ2luLCAi
ZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBFUHRyKGJ1ZmZlciwgMCkpOwor
ICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtwb2ludGVyLCBt
YWtlSW50KHByb2dyYW0sIDEyMyldKTsKKyAgICBpZiAoYnVmZmVyLmdldCgwKSAhPSAxMjMpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhw
ZWN0ZWQgMTIzKTogIiArIGJ1ZmZlci5nZXQoMCkpOworICAgIHJlc3VsdCA9IGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW3BvaW50ZXIsIG1ha2VJbnQocHJvZ3JhbSwgMzIxKV0pOworICAg
IGlmIChidWZmZXIuZ2V0KDApICE9IDMyMSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
dmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAzMjEpOiAiICsgYnVmZmVyLmdldCgw
KSk7Cit9CisKK3Rlc3RzLnRocmVhZEFycmF5TG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHR5cGVkZWYgSW50QXJyYXkgPSBpbnRbM107Cisg
ICAgICAgIHRlc3QgaW50IGZvbyhJbnRBcnJheSBhKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYVswXTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0IGludCBiYXIoSW50QXJyYXkgYSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFbMV07CisgICAgICAgIH0KKyAgICAgICAg
dGVzdCBpbnQgYmF6KEludEFycmF5IGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
WzJdOworICAgICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDMp
OworICAgIGJ1ZmZlci5zZXQoMCwgODkpOworICAgIGJ1ZmZlci5zZXQoMSwgOTEpOworICAgIGJ1
ZmZlci5zZXQoMiwgMTAzKTsKKyAgICBsZXQgYXJyYXkgPSBuZXcgVHlwZWRWYWx1ZShwcm9ncmFt
LnR5cGVzLmdldCgiSW50QXJyYXkiKS50eXBlLCBuZXcgRVB0cihidWZmZXIsIDApKTsKKyAgICBs
ZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbYXJyYXldKTsKKyAgICBj
aGVja0ludChwcm9ncmFtLCByZXN1bHQsIDg5KTsKKyAgICByZXN1bHQgPSBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImJhciIsIFthcnJheV0pOworICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwg
OTEpOworICAgIHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW2FycmF5XSk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCAxMDMpOworfQorCiB0ZXN0cy50eXBlTWlz
bWF0Y2hSZXR1cm4gPSBmdW5jdGlvbigpCiB7CiAgICAgY2hlY2tGYWlsKAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350731</attachid>
            <date>2018-09-24 20:23:42 -0700</date>
            <delta_ts>2018-09-25 15:00:21 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-189210-20180924202341.patch</filename>
            <type>text/plain</type>
            <size>16489</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NDI4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzJhMDEwY2FmYjBiYzQ1NzJiYWE5MmM4MzY5NzkyZjRj
YzRhNjQ4Ny4uZGEyODE0NDFkMWEzNWE3MDMzYjJlMzRjMjZiN2IyYTIwOTNmZmUwYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5
IEBACisyMDE4LTA5LTI0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dITFNMXSBBbGxvdyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmUgdXNlZCBpbiB0
aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4OTIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qczoKKyAgICAgICAgKENo
ZWNrZXIucHJvdG90eXBlLnZpc2l0QXNzaWdubWVudCk6CisgICAgICAgIChDaGVja2VyLnByb3Rv
dHlwZS5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChDaGVja2VyLnBy
b3RvdHlwZS52aXNpdFRlcm5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzOgorICAgICAgICAoTm9ybWFs
VXNlUHJvcGVydHlSZXNvbHZlci5wcm90b3R5cGUudmlzaXRJbmRleEV4cHJlc3Npb24pOgorICAg
ICAgICAoTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlcik6CisgICAgICAgIChOb3JtYWxVc2VQcm9w
ZXJ0eVJlc29sdmVyLnByb3RvdHlwZS52aXNpdFRlcm5hcnlFeHByZXNzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qczoKKyAgICAgICAg
KFJld3JpdGVyLnByb3RvdHlwZS52aXNpdFRlcm5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXJuYXJ5RXhwcmVzc2lvbi5qczoKKyAgICAgICAgKFRl
cm5hcnlFeHByZXNzaW9uKToKKyAgICAgICAgKFRlcm5hcnlFeHByZXNzaW9uLnByb3RvdHlwZS5n
ZXQgaXNMVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoVGVybmFyeUV4cHJlc3Npb24ucHJvdG90
eXBlLnNldCBpc0xWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
anM6CisgICAgICAgICh0ZXN0cy50ZXJuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgICh0ZXN0cy50
aHJlYWRBcnJheVJlZkxvYWQpOgorICAgICAgICAodGVzdHMudGhyZWFkQXJyYXlSZWZMb2FkSW50
TGl0ZXJhbCk6CisgICAgICAgICh0ZXN0cy5kZXZpY2VBcnJheVJlZkxvYWQpOgorICAgICAgICAo
dGVzdHMudGhyZWFkQXJyYXlSZWZTdG9yZSk6CisgICAgICAgICh0ZXN0cy5kZXZpY2VBcnJheVJl
ZlN0b3JlKToKKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5UmVmU3RvcmVJbnRMaXRlcmFsKToK
KyAgICAgICAgKHRlc3RzLnRocmVhZFBvaW50ZXJMb2FkKToKKyAgICAgICAgKHRlc3RzLnRocmVh
ZFBvaW50ZXJTdG9yZSk6CisgICAgICAgICh0ZXN0cy5kZXZpY2VQb2ludGVyTG9hZCk6CisgICAg
ICAgICh0ZXN0cy5kZXZpY2VQb2ludGVyU3RvcmUpOgorICAgICAgICAodGVzdHMuYXJyYXlMb2Fk
KToKKyAgICAgICAgKHRlc3RzLmNvbnN0YW50QWRkcmVzc1NwYWNlKToKKyAgICAgICAgKHRlcm5h
cnlFeHByZXNzaW9uSXNMVmFsdWUubm9kZS5UZXJuYXJ5RXhwcmVzc2lvblZpc2l0b3IucHJvdG90
eXBlLnZpc2l0VGVybmFyeUV4cHJlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAodGVybmFyeUV4
cHJlc3Npb25Jc0xWYWx1ZS5ub2RlLlRlcm5hcnlFeHByZXNzaW9uVmlzaXRvcik6IERlbGV0ZWQu
CisgICAgICAgICh0ZXN0cy50ZXJuYXJ5RXhwcmVzc2lvbklzTFZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKHRlc3RzLnRocmVhZEFycmF5TG9hZCk6IERlbGV0ZWQuCisgICAgICAgICh0ZXN0cy50
aHJlYWRBcnJheUxvYWRJbnRMaXRlcmFsKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RzLmRldmlj
ZUFycmF5TG9hZCk6IERlbGV0ZWQuCisgICAgICAgICh0ZXN0cy50aHJlYWRBcnJheVN0b3JlKTog
RGVsZXRlZC4KKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5U3RvcmUpOiBEZWxldGVkLgorICAg
ICAgICAodGVzdHMuZGV2aWNlQXJyYXlTdG9yZUludExpdGVyYWwpOiBEZWxldGVkLgorCiAyMDE4
LTA5LTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkIGJ1aWxkIGZpeCBmb3IgSmhidWlsZC11c2luZyBwb3J0cy4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMgYi9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCmluZGV4IDVmNTk4YjJlZTc1MjJiYmM4MTA1NDVj
OTQ4ZDc3M2YyZTRmOTk0N2QuLmUwMTU2YTMwNThkODNjYTNjNTQ3Yjc3YTQ1YzFkY2YyNTczNjU4
MWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMK
KysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwpAQCAtMzM2LDYg
KzMzNiwxMCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIGxldCBs
aHNUeXBlID0gbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAgIGlmICghbm9kZS5saHMuaXNM
VmFsdWUpCiAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJMSFMgb2YgYXNzaWdubWVudCBpcyBub3QgYW4gTFZhbHVlOiAiICsgbm9kZS5s
aHMgKyBub2RlLmxocy5ub3RMVmFsdWVSZWFzb25TdHJpbmcpOworICAgICAgICBpZiAoIWlzQWRk
cmVzc1NwYWNlKG5vZGUubGhzLmFkZHJlc3NTcGFjZSkpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYCR7bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nfTogVW5rbm93biBhZGRyZXNzIHNwYWNl
IGluIG5vZGUgJHtub2RlLmxoc31gKTsKKyAgICAgICAgaWYgKG5vZGUubGhzLmFkZHJlc3NTcGFj
ZSA9PSAiY29uc3RhbnQiKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGFzc2lnbiB0byB2YXJpYWJsZSBpbiB0aGUgY29u
c3RhbnQgYWRkcmVzcyBzcGFjZS4iKTsKICAgICAgICAgbGV0IHJoc1R5cGUgPSBub2RlLnJocy52
aXNpdCh0aGlzKTsKICAgICAgICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhDb21taXQocmhzVHlw
ZSkpCiAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJUeXBlIG1pc21hdGNoIGluIGFzc2lnbm1lbnQ6ICIgKyBsaHNUeXBlICsgIiB2ZXJz
dXMgIiArIHJoc1R5cGUpOwpAQCAtNDk2LDcgKzUwMCw3IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5k
cyBWaXNpdG9yIHsKICAgICAgICAgICAgIG5vZGUubm90TFZhbHVlUmVhc29uID0gIkJhc2Ugb2Yg
cHJvcGVydHkgYWNjZXNzIGlzIG5laXRoZXIgYSBsdmFsdWUgbm9yIGFuIGFycmF5IHJlZmVyZW5j
ZSI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBub2RlLmlzTFZhbHVlID0gdHJ1ZTsK
LSAgICAgICAgICAgIG5vZGUuYWRkcmVzc1NwYWNlID0gbm9kZS5iYXNlLmlzTFZhbHVlID8gbm9k
ZS5iYXNlLmFkZHJlc3NTcGFjZSA6IGJhc2VUeXBlLmFkZHJlc3NTcGFjZTsKKyAgICAgICAgICAg
IG5vZGUuYWRkcmVzc1NwYWNlID0gbm9kZS5iYXNlLmlzTFZhbHVlID8gbm9kZS5iYXNlLmFkZHJl
c3NTcGFjZSA6IGJhc2VUeXBlLmFkZHJlc3NTcGFjZTsgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBz
ZWVtIHJpZ2h0LgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZS5yZXN1
bHRUeXBlOwpAQCAtNjg4LDcgKzY5Miw2IEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9y
IHsKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGVybmFyeSBleHByZXNzaW9uIGVsc2Ug
aGFzIG5vIHR5cGU6ICIgKyBub2RlLmVsc2VFeHByZXNzaW9uKTsKICAgICAgICAgaWYgKCFib2R5
VHlwZS5lcXVhbHNXaXRoQ29tbWl0KGVsc2VUeXBlKSkKICAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKCJCb2R5IGFuZCBlbHNlIGNsYXVzZSBvZiB0ZXJuYXJ5IHN0YXRlbWVudCBkb24n
dCBoYXZlIHRoZSBzYW1lIHR5cGU6ICIgKyBub2RlKTsKLSAgICAgICAgbm9kZS5pc0xWYWx1ZSA9
IG5vZGUuYm9keUV4cHJlc3Npb24uaXNMVmFsdWUgJiYgbm9kZS5lbHNlRXhwcmVzc2lvbi5pc0xW
YWx1ZTsKICAgICAgICAgcmV0dXJuIGJvZHlUeXBlOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIu
anMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyLmpzCmluZGV4IDlhZjE5ZWUwZTdlMmZhNGM1NmE0MGQwYmJiNTljZDdhOGM4YWZlYTEuLmRm
NDVkN2U0ZWIxMTQ5YmVmMzE1ODI5NjE1MTVmN2Y5NmY0ZTAxMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMKKysr
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZl
ci5qcwpAQCAtMzQsMTIgKzM0LDUgQEAgY2xhc3MgTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlciBl
eHRlbmRzIFJld3JpdGVyIHsKICAgICB7CiAgICAgICAgIHJldHVybiBzdXBlci52aXNpdEluZGV4
RXhwcmVzc2lvbihub2RlKS5yZXdyaXRlQWZ0ZXJDbG9uaW5nKCk7CiAgICAgfQotCi0gICAgdmlz
aXRUZXJuYXJ5RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHN1
cGVyLnZpc2l0VGVybmFyeUV4cHJlc3Npb24obm9kZSk7Ci0gICAgICAgIHJlc3VsdC5pc0xWYWx1
ZSA9IG5vZGUuaXNMVmFsdWU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQogfQogCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcyBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCmluZGV4IDI2N2U3YTMzMjM0
YWYzNzJmMWUxMzRlZTYzZjk2Y2IxYzdmNzgxNjMuLjg3ZmJkMDViMDExZWZjYmUyOWZlNDI3NTA3
MGM0OGM5YmUxNGI0MjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Jld3JpdGVyLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVy
LmpzCkBAIC0xNjgsNyArMTY4LDYgQEAgY2xhc3MgUmV3cml0ZXIgewogICAgIHZpc2l0VGVybmFy
eUV4cHJlc3Npb24obm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVybmFy
eUV4cHJlc3Npb24obm9kZS5vcmlnaW4sIG5vZGUucHJlZGljYXRlLnZpc2l0KHRoaXMpLCBub2Rl
LmJvZHlFeHByZXNzaW9uLnZpc2l0KHRoaXMpLCBub2RlLmVsc2VFeHByZXNzaW9uLnZpc2l0KHRo
aXMpKTsKLSAgICAgICAgcmVzdWx0LmlzTFZhbHVlID0gbm9kZS5pc0xWYWx1ZTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXJuYXJ5RXhwcmVzc2lvbi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlcm5hcnlFeHByZXNzaW9uLmpzCmluZGV4IGE2ZjVhMDAyMWM4OWI5YjQ4ZTU2
NjM5Y2E1OGYxZTUxOWYyNmY2OWEuLmZjYjMxZjMwMDVlNGNmOGUzNjc0Y2ExNWM4MTFlYjA0OGZh
Nzc4MDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlcm5hcnlF
eHByZXNzaW9uLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlcm5hcnlF
eHByZXNzaW9uLmpzCkBAIC0zMSwxNSArMzEsMTQgQEAgY2xhc3MgVGVybmFyeUV4cHJlc3Npb24g
ZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAgICAgdGhpcy5fcHJlZGljYXRlID0gcHJlZGljYXRl
OwogICAgICAgICB0aGlzLl9ib2R5RXhwcmVzc2lvbiA9IGJvZHlFeHByZXNzaW9uOwogICAgICAg
ICB0aGlzLl9lbHNlRXhwcmVzc2lvbiA9IGVsc2VFeHByZXNzaW9uOwotICAgICAgICB0aGlzLl9p
c0xWYWx1ZSA9IG51bGw7IC8vIFdlIHVzZSBudWxsIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qg
a25vdyB5ZXQuCiAgICAgfQogICAgIAogICAgIGdldCBwcmVkaWNhdGUoKSB7IHJldHVybiB0aGlz
Ll9wcmVkaWNhdGU7IH0KICAgICBnZXQgYm9keUV4cHJlc3Npb24oKSB7IHJldHVybiB0aGlzLl9i
b2R5RXhwcmVzc2lvbjsgfQogICAgIGdldCBlbHNlRXhwcmVzc2lvbigpIHsgcmV0dXJuIHRoaXMu
X2Vsc2VFeHByZXNzaW9uOyB9Ci0gICAgZ2V0IGlzTFZhbHVlKCkgeyByZXR1cm4gdGhpcy5faXNM
VmFsdWU7IH0KLSAgICBzZXQgaXNMVmFsdWUodmFsdWUpIHsgdGhpcy5faXNMVmFsdWUgPSB2YWx1
ZTsgfQotICAgIAorCisgICAgLy8gTmVpdGhlciBITFNMIG5vciBDIGhhdmUgdGVybmFyaWVzIGFi
bGUgdG8gYmUgTFZhbHVlcy4gRm9sbG93aW5nIHRoZWlyIGxlYWQgbWFrZXMgdGhlIHJlc3Qgb2Yg
dGhlIGNvbXBpbGVyIHNpbXBsZXIuCisKICAgICB0b1N0cmluZygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gIigiICsgdGhpcy5wcmVkaWNhdGUgKyAiKSA/ICgiICsgdGhpcy5ib2R5RXhwcmVzc2lv
biArICIpIDogKCIgKyB0aGlzLmVsc2VFeHByZXNzaW9uICsgIikiOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCmluZGV4IGEzMDBkYWNmNTE5YzM2MDQ5NzdiODE1Yzk0MWUz
ZWY4OGQ1OTJlY2IuLmVmMGZmNDA1Mjk0ZTZjNmFiNDU3NDkzMDYzMmYwOTAzMzQzODg2NDggMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAorKysgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKQEAgLTE2MSw3ICsxNjEsNyBA
QAogPHNjcmlwdD4KIGZ1bmN0aW9uIGRvVGVzdEluQnJvd3NlcigpCiB7Ci0gICAgdmFyIHRlc3Rl
ciA9IGRvVGVzdCgvLiovKTsKKyAgICB2YXIgdGVzdGVyID0gZG9UZXN0KC9jb25zdGFudEFkZHJl
c3NTcGFjZS8pOwogICAgIHZhciBsYXN0VGltZTsKICAgICBmdW5jdGlvbiBuZXh0KCkKICAgICB7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwppbmRleCBlOTIzNTRiODJlMTQ1YzBj
YTRjNzQzMTVlMGU5NzQwYmMyMTY2ZjkzLi41NDFlYTk5ZmMxYTY2N2U4YzlhOTVjMjVlZGJhNjIz
ZTYxYjY3NDRmIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
LmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKQEAgLTMzNCwz
MiArMzM0LDIzIEBAIHRlc3RzLnRlcm5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICByZXR1cm4geCA8IDMgPyA0IDogNTsKICAgICAgICAgfQogICAgICAgICB0ZXN0IGlu
dCBiYXIoaW50IHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gMTsKLSAgICAgICAg
ICAgIGludCB6ID0gMjsKLSAgICAgICAgICAgICh4IDwgMyA/IHkgOiB6KSA9IDc7Ci0gICAgICAg
ICAgICByZXR1cm4geTsKLSAgICAgICAgfQotICAgICAgICB0ZXN0IGludCBiYXooaW50IHgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB4IDwgMTAgPyAxMSA6IHggPCAxMiA/IDE0IDog
MTU7CiAgICAgICAgIH0KLSAgICAgICAgdGVzdCBpbnQgcXV1eChpbnQgeCkKKyAgICAgICAgdGVz
dCBpbnQgYmF6KGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gMyA8IDQgPyB4
IDogNTsKICAgICAgICAgfQogICAgIGApOwogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQocHJvZ3JhbSwgNzY3KV0pLCA1KTsKICAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KHBy
b2dyYW0sIDIpXSksIDQpOwotICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiYmFyIiwgW21ha2VJbnQocHJvZ3JhbSwgMildKSwgNyk7Ci0gICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUludChwcm9ncmFtLCA4KV0p
LCAxKTsKLSAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIs
IFttYWtlSW50KHByb2dyYW0sIDgpXSksIDExKTsKLSAgICBjaGVja0ludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50KHByb2dyYW0sIDkpXSksIDExKTsKLSAg
ICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50
KHByb2dyYW0sIDEwKV0pLCAxNCk7Ci0gICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJiYXoiLCBbbWFrZUludChwcm9ncmFtLCAxMSldKSwgMTQpOwotICAgIGNoZWNr
SW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW21ha2VJbnQocHJvZ3Jh
bSwgMTIpXSksIDE1KTsKLSAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImJheiIsIFttYWtlSW50KHByb2dyYW0sIDEzKV0pLCAxNSk7Ci0gICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJxdXV4IiwgW21ha2VJbnQocHJvZ3JhbSwgMTQp
XSksIDE0KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJh
ciIsIFttYWtlSW50KHByb2dyYW0sIDgpXSksIDExKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KHByb2dyYW0sIDkpXSksIDExKTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtl
SW50KHByb2dyYW0sIDEwKV0pLCAxNCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJiYXIiLCBbbWFrZUludChwcm9ncmFtLCAxMSldKSwgMTQpOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQocHJv
Z3JhbSwgMTIpXSksIDE1KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImJhciIsIFttYWtlSW50KHByb2dyYW0sIDEzKV0pLCAxNSk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXoiLCBbbWFrZUludChwcm9ncmFtLCAx
NCldKSwgMTQpOwogICAgIGNoZWNrRmFpbCgKICAgICAgICAgKCkgPT4gZG9QcmVwKGAKICAgICAg
ICAgICAgIGludCBmb28oKQpAQCAtMzg5LDI5ICszODAsNiBAQCB0ZXN0cy50ZXJuYXJ5RXhwcmVz
c2lvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJy
b3IpOwogfQogCi10ZXN0cy50ZXJuYXJ5RXhwcmVzc2lvbklzTFZhbHVlID0gZnVuY3Rpb24oKSB7
Ci0gICAgZnVuY3Rpb24gdGVybmFyeUV4cHJlc3Npb25Jc0xWYWx1ZShub2RlKQotICAgIHsKLSAg
ICAgICAgbGV0IGlzTFZhbHVlOwotICAgICAgICBjbGFzcyBUZXJuYXJ5RXhwcmVzc2lvblZpc2l0
b3IgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAgICAgICAgIHZpc2l0VGVybmFyeUV4cHJlc3Npb24o
bm9kZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpc0xWYWx1ZSA9IG5vZGUuaXNM
VmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZS52aXNpdChuZXcg
VGVybmFyeUV4cHJlc3Npb25WaXNpdG9yKCkpOwotICAgICAgICByZXR1cm4gaXNMVmFsdWU7Ci0g
ICAgfQotCi0gICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYGludCBmb28oKSB7IHJldHVybiAwIDwg
MSA/IDAgOiAxOyB9YCk7Ci0gICAgaWYgKHRlcm5hcnlFeHByZXNzaW9uSXNMVmFsdWUocHJvZ3Jh
bSkpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcihgci12YWx1ZSB0ZXJuYXJ5IGV4cHJlc3Npb24g
aW5jb3JyZWN0bHkgcGFyc2VkIGFzIGwtdmFsdWVgKTsKLQotICAgIHByb2dyYW0gPSBkb1ByZXAo
YHZvaWQgZm9vKCkgeyBpbnQgeDsgaW50IHk7ICgwIDwgMSA/IHggOiB5KSA9IDE7IH1gKTsKLSAg
ICBpZiAoIXRlcm5hcnlFeHByZXNzaW9uSXNMVmFsdWUocHJvZ3JhbSkpCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcihgbC12YWx1ZSB0ZXJuYXJ5IGV4cHJlc3Npb24gaW5jb3JyZWN0bHkgcGFyc2Vk
IGFzIHItdmFsdWVgKTsKLX0KLQogdGVzdHMubGl0ZXJhbEJvb2wgPSBmdW5jdGlvbigpIHsKICAg
ICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgidGVzdCBib29sIGZvbygpIHsgcmV0dXJuIHRydWU7IH0i
KTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSksIHRydWUpOwpAQCAtNjM1LDcgKzYwMyw3IEBAIHRlc3RzLnNpbXBsZU1ha2VQdHIgPSBmdW5j
dGlvbigpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgNDIgYnV0IGdvdDogIiAr
IHZhbHVlKTsKIH0KIAotdGVzdHMudGhyZWFkQXJyYXlMb2FkID0gZnVuY3Rpb24oKQordGVzdHMu
dGhyZWFkQXJyYXlSZWZMb2FkID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKICAgICAgICAgdGVzdCBpbnQgZm9vKHRocmVhZCBpbnRbXSBhcnJheSkKQEAgLTY0OSw3
ICs2MTcsNyBAQCB0ZXN0cy50aHJlYWRBcnJheUxvYWQgPSBmdW5jdGlvbigpCiAgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7CiB9CiAKLXRlc3RzLnRocmVhZEFycmF5TG9hZEludExp
dGVyYWwgPSBmdW5jdGlvbigpCit0ZXN0cy50aHJlYWRBcnJheVJlZkxvYWRJbnRMaXRlcmFsID0g
ZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKICAgICAgICAgdGVzdCBp
bnQgZm9vKHRocmVhZCBpbnRbXSBhcnJheSkKQEAgLTY2Myw3ICs2MzEsNyBAQCB0ZXN0cy50aHJl
YWRBcnJheUxvYWRJbnRMaXRlcmFsID0gZnVuY3Rpb24oKQogICAgIGNoZWNrSW50KHByb2dyYW0s
IHJlc3VsdCwgODkpOwogfQogCi10ZXN0cy5kZXZpY2VBcnJheUxvYWQgPSBmdW5jdGlvbigpCit0
ZXN0cy5kZXZpY2VBcnJheVJlZkxvYWQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0g
PSBkb1ByZXAoYAogICAgICAgICB0ZXN0IGludCBmb28oZGV2aWNlIGludFtdIGFycmF5KQpAQCAt
Njc3LDcgKzY0NSw3IEBAIHRlc3RzLmRldmljZUFycmF5TG9hZCA9IGZ1bmN0aW9uKCkKICAgICBj
aGVja0ludChwcm9ncmFtLCByZXN1bHQsIDg5KTsKIH0KIAotdGVzdHMudGhyZWFkQXJyYXlTdG9y
ZSA9IGZ1bmN0aW9uKCkKK3Rlc3RzLnRocmVhZEFycmF5UmVmU3RvcmUgPSBmdW5jdGlvbigpCiB7
CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAgICAgICB0ZXN0IHZvaWQgZm9vKHRocmVh
ZCBpbnRbXSBhcnJheSwgaW50IHZhbHVlKQpAQCAtNjk4LDcgKzY2Niw3IEBAIHRlc3RzLnRocmVh
ZEFycmF5U3RvcmUgPSBmdW5jdGlvbigpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZh
bHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgLTExMSk6ICIgKyBidWZmZXIuZ2V0KDAp
KTsKIH0KIAotdGVzdHMuZGV2aWNlQXJyYXlTdG9yZSA9IGZ1bmN0aW9uKCkKK3Rlc3RzLmRldmlj
ZUFycmF5UmVmU3RvcmUgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAogICAgICAgICB0ZXN0IHZvaWQgZm9vKGRldmljZSBpbnRbXSBhcnJheSwgaW50IHZhbHVlKQpA
QCAtNzE5LDcgKzY4Nyw3IEBAIHRlc3RzLmRldmljZUFycmF5U3RvcmUgPSBmdW5jdGlvbigpCiAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhw
ZWN0ZWQgLTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKIH0KIAotdGVzdHMuZGV2aWNlQXJyYXlT
dG9yZUludExpdGVyYWwgPSBmdW5jdGlvbigpCit0ZXN0cy5kZXZpY2VBcnJheVJlZlN0b3JlSW50
TGl0ZXJhbCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCiAgICAg
ICAgIHRlc3Qgdm9pZCBmb28oZGV2aWNlIGludFtdIGFycmF5LCBpbnQgdmFsdWUpCkBAIC03NDAs
NiArNzA4LDEwMiBAQCB0ZXN0cy5kZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbCA9IGZ1bmN0aW9u
KCkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVy
IChleHBlY3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQoMCkpOwogfQogCit0ZXN0cy50aHJlYWRQ
b2ludGVyTG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHRlc3QgaW50IGZvbyh0aHJlYWQgaW50KiBwdHIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcHRyOworICAgICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5l
dyBFQnVmZmVyKDEpOworICAgIGJ1ZmZlci5zZXQoMCwgODkpOworICAgIGxldCByZXN1bHQgPSBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShl
eHRlcm5hbE9yaWdpbiwgInRocmVhZCIsIHByb2dyYW0uaW50cmluc2ljcy5pbnQpLCBuZXcgRVB0
cihidWZmZXIsIDApKV0pOworICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkpOworfQor
CisgdGVzdHMudGhyZWFkUG9pbnRlclN0b3JlID0gZnVuY3Rpb24oKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCB2b2lkIGZvbyh0aHJlYWQgaW50KiBwdHIsIGlu
dCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgKnB0ciA9IHZhbHVlOworICAgICAgICB9
CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOworICAgIGJ1ZmZlci5z
ZXQoMCwgODkpOworICAgIGxldCBwb2ludGVyID0gVHlwZWRWYWx1ZS5ib3gobmV3IFB0clR5cGUo
ZXh0ZXJuYWxPcmlnaW4sICJ0aHJlYWQiLCBwcm9ncmFtLmludHJpbnNpY3MuaW50KSwgbmV3IEVQ
dHIoYnVmZmVyLCAwKSk7CisgICAgbGV0IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW3BvaW50ZXIsIG1ha2VJbnQocHJvZ3JhbSwgMTIzKV0pOworICAgIGlmIChidWZmZXIu
Z2V0KDApICE9IDEyMykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVk
IGludG8gYnVmZmVyIChleHBlY3RlZCAxMjMpOiAiICsgYnVmZmVyLmdldCgwKSk7CisgICAgcmVz
dWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbcG9pbnRlciwgbWFrZUludChwcm9n
cmFtLCAzMjEpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0gMzIxKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBidWZmZXIgKGV4cGVjdGVkIDMyMSk6
ICIgKyBidWZmZXIuZ2V0KDApKTsKK30KKworIHRlc3RzLmRldmljZVBvaW50ZXJMb2FkID0gZnVu
Y3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQg
Zm9vKGRldmljZSBpbnQqIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpwdHI7
CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMSk7Cisg
ICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAgbGV0IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW1R5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBlKGV4dGVybmFsT3JpZ2luLCAi
ZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBFUHRyKGJ1ZmZlciwgMCkpXSk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7Cit9CisKKyB0ZXN0cy5kZXZpY2VQ
b2ludGVyU3RvcmUgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAor
ICAgICAgICB0ZXN0IHZvaWQgZm9vKGRldmljZSBpbnQqIHB0ciwgaW50IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICAqcHRyID0gdmFsdWU7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBs
ZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMSk7CisgICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAg
bGV0IHBvaW50ZXIgPSBUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwg
ImRldmljZSIsIHByb2dyYW0uaW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZmZXIsIDApKTsK
KyAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbcG9pbnRlciwg
bWFrZUludChwcm9ncmFtLCAxMjMpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0gMTIzKQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBidWZmZXIgKGV4
cGVjdGVkIDEyMyk6ICIgKyBidWZmZXIuZ2V0KDApKTsKKyAgICByZXN1bHQgPSBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZvbyIsIFtwb2ludGVyLCBtYWtlSW50KHByb2dyYW0sIDMyMSldKTsKKyAg
ICBpZiAoYnVmZmVyLmdldCgwKSAhPSAzMjEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFk
IHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgMzIxKTogIiArIGJ1ZmZlci5nZXQo
MCkpOworfQorCit0ZXN0cy5hcnJheUxvYWQgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dy
YW0gPSBkb1ByZXAoYAorICAgICAgICB0eXBlZGVmIEludEFycmF5ID0gaW50WzNdOworICAgICAg
ICB0ZXN0IGludCBmb28oSW50QXJyYXkgYSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFbMF07CisgICAgICAgIH0KKyAgICAgICAgdGVzdCBpbnQgYmFyKEludEFycmF5IGEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhWzFdOworICAgICAgICB9CisgICAgICAgIHRlc3Qg
aW50IGJheihJbnRBcnJheSBhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYVsyXTsK
KyAgICAgICAgfQorICAgIGApOworICAgIGxldCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigzKTsKKyAg
ICBidWZmZXIuc2V0KDAsIDg5KTsKKyAgICBidWZmZXIuc2V0KDEsIDkxKTsKKyAgICBidWZmZXIu
c2V0KDIsIDEwMyk7CisgICAgbGV0IGFycmF5ID0gbmV3IFR5cGVkVmFsdWUocHJvZ3JhbS50eXBl
cy5nZXQoIkludEFycmF5IikudHlwZSwgbmV3IEVQdHIoYnVmZmVyLCAwKSk7CisgICAgbGV0IHJl
c3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW2FycmF5XSk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7CisgICAgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJiYXIiLCBbYXJyYXldKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIDkxKTsK
KyAgICByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFthcnJheV0pOworICAg
IGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgMTAzKTsKK30KKwogdGVzdHMudHlwZU1pc21hdGNo
UmV0dXJuID0gZnVuY3Rpb24oKQogewogICAgIGNoZWNrRmFpbCgKQEAgLTg4NzksNiArODk0Mywy
NCBAQCB0ZXN0cy50ZXh0dXJlR2F0aGVyID0gZnVuY3Rpb24oKSB7CiAgICAgLy8gRklYTUU6IEdh
dGhlciBvdGhlciBjb21wb25lbnRzCiB9CiAKK3Rlc3RzLmNvbnN0YW50QWRkcmVzc1NwYWNlID0g
ZnVuY3Rpb24oKSB7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAg
ICAgICAgICAgdm9pZCBmb28oY29uc3RhbnQgaW50KiBiYXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgKmJhciA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAg
ICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworICAgIGNoZWNrRmFpbCgKKyAgICAg
ICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHZvaWQgZm9vKGNvbnN0YW50IGludFtdIGJh
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXJbMF0gPSAwOworICAgICAgICAg
ICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9y
KTsKK30KIAogdGVzdHMuY29tbWVudFBhcnNpbmcgPSBmdW5jdGlvbigpIHsKICAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350796</attachid>
            <date>2018-09-25 15:00:22 -0700</date>
            <delta_ts>2018-09-25 22:37:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189210-20180925150022.patch</filename>
            <type>text/plain</type>
            <size>14065</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NDc2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTIyZDA0YmExNmZlYzM3ZWZkZGJmNTAwMWQzODc4OGEx
ZWEwYThiNC4uZjU5ODA1ZDM5ZWQxMDNhZDg3ZmI1YWU1ZWY4NzA1M2ZlNWJhNTFhYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5
IEBACisyMDE4LTA5LTI1ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dITFNMXSBBbGxvdyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmUgdXNlZCBpbiB0
aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4OTIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluIGdlbmVyYWwsIHVuaWZvcm0gYnVmZmVycyB3b3JrLiBIb3dldmVyLCBJIG5lZWRl
ZCB0byB1cGRhdGUKKyAgICAgICAgQ2hlY2tlci5fZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vz
cyB0byBmaXggaG93IGFkZHJlc3Mgc3BhY2VzIHdlcmUKKyAgICAgICAgcHJvcGFnYXRlZCB0byBs
dmFsdWVzLiBPbmNlIHRoaXMgd2FzIGZpeGVkLCB3ZSBjYW4gZGV0ZWN0IHdyaXRlcyB0bworICAg
ICAgICBjb25zdGFudCBhZGRyZXNzIHNwYWNlIHZhcmlhYmxlcy4KKworICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlw
ZS52aXNpdEFzc2lnbm1lbnQpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2ZpbmlzaFZp
c2l0aW5nUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Rlc3QuanM6CisgICAgICAgICh0ZXN0cy50ZXJuYXJ5RXhwcmVzc2lvbik6CisgICAgICAgICh0
ZXN0cy50aHJlYWRBcnJheVJlZkxvYWQpOgorICAgICAgICAodGVzdHMudGhyZWFkQXJyYXlSZWZM
b2FkSW50TGl0ZXJhbCk6CisgICAgICAgICh0ZXN0cy5kZXZpY2VBcnJheVJlZkxvYWQpOgorICAg
ICAgICAodGVzdHMudGhyZWFkQXJyYXlSZWZTdG9yZSk6CisgICAgICAgICh0ZXN0cy5kZXZpY2VB
cnJheVJlZlN0b3JlKToKKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5UmVmU3RvcmVJbnRMaXRl
cmFsKToKKyAgICAgICAgKHRlc3RzLnRocmVhZFBvaW50ZXJMb2FkKToKKyAgICAgICAgKHRlc3Rz
LnRocmVhZFBvaW50ZXJTdG9yZSk6CisgICAgICAgICh0ZXN0cy5kZXZpY2VQb2ludGVyTG9hZCk6
CisgICAgICAgICh0ZXN0cy5kZXZpY2VQb2ludGVyU3RvcmUpOgorICAgICAgICAodGVzdHMuYXJy
YXlMb2FkKToKKyAgICAgICAgKHRlc3RzLmNvbnN0YW50QWRkcmVzc1NwYWNlKToKKyAgICAgICAg
KHRlc3RzLnRocmVhZEFycmF5TG9hZCk6IERlbGV0ZWQuCisgICAgICAgICh0ZXN0cy50aHJlYWRB
cnJheUxvYWRJbnRMaXRlcmFsKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5
TG9hZCk6IERlbGV0ZWQuCisgICAgICAgICh0ZXN0cy50aHJlYWRBcnJheVN0b3JlKTogRGVsZXRl
ZC4KKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAo
dGVzdHMuZGV2aWNlQXJyYXlTdG9yZUludExpdGVyYWwpOiBEZWxldGVkLgorCiAyMDE4LTA5LTI1
ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRp
YVN0cmVhbV0gVXBkYXRlIGNvbnN0cmFpbnRzIHN1cHBvcnRlZCBieSBnZXREaXNwbGF5TWVkaWEK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCmluZGV4IDg2NTVjZjM3ODM1
NmU0NzdkYjJlYjA1ZGQzNDM1YjU5ZDg3ZDQzYjIuLjFlOTkzMjc0ODM5NWIwMjI1OTYwMjUyMmRi
OGEyNjgwNWIxZWUzY2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0NoZWNrZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5q
cwpAQCAtNTM5LDYgKzUzOSwxMCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAg
ICAgICAgIGxldCBsaHNUeXBlID0gbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAgIGlmICgh
bm9kZS5saHMuaXNMVmFsdWUpCiAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJMSFMgb2YgYXNzaWdubWVudCBpcyBub3QgYW4gTFZhbHVl
OiAiICsgbm9kZS5saHMgKyBub2RlLmxocy5ub3RMVmFsdWVSZWFzb25TdHJpbmcpOworICAgICAg
ICBpZiAoIWlzQWRkcmVzc1NwYWNlKG5vZGUubGhzLmFkZHJlc3NTcGFjZSkpCisgICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYCR7bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nfTogVW5rbm93biBh
ZGRyZXNzIHNwYWNlIGluIG5vZGUgJHtub2RlLmxoc31gKTsKKyAgICAgICAgaWYgKG5vZGUubGhz
LmFkZHJlc3NTcGFjZSA9PSAiY29uc3RhbnQiKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IGFzc2lnbiB0byB2YXJpYWJs
ZSBpbiB0aGUgY29uc3RhbnQgYWRkcmVzcyBzcGFjZS4iKTsKICAgICAgICAgbGV0IHJoc1R5cGUg
PSBub2RlLnJocy52aXNpdCh0aGlzKTsKICAgICAgICAgaWYgKCFsaHNUeXBlLmVxdWFsc1dpdGhD
b21taXQocmhzVHlwZSkpCiAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIG1pc21hdGNoIGluIGFzc2lnbm1lbnQ6ICIgKyBsaHNU
eXBlICsgIiB2ZXJzdXMgIiArIHJoc1R5cGUpOwpAQCAtNjk5LDcgKzcwMyw3IEBAIGNsYXNzIENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIG5vZGUubm90TFZhbHVlUmVhc29u
ID0gIkJhc2Ugb2YgcHJvcGVydHkgYWNjZXNzIGlzIG5laXRoZXIgYSBsdmFsdWUgbm9yIGFuIGFy
cmF5IHJlZmVyZW5jZSI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBub2RlLmlzTFZh
bHVlID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGUuYWRkcmVzc1NwYWNlID0gbm9kZS5iYXNlLmlz
TFZhbHVlID8gbm9kZS5iYXNlLmFkZHJlc3NTcGFjZSA6IGJhc2VUeXBlLmFkZHJlc3NTcGFjZTsK
KyAgICAgICAgICAgIG5vZGUuYWRkcmVzc1NwYWNlID0gYmFzZVR5cGUuYWRkcmVzc1NwYWNlID8g
YmFzZVR5cGUuYWRkcmVzc1NwYWNlIDogbm9kZS5iYXNlLmFkZHJlc3NTcGFjZTsKICAgICAgICAg
fQogCiAgICAgICAgIHJldHVybiBub2RlLnJlc3VsdFR5cGU7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVGVzdC5qcwppbmRleCA2NTliNDMyOWM4ODI4ZDI3NjVhYmMwYzYzODliY2IzNjVlMjM3
ZWNkLi40OWM4OGQ2MDY0NmVkZjUxMDhmY2IwMmMyOWVjNTc5MDE3OWZiYTQ0IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCisrKyBiL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKQEAgLTM0MywyNCArMzQzLDI0IEBAIHRlc3RzLnRl
cm5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiB4IDwgMyA/IDQgOiA1OwogICAgICAgICB9Ci0gICAgICAgIHRlc3QgaW50IGJheihpbnQg
eCkKKyAgICAgICAgdGVzdCBpbnQgYmFyKGludCB4KQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4geCA8IDEwID8gMTEgOiB4IDwgMTIgPyAxNCA6IDE1OwogICAgICAgICB9Ci0gICAgICAg
IHRlc3QgaW50IHF1dXgoaW50IHgpCisgICAgICAgIHRlc3QgaW50IGJheihpbnQgeCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIDMgPCA0ID8geCA6IDU7CiAgICAgICAgIH0KICAgICBg
KTsKICAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtt
YWtlSW50KHByb2dyYW0sIDc2NyldKSwgNSk7CiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludChwcm9ncmFtLCAyKV0pLCA0KTsKLSAgICBj
aGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50KHBy
b2dyYW0sIDgpXSksIDExKTsKLSAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImJheiIsIFttYWtlSW50KHByb2dyYW0sIDkpXSksIDExKTsKLSAgICBjaGVja0ludChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFttYWtlSW50KHByb2dyYW0sIDEw
KV0pLCAxNCk7Ci0gICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJi
YXoiLCBbbWFrZUludChwcm9ncmFtLCAxMSldKSwgMTQpOwotICAgIGNoZWNrSW50KHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmF6IiwgW21ha2VJbnQocHJvZ3JhbSwgMTIpXSksIDE1
KTsKLSAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFtt
YWtlSW50KHByb2dyYW0sIDEzKV0pLCAxNSk7Ci0gICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJxdXV4IiwgW21ha2VJbnQocHJvZ3JhbSwgMTQpXSksIDE0KTsKKyAg
ICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50
KHByb2dyYW0sIDgpXSksIDExKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImJhciIsIFttYWtlSW50KHByb2dyYW0sIDkpXSksIDExKTsKKyAgICBjaGVja0lu
dChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFttYWtlSW50KHByb2dyYW0s
IDEwKV0pLCAxNCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJiYXIiLCBbbWFrZUludChwcm9ncmFtLCAxMSldKSwgMTQpOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW21ha2VJbnQocHJvZ3JhbSwgMTIpXSks
IDE1KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIs
IFttYWtlSW50KHByb2dyYW0sIDEzKV0pLCAxNSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJiYXoiLCBbbWFrZUludChwcm9ncmFtLCAxNCldKSwgMTQpOwog
ICAgIGNoZWNrRmFpbCgKICAgICAgICAgKCkgPT4gZG9QcmVwKGAKICAgICAgICAgICAgIGludCBm
b28oKQpAQCAtNjQ2LDcgKzY0Niw3IEBAIHRlc3RzLnNpbXBsZU1ha2VQdHIgPSBmdW5jdGlvbigp
CiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgNDIgYnV0IGdvdDogIiArIHZhbHVl
KTsKIH0KIAotdGVzdHMudGhyZWFkQXJyYXlMb2FkID0gZnVuY3Rpb24oKQordGVzdHMudGhyZWFk
QXJyYXlSZWZMb2FkID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
ICAgICAgICAgdGVzdCBpbnQgZm9vKHRocmVhZCBpbnRbXSBhcnJheSkKQEAgLTY2MCw3ICs2NjAs
NyBAQCB0ZXN0cy50aHJlYWRBcnJheUxvYWQgPSBmdW5jdGlvbigpCiAgICAgY2hlY2tJbnQocHJv
Z3JhbSwgcmVzdWx0LCA4OSk7CiB9CiAKLXRlc3RzLnRocmVhZEFycmF5TG9hZEludExpdGVyYWwg
PSBmdW5jdGlvbigpCit0ZXN0cy50aHJlYWRBcnJheVJlZkxvYWRJbnRMaXRlcmFsID0gZnVuY3Rp
b24oKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKICAgICAgICAgdGVzdCBpbnQgZm9v
KHRocmVhZCBpbnRbXSBhcnJheSkKQEAgLTY3NCw3ICs2NzQsNyBAQCB0ZXN0cy50aHJlYWRBcnJh
eUxvYWRJbnRMaXRlcmFsID0gZnVuY3Rpb24oKQogICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3Vs
dCwgODkpOwogfQogCi10ZXN0cy5kZXZpY2VBcnJheUxvYWQgPSBmdW5jdGlvbigpCit0ZXN0cy5k
ZXZpY2VBcnJheVJlZkxvYWQgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAogICAgICAgICB0ZXN0IGludCBmb28oZGV2aWNlIGludFtdIGFycmF5KQpAQCAtNjg4LDcg
KzY4OCw3IEBAIHRlc3RzLmRldmljZUFycmF5TG9hZCA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0lu
dChwcm9ncmFtLCByZXN1bHQsIDg5KTsKIH0KIAotdGVzdHMudGhyZWFkQXJyYXlTdG9yZSA9IGZ1
bmN0aW9uKCkKK3Rlc3RzLnRocmVhZEFycmF5UmVmU3RvcmUgPSBmdW5jdGlvbigpCiB7CiAgICAg
bGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAgICAgICB0ZXN0IHZvaWQgZm9vKHRocmVhZCBpbnRb
XSBhcnJheSwgaW50IHZhbHVlKQpAQCAtNzA5LDcgKzcwOSw3IEBAIHRlc3RzLnRocmVhZEFycmF5
U3RvcmUgPSBmdW5jdGlvbigpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0
b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgLTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKIH0K
IAotdGVzdHMuZGV2aWNlQXJyYXlTdG9yZSA9IGZ1bmN0aW9uKCkKK3Rlc3RzLmRldmljZUFycmF5
UmVmU3RvcmUgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAg
ICAgICB0ZXN0IHZvaWQgZm9vKGRldmljZSBpbnRbXSBhcnJheSwgaW50IHZhbHVlKQpAQCAtNzMw
LDcgKzczMCw3IEBAIHRlc3RzLmRldmljZUFycmF5U3RvcmUgPSBmdW5jdGlvbigpCiAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQg
LTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKIH0KIAotdGVzdHMuZGV2aWNlQXJyYXlTdG9yZUlu
dExpdGVyYWwgPSBmdW5jdGlvbigpCit0ZXN0cy5kZXZpY2VBcnJheVJlZlN0b3JlSW50TGl0ZXJh
bCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCiAgICAgICAgIHRl
c3Qgdm9pZCBmb28oZGV2aWNlIGludFtdIGFycmF5LCBpbnQgdmFsdWUpCkBAIC03NTEsNiArNzUx
LDEwMiBAQCB0ZXN0cy5kZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbCA9IGZ1bmN0aW9uKCkKICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBl
Y3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQoMCkpOwogfQogCit0ZXN0cy50aHJlYWRQb2ludGVy
TG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAg
IHRlc3QgaW50IGZvbyh0aHJlYWQgaW50KiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcHRyOworICAgICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVm
ZmVyKDEpOworICAgIGJ1ZmZlci5zZXQoMCwgODkpOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5h
bE9yaWdpbiwgInRocmVhZCIsIHByb2dyYW0uaW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZm
ZXIsIDApKV0pOworICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkpOworfQorCit0ZXN0
cy50aHJlYWRQb2ludGVyU3RvcmUgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAorICAgICAgICB0ZXN0IHZvaWQgZm9vKHRocmVhZCBpbnQqIHB0ciwgaW50IHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICAqcHRyID0gdmFsdWU7CisgICAgICAgIH0KKyAgICBg
KTsKKyAgICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMSk7CisgICAgYnVmZmVyLnNldCgwLCA4
OSk7CisgICAgbGV0IHBvaW50ZXIgPSBUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5h
bE9yaWdpbiwgInRocmVhZCIsIHByb2dyYW0uaW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZm
ZXIsIDApKTsKKyAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
cG9pbnRlciwgbWFrZUludChwcm9ncmFtLCAxMjMpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkg
IT0gMTIzKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBi
dWZmZXIgKGV4cGVjdGVkIDEyMyk6ICIgKyBidWZmZXIuZ2V0KDApKTsKKyAgICByZXN1bHQgPSBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtwb2ludGVyLCBtYWtlSW50KHByb2dyYW0sIDMy
MSldKTsKKyAgICBpZiAoYnVmZmVyLmdldCgwKSAhPSAzMjEpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgMzIxKTogIiArIGJ1
ZmZlci5nZXQoMCkpOworfQorCit0ZXN0cy5kZXZpY2VQb2ludGVyTG9hZCA9IGZ1bmN0aW9uKCkK
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbyhkZXZp
Y2UgaW50KiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAg
ICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOworICAgIGJ1ZmZl
ci5zZXQoMCwgODkpOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwgImRldmljZSIs
IHByb2dyYW0uaW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZmZXIsIDApKV0pOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkpOworfQorCit0ZXN0cy5kZXZpY2VQb2ludGVyU3Rv
cmUgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0
ZXN0IHZvaWQgZm9vKGRldmljZSBpbnQqIHB0ciwgaW50IHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICAqcHRyID0gdmFsdWU7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgYnVmZmVy
ID0gbmV3IEVCdWZmZXIoMSk7CisgICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAgbGV0IHBvaW50
ZXIgPSBUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwgImRldmljZSIs
IHByb2dyYW0uaW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZmZXIsIDApKTsKKyAgICBsZXQg
cmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbcG9pbnRlciwgbWFrZUludChw
cm9ncmFtLCAxMjMpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0gMTIzKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBidWZmZXIgKGV4cGVjdGVkIDEy
Myk6ICIgKyBidWZmZXIuZ2V0KDApKTsKKyAgICByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtwb2ludGVyLCBtYWtlSW50KHByb2dyYW0sIDMyMSldKTsKKyAgICBpZiAoYnVm
ZmVyLmdldCgwKSAhPSAzMjEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0
b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgMzIxKTogIiArIGJ1ZmZlci5nZXQoMCkpOworfQor
Cit0ZXN0cy5hcnJheUxvYWQgPSBmdW5jdGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAorICAgICAgICB0eXBlZGVmIEludEFycmF5ID0gaW50WzNdOworICAgICAgICB0ZXN0IGlu
dCBmb28oSW50QXJyYXkgYSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFbMF07Cisg
ICAgICAgIH0KKyAgICAgICAgdGVzdCBpbnQgYmFyKEludEFycmF5IGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhWzFdOworICAgICAgICB9CisgICAgICAgIHRlc3QgaW50IGJheihJ
bnRBcnJheSBhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYVsyXTsKKyAgICAgICAg
fQorICAgIGApOworICAgIGxldCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigzKTsKKyAgICBidWZmZXIu
c2V0KDAsIDg5KTsKKyAgICBidWZmZXIuc2V0KDEsIDkxKTsKKyAgICBidWZmZXIuc2V0KDIsIDEw
Myk7CisgICAgbGV0IGFycmF5ID0gbmV3IFR5cGVkVmFsdWUocHJvZ3JhbS50eXBlcy5nZXQoIklu
dEFycmF5IikudHlwZSwgbmV3IEVQdHIoYnVmZmVyLCAwKSk7CisgICAgbGV0IHJlc3VsdCA9IGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW2FycmF5XSk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgcmVzdWx0LCA4OSk7CisgICAgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIi
LCBbYXJyYXldKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIDkxKTsKKyAgICByZXN1
bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJheiIsIFthcnJheV0pOworICAgIGNoZWNrSW50
KHByb2dyYW0sIHJlc3VsdCwgMTAzKTsKK30KKwogdGVzdHMudHlwZU1pc21hdGNoUmV0dXJuID0g
ZnVuY3Rpb24oKQogewogICAgIGNoZWNrRmFpbCgKQEAgLTkwODgsNiArOTE4NCwxMTMgQEAgdGVz
dHMudGV4dHVyZUdhdGhlciA9IGZ1bmN0aW9uKCkgewogICAgIC8vIEZJWE1FOiBHYXRoZXIgb3Ro
ZXIgY29tcG9uZW50cwogfQogCit0ZXN0cy5jb25zdGFudEFkZHJlc3NTcGFjZSA9IGZ1bmN0aW9u
KCkgeworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAg
IHZvaWQgZm9vKGNvbnN0YW50IGludCogYmFyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICpiYXIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+
IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJjb25zdGFudCBh
ZGRyZXNzIHNwYWNlIikgIT09IC0xKTsKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRv
UHJlcChgCisgICAgICAgICAgICB2b2lkIGZvbyhjb25zdGFudCBpbnRbXSBiYXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYmFyWzBdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3Nh
Z2UuaW5kZXhPZigiY29uc3RhbnQgYWRkcmVzcyBzcGFjZSIpICE9PSAtMSk7CisgICAgY2hlY2tG
YWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdHlwZWRlZiBDb25zdGFu
dEludEFycmF5UmVmID0gY29uc3RhbnQgaW50W107CisgICAgICAgICAgICB2b2lkIGZvbyhDb25z
dGFudEludEFycmF5UmVmWzNdIGJhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
YXJbMF1bMF0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAgKGUpID0+
IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJjb25zdGFudCBh
ZGRyZXNzIHNwYWNlIikgIT09IC0xKTsKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRv
UHJlcChgCisgICAgICAgICAgICB0eXBlZGVmIEludEFycmF5ID0gaW50WzNdOworICAgICAgICAg
ICAgdm9pZCBmb28oY29uc3RhbnQgSW50QXJyYXlbXSBiYXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYmFyWzBdWzBdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisg
ICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhP
ZigiY29uc3RhbnQgYWRkcmVzcyBzcGFjZSIpICE9PSAtMSk7CisgICAgY2hlY2tGYWlsKAorICAg
ICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdHlwZWRlZiBJbnRBcnJheSA9IGludFsz
XTsKKyAgICAgICAgICAgIHN0cnVjdCBCYXIgeworICAgICAgICAgICAgICAgIEludEFycmF5IGJh
ejsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKGNvbnN0YW50IEJhcltdIGJh
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXJbMF0uYmF6WzBdID0gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5
cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiY29uc3RhbnQgYWRkcmVzcyBzcGFjZSIpICE9
PSAtMSk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAg
ICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICAgICAgaW50IGJhejsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHR5cGVkZWYgQmFyQXJyYXkgPSBCYXJbM107CisgICAgICAgICAgICB2b2lk
IGZvbyhjb25zdGFudCBCYXJBcnJheVtdIGJhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBiYXJbMF1bMF0uYmF6ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAg
ICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigi
Y29uc3RhbnQgYWRkcmVzcyBzcGFjZSIpICE9PSAtMSk7CisgICAgY2hlY2tGYWlsKAorICAgICAg
ICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgdHlwZWRlZiBJbnRBcnJheSA9IGludFszXTsK
KyAgICAgICAgICAgIHN0cnVjdCBCYXIgeworICAgICAgICAgICAgICAgIGNvbnN0YW50IEludEFy
cmF5W10gYmF6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28oQmFyIGJhcikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXIuYmF6WzBdWzBdID0gMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVF
cnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiY29uc3RhbnQgYWRkcmVzcyBzcGFjZSIpICE9PSAt
MSk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAg
dHlwZWRlZiBDb25zdGFudEludEFycmF5UmVmID0gY29uc3RhbnQgaW50W107CisgICAgICAgICAg
ICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgICAgICBDb25zdGFudEludEFycmF5UmVmWzNdIGJh
ejsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKEJhciBiYXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYmFyLmJhelswXVswXSA9IDA7CisgICAgICAgICAgICB9
CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYg
ZS5tZXNzYWdlLmluZGV4T2YoImNvbnN0YW50IGFkZHJlc3Mgc3BhY2UiKSAhPT0gLTEpOworICAg
IGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHN0cnVjdCBC
YXIgeworICAgICAgICAgICAgICAgIGludCBiYXo7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0eXBlZGVmIENvbnN0YW50QmFyQXJyYXlSZWYgPSBjb25zdGFudCBCYXJbXTsKKyAgICAgICAg
ICAgIHZvaWQgZm9vKENvbnN0YW50QmFyQXJyYXlSZWZbM10gYmFyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGJhclswXVswXS5iYXogPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICBgKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2Fn
ZS5pbmRleE9mKCJjb25zdGFudCBhZGRyZXNzIHNwYWNlIikgIT09IC0xKTsKKyAgICBjaGVja0Zh
aWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudCBpbnRbXSBiYXo7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2b2lkIGZvbyhCYXJbM10gYmFyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJhclswXS5iYXpbMF0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICBgKSwKKyAgICAgICAg
KGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCJjb25z
dGFudCBhZGRyZXNzIHNwYWNlIikgIT09IC0xKTsKK30KIAogdGVzdHMuY29tbWVudFBhcnNpbmcg
PSBmdW5jdGlvbigpIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350849</attachid>
            <date>2018-09-25 22:37:48 -0700</date>
            <delta_ts>2018-09-28 19:28:05 -0700</delta_ts>
            <desc>Depends on pointer equality</desc>
            <filename>bug-189210-20180925223747.patch</filename>
            <type>text/plain</type>
            <size>169610</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NDc2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTIyZDA0YmExNmZlYzM3ZWZkZGJmNTAwMWQzODc4OGEx
ZWEwYThiNC4uMTUyMzQ3YjIzMDRmZGFmMjViYTRhYTM2MmU5NjBlZTJkZmQ0Y2EwNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDE4LTA5LTI1ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW1dITFNMXSBBbGxvdyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmUgdXNlZCBpbiB0
aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4OTIxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV2ZXJ5IGx2YWx1ZSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gYWRkcmVzcyBzcGFjZSwg
YW5kIHRoZSBwcm9wYWdhdGlvbiBvZiB0aGVzZSBhZGRyZXNzIHNwYWNlcworICAgICAgICBtYXRj
aGVzIHRoZSBwcm9wYWdhdGlvbiBvZiBsdmFsdWVzLiBMdWNraWx5LCB0aGVyZSB3YXMgYWxyZWFk
eSB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gZG8gbW9zdAorICAgICAgICBvZiB0aGlzLCBzbyB0aGlz
IHBhdGNoIGp1c3QgZ29lcyB0aGUgbGFzdCBmZXcgeWFyZHMuIEl0IGFsc28gdXBkYXRlcyB0aGUg
c3RhbmRhcmQgbGlicmFyeSB0bworICAgICAgICBhbGxvdyBmb3Igd3JpdGluZyBpbnRvIGFsbCB3
cml0YWJsZSBhZGRyZXNzIHNwYWNlcyBmb3Igb3V0LXBhcmFtcy4KKworICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlw
ZS52aXNpdEFzc2lnbm1lbnQpOgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2ZpbmlzaFZp
c2l0aW5nUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0ludHJpbnNpY3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzLik6CisgICAgICAgIChJbnRyaW5z
aWNzLmNoZWNrRmFsc2UpOgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzOgorICAgICAgICAobGV0LnN0YW5k
YXJkTGlicmFyeSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qczoK
KyAgICAgICAgKHRlc3RzLnRocmVhZEFycmF5UmVmTG9hZCk6CisgICAgICAgICh0ZXN0cy50aHJl
YWRBcnJheVJlZkxvYWRJbnRMaXRlcmFsKToKKyAgICAgICAgKHRlc3RzLmRldmljZUFycmF5UmVm
TG9hZCk6CisgICAgICAgICh0ZXN0cy50aHJlYWRBcnJheVJlZlN0b3JlKToKKyAgICAgICAgKHRl
c3RzLmRldmljZUFycmF5UmVmU3RvcmUpOgorICAgICAgICAodGVzdHMuZGV2aWNlQXJyYXlSZWZT
dG9yZUludExpdGVyYWwpOgorICAgICAgICAodGVzdHMudGhyZWFkUG9pbnRlckxvYWQpOgorICAg
ICAgICAodGVzdHMudGhyZWFkUG9pbnRlclN0b3JlKToKKyAgICAgICAgKHRlc3RzLmRldmljZVBv
aW50ZXJMb2FkKToKKyAgICAgICAgKHRlc3RzLmRldmljZVBvaW50ZXJTdG9yZSk6CisgICAgICAg
ICh0ZXN0cy5hcnJheUxvYWQpOgorICAgICAgICAodGVzdHMuY29uc3RhbnRBZGRyZXNzU3BhY2Up
OgorICAgICAgICAodGVzdHMuc3RhbmRhcmRMaWJyYXJ5RGV2aWNlUG9pbnRlcnMpOgorICAgICAg
ICAodGVzdHMudGhyZWFkQXJyYXlMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RzLnRocmVh
ZEFycmF5TG9hZEludExpdGVyYWwpOiBEZWxldGVkLgorICAgICAgICAodGVzdHMuZGV2aWNlQXJy
YXlMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RzLnRocmVhZEFycmF5U3RvcmUpOiBEZWxl
dGVkLgorICAgICAgICAodGVzdHMuZGV2aWNlQXJyYXlTdG9yZSk6IERlbGV0ZWQuCisgICAgICAg
ICh0ZXN0cy5kZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbCk6IERlbGV0ZWQuCisKIDIwMTgtMDkt
MjUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01l
ZGlhU3RyZWFtXSBVcGRhdGUgY29uc3RyYWludHMgc3VwcG9ydGVkIGJ5IGdldERpc3BsYXlNZWRp
YQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcyBi
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKaW5kZXggODY1NWNmMzc4
MzU2ZTQ3N2RiMmViMDVkZDM0MzViNTlkODdkNDNiMi4uMWU5OTMyNzQ4Mzk1YjAyMjU5NjAyNTIy
ZGI4YTI2ODA1YjFlZTNjZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ2hlY2tlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2Vy
LmpzCkBAIC01MzksNiArNTM5LDEwIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsK
ICAgICAgICAgbGV0IGxoc1R5cGUgPSBub2RlLmxocy52aXNpdCh0aGlzKTsKICAgICAgICAgaWYg
KCFub2RlLmxocy5pc0xWYWx1ZSkKICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkxIUyBvZiBhc3NpZ25tZW50IGlzIG5vdCBhbiBMVmFs
dWU6ICIgKyBub2RlLmxocyArIG5vZGUubGhzLm5vdExWYWx1ZVJlYXNvblN0cmluZyk7CisgICAg
ICAgIGlmICghaXNBZGRyZXNzU3BhY2Uobm9kZS5saHMuYWRkcmVzc1NwYWNlKSkKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcihgJHtub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmd9OiBVbmtub3du
IGFkZHJlc3Mgc3BhY2UgaW4gbm9kZSAke25vZGUubGhzfWApOworICAgICAgICBpZiAobm9kZS5s
aHMuYWRkcmVzc1NwYWNlID09ICJjb25zdGFudCIpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5
cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3QgYXNzaWduIHRvIHZhcmlh
YmxlIGluIHRoZSBjb25zdGFudCBhZGRyZXNzIHNwYWNlLiIpOwogICAgICAgICBsZXQgcmhzVHlw
ZSA9IG5vZGUucmhzLnZpc2l0KHRoaXMpOwogICAgICAgICBpZiAoIWxoc1R5cGUuZXF1YWxzV2l0
aENvbW1pdChyaHNUeXBlKSkKICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgbWlzbWF0Y2ggaW4gYXNzaWdubWVudDogIiArIGxo
c1R5cGUgKyAiIHZlcnN1cyAiICsgcmhzVHlwZSk7CkBAIC02OTksNyArNzAzLDcgQEAgY2xhc3Mg
Q2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgbm9kZS5ub3RMVmFsdWVSZWFz
b24gPSAiQmFzZSBvZiBwcm9wZXJ0eSBhY2Nlc3MgaXMgbmVpdGhlciBhIGx2YWx1ZSBub3IgYW4g
YXJyYXkgcmVmZXJlbmNlIjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG5vZGUuaXNM
VmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgbm9kZS5hZGRyZXNzU3BhY2UgPSBub2RlLmJhc2Uu
aXNMVmFsdWUgPyBub2RlLmJhc2UuYWRkcmVzc1NwYWNlIDogYmFzZVR5cGUuYWRkcmVzc1NwYWNl
OworICAgICAgICAgICAgbm9kZS5hZGRyZXNzU3BhY2UgPSBiYXNlVHlwZS5hZGRyZXNzU3BhY2Ug
PyBiYXNlVHlwZS5hZGRyZXNzU3BhY2UgOiBub2RlLmJhc2UuYWRkcmVzc1NwYWNlOwogICAgICAg
ICB9CiAKICAgICAgICAgcmV0dXJuIG5vZGUucmVzdWx0VHlwZTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCmluZGV4IDllZDY1NDY2NjRiZDY3ZTZiODY3YzE2
YTBmNTc5Y2FkNGRiNGZkNmIuLjk2ZjNjOTE4OTVlMGZmZmRmMGQ3YmVlNDhlNzIzMjY3MWM3NWJk
OTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3Mu
anMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwpAQCAt
ODU5LDI1OSArODU5LDI2MSBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgZm9yIChsZXQg
c2V0dGVyIG9mIEJ1aWx0aW5NYXRyaXhTZXR0ZXIuZnVuY3Rpb25zKCkpCiAgICAgICAgICAgICB0
aGlzLl9tYXAuc2V0KHNldHRlci50b1N0cmluZygpLCBmdW5jID0+IHNldHRlci5pbnN0YW50aWF0
ZUltcGxlbWVudGF0aW9uKGZ1bmMpKTsKIAotICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2Ug
b2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKLSAgICAgICAgICAgIHRo
aXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkQWRk
KGF0b21pY191aW50KiAke2FkZHJlc3NTcGFjZX0sdWludCx1aW50KiB0aHJlYWQpYCwKLSAgICAg
ICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRh
dGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltBdG9taWNzXSIsICJOdWxsIGF0
b21pYyBwb2ludGVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0b21pYy5s
b2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0g
dmFsdWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0g
Y2FzdFRvVWludChhICsgYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxW
YWx1ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZh
bHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChyZXN1bHQpLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOworICAgICAgICBm
b3IgKGxldCBhZGRyZXNzU3BhY2UxIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmlj
ZSJdKSB7CisgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UyIG9mIFsidGhyZWFkIiwg
InRocmVhZGdyb3VwIiwgImRldmljZSJdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNl
dCgKKyAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkQWRkKGF0b21p
Y191aW50KiAke2FkZHJlc3NTcGFjZTF9LHVpbnQsdWludCogJHthZGRyZXNzU3BhY2UyfSlgLAor
ICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1
ZV0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2Fk
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFw
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9h
ZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGNhc3RU
b1VpbnQoYSArIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZh
bHVlLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5h
bFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVz
dWx0KSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0pOwogCi0gICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgICAgIGBuYXRp
dmUgdm9pZCBJbnRlcmxvY2tlZEFkZChhdG9taWNfaW50KiAke2FkZHJlc3NTcGFjZX0saW50LGlu
dCogdGhyZWFkKWAsCi0gICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2lu
YWxWYWx1ZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxvYWRWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJb
QXRvbWljc10iLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbGV0IGEgPSBhdG9taWMubG9hZFZhbHVlKCkubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgYiA9IHZhbHVlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IHJlc3VsdCA9IGNhc3RUb0ludChhICsgYik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShF
UHRyLmJveChyZXN1bHQpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAg
ICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZEFkZChhdG9taWNfaW50KiAke2FkZHJlc3NTcGFj
ZTF9LGludCxpbnQqICR7YWRkcmVzc1NwYWNlMn0pYCwKKyAgICAgICAgICAgICAgICAgICAgZnVu
YyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVu
Y3Rpb24oW2F0b21pYywgdmFsdWUsIG9yaWdpbmFsVmFsdWVdLCBub2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZywgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgYiA9IHZhbHVlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBjYXN0VG9JbnQoYSArIGIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlG
cm9tKEVQdHIuYm94KGEpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMu
bG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KAotICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZEFuZChh
dG9taWNfdWludCogJHthZGRyZXNzU3BhY2V9LHVpbnQsdWludCogdGhyZWFkKWAsCi0gICAgICAg
ICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRp
b24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbQXRvbWljc10iLCAiTnVsbCBhdG9t
aWMgcG9pbnRlciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBhdG9taWMubG9h
ZFZhbHVlKCkubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYiA9IHZh
bHVlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGNh
c3RUb1VpbnQoYSAmIGIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFs
dWUubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxWYWx1
ZS5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChhKSwgMSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhdG9taWMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgSW50
ZXJsb2NrZWRBbmQoYXRvbWljX3VpbnQqICR7YWRkcmVzc1NwYWNlMX0sdWludCx1aW50KiAke2Fk
ZHJlc3NTcGFjZTJ9KWAsCisgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZh
bHVlLCBvcmlnaW5hbFZhbHVlXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghYXRvbWljLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGF0
b21pYyBwb2ludGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBhdG9t
aWMubG9hZFZhbHVlKCkubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGV0IGIgPSB2YWx1ZS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgcmVzdWx0ID0gY2FzdFRvVWludChhICYgYik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3goYSks
IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5
RnJvbShFUHRyLmJveChyZXN1bHQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAg
ICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkQW5kKGF0b21pY19pbnQqICR7YWRk
cmVzc1NwYWNlfSxpbnQsaW50KiB0aHJlYWQpYCwKLSAgICAgICAgICAgICAgICBmdW5jID0+IHsK
LSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9t
aWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFhdG9taWMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUcmFwRXJyb3IoIltBdG9taWNzXSIsICJOdWxsIGF0b21pYyBwb2ludGVyIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FzdFRvSW50KGEgJiBiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkuY29weUZy
b20oRVB0ci5ib3goYSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljLmxvYWRW
YWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHJlc3VsdCksIDEpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgK
KyAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkQW5kKGF0b21pY19p
bnQqICR7YWRkcmVzc1NwYWNlMX0saW50LGludCogJHthZGRyZXNzU3BhY2UyfSlgLAorICAgICAg
ICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1w
bGVtZW50YXRpb24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0sIG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGNhc3RUb0ludChh
ICYgYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUubG9h
ZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUu
bG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3goYSksIDEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChyZXN1bHQpLCAx
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CiAK
LSAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lk
IEludGVybG9ja2VkRXhjaGFuZ2UoYXRvbWljX3VpbnQqICR7YWRkcmVzc1NwYWNlfSx1aW50LHVp
bnQqIHRocmVhZClgLAotICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAg
ICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgdmFsdWUsIG9yaWdp
bmFsVmFsdWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFs
dWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcigi
W0F0b21pY3NdIiwgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3goYSks
IDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljLmxvYWRWYWx1ZSgpLmNvcHlGcm9t
KEVQdHIuYm94KGIpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAg
IGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZEV4Y2hhbmdlKGF0b21pY191aW50KiAke2FkZHJlc3NT
cGFjZTF9LHVpbnQsdWludCogJHthZGRyZXNzU3BhY2UyfSlgLAorICAgICAgICAgICAgICAgICAg
ICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0sIG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkuY29w
eUZyb20oRVB0ci5ib3goYSksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21p
Yy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChiKSwgMSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICB0aGlzLl9t
YXAuc2V0KAotICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZEV4Y2hhbmdl
KGF0b21pY19pbnQqICR7YWRkcmVzc1NwYWNlfSxpbnQsaW50KiB0aHJlYWQpYCwKLSAgICAgICAg
ICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlv
biA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltBdG9taWNzXSIsICJOdWxsIGF0b21p
YyBwb2ludGVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0b21pYy5sb2Fk
VmFsdWUoKS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFs
dWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1
ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVl
LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChiKSwgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgSW50ZXJsb2Nr
ZWRFeGNoYW5nZShhdG9taWNfaW50KiAke2FkZHJlc3NTcGFjZTF9LGludCxpbnQqICR7YWRkcmVz
c1NwYWNlMn0pYCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgdmFsdWUs
IG9yaWdpbmFsVmFsdWVdLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFhdG9taWMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgYXRvbWlj
IHBvaW50ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0b21pYy5s
b2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQg
YiA9IHZhbHVlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChv
cmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0
ci5ib3goYiksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBg
bmF0aXZlIHZvaWQgSW50ZXJsb2NrZWRNYXgoYXRvbWljX3VpbnQqICR7YWRkcmVzc1NwYWNlfSx1
aW50LHVpbnQqIHRocmVhZClgLAotICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgdmFsdWUs
IG9yaWdpbmFsVmFsdWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5s
b2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBF
cnJvcigiW0F0b21pY3NdIiwgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCByZXN1bHQgPSBjYXN0VG9VaW50KGEgPiBiID8gYSA6IGIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKS5jb3B5RnJv
bShFUHRyLmJveChhKSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZh
bHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAor
ICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgSW50ZXJsb2NrZWRNYXgoYXRvbWljX3Vp
bnQqICR7YWRkcmVzc1NwYWNlMX0sdWludCx1aW50KiAke2FkZHJlc3NTcGFjZTJ9KWAsCisgICAg
ICAgICAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5p
bXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSwg
bm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxvYWRWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGF0b21pYyBwb2ludGVyIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBhdG9taWMubG9hZFZhbHVlKCkubG9hZFZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5sb2FkVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FzdFRvVWlu
dChhID4gYiA/IGEgOiBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2lu
YWxWYWx1ZS5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Jp
Z2luYWxWYWx1ZS5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChhKSwgMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXRvbWljLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94
KHJlc3VsdCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBg
bmF0aXZlIHZvaWQgSW50ZXJsb2NrZWRNYXgoYXRvbWljX2ludCogJHthZGRyZXNzU3BhY2V9LGlu
dCxpbnQqIHRocmVhZClgLAotICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAg
ICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgdmFsdWUsIG9y
aWdpbmFsVmFsdWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2Fk
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJv
cigiW0F0b21pY3NdIiwgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBjYXN0VG9JbnQoYSA+IGIgPyBhIDogYik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQ
dHIuYm94KGEpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUo
KS5jb3B5RnJvbShFUHRyLmJveChyZXN1bHQpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAg
ICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZE1heChhdG9taWNfaW50KiAk
e2FkZHJlc3NTcGFjZTF9LGludCxpbnQqICR7YWRkcmVzc1NwYWNlMn0pYCwKKyAgICAgICAgICAg
ICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgdmFsdWUsIG9yaWdpbmFsVmFsdWVdLCBub2RlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYiA9IHZhbHVlLmxvYWRWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBjYXN0VG9JbnQoYSA+IGIg
PyBhIDogYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUu
bG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFs
dWUubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3goYSksIDEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChyZXN1bHQp
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7
CiAKLSAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2
b2lkIEludGVybG9ja2VkTWluKGF0b21pY191aW50KiAke2FkZHJlc3NTcGFjZX0sdWludCx1aW50
KiB0aHJlYWQpYCwKLSAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5h
bFZhbHVlXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltB
dG9taWNzXSIsICJOdWxsIGF0b21pYyBwb2ludGVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsZXQgcmVzdWx0ID0gY2FzdFRvVWludChhIDwgYiA/IGEgOiBiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5i
b3goYSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljLmxvYWRWYWx1ZSgpLmNv
cHlGcm9tKEVQdHIuYm94KHJlc3VsdCksIDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAg
ICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkTWluKGF0b21pY191aW50KiAke2Fk
ZHJlc3NTcGFjZTF9LHVpbnQsdWludCogJHthZGRyZXNzU3BhY2UyfSlgLAorICAgICAgICAgICAg
ICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50
YXRpb24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0sIG5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGNhc3RUb1VpbnQoYSA8IGIg
PyBhIDogYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUu
bG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFs
dWUubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3goYSksIDEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChyZXN1bHQp
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7
CiAKLSAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2
b2lkIEludGVybG9ja2VkTWluKGF0b21pY19pbnQqICR7YWRkcmVzc1NwYWNlfSxpbnQsaW50KiB0
aHJlYWQpYCwKLSAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZh
bHVlXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltBdG9t
aWNzXSIsICJOdWxsIGF0b21pYyBwb2ludGVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgcmVzdWx0ID0gY2FzdFRvSW50KGEgPCBiID8gYSA6IGIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChh
KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZhbHVlKCkuY29weUZy
b20oRVB0ci5ib3gocmVzdWx0KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAg
ICAgICAgICBgbmF0aXZlIHZvaWQgSW50ZXJsb2NrZWRNaW4oYXRvbWljX2ludCogJHthZGRyZXNz
U3BhY2UxfSxpbnQsaW50KiAke2FkZHJlc3NTcGFjZTJ9KWAsCisgICAgICAgICAgICAgICAgICAg
IGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9
IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSwgbm9kZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxvYWRWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJOdWxsIGF0b21pYyBwb2ludGVyIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGV0IGEgPSBhdG9taWMubG9hZFZhbHVlKCkubG9hZFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5sb2FkVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FzdFRvSW50KGEgPCBiID8gYSA6IGIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRW
YWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdG9taWMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAg
ICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRl
cmxvY2tlZE9yKGF0b21pY191aW50KiAke2FkZHJlc3NTcGFjZX0sdWludCx1aW50KiB0aHJlYWQp
YCwKLSAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5p
bXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltBdG9taWNzXSIs
ICJOdWxsIGF0b21pYyBwb2ludGVyIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9
IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQg
cmVzdWx0ID0gY2FzdFRvVWludChhIHwgYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChy
ZXN1bHQpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAgIGBuYXRp
dmUgdm9pZCBJbnRlcmxvY2tlZE9yKGF0b21pY191aW50KiAke2FkZHJlc3NTcGFjZTF9LHVpbnQs
dWludCogJHthZGRyZXNzU3BhY2UyfSlgLAorICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihb
YXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
LCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
dCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGV0IHJlc3VsdCA9IGNhc3RUb1VpbnQoYSB8IGIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQ
dHIuYm94KGEpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZh
bHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICB0aGlzLl9tYXAu
c2V0KAotICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZE9yKGF0b21pY19p
bnQqICR7YWRkcmVzc1NwYWNlfSxpbnQsaW50KiB0aHJlYWQpYCwKLSAgICAgICAgICAgICAgICBm
dW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0
aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZhbHVlXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltBdG9taWNzXSIsICJOdWxsIGF0b21pYyBwb2ludGVy
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5s
b2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2FzdFRvSW50KGEg
fCBiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVl
KCkuY29weUZyb20oRVB0ci5ib3goYSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRv
bWljLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHJlc3VsdCksIDEpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5f
bWFwLnNldCgKKyAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkT3Io
YXRvbWljX2ludCogJHthZGRyZXNzU3BhY2UxfSxpbnQsaW50KiAke2FkZHJlc3NTcGFjZTJ9KWAs
CisgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIHZhbHVlLCBvcmlnaW5hbFZh
bHVlXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxv
YWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1Ry
YXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJOdWxsIGF0b21pYyBwb2ludGVyIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBhdG9taWMubG9hZFZhbHVlKCku
bG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5s
b2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gY2Fz
dFRvSW50KGEgfCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxW
YWx1ZS5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2lu
YWxWYWx1ZS5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChhKSwgMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXRvbWljLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHJl
c3VsdCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9KTsKIAotICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBgbmF0
aXZlIHZvaWQgSW50ZXJsb2NrZWRYb3IoYXRvbWljX3VpbnQqICR7YWRkcmVzc1NwYWNlfSx1aW50
LHVpbnQqIHRocmVhZClgLAotICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAg
ICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgdmFsdWUsIG9y
aWdpbmFsVmFsdWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2Fk
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJv
cigiW0F0b21pY3NdIiwgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IGIgPSB2YWx1ZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCByZXN1bHQgPSBjYXN0VG9VaW50KGEgXiBiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3go
YSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljLmxvYWRWYWx1ZSgpLmNvcHlG
cm9tKEVQdHIuYm94KHJlc3VsdCksIDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAg
ICAgICAgICAgYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkWG9yKGF0b21pY191aW50KiAke2FkZHJl
c3NTcGFjZTF9LHVpbnQsdWludCogJHthZGRyZXNzU3BhY2UyfSlgLAorICAgICAgICAgICAgICAg
ICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRp
b24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0sIG5vZGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gdmFsdWUubG9hZFZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGNhc3RUb1VpbnQoYSBeIGIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1
ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdG9taWMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAg
ICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxv
Y2tlZFhvcihhdG9taWNfaW50KiAke2FkZHJlc3NTcGFjZX0saW50LGludCogdGhyZWFkKWAsCi0g
ICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSBmdW5jdGlvbihbYXRvbWljLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxvYWRWYWx1ZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbQXRvbWljc10iLCAiTnVs
bCBhdG9taWMgcG9pbnRlciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGEgPSBhdG9t
aWMubG9hZFZhbHVlKCkubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQg
YiA9IHZhbHVlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3Vs
dCA9IGNhc3RUb0ludChhIF4gYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2lu
YWxWYWx1ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5h
bFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChyZXN1bHQp
LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9p
ZCBJbnRlcmxvY2tlZFhvcihhdG9taWNfaW50KiAke2FkZHJlc3NTcGFjZTF9LGludCxpbnQqICR7
YWRkcmVzc1NwYWNlMn0pYCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywg
dmFsdWUsIG9yaWdpbmFsVmFsdWVdLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIk51bGwg
YXRvbWljIHBvaW50ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGF0
b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgYiA9IHZhbHVlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxldCByZXN1bHQgPSBjYXN0VG9JbnQoYSBeIGIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEp
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZhbHVlKCkuY29w
eUZyb20oRVB0ci5ib3gocmVzdWx0KSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAg
ICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShhdG9t
aWNfdWludCogJHthZGRyZXNzU3BhY2V9LHVpbnQsdWludCx1aW50KiB0aHJlYWQpYCwKLSAgICAg
ICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRh
dGlvbiA9IGZ1bmN0aW9uKFthdG9taWMsIGNvbXBhcmVWYWx1ZSwgdmFsdWUsIG9yaWdpbmFsVmFs
dWVdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcigiW0F0b21p
Y3NdIiwgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
dCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IGIgPSBjb21wYXJlVmFsdWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgYyA9IHZhbHVlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWMubG9hZFZh
bHVlKCkuY29weUZyb20oRVB0ci5ib3goYyksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9yaWdpbmFsVmFsdWUubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChhKSwgMSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgSW50ZXJs
b2NrZWRDb21wYXJlRXhjaGFuZ2UoYXRvbWljX3VpbnQqICR7YWRkcmVzc1NwYWNlMX0sdWludCx1
aW50LHVpbnQqICR7YWRkcmVzc1NwYWNlMn0pYCwKKyAgICAgICAgICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rp
b24oW2F0b21pYywgY29tcGFyZVZhbHVlLCB2YWx1ZSwgb3JpZ2luYWxWYWx1ZV0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0b21pYy5sb2FkVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBhID0gYXRvbWljLmxvYWRWYWx1ZSgpLmxvYWRWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCBiID0gY29tcGFyZVZhbHVlLmxvYWRWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjID0gdmFsdWUubG9hZFZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXRvbWljLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGMpLCAx
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZS5sb2FkVmFs
dWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZS5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChhKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICB0aGlzLl9tYXAuc2V0
KAotICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5n
ZShhdG9taWNfaW50KiAke2FkZHJlc3NTcGFjZX0saW50LGludCxpbnQqIHRocmVhZClgLAotICAg
ICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gZnVuY3Rpb24oW2F0b21pYywgY29tcGFyZVZhbHVlLCB2YWx1ZSwgb3JpZ2luYWxW
YWx1ZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRvbWljLmxvYWRWYWx1ZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbQXRv
bWljc10iLCAiTnVsbCBhdG9taWMgcG9pbnRlciIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGV0IGEgPSBhdG9taWMubG9hZFZhbHVlKCkubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgYiA9IGNvbXBhcmVWYWx1ZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCBjID0gdmFsdWUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pYy5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChjKSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAob3JpZ2luYWxWYWx1ZS5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcmlnaW5hbFZhbHVlLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KGEpLCAxKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBJbnRl
cmxvY2tlZENvbXBhcmVFeGNoYW5nZShhdG9taWNfaW50KiAke2FkZHJlc3NTcGFjZTF9LGludCxp
bnQsaW50KiAke2FkZHJlc3NTcGFjZTJ9KWAsCisgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4g
eworICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9u
KFthdG9taWMsIGNvbXBhcmVWYWx1ZSwgdmFsdWUsIG9yaWdpbmFsVmFsdWVdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdG9taWMubG9hZFZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9y
aWdpblN0cmluZywgIk51bGwgYXRvbWljIHBvaW50ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZXQgYSA9IGF0b21pYy5sb2FkVmFsdWUoKS5sb2FkVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgYiA9IGNvbXBhcmVWYWx1ZS5sb2FkVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYyA9IHZhbHVlLmxvYWRWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0b21pYy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveChjKSwgMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUubG9hZFZhbHVl
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUubG9hZFZh
bHVlKCkuY29weUZyb20oRVB0ci5ib3goYSksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIGZ1bmN0aW9uIGNoZWNrVW5kZWZpbmVkKG9yaWdpbiwgZXhwbGFuYXRpb24sIHZhbHVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKQotICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbTG9hZF0iLCAiVGV4dHVyZSByZWFkIG91
dCBvZiBib3VuZHMiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihvcmln
aW4sICJUZXh0dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gY2hlY2tGYWxzZShvcmlnaW4sIGV4
cGxhbmF0aW9uLCB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHZhbHVlID09IGZh
bHNlKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbU3RvcmVdIiwgIlRl
eHR1cmUgc3RvcmUgb3V0IG9mIGJvdW5kcyIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBX
VHJhcEVycm9yKG9yaWdpbiwgIlRleHR1cmUgc3RvcmUgb3V0IG9mIGJvdW5kcyIpOwogICAgICAg
ICB9CiAKICAgICAgICAgZnVuY3Rpb24gYm94VmVjdG9yKGEpCkBAIC0xMTYwLDMzICsxMTYyLDM3
IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAg
ICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUx
RDwke3R5cGV9JHtsZW5ndGh9PixpbnQyIGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAgICAgICAg
IGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9
IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZCgiW0xvYWRdIiwgIlRleHR1cmUg
cmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZCgw
LCBsb2NhdGlvbi5nZXQoMSksIDAsIDAsIGxvY2F0aW9uLmdldCgwKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIGxv
Y2F0aW9uXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3hW
ZWN0b3IoY2hlY2tVbmRlZmluZWQobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVyZSBy
ZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAs
IGxvY2F0aW9uLmdldCgxKSwgMCwgMCwgbG9jYXRpb24uZ2V0KDApKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB0
aGlzLl9tYXAuc2V0KAogICAgICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0
aH0gTG9hZChUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4saW50MiBsb2NhdGlvbixpbnQgb2Zm
c2V0KWAsCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb24s
IG9mZnNldF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9y
KGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0
ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAsIGxvY2F0aW9uLmdldCgxKSwgMCwg
MCwgbG9jYXRpb24uZ2V0KDApICsgb2Zmc2V0LmxvYWRWYWx1ZSgpKSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB0
aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5z
aW9ucyhUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4sdWludCBNaXBMZXZlbCx1aW50KiB0aHJl
YWQgV2lkdGgsdWludCogdGhyZWFkIE51bWJlck9mTGV2ZWxzKWAsCi0gICAgICAgICAgICAgICAg
ICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlv
biA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCBtaXBsZXZlbCwgd2lkdGgsIG51bWJlck9mTGV2ZWxzXSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaXBJRCA9IG1pcGxldmVsLmxv
YWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaXBJRCA+PSB0ZXgu
bGV2ZWxDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
cmFwRXJyb3IoIltHZXREaW1lbnNpb25zXSIsICJSZWFkaW5nIGZyb20gbm9uZXhpc3RhbnQgbWlw
IGxldmVsIG9mIHRleHR1cmUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lk
dGgubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmxv
YWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aEF0TGV2ZWwobWlwSUQpKSwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscy5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCksIDEpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwg
bG9jYXRpb24sIG9mZnNldF0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50
Q2hlY2tlZCgwLCBsb2NhdGlvbi5nZXQoMSksIDAsIDAsIGxvY2F0aW9uLmdldCgwKSArIG9mZnNl
dC5sb2FkVmFsdWUoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBb
InRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGxldCBhZGRyZXNzU3BhY2UyIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRl
dmljZSJdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmUx
RDwke3R5cGV9JHtsZW5ndGh9Pix1aW50IE1pcExldmVsLHVpbnQqICR7YWRkcmVzc1NwYWNlMX0g
V2lkdGgsdWludCogJHthZGRyZXNzU3BhY2UyfSBOdW1iZXJPZkxldmVscylgLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIG1pcGxldmVsLCB3
aWR0aCwgbnVtYmVyT2ZMZXZlbHNdLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCBtaXBJRCA9IG1pcGxldmVsLmxvYWRWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pcElEID49IHRleC5sZXZl
bENvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHJhcEVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlYWRpbmcgZnJvbSBub25l
eGlzdGFudCBtaXAgbGV2ZWwgb2YgdGV4dHVyZSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRl
eC53aWR0aEF0TGV2ZWwobWlwSUQpKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkuY29weUZy
b20oRVB0ci5ib3godGV4LmxldmVsQ291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgIHRoaXMuX21h
cC5zZXQoCisgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICAgICAg
ICAgYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlMURBcnJheTwke3R5cGV9
JHtsZW5ndGh9PixzYW1wbGVyLGZsb2F0MiBsb2NhdGlvbilgLAogICAgICAgICAgICAgICAgICAg
ICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSBmdW5jdGlvbihbdGV4dHVyZSwgc2FtcGxlciwgbG9jYXRpb25dKSB7CkBAIC0xMjA2LDM1ICsx
MjEyLDQxIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgIHRoaXMuX21hcC5z
ZXQoCiAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRl
eHR1cmUxREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LGludDMgbG9jYXRpb24pYCwKICAgICAgICAg
ICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxl
bWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0i
LCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1l
bnRDaGVja2VkKGxvY2F0aW9uLmdldCgyKSwgbG9jYXRpb24uZ2V0KDEpLCAwLCAwLCBsb2NhdGlv
bi5nZXQoMCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9u
ID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0sIG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2Fk
VmFsdWUoKS5lbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMiksIGxvY2F0aW9uLmdldCgxKSwg
MCwgMCwgbG9jYXRpb24uZ2V0KDApKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAogICAg
ICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChUZXh0dXJlMURB
cnJheTwke3R5cGV9JHtsZW5ndGh9PixpbnQzIGxvY2F0aW9uLGludCBvZmZzZXQpYCwKICAgICAg
ICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbiwgb2Zmc2V0XSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3hWZWN0b3IoY2hlY2tVbmRlZmlu
ZWQoIltMb2FkXSIsICJUZXh0dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZh
bHVlKCkuZWxlbWVudENoZWNrZWQobG9jYXRpb24uZ2V0KDIpLCBsb2NhdGlvbi5nZXQoMSksIDAs
IDAsIGxvY2F0aW9uLmdldCgwKSArIG9mZnNldC5sb2FkVmFsdWUoKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIGxv
Y2F0aW9uLCBvZmZzZXRdLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZChub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJU
ZXh0dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxlbWVudENo
ZWNrZWQobG9jYXRpb24uZ2V0KDIpLCBsb2NhdGlvbi5nZXQoMSksIDAsIDAsIGxvY2F0aW9uLmdl
dCgwKSArIG9mZnNldC5sb2FkVmFsdWUoKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTFE
QXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sdWludCBNaXBMZXZlbCx1aW50KiB0aHJlYWQgV2lkdGgs
dWludCogdGhyZWFkIEVsZW1lbnRzLHVpbnQqIHRocmVhZCBOdW1iZXJPZkxldmVscylgLAotICAg
ICAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMu
aW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVyZSwgbWlwbGV2ZWwsIHdpZHRoLCBlbGVt
ZW50cywgbnVtYmVyT2ZMZXZlbHNdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IHRleCA9IHRleHR1cmUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGV0IG1pcElEID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1pcElEID49IHRleC5sZXZlbENvdW50KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcigiW0dldERpbWVuc2lvbnNdIiwgIlJlYWRp
bmcgZnJvbSBub25leGlzdGFudCBtaXAgbGV2ZWwgb2YgdGV4dHVyZSIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4Lndp
ZHRoQXRMZXZlbChtaXBJRCkpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudHMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5sYXllckNvdW50KSwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscy5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCksIDEpOworICAgICAgICAg
ICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAi
LCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNl
MiBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbInRocmVhZCIsICJ0aHJlYWRn
cm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21h
cC5zZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXRE
aW1lbnNpb25zKFRleHR1cmUxREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQgTWlwTGV2ZWws
dWludCogJHthZGRyZXNzU3BhY2UxfSBXaWR0aCx1aW50KiAke2FkZHJlc3NTcGFjZTJ9IEVsZW1l
bnRzLHVpbnQqICR7YWRkcmVzc1NwYWNlM30gTnVtYmVyT2ZMZXZlbHMpYCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIG1pcGxl
dmVsLCB3aWR0aCwgZWxlbWVudHMsIG51bWJlck9mTGV2ZWxzXSwgbm9kZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaXBJRCA9
IG1pcGxldmVsLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtaXBJRCA+PSB0ZXgubGV2ZWxDb3VudCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBsZXZlbCBvZiB0ZXh0
dXJlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRo
LmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGhBdExldmVsKG1p
cElEKSksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50cy5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmxheWVy
Q291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIu
Ym94KHRleC5sZXZlbENvdW50KSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0
KAorICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIGBu
YXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+
LHNhbXBsZXIsZmxvYXQyIGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4g
ewogICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9u
KFt0ZXh0dXJlLCBzYW1wbGVyLCBsb2NhdGlvbl0pIHsKQEAgLTE0MDAsMzUgKzE0MTIsNDEgQEAg
Y2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAg
ICAgICAgICAgICAgICAgYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTJEPCR7
dHlwZX0ke2xlbmd0aH0+LGludDMgbG9jYXRpb24pYCwKICAgICAgICAgICAgICAgICAgICAgZnVu
YyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVu
Y3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAiVGV4dHVyZSByZWFk
IG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAsIGxv
Y2F0aW9uLmdldCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0
ZXh0dXJlLCBsb2NhdGlvbl0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50
Q2hlY2tlZCgwLCBsb2NhdGlvbi5nZXQoMiksIDAsIGxvY2F0aW9uLmdldCgxKSwgbG9jYXRpb24u
Z2V0KDApKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAogICAgICAgICAgICAgICAgICAg
ICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3Ro
fT4saW50MyBsb2NhdGlvbixpbnQyIG9mZnNldClgLAogICAgICAgICAgICAgICAgICAgICBmdW5j
ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5j
dGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uLCBvZmZzZXRdKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZCgiW0xvYWRdIiwgIlRleHR1
cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tl
ZCgwLCBsb2NhdGlvbi5nZXQoMiksIDAsIGxvY2F0aW9uLmdldCgxKSArIG9mZnNldC5nZXQoMSks
IGxvY2F0aW9uLmdldCgwKSArIG9mZnNldC5nZXQoMCkpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbiwg
b2Zmc2V0XSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3hW
ZWN0b3IoY2hlY2tVbmRlZmluZWQobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVyZSBy
ZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAs
IGxvY2F0aW9uLmdldCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpICsgb2Zmc2V0LmdldCgxKSwgbG9j
YXRpb24uZ2V0KDApICsgb2Zmc2V0LmdldCgwKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNl
dCgKLSAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVy
ZTJEPCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQgTWlwTGV2ZWwsdWludCogdGhyZWFkIFdpZHRoLHVp
bnQqIHRocmVhZCBIZWlnaHQsdWludCogdGhyZWFkIE51bWJlck9mTGV2ZWxzKWAsCi0gICAgICAg
ICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBs
ZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCBtaXBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
bnVtYmVyT2ZMZXZlbHNdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9
IHRleHR1cmUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1p
cElEID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1pcElEID49IHRleC5sZXZlbENvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcigiW0dldERpbWVuc2lvbnNdIiwgIlJlYWRpbmcgZnJv
bSBub25leGlzdGFudCBtaXAgbGV2ZWwgb2YgdGV4dHVyZSIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoQXRM
ZXZlbChtaXBJRCkpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0
LmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9h
ZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmhlaWdodEF0TGV2ZWwobWlwSUQpKSwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscy5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCksIDEpOworICAgICAgICAg
ICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAi
LCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNl
MiBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbInRocmVhZCIsICJ0aHJlYWRn
cm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21h
cC5zZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXRE
aW1lbnNpb25zKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Pix1aW50IE1pcExldmVsLHVpbnQq
ICR7YWRkcmVzc1NwYWNlMX0gV2lkdGgsdWludCogJHthZGRyZXNzU3BhY2UyfSBIZWlnaHQsdWlu
dCogJHthZGRyZXNzU3BhY2UzfSBOdW1iZXJPZkxldmVscylgLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVyZSwgbWlwbGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIG51bWJlck9mTGV2ZWxzXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaXBJRCA9IG1pcGxldmVs
LmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtaXBJRCA+PSB0ZXgubGV2ZWxDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBsZXZlbCBvZiB0ZXh0dXJlIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5s
b2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGhBdExldmVsKG1pcElEKSksIDEp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWlnaHQubG9h
ZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXguaGVpZ2h0QXRMZXZlbChtaXBJ
RCkpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVt
YmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94
KHRleC5sZXZlbENvdW50KSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAor
ICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIGBuYXRp
dmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3Ro
fT4sc2FtcGxlcixmbG9hdDMgbG9jYXRpb24pYCwKICAgICAgICAgICAgICAgICAgICAgZnVuYyA9
PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rp
b24oW3RleHR1cmUsIHNhbXBsZXIsIGxvY2F0aW9uXSkgewpAQCAtMTU5NCwzNyArMTYxMiw0NSBA
QCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAogICAg
ICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChUZXh0dXJlMkRB
cnJheTwke3R5cGV9JHtsZW5ndGh9PixpbnQ0IGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlv
biA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZCgiW0xvYWRdIiwgIlRleHR1
cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tl
ZChsb2NhdGlvbi5nZXQoMyksIGxvY2F0aW9uLmdldCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpLCBs
b2NhdGlvbi5nZXQoMCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0sIG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVy
ZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMyksIGxvY2F0aW9uLmdl
dCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAg
IHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgJHt0eXBlfSR7bGVu
Z3RofSBMb2FkKFRleHR1cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LGludDQgbG9jYXRpb24s
aW50MiBvZmZzZXQpYCwKICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBs
b2NhdGlvbiwgb2Zmc2V0XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBi
b3hWZWN0b3IoY2hlY2tVbmRlZmluZWQoIltMb2FkXSIsICJUZXh0dXJlIHJlYWQgb3V0IG9mIGJv
dW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxlbWVudENoZWNrZWQobG9jYXRpb24uZ2V0KDMp
LCBsb2NhdGlvbi5nZXQoMiksIDAsIGxvY2F0aW9uLmdldCgxKSArIG9mZnNldC5nZXQoMSksIGxv
Y2F0aW9uLmdldCgwKSArIG9mZnNldC5nZXQoMCkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHRoaXMuX21hcC5z
ZXQoCi0gICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1
cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQgTWlwTGV2ZWwsdWludCogdGhyZWFkIFdp
ZHRoLHVpbnQqIHRocmVhZCBIZWlnaHQsdWludCogdGhyZWFkIEVsZW1lbnRzLHVpbnQqIHRocmVh
ZCBOdW1iZXJPZkxldmVscylgLAotICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVy
ZSwgbWlwbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnRzLCBudW1iZXJPZkxldmVsc10pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWlwSUQgPSBtaXBsZXZlbC5sb2Fk
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWlwSUQgPj0gdGV4Lmxl
dmVsQ291bnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJh
cEVycm9yKCJbR2V0RGltZW5zaW9uc10iLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBs
ZXZlbCBvZiB0ZXh0dXJlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRo
LmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGhBdExldmVsKG1pcElEKSksIDEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWlnaHQubG9hZFZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC5sb2FkVmFsdWUoKS5jb3B5RnJvbShF
UHRyLmJveCh0ZXguaGVpZ2h0QXRMZXZlbChtaXBJRCkpLCAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5s
YXllckNvdW50KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9m
TGV2ZWxzLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1i
ZXJPZkxldmVscy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCks
IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0
aW9uIChbdGV4dHVyZSwgbG9jYXRpb24sIG9mZnNldF0sIG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2Fk
VmFsdWUoKS5lbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMyksIGxvY2F0aW9uLmdldCgyKSwg
MCwgbG9jYXRpb24uZ2V0KDEpICsgb2Zmc2V0LmdldCgxKSwgbG9jYXRpb24uZ2V0KDApICsgb2Zm
c2V0LmdldCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBbInRo
cmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKGxldCBhZGRyZXNzU3BhY2UyIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmlj
ZSJdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UzIG9m
IFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmljZSJdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlNCBvZiBbInRocmVhZCIsICJ0aHJlYWRn
cm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2
b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sdWludCBN
aXBMZXZlbCx1aW50KiAke2FkZHJlc3NTcGFjZTF9IFdpZHRoLHVpbnQqICR7YWRkcmVzc1NwYWNl
Mn0gSGVpZ2h0LHVpbnQqICR7YWRkcmVzc1NwYWNlM30gRWxlbWVudHMsdWludCogJHthZGRyZXNz
U3BhY2U0fSBOdW1iZXJPZkxldmVscylgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCBtaXBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZWxlbWVudHMsIG51bWJlck9mTGV2ZWxzXSwgbm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1p
cElEID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtaXBJRCA+PSB0ZXgubGV2ZWxDb3VudCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9y
KG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlJlYWRpbmcgZnJvbSBub25leGlzdGFudCBtaXAg
bGV2ZWwgb2YgdGV4dHVyZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJv
eCh0ZXgud2lkdGhBdExldmVsKG1pcElEKSksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0LmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNv
cHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHRBdExldmVsKG1pcElEKSksIDEpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVl
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50cy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGF5ZXJDb3VudCksIDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZM
ZXZlbHMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXJPZkxldmVscy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0
ZXgubGV2ZWxDb3VudCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KAogICAgICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0g
U2FtcGxlKFRleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PixzYW1wbGVyLGZsb2F0MyBsb2NhdGlv
bilgLAogICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVyZSwgc2FtcGxlciwgbG9j
YXRpb25dKSB7CkBAIC0xNjQ0LDM3ICsxNjcwLDQ1IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAg
ICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUg
JHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PixpbnQ0IGxv
Y2F0aW9uKWAsCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRp
b25dKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveFZlY3RvcihjaGVj
a1VuZGVmaW5lZCgiW0xvYWRdIiwgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVy
ZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZCgwLCBsb2NhdGlvbi5nZXQoMyksIGxvY2F0aW9u
LmdldCgyKSwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBs
b2NhdGlvbl0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94
VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlRleHR1cmUg
cmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZCgw
LCBsb2NhdGlvbi5nZXQoMyksIGxvY2F0aW9uLmdldCgyKSwgbG9jYXRpb24uZ2V0KDEpLCBsb2Nh
dGlvbi5nZXQoMCkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAg
ICAgICAgIGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUzRDwke3R5cGV9JHts
ZW5ndGh9PixpbnQ0IGxvY2F0aW9uLGludDMgb2Zmc2V0KWAsCiAgICAgICAgICAgICAgICAgICAg
IGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9
IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb24sIG9mZnNldF0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAi
VGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRD
aGVja2VkKDAsIGxvY2F0aW9uLmdldCgzKSwgbG9jYXRpb24uZ2V0KDIpICsgb2Zmc2V0LmdldCgy
KSwgbG9jYXRpb24uZ2V0KDEpICsgb2Zmc2V0LmdldCgxKSwgbG9jYXRpb24uZ2V0KDApICsgb2Zm
c2V0LmdldCgwKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAg
ICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTNEPCR7dHlwZX0ke2xlbmd0
aH0+LHVpbnQgTWlwTGV2ZWwsdWludCogdGhyZWFkIFdpZHRoLHVpbnQqIHRocmVhZCBIZWlnaHQs
dWludCogdGhyZWFkIERlcHRoLHVpbnQqIHRocmVhZCBOdW1iZXJPZkxldmVscylgLAotICAgICAg
ICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1w
bGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVyZSwgbWlwbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBudW1iZXJPZkxldmVsc10pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZXQgbWlwSUQgPSBtaXBsZXZlbC5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobWlwSUQgPj0gdGV4LmxldmVsQ291bnQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbR2V0RGltZW5zaW9uc10iLCAiUmVh
ZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBsZXZlbCBvZiB0ZXh0dXJlIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgu
d2lkdGhBdExldmVsKG1pcElEKSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoZWlnaHQubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXguaGVpZ2h0QXRMZXZlbChtaXBJ
RCkpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGgubG9hZFZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLmxvYWRWYWx1ZSgpLmNv
cHlGcm9tKEVQdHIuYm94KHRleC5kZXB0aEF0TGV2ZWwobWlwSUQpKSwgMSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscy5sb2FkVmFsdWUoKS5jb3B5
RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCksIDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb24sIG9m
ZnNldF0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVj
dG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVh
ZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZCgwLCBs
b2NhdGlvbi5nZXQoMyksIGxvY2F0aW9uLmdldCgyKSArIG9mZnNldC5nZXQoMiksIGxvY2F0aW9u
LmdldCgxKSArIG9mZnNldC5nZXQoMSksIGxvY2F0aW9uLmdldCgwKSArIG9mZnNldC5nZXQoMCkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQiLCAidGhy
ZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRk
cmVzc1NwYWNlMiBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbInRocmVhZCIs
ICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAobGV0IGFkZHJlc3NTcGFjZTQgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2
aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1l
bnNpb25zKFRleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9Pix1aW50IE1pcExldmVsLHVpbnQqICR7
YWRkcmVzc1NwYWNlMX0gV2lkdGgsdWludCogJHthZGRyZXNzU3BhY2UyfSBIZWlnaHQsdWludCog
JHthZGRyZXNzU3BhY2UzfSBEZXB0aCx1aW50KiAke2FkZHJlc3NTcGFjZTR9IE51bWJlck9mTGV2
ZWxzKWAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9u
ID0gZnVuY3Rpb24oW3RleHR1cmUsIG1pcGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbnVt
YmVyT2ZMZXZlbHNdLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWlwSUQgPSBtaXBsZXZlbC5sb2FkVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1p
cElEID49IHRleC5sZXZlbENvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBsZXZlbCBvZiB0ZXh0dXJlIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2Fk
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aEF0TGV2ZWwobWlw
SUQpKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoZWlnaHQubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4Lmhl
aWdodEF0TGV2ZWwobWlwSUQpKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChkZXB0aC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQ
dHIuYm94KHRleC5kZXB0aEF0TGV2ZWwobWlwSUQpKSwgMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkxldmVscy5sb2FkVmFsdWUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9m
TGV2ZWxzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5sZXZlbENvdW50KSwgMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAg
ICAgICAgICAgICAgIGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGUoVGV4dHVyZUN1YmU8
JHt0eXBlfSR7bGVuZ3RofT4sc2FtcGxlcixmbG9hdDMgbG9jYXRpb24pYCwKICAgICAgICAgICAg
ICAgICAgICAgZnVuYyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIHNhbXBsZXIsIGxvY2F0aW9uXSkgewpAQCAtMTc1
NCwyMDkgKzE3ODgsMjM3IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9p
ZCBHZXREaW1lbnNpb25zKFRleHR1cmVDdWJlPCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQgTWlwTGV2
ZWwsdWludCogdGhyZWFkIFdpZHRoLHVpbnQqIHRocmVhZCBIZWlnaHQsdWludCogdGhyZWFkIE51
bWJlck9mTGV2ZWxzKWAsCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCBt
aXBsZXZlbCwgd2lkdGgsIGhlaWdodCwgbnVtYmVyT2ZMZXZlbHNdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IG1pcElEID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC5sYXllckNvdW50ICE9IDYpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ3ViZSB0ZXh0dXJlIGRv
ZXNuJ3QgaGF2ZSA2IGZhY2VzIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1p
cElEID49IHRleC5sZXZlbENvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1RyYXBFcnJvcigiW0dldERpbWVuc2lvbnNdIiwgIlJlYWRpbmcgZnJvbSBub25l
eGlzdGFudCBtaXAgbGV2ZWwgb2YgdGV4dHVyZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoQXRMZXZlbCht
aXBJRCkpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0LmxvYWRW
YWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVl
KCkuY29weUZyb20oRVB0ci5ib3godGV4LmhlaWdodEF0TGV2ZWwobWlwSUQpKSwgMSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscy5sb2FkVmFsdWUo
KS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCksIDEpOworICAgICAgICAgICAgICAg
IGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2
aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMiBvZiBb
InRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIs
ICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNp
b25zKFRleHR1cmVDdWJlPCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQgTWlwTGV2ZWwsdWludCogJHth
ZGRyZXNzU3BhY2UxfSBXaWR0aCx1aW50KiAke2FkZHJlc3NTcGFjZTJ9IEhlaWdodCx1aW50KiAk
e2FkZHJlc3NTcGFjZTN9IE51bWJlck9mTGV2ZWxzKWAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCBtaXBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgbnVtYmVyT2ZMZXZlbHNdLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUubG9hZFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pcElEID0gbWlwbGV2ZWwubG9h
ZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eC5sYXllckNvdW50ICE9IDYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQ3ViZSB0ZXh0dXJlIGRvZXNuJ3QgaGF2ZSA2IGZhY2Vz
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pcElEID49
IHRleC5sZXZlbENvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZWFk
aW5nIGZyb20gbm9uZXhpc3RhbnQgbWlwIGxldmVsIG9mIHRleHR1cmUiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgp
LmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aEF0TGV2ZWwobWlwSUQpKSwgMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRW
YWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHRBdExldmVsKG1pcElEKSksIDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkxldmVs
cy5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmxldmVs
Q291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAg
ICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFEPCR7dHlwZX0k
e2xlbmd0aH0+LHVpbnQqIHRocmVhZCBXaWR0aClgLAotICAgICAgICAgICAgICAgICAgICBmdW5j
ID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5j
dGlvbihbdGV4dHVyZSwgd2lkdGhdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHdpZHRoLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXh0dXJlLmxvYWRWYWx1ZSgpLndpZHRo
KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgICAgIGBu
YXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFEPCR7dHlwZX0ke2xlbmd0aH0+LGZs
b2F0KiB0aHJlYWQgV2lkdGgpYCwKLSAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW3RleHR1
cmUsIHdpZHRoXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2Fk
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVl
KCkuY29weUZyb20oRVB0ci5ib3godGV4dHVyZS5sb2FkVmFsdWUoKS53aWR0aCksIDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2Ugb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAi
LCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFE
PCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQqICR7YWRkcmVzc1NwYWNlfSBXaWR0aClgLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCB3aWR0aF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20o
RVB0ci5ib3godGV4dHVyZS5sb2FkVmFsdWUoKS53aWR0aCksIDEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2
b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4sZmxvYXQqICR7
YWRkcmVzc1NwYWNlfSBXaWR0aClgLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0
aW9uKFt0ZXh0dXJlLCB3aWR0aF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4dHVyZS5sb2FkVmFsdWUo
KS53aWR0aCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KAogICAgICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0g
TG9hZChSV1RleHR1cmUxRDwke3R5cGV9JHtsZW5ndGh9PixpbnQgbG9jYXRpb24pYCwKICAgICAg
ICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9h
ZF0iLCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVs
ZW1lbnRDaGVja2VkKDAsIDAsIDAsIDAsIGxvY2F0aW9uLmxvYWRWYWx1ZSgpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVy
ZSwgbG9jYXRpb25dLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGJveFZlY3RvcihjaGVja1VuZGVmaW5lZChub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUZXh0
dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxlbWVudENoZWNr
ZWQoMCwgMCwgMCwgMCwgbG9jYXRpb24ubG9hZFZhbHVlKCkpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHRoaXMu
X21hcC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBTdG9yZShSV1RleHR1
cmUxRDwke3R5cGV9JHtsZW5ndGh9Piwke3R5cGV9JHtsZW5ndGh9LHVpbnQgbG9jYXRpb24pYCwK
ICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCB2YWx1ZSwgbG9jYXRpb25d
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGYWxzZSgiW1N0b3JlXSIsICJU
ZXh0dXJlIHdyaXRlIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLnNldEVsZW1l
bnRDaGVja2VkKDAsIDAsIDAsIDAsIGxvY2F0aW9uLmxvYWRWYWx1ZSgpLCB1bmJveFZlY3Rvcih2
YWx1ZSwgbGVuZ3RoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRh
dGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9uXSwgbm9kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2Uobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiVGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5z
ZXRFbGVtZW50Q2hlY2tlZCgwLCAwLCAwLCAwLCBsb2NhdGlvbi5sb2FkVmFsdWUoKSwgdW5ib3hW
ZWN0b3IodmFsdWUsIGxlbmd0aCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAg
ICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMURB
cnJheTwke3R5cGV9JHtsZW5ndGh9Pix1aW50KiB0aHJlYWQgV2lkdGgsdWludCogdGhyZWFkIEVs
ZW1lbnRzKWAsCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCB3aWR0aCwg
ZWxlbWVudHNdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1
cmUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxv
YWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFs
dWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGgpLCAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5s
YXllckNvdW50KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAg
ICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFEQXJyYXk8JHt0eXBl
fSR7bGVuZ3RofT4sZmxvYXQqIHRocmVhZCBXaWR0aCx1aW50KiB0aHJlYWQgRWxlbWVudHMpYCwK
LSAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIHdpZHRoLCBlbGVtZW50c10p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlG
cm9tKEVQdHIuYm94KHRleC53aWR0aCksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChlbGVtZW50cy5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmxheWVyQ291bnQp
LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBbInRocmVhZCIsICJ0
aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBh
ZGRyZXNzU3BhY2UyIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmljZSJdKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFEQXJyYXk8JHt0
eXBlfSR7bGVuZ3RofT4sdWludCogJHthZGRyZXNzU3BhY2UxfSBXaWR0aCx1aW50KiAke2FkZHJl
c3NTcGFjZTJ9IEVsZW1lbnRzKWAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSBmdW5jdGlvbihbdGV4dHVyZSwgd2lkdGgsIGVsZW1lbnRzXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUubG9hZFZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCku
Y29weUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0
ci5ib3godGV4LmxheWVyQ291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbmF0aXZl
IHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUxREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LGZs
b2F0KiAke2FkZHJlc3NTcGFjZTF9IFdpZHRoLHVpbnQqICR7YWRkcmVzc1NwYWNlMn0gRWxlbWVu
dHMpYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0
dXJlLCB3aWR0aCwgZWxlbWVudHNdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJv
eCh0ZXgud2lkdGgpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50cy5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtZW50cy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGF5ZXJD
b3VudCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICAgICAg
ICAgYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoUldUZXh0dXJlMURBcnJheTwke3R5cGV9
JHtsZW5ndGh9PixpbnQyIGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4g
ewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9u
IChbdGV4dHVyZSwgbG9jYXRpb25dKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZCgiW0xvYWRdIiwgIlRleHR1cmUgcmVhZCBvdXQg
b2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5n
ZXQoMSksIDAsIDAsIDAsIGxvY2F0aW9uLmdldCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uXSwg
bm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBib3hWZWN0b3IoY2hl
Y2tVbmRlZmluZWQobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVyZSByZWFkIG91dCBv
ZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKGxvY2F0aW9uLmdl
dCgxKSwgMCwgMCwgMCwgbG9jYXRpb24uZ2V0KDApKSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB0aGlzLl9tYXAu
c2V0KAogICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgU3RvcmUoUldUZXh0dXJlMURB
cnJheTwke3R5cGV9JHtsZW5ndGh9Piwke3R5cGV9JHtsZW5ndGh9LHVpbnQyIGxvY2F0aW9uKWAs
CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9u
XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2UoIltTdG9yZV0iLCAi
VGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5zZXRFbGVt
ZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMSksIDAsIDAsIDAsIGxvY2F0aW9uLmdldCgwKSwgdW5i
b3hWZWN0b3IodmFsdWUsIGxlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMu
aW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIHZhbHVlLCBsb2NhdGlvbl0sIG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZhbHNlKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlRleHR1cmUgd3JpdGUgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9h
ZFZhbHVlKCkuc2V0RWxlbWVudENoZWNrZWQobG9jYXRpb24uZ2V0KDEpLCAwLCAwLCAwLCBsb2Nh
dGlvbi5nZXQoMCksIHVuYm94VmVjdG9yKHZhbHVlLCBsZW5ndGgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAg
IHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1l
bnNpb25zKFJXVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQqIHRocmVhZCBXaWR0aCx1
aW50KiB0aHJlYWQgSGVpZ2h0KWAsCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0
dXJlLCB3aWR0aCwgaGVpZ2h0XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0
ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94
KHRleC5oZWlnaHQpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAg
ICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMkQ8JHt0eXBlfSR7
bGVuZ3RofT4sZmxvYXQqIHRocmVhZCBXaWR0aCxmbG9hdCogdGhyZWFkIEhlaWdodClgLAotICAg
ICAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMu
aW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVyZSwgd2lkdGgsIGhlaWdodF0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQ
dHIuYm94KHRleC53aWR0aCksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICho
ZWlnaHQubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXguaGVpZ2h0KSwgMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAi
ZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMiBv
ZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbmF0
aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Pix1aW50
KiAke2FkZHJlc3NTcGFjZTF9IFdpZHRoLHVpbnQqICR7YWRkcmVzc1NwYWNlMn0gSGVpZ2h0KWAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4dHVyZSwg
d2lkdGgsIGhlaWdodF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
dCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53
aWR0aCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdo
dC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmhlaWdodCksIDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTJE
PCR7dHlwZX0ke2xlbmd0aH0+LGZsb2F0KiAke2FkZHJlc3NTcGFjZTF9IFdpZHRoLGZsb2F0KiAk
e2FkZHJlc3NTcGFjZTJ9IEhlaWdodClgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0
aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIHdpZHRoLCBoZWlnaHRdKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUo
KS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGgpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChoZWlnaHQubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIu
Ym94KHRleC5oZWlnaHQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAg
ICAgICAgICAgICAgIGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFJXVGV4dHVyZTJEPCR7
dHlwZX0ke2xlbmd0aH0+LGludDIgbG9jYXRpb24pYCwKICAgICAgICAgICAgICAgICAgICAgZnVu
YyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVu
Y3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAiVGV4dHVyZSByZWFk
IG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAsIDAs
IDAsIGxvY2F0aW9uLmdldCgxKSwgbG9jYXRpb24uZ2V0KDApKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRp
b25dLCBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveFZlY3Rv
cihjaGVja1VuZGVmaW5lZChub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUZXh0dXJlIHJlYWQg
b3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxlbWVudENoZWNrZWQoMCwgMCwg
MCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHRoaXMu
X21hcC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBTdG9yZShSV1RleHR1
cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwke3R5cGV9JHtsZW5ndGh9LHVpbnQyIGxvY2F0aW9uKWAs
CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9u
XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2UoIltTdG9yZV0iLCAi
VGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5zZXRFbGVt
ZW50Q2hlY2tlZCgwLCAwLCAwLCBsb2NhdGlvbi5nZXQoMSksIGxvY2F0aW9uLmdldCgwKSwgdW5i
b3hWZWN0b3IodmFsdWUsIGxlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMu
aW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIHZhbHVlLCBsb2NhdGlvbl0sIG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZhbHNlKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlRleHR1cmUgd3JpdGUgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9h
ZFZhbHVlKCkuc2V0RWxlbWVudENoZWNrZWQoMCwgMCwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2Nh
dGlvbi5nZXQoMCksIHVuYm94VmVjdG9yKHZhbHVlLCBsZW5ndGgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgICAg
IHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1l
bnNpb25zKFJXVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sdWludCogdGhyZWFkIFdp
ZHRoLHVpbnQqIHRocmVhZCBIZWlnaHQsdWludCogdGhyZWFkIEVsZW1lbnRzKWAsCi0gICAgICAg
ICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBs
ZW1lbnRhdGlvbiA9IGZ1bmN0aW9uKFt0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50c10p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlG
cm9tKEVQdHIuYm94KHRleC53aWR0aCksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoZWlnaHQubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXguaGVpZ2h0KSwgMSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxvYWRWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5sb2FkVmFsdWUoKS5jb3B5RnJv
bShFUHRyLmJveCh0ZXgubGF5ZXJDb3VudCksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0
KAotICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1
cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LGZsb2F0KiB0aHJlYWQgV2lkdGgsZmxvYXQqIHRo
cmVhZCBIZWlnaHQsZmxvYXQqIHRocmVhZCBFbGVtZW50cylgLAotICAgICAgICAgICAgICAgICAg
ICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24g
PSBmdW5jdGlvbihbdGV4dHVyZSwgd2lkdGgsIGhlaWdodCwgZWxlbWVudHNdKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUubG9hZFZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJv
eCh0ZXgud2lkdGgpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0
LmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9h
ZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmhlaWdodCksIDEpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3go
dGV4LmxheWVyQ291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3Bh
Y2UxIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmljZSJdKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTIgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3Jv
dXAiLCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJl
c3NTcGFjZTMgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUyREFycmF5
PCR7dHlwZX0ke2xlbmd0aH0+LHVpbnQqICR7YWRkcmVzc1NwYWNlMX0gV2lkdGgsdWludCogJHth
ZGRyZXNzU3BhY2UyfSBIZWlnaHQsdWludCogJHthZGRyZXNzU3BhY2UzfSBFbGVtZW50cylgLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbihbdGV4
dHVyZSwgd2lkdGgsIGhlaWdodCwgZWxlbWVudHNdKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUubG9hZFZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFs
dWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGgpLCAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0LmxvYWRWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCkuY29w
eUZyb20oRVB0ci5ib3godGV4LmhlaWdodCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZy
b20oRVB0ci5ib3godGV4LmxheWVyQ291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMkRBcnJh
eTwke3R5cGV9JHtsZW5ndGh9PixmbG9hdCogJHthZGRyZXNzU3BhY2UxfSBXaWR0aCxmbG9hdCog
JHthZGRyZXNzU3BhY2UyfSBIZWlnaHQsZmxvYXQqICR7YWRkcmVzc1NwYWNlM30gRWxlbWVudHMp
YCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24o
W3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnRzXSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9h
ZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgp
LmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLmxvYWRWYWx1ZSgpLmNv
cHlGcm9tKEVQdHIuYm94KHRleC5sYXllckNvdW50KSwgMSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0aGlz
Ll9tYXAuc2V0KAogICAgICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0g
TG9hZChSV1RleHR1cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LGludDMgbG9jYXRpb24pYCwK
ICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVk
KCJbTG9hZF0iLCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1
ZSgpLmVsZW1lbnRDaGVja2VkKGxvY2F0aW9uLmdldCgyKSwgMCwgMCwgbG9jYXRpb24uZ2V0KDEp
LCBsb2NhdGlvbi5nZXQoMCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxl
bWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlvbl0sIG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4
dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMiksIDAsIDAsIGxv
Y2F0aW9uLmdldCgxKSwgbG9jYXRpb24uZ2V0KDApKSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB0aGlzLl9tYXAu
c2V0KAogICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgU3RvcmUoUldUZXh0dXJlMkRB
cnJheTwke3R5cGV9JHtsZW5ndGh9Piwke3R5cGV9JHtsZW5ndGh9LHVpbnQzIGxvY2F0aW9uKWAs
CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9u
XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2UoIltTdG9yZV0iLCAi
VGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5zZXRFbGVt
ZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMiksIDAsIDAsIGxvY2F0aW9uLmdldCgxKSwgbG9jYXRp
b24uZ2V0KDApLCB1bmJveFZlY3Rvcih2YWx1ZSwgbGVuZ3RoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUs
IGxvY2F0aW9uXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFs
c2Uobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRz
IiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5zZXRFbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMiks
IDAsIDAsIGxvY2F0aW9uLmdldCgxKSwgbG9jYXRpb24uZ2V0KDApLCB1bmJveFZlY3Rvcih2YWx1
ZSwgbGVuZ3RoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9KTsKIAotICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAg
ICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUzRDwke3R5cGV9JHts
ZW5ndGh9Pix1aW50KiB0aHJlYWQgV2lkdGgsdWludCogdGhyZWFkIEhlaWdodCx1aW50KiB0aHJl
YWQgRGVwdGgpYCwKLSAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXgg
PSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3
aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgu
bG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRl
eC5oZWlnaHQpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGgubG9h
ZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLmxvYWRWYWx1
ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5kZXB0aCksIDEpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9t
YXAuc2V0KAotICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhS
V1RleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PixmbG9hdCogdGhyZWFkIFdpZHRoLGZsb2F0KiB0
aHJlYWQgSGVpZ2h0LGZsb2F0KiB0aHJlYWQgRGVwdGgpYCwKLSAgICAgICAgICAgICAgICAgICAg
ZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0g
ZnVuY3Rpb24oW3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGRlcHRoXSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4
LndpZHRoKSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2Fk
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1
ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQpLCAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZGVwdGgubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlcHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5kZXB0aCks
IDEpOworICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQi
LCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChs
ZXQgYWRkcmVzc1NwYWNlMiBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbInRo
cmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBg
bmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9Pix1
aW50KiAke2FkZHJlc3NTcGFjZTF9IFdpZHRoLHVpbnQqICR7YWRkcmVzc1NwYWNlMn0gSGVpZ2h0
LHVpbnQqICR7YWRkcmVzc1NwYWNlM30gRGVwdGgpYCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24oW3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXgg
PSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4
LndpZHRoKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhlaWdodC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQp
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGgu
bG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlcHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5kZXB0aCksIDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5z
aW9ucyhSV1RleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PixmbG9hdCogJHthZGRyZXNzU3BhY2Ux
fSBXaWR0aCxmbG9hdCogJHthZGRyZXNzU3BhY2UyfSBIZWlnaHQsZmxvYXQqICR7YWRkcmVzc1Nw
YWNlM30gRGVwdGgpYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9u
ID0gZnVuY3Rpb24oW3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGRlcHRoXSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5s
b2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Lmxv
YWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQpLCAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGgubG9hZFZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLmxvYWRWYWx1ZSgp
LmNvcHlGcm9tKEVQdHIuYm94KHRleC5kZXB0aCksIDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdGhpcy5f
bWFwLnNldCgKICAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExv
YWQoUldUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3RofT4saW50MyBsb2NhdGlvbilgLAogICAgICAg
ICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1w
bGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uXSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBib3hWZWN0b3IoY2hlY2tVbmRlZmluZWQoIltMb2Fk
XSIsICJUZXh0dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxl
bWVudENoZWNrZWQoMCwgMCwgbG9jYXRpb24uZ2V0KDIpLCBsb2NhdGlvbi5nZXQoMSksIGxvY2F0
aW9uLmdldCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRp
b24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uXSwgbm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBib3hWZWN0b3IoY2hlY2tVbmRlZmluZWQobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxv
YWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAsIDAsIGxvY2F0aW9uLmdldCgyKSwgbG9jYXRpb24u
Z2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAg
ICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBTdG9yZShSV1RleHR1cmUzRDwke3R5cGV9
JHtsZW5ndGh9Piwke3R5cGV9JHtsZW5ndGh9LHVpbnQzIGxvY2F0aW9uKWAsCiAgICAgICAgICAg
ICAgICAgICAgIGZ1bmMgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1l
bnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9uXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2UoIltTdG9yZV0iLCAiVGV4dHVyZSB3cml0
ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5zZXRFbGVtZW50Q2hlY2tlZCgw
LCAwLCBsb2NhdGlvbi5nZXQoMiksIGxvY2F0aW9uLmdldCgxKSwgbG9jYXRpb24uZ2V0KDApLCB1
bmJveFZlY3Rvcih2YWx1ZSwgbGVuZ3RoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZnVu
Yy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9uXSwg
bm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2Uobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5s
b2FkVmFsdWUoKS5zZXRFbGVtZW50Q2hlY2tlZCgwLCAwLCBsb2NhdGlvbi5nZXQoMiksIGxvY2F0
aW9uLmdldCgxKSwgbG9jYXRpb24uZ2V0KDApLCB1bmJveFZlY3Rvcih2YWx1ZSwgbGVuZ3RoKSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0KQEAgLTIxNDAsMzMgKzIyMDIsMzkgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAg
ICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAogICAgICAgICAgICAgICAgIGBuYXRpdmUgJHt0eXBl
fSBMb2FkKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LGludDMgbG9jYXRpb24pYCwKICAgICAgICAg
ICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlv
biA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAiVGV4dHVyZSBy
ZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKDAs
IGxvY2F0aW9uLmdldCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3Rl
eHR1cmUsIGxvY2F0aW9uXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGJveFZlY3RvcihjaGVja1VuZGVmaW5lZChub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUZXh0
dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxlbWVudENoZWNr
ZWQoMCwgbG9jYXRpb24uZ2V0KDIpLCAwLCBsb2NhdGlvbi5nZXQoMSksIGxvY2F0aW9uLmdldCgw
KSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0gTG9h
ZChUZXh0dXJlRGVwdGgyRDwke3R5cGV9PixpbnQzIGxvY2F0aW9uLGludDIgb2Zmc2V0KWAsCiAg
ICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVt
ZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uLCBvZmZzZXRdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9h
ZF0iLCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVs
ZW1lbnRDaGVja2VkKDAsIGxvY2F0aW9uLmdldCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpICsgb2Zm
c2V0LmdldCgxKSwgbG9jYXRpb24uZ2V0KDApICsgb2Zmc2V0LmdldCgwKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9j
YXRpb24sIG9mZnNldF0sIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBi
b3hWZWN0b3IoY2hlY2tVbmRlZmluZWQobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVGV4dHVy
ZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2Vk
KDAsIGxvY2F0aW9uLmdldCgyKSwgMCwgbG9jYXRpb24uZ2V0KDEpICsgb2Zmc2V0LmdldCgxKSwg
bG9jYXRpb24uZ2V0KDApICsgb2Zmc2V0LmdldCgwKSkpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAg
ICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlRGVwdGgyRDwke3R5
cGV9Pix1aW50IE1pcExldmVsLHVpbnQqIHRocmVhZCBXaWR0aCx1aW50KiB0aHJlYWQgSGVpZ2h0
LHVpbnQqIHRocmVhZCBOdW1iZXJPZkxldmVscylgLAotICAgICAgICAgICAgICAgIGZ1bmMgPT4g
ewotICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0
ZXh0dXJlLCBtaXBsZXZlbCwgd2lkdGgsIGhlaWdodCwgbnVtYmVyT2ZMZXZlbHNdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxldCBtaXBJRCA9IG1pcGxldmVsLmxvYWRWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1pcElEID49IHRleC5sZXZlbENvdW50KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHJhcEVycm9yKCJbR2V0RGltZW5zaW9u
c10iLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBsZXZlbCBvZiB0ZXh0dXJlIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4
LndpZHRoQXRMZXZlbChtaXBJRCkpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICho
ZWlnaHQubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Lmxv
YWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHRBdExldmVsKG1pcElEKSksIDEp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgp
LmNvcHlGcm9tKEVQdHIuYm94KHRleC5sZXZlbENvdW50KSwgMSk7CisgICAgICAgICAgICBmb3Ig
KGxldCBhZGRyZXNzU3BhY2UxIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmljZSJd
KSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMiBvZiBbInRocmVhZCIs
ICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGxl
dCBhZGRyZXNzU3BhY2UzIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmljZSJdKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmVEZXB0aDJEPCR7
dHlwZX0+LHVpbnQgTWlwTGV2ZWwsdWludCogJHthZGRyZXNzU3BhY2UxfSBXaWR0aCx1aW50KiAk
e2FkZHJlc3NTcGFjZTJ9IEhlaWdodCx1aW50KiAke2FkZHJlc3NTcGFjZTN9IE51bWJlck9mTGV2
ZWxzKWAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3Rl
eHR1cmUsIG1pcGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVsc10sIG5vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pcElE
ID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobWlwSUQgPj0gdGV4LmxldmVsQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50IG1pcCBsZXZlbCBvZiB0ZXh0dXJlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVl
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZh
bHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoQXRMZXZlbChtaXBJRCkpLCAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWlnaHQubG9hZFZhbHVlKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1
ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHRBdExldmVsKG1pcElEKSksIDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzLmxvYWRW
YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9m
TGV2ZWxzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5sZXZlbENvdW50KSwgMSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuX21hcC5z
ZXQoCiAgICAgICAgICAgICAgICAgYG5hdGl2ZSAke3R5cGV9IFNhbXBsZShUZXh0dXJlRGVwdGgy
REFycmF5PCR7dHlwZX0+LHNhbXBsZXIsZmxvYXQzIGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAg
ICAgZnVuYyA9PiB7CkBAIC0yMzQ0LDM1ICsyNDEyLDQzIEBAIGNsYXNzIEludHJpbnNpY3Mgewog
ICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlw
ZX0gTG9hZChUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LGludDQgbG9jYXRpb24pYCwKICAg
ICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1l
bnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAiVGV4
dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVj
a2VkKGxvY2F0aW9uLmdldCgzKSwgbG9jYXRpb24uZ2V0KDIpLCAwLCBsb2NhdGlvbi5nZXQoMSks
IGxvY2F0aW9uLmdldCgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRh
dGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dLCBub2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKG5vZGUub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2Fk
VmFsdWUoKS5lbGVtZW50Q2hlY2tlZChsb2NhdGlvbi5nZXQoMyksIGxvY2F0aW9uLmdldCgyKSwg
MCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAg
ICAgICAgICAgICAgICAgYG5hdGl2ZSAke3R5cGV9IExvYWQoVGV4dHVyZURlcHRoMkRBcnJheTwk
e3R5cGV9PixpbnQ0IGxvY2F0aW9uLGludDIgb2Zmc2V0KWAsCiAgICAgICAgICAgICAgICAgZnVu
YyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlv
biAoW3RleHR1cmUsIGxvY2F0aW9uLCBvZmZzZXRdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0iLCAiVGV4dHVyZSByZWFk
IG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1lbnRDaGVja2VkKGxvY2F0
aW9uLmdldCgzKSwgbG9jYXRpb24uZ2V0KDIpLCAwLCBsb2NhdGlvbi5nZXQoMSkgKyBvZmZzZXQu
Z2V0KDEpLCBsb2NhdGlvbi5nZXQoMCkgKyBvZmZzZXQuZ2V0KDApKSkpOworICAgICAgICAgICAg
ICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCBsb2NhdGlv
biwgb2Zmc2V0XSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveFZl
Y3RvcihjaGVja1VuZGVmaW5lZChub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUZXh0dXJlIHJl
YWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuZWxlbWVudENoZWNrZWQobG9j
YXRpb24uZ2V0KDMpLCBsb2NhdGlvbi5nZXQoMiksIDAsIGxvY2F0aW9uLmdldCgxKSArIG9mZnNl
dC5nZXQoMSksIGxvY2F0aW9uLmdldCgwKSArIG9mZnNldC5nZXQoMCkpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX21hcC5z
ZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZURl
cHRoMkRBcnJheTwke3R5cGV9Pix1aW50IE1pcExldmVsLHVpbnQqIHRocmVhZCBXaWR0aCx1aW50
KiB0aHJlYWQgSGVpZ2h0LHVpbnQqIHRocmVhZCBFbGVtZW50cyx1aW50KiB0aHJlYWQgTnVtYmVy
T2ZMZXZlbHMpYCwKLSAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbWlwbGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGVsZW1lbnRzLCBudW1iZXJPZkxldmVsc10pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbGV0IG1pcElEID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWlwSUQgPj0gdGV4LmxldmVsQ291bnQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUcmFwRXJyb3IoIltHZXREaW1lbnNpb25zXSIsICJSZWFk
aW5nIGZyb20gbm9uZXhpc3RhbnQgbWlwIGxldmVsIG9mIHRleHR1cmUiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgud2lkdGhBdExl
dmVsKG1pcElEKSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2Fk
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCku
Y29weUZyb20oRVB0ci5ib3godGV4LmhlaWdodEF0TGV2ZWwobWlwSUQpKSwgMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4
LmxheWVyQ291bnQpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZkxl
dmVscy5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxl
dmVscy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgubGV2ZWxDb3VudCksIDEpOwor
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBbInRocmVhZCIsICJ0aHJlYWRn
cm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFj
ZTIgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91
cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVz
c1NwYWNlNCBvZiBbInRocmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmVEZXB0aDJEQXJy
YXk8JHt0eXBlfT4sdWludCBNaXBMZXZlbCx1aW50KiAke2FkZHJlc3NTcGFjZTF9IFdpZHRoLHVp
bnQqICR7YWRkcmVzc1NwYWNlMn0gSGVpZ2h0LHVpbnQqICR7YWRkcmVzc1NwYWNlM30gRWxlbWVu
dHMsdWludCogJHthZGRyZXNzU3BhY2U0fSBOdW1iZXJPZkxldmVscylgLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIG1pcGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50cywgbnVtYmVyT2ZMZXZlbHNdLCBub2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUu
bG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IG1pcElEID0gbWlwbGV2ZWwubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1pcElEID49IHRleC5sZXZlbENvdW50KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1RyYXBFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZWFkaW5nIGZyb20gbm9uZXhpc3RhbnQgbWlwIGxldmVs
IG9mIHRleHR1cmUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod2lkdGgubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aEF0
TGV2ZWwobWlwSUQpKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5o
ZWlnaHRBdExldmVsKG1pcElEKSksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50cy5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0
ci5ib3godGV4LmxheWVyQ291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgp
LmNvcHlGcm9tKEVQdHIuYm94KHRleC5sZXZlbENvdW50KSwgMSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICAgICBgbmF0aXZlICR7dHlwZX0gU2Ft
cGxlKFRleHR1cmVEZXB0aEN1YmU8JHt0eXBlfT4sc2FtcGxlcixmbG9hdDMgbG9jYXRpb24pYCwK
ICAgICAgICAgICAgICAgICBmdW5jID0+IHsKQEAgLTI0NTUsOTggKzI1MzEsMTE0IEBAIGNsYXNz
IEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJveFZlY3Rvcihn
YXRoZXJUZXh0dXJlKHRleHR1cmUubG9hZFZhbHVlKCksIHNhbXBsZXIubG9hZFZhbHVlKCksIGxv
Y2F0aW9uQXJyYXksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCBjb21wYXJlVmFsdWUubG9hZFZhbHVlKCksIDApKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgK
LSAgICAgICAgICAgICAgICBgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlRGVwdGhD
dWJlPCR7dHlwZX0+LHVpbnQgTWlwTGV2ZWwsdWludCogdGhyZWFkIFdpZHRoLHVpbnQqIHRocmVh
ZCBIZWlnaHQsdWludCogdGhyZWFkIE51bWJlck9mTGV2ZWxzKWAsCi0gICAgICAgICAgICAgICAg
ZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5j
dGlvbiAoW3RleHR1cmUsIG1pcGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVsc10p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1pcElEID0gbWlwbGV2ZWwubG9hZFZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LmxheWVyQ291bnQgIT0gNikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkN1YmUgdGV4dHVyZSBk
b2Vzbid0IGhhdmUgNiBmYWNlcyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pcElE
ID49IHRleC5sZXZlbENvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHJhcEVycm9yKCJbR2V0RGltZW5zaW9uc10iLCAiUmVhZGluZyBmcm9tIG5vbmV4aXN0YW50
IG1pcCBsZXZlbCBvZiB0ZXh0dXJlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lk
dGgubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZh
bHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LndpZHRoQXRMZXZlbChtaXBJRCkpLCAxKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWlnaHQubG9hZFZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRl
eC5oZWlnaHRBdExldmVsKG1pcElEKSksIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bWJlck9mTGV2ZWxzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5sZXZlbENv
dW50KSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdl
dERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgyRDwke3R5cGV9Pix1aW50KiB0aHJlYWQgV2lkdGgs
dWludCogdGhyZWFkIEhlaWdodClgLAotICAgICAgICAgICAgICAgIGZ1bmMgPT4gewotICAgICAg
ICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCB3
aWR0aCwgaGVpZ2h0XSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1
cmUubG9hZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZh
bHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29w
eUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaGVpZ2h0LmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXguaGVpZ2h0KSwgMSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHRoaXMuX21h
cC5zZXQoCi0gICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0
dXJlRGVwdGgyRDwke3R5cGV9PixmbG9hdCogdGhyZWFkIFdpZHRoLGZsb2F0KiB0aHJlYWQgSGVp
Z2h0KWAsCi0gICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIHdpZHRoLCBoZWlnaHRdKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0
ZXgud2lkdGgpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWlnaHQubG9hZFZh
bHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNv
cHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQpLCAxKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFk
ZHJlc3NTcGFjZTEgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UyIG9mIFsidGhyZWFkIiwgInRocmVh
ZGdyb3VwIiwgImRldmljZSJdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJl
c3NTcGFjZTMgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9
Pix1aW50IE1pcExldmVsLHVpbnQqICR7YWRkcmVzc1NwYWNlMX0gV2lkdGgsdWludCogJHthZGRy
ZXNzU3BhY2UyfSBIZWlnaHQsdWludCogJHthZGRyZXNzU3BhY2UzfSBOdW1iZXJPZkxldmVscylg
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJl
LCBtaXBsZXZlbCwgd2lkdGgsIGhlaWdodCwgbnVtYmVyT2ZMZXZlbHNdLCBub2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtaXBJRCA9IG1p
cGxldmVsLmxvYWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRleC5sYXllckNvdW50ICE9IDYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDdWJlIHRleHR1cmUgZG9lc24ndCBoYXZlIDYgZmFj
ZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaXBJRCA+PSB0
ZXgubGV2ZWxDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgV1RyYXBFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZWFkaW5nIGZy
b20gbm9uZXhpc3RhbnQgbWlwIGxldmVsIG9mIHRleHR1cmUiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRy
LmJveCh0ZXgud2lkdGhBdExldmVsKG1pcElEKSksIDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5i
b3godGV4LmhlaWdodEF0TGV2ZWwobWlwSUQpKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMubG9hZFZhbHVlKCku
Y29weUZyb20oRVB0ci5ib3godGV4LmxldmVsQ291bnQpLCAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBbInRo
cmVhZCIsICJ0aHJlYWRncm91cCIsICJkZXZpY2UiXSkgeworICAgICAgICAgICAgICAgIGZvciAo
bGV0IGFkZHJlc3NTcGFjZTIgb2YgWyJ0aHJlYWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0p
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZURlcHRoMkQ8JHt0eXBl
fT4sdWludCogJHthZGRyZXNzU3BhY2UxfSBXaWR0aCx1aW50KiAke2FkZHJlc3NTcGFjZTJ9IEhl
aWdodClgLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyA9PiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwg
d2lkdGgsIGhlaWdodF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRl
eCA9IHRleHR1cmUubG9hZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh3aWR0aC5sb2FkVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aCksIDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0LmxvYWRWYWx1ZSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LmxvYWRWYWx1ZSgpLmNv
cHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGBuYXRpdmUgdm9pZCBHZXRE
aW1lbnNpb25zKFJXVGV4dHVyZURlcHRoMkQ8JHt0eXBlfT4sZmxvYXQqICR7YWRkcmVzc1NwYWNl
MX0gV2lkdGgsZmxvYXQqICR7YWRkcmVzc1NwYWNlMn0gSGVpZ2h0KWAsCisgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmlt
cGxlbWVudGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0XSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVyZS5sb2FkVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRWYWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCku
Y29weUZyb20oRVB0ci5ib3godGV4LndpZHRoKSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChoZWlnaHQubG9hZFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4Lmhl
aWdodCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAgICAgYG5hdGl2ZSAke3R5cGV9IExvYWQo
UldUZXh0dXJlRGVwdGgyRDwke3R5cGV9PixpbnQyIGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAg
ICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBm
dW5jdGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uXSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZCgiW0xvYWRdIiwgIlRleHR1cmUgcmVhZCBv
dXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZCgwLCAwLCAw
LCBsb2NhdGlvbi5nZXQoMSksIGxvY2F0aW9uLmdldCgwKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dLCBu
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5k
ZWZpbmVkKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlRleHR1cmUgcmVhZCBvdXQgb2YgYm91
bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5lbGVtZW50Q2hlY2tlZCgwLCAwLCAwLCBsb2NhdGlv
bi5nZXQoMSksIGxvY2F0aW9uLmdldCgwKSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAg
ICAgICBgbmF0aXZlIHZvaWQgU3RvcmUoUldUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwke3R5cGV9
LHVpbnQyIGxvY2F0aW9uKWAsCiAgICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIHZhbHVl
LCBsb2NhdGlvbl0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRmFsc2UoIltTdG9y
ZV0iLCAiVGV4dHVyZSB3cml0ZSBvdXQgb2YgYm91bmRzIiwgdGV4dHVyZS5sb2FkVmFsdWUoKS5z
ZXRFbGVtZW50Q2hlY2tlZCgwLCAwLCAwLCBsb2NhdGlvbi5nZXQoMSksIGxvY2F0aW9uLmdldCgw
KSwgdW5ib3hWZWN0b3IodmFsdWUsICIiKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAg
ICAgIGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZURlcHRoMkRBcnJheTwke3R5
cGV9Pix1aW50KiB0aHJlYWQgV2lkdGgsdWludCogdGhyZWFkIEhlaWdodCx1aW50KiB0aHJlYWQg
RWxlbWVudHMpYCwKLSAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgd2lkdGgsIGhlaWdo
dCwgZWxlbWVudHNdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4ID0gdGV4dHVy
ZS5sb2FkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5sb2FkVmFs
dWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5sb2FkVmFsdWUoKS5jb3B5
RnJvbShFUHRyLmJveCh0ZXgud2lkdGgpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoZWlnaHQubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
LmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC5oZWlnaHQpLCAxKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sb2FkVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50cy5sb2FkVmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXgu
bGF5ZXJDb3VudCksIDEpOworICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9u
ID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCB2YWx1ZSwgbG9jYXRpb25dLCBub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjaGVja0ZhbHNlKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlRl
eHR1cmUgd3JpdGUgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCkuc2V0RWxlbWVu
dENoZWNrZWQoMCwgMCwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCksIHVuYm94
VmVjdG9yKHZhbHVlLCAiIikpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBgbmF0
aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sZmxv
YXQqIHRocmVhZCBXaWR0aCxmbG9hdCogdGhyZWFkIEhlaWdodCxmbG9hdCogdGhyZWFkIEVsZW1l
bnRzKWAsCi0gICAgICAgICAgICAgICAgZnVuYyA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiAoW3RleHR1cmUsIHdpZHRoLCBoZWlnaHQsIGVs
ZW1lbnRzXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleCA9IHRleHR1cmUubG9h
ZFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGgubG9hZFZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgubG9hZFZhbHVlKCkuY29weUZyb20o
RVB0ci5ib3godGV4LndpZHRoKSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVp
Z2h0LmxvYWRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodC5sb2Fk
VmFsdWUoKS5jb3B5RnJvbShFUHRyLmJveCh0ZXguaGVpZ2h0KSwgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudHMubG9hZFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudHMubG9hZFZhbHVlKCkuY29weUZyb20oRVB0ci5ib3godGV4LmxheWVy
Q291bnQpLCAxKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgWyJ0aHJl
YWQiLCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxl
dCBhZGRyZXNzU3BhY2UyIG9mIFsidGhyZWFkIiwgInRocmVhZGdyb3VwIiwgImRldmljZSJdKSB7
CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTMgb2YgWyJ0aHJlYWQi
LCAidGhyZWFkZ3JvdXAiLCAiZGV2aWNlIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lkIEdl
dERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LHVpbnQqICR7YWRkcmVz
c1NwYWNlMX0gV2lkdGgsdWludCogJHthZGRyZXNzU3BhY2UyfSBIZWlnaHQsdWludCogJHthZGRy
ZXNzU3BhY2UzfSBFbGVtZW50cylgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMg
PT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9u
ID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50c10pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxvYWRWYWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoLmxvYWRW
YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmxv
YWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aCksIDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCkuY29weUZy
b20oRVB0ci5ib3godGV4LmhlaWdodCksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVsZW1lbnRzLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94
KHRleC5sYXllckNvdW50KSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG5hdGl2ZSB2b2lk
IEdldERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LGZsb2F0KiAke2Fk
ZHJlc3NTcGFjZTF9IFdpZHRoLGZsb2F0KiAke2FkZHJlc3NTcGFjZTJ9IEhlaWdodCxmbG9hdCog
JHthZGRyZXNzU3BhY2UzfSBFbGVtZW50cylgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmMgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVu
dGF0aW9uID0gZnVuY3Rpb24gKFt0ZXh0dXJlLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50c10pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXggPSB0ZXh0dXJlLmxv
YWRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRo
LmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQdHIuYm94KHRleC53aWR0aCksIDEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodC5sb2FkVmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQubG9hZFZhbHVlKCku
Y29weUZyb20oRVB0ci5ib3godGV4LmhlaWdodCksIDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxvYWRWYWx1ZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLmxvYWRWYWx1ZSgpLmNvcHlGcm9tKEVQ
dHIuYm94KHRleC5sYXllckNvdW50KSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAgICAgYG5hdGl2ZSAk
e3R5cGV9IExvYWQoUldUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LGludDMgbG9jYXRpb24p
YCwKICAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5p
bXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgbG9jYXRpb25dKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gYm94VmVjdG9yKGNoZWNrVW5kZWZpbmVkKCJbTG9hZF0i
LCAiVGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLmVsZW1l
bnRDaGVja2VkKGxvY2F0aW9uLmdldCgyKSwgMCwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlv
bi5nZXQoMCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSBm
dW5jdGlvbiAoW3RleHR1cmUsIGxvY2F0aW9uXSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGJveFZlY3RvcihjaGVja1VuZGVmaW5lZChub2RlLm9yaWdpbi5vcmlnaW5T
dHJpbmcsICJUZXh0dXJlIHJlYWQgb3V0IG9mIGJvdW5kcyIsIHRleHR1cmUubG9hZFZhbHVlKCku
ZWxlbWVudENoZWNrZWQobG9jYXRpb24uZ2V0KDIpLCAwLCAwLCBsb2NhdGlvbi5nZXQoMSksIGxv
Y2F0aW9uLmdldCgwKSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICAgICBgbmF0aXZl
IHZvaWQgU3RvcmUoUldUZXh0dXJlRGVwdGgyREFycmF5PCR7dHlwZX0+LCR7dHlwZX0sdWludDMg
bG9jYXRpb24pYCwKICAgICAgICAgICAgICAgICBmdW5jID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0
aW9uXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGYWxzZSgiW1N0b3JlXSIsICJU
ZXh0dXJlIHdyaXRlIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxvYWRWYWx1ZSgpLnNldEVsZW1l
bnRDaGVja2VkKGxvY2F0aW9uLmdldCgyKSwgMCwgMCwgbG9jYXRpb24uZ2V0KDEpLCBsb2NhdGlv
bi5nZXQoMCksIHVuYm94VmVjdG9yKHZhbHVlLCAiIikpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZnVuYy5pbXBsZW1lbnRhdGlvbiA9IGZ1bmN0aW9uIChbdGV4dHVyZSwgdmFsdWUsIGxvY2F0aW9u
XSwgbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGYWxzZShub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJUZXh0dXJlIHdyaXRlIG91dCBvZiBib3VuZHMiLCB0ZXh0dXJlLmxv
YWRWYWx1ZSgpLnNldEVsZW1lbnRDaGVja2VkKGxvY2F0aW9uLmdldCgyKSwgMCwgMCwgbG9jYXRp
b24uZ2V0KDEpLCBsb2NhdGlvbi5nZXQoMCksIHVuYm94VmVjdG9yKHZhbHVlLCAiIikpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMKaW5kZXgg
ZmVhNTZlY2YwMjA2ZjJmNzQ2ZmJiYTNjY2M2NjJhYmZkZDdhNThjYy4uNDYyNGU2ZDE0Nzg0Mzdi
M2FlNjM5ZDBlZGEzMWM4ZTMxNjk2ZDkwMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwpAQCAtMzUsNyArMzUsNyBAQCBsZXQgc3RhbmRh
cmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgcHJp
bnQoYC8vIFRoaXMgd2FzIGF1dG9nZW5lcmF0ZWQgZnJvbSBHZW5lcmF0ZV9TdGFuZGFyZF9MaWJy
YXJ5LnN3aWZ0ISBEbyBub3QgZWRpdCEhYCk7CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAor
CiAgICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2B2b2lkYCwgYGJvb2xgLCBgdWNoYXJgLCBgdXNo
b3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGAsIGBh
dG9taWNfaW50YCwgYGF0b21pY191aW50YF0pIHsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
dHlwZWRlZiAke3R5cGV9O2ApOwogICAgICAgICB9CkBAIC00Niw3ICs0Niw3IEBAIGxldCBzdGFu
ZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgcHJpbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGhh
bGZgLCBgZmxvYXRgXSkgewogICAgICAgICAgICAgZm9yIChsZXQgaSBvZiBbMiwgMywgNF0pIHsK
ICAgICAgICAgICAgICAgICBmb3IgKGxldCBqIG9mIFsyLCAzLCA0XSkgewpAQCAtNjksNyArNjks
NyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0
IHR5cGUxIG9mIFtgdWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBp
bnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBmb3IgKGxldCB0eXBlMiBvZiBb
YHVjaGFyYCwgYHVzaG9ydGAsIGB1aW50YCwgYGNoYXJgLCBgc2hvcnRgLCBgaW50YCwgYGhhbGZg
LCBgZmxvYXRgXSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlMSAhPSB0eXBlMikgewpAQCAt
NzgsMzggKzc4LDM4IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgCisKICAgICAg
ICAgZm9yIChsZXQgdHlwZSBvZiBbYHVjaGFyYCwgYHVzaG9ydGAsIGB1aW50YCwgYGNoYXJgLCBg
c2hvcnRgLCBgaW50YCwgYGhhbGZgLCBgZmxvYXRgXSkgewogICAgICAgICAgICAgcHJpbnQoYG9w
ZXJhdG9yIGJvb2woJHt0eXBlfSB4KSB7YCk7CiAgICAgICAgICAgICBwcmludChgICAgIHJldHVy
biB4ICE9IDA7YCk7CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICB9CiAgICAgICAg
IHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHByaW50KGBuYXRpdmUgb3BlcmF0b3IgaW50
KGF0b21pY19pbnQpO2ApOwogICAgICAgICBwcmludChgbmF0aXZlIG9wZXJhdG9yIHVpbnQoYXRv
bWljX3VpbnQpO2ApOwogICAgICAgICBwcmludCgpOwotICAgICAgICAKKwogICAgICAgICBwcmlu
dChgbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShib29sLCBib29sKTtgKTsKLSAgICAgICAgCisKICAg
ICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3ImKGJvb2wgYSwgYm9vbCBiKSB7YCk7CiAgICAgICAg
IHByaW50KGAgICAgcmV0dXJuIGEgJiYgYjtgKTsKICAgICAgICAgcHJpbnQoYH1gKTsKLSAgICAg
ICAgCisKICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3J8KGJvb2wgYSwgYm9vbCBiKSB7YCk7
CiAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIGEgfHwgYjtgKTsKICAgICAgICAgcHJpbnQoYH1g
KTsKLSAgICAgICAgCisKICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0b3JeKGJvb2wgYSwgYm9v
bCBiKSB7YCk7CiAgICAgICAgIHByaW50KGAgICAgaWYgKGEpYCk7CiAgICAgICAgIHByaW50KGAg
ICAgICAgIHJldHVybiAhYjtgKTsKICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gYjtgKTsKICAg
ICAgICAgcHJpbnQoYH1gKTsKLSAgICAgICAgCisKICAgICAgICAgcHJpbnQoYGJvb2wgb3BlcmF0
b3J+KGJvb2wgdmFsdWUpIHtgKTsKICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gIXZhbHVlO2Ap
OwogICAgICAgICBwcmludChgfWApOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBl
IG9mIFtgaW50YCwgYHVpbnRgLCBgZmxvYXRgXSkgewogICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9IG9wZXJhdG9yKygke3R5cGV9LCAke3R5cGV9KTtgKTsKICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvci0oJHt0eXBlfSwgJHt0eXBlfSk7YCk7CkBAIC0x
MjEsNyArMTIxLDcgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgYm9vbCBvcGVyYXRvcj4oJHt0eXBlfSwgJHt0eXBlfSk7YCk7
CiAgICAgICAgICAgICBwcmludChgbmF0aXZlIGJvb2wgb3BlcmF0b3I+PSgke3R5cGV9LCAke3R5
cGV9KTtgKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9m
IFtgaW50YCwgYHVpbnRgXSkgewogICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IG9w
ZXJhdG9yJigke3R5cGV9LCAke3R5cGV9KTtgKTsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
JHt0eXBlfSBvcGVyYXRvcnwoJHt0eXBlfSwgJHt0eXBlfSk7YCk7CkBAIC0xMzAsNyArMTMwLDcg
QEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIHByaW50
KGBuYXRpdmUgJHt0eXBlfSBvcGVyYXRvcjw8KCR7dHlwZX0sIHVpbnQpO2ApOwogICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9IG9wZXJhdG9yPj4oJHt0eXBlfSwgdWludCk7YCk7CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYHVjaGFyYCwg
YHVzaG9ydGBdKSB7CiAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBvcGVyYXRvcisoJHt0eXBl
fSBhLCAke3R5cGV9IGIpIHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuICR7dHlw
ZX0odWludChhKSArIHVpbnQoYikpO2ApOwpAQCAtMTg0LDcgKzE4NCw3IEBAIGxldCBzdGFuZGFy
ZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHByaW50KGB1c2hvcnQgb3BlcmF0b3I+
Pih1c2hvcnQgYSwgdWludCBiKSB7YCk7CiAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHVzaG9y
dCh1aW50KGEpID4+IChiICYgNjU1MzUpKTtgKTsKICAgICAgICAgcHJpbnQoYH1gKTsKLSAgICAg
ICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGNoYXJgLCBgc2hvcnRgXSkgewogICAg
ICAgICAgICAgcHJpbnQoYCR7dHlwZX0gb3BlcmF0b3IrKCR7dHlwZX0gYSwgJHt0eXBlfSBiKSB7
YCk7CiAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiAke3R5cGV9KGludChhKSArIGludChi
KSk7YCk7CkBAIC0yMzgsNyArMjM4LDcgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlv
bigpIHsKICAgICAgICAgcHJpbnQoYHNob3J0IG9wZXJhdG9yPj4oc2hvcnQgYSwgdWludCBiKSB7
YCk7CiAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHNob3J0KGludChhKSA+PiAoYiAmIDY1NTM1
KSk7YCk7CiAgICAgICAgIHByaW50KGB9YCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0
IHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGlu
dGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG9wZXJh
dG9yKysoJHt0eXBlfSB2YWx1ZSkge2ApOwogICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4g
dmFsdWUgKyAxO2ApOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB2YWx1ZSAtIDE7YCk7
CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IHByaW50KGBoYWxmIG9wZXJhdG9yKyhoYWxmIGEsIGhhbGYgYikge2ApOwogICAgICAgICBwcmlu
dChgICAgIHJldHVybiBoYWxmKGZsb2F0KGEpICsgZmxvYXQoYikpO2ApOwogICAgICAgICBwcmlu
dChgfWApOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICAgIHByaW50KGBuYXRpdmUgaW50IG9wZXJhdG9yLShpbnQpO2ApOwogICAg
ICAgICBwcmludChgbmF0aXZlIGZsb2F0IG9wZXJhdG9yLShmbG9hdCk7YCk7CiAgICAgICAgIHBy
aW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2B1Y2hhcmAsIGB1
c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0p
IHsKICAgICAgICAgICAgIGZvciAobGV0IHNpemUgb2YgWzIsIDMsIDRdKSB7CiAgICAgICAgICAg
ICAgICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9IG9wZXJhdG9yKygke3R5cGV9JHtzaXplfSBhLCAk
e3R5cGV9JHtzaXplfSBiKSB7YCk7CkBAIC00NDYsNyArNDQ2LDcgQEAgbGV0IHN0YW5kYXJkTGli
cmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGJvb2xgLCBg
dWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAs
IGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBwcmludChgb3BlcmF0b3IgJHt0eXBlfTIoJHt0eXBl
fSB4LCAke3R5cGV9IHkpIHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfTIgcmVz
dWx0O2ApOwpAQCAtNTQyLDcgKzU0Miw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICB9CiAgICAgICAgIHByaW50
KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0
YF0pIHsKICAgICAgICAgICAgIGxldCB2YXJpYWJsZXMgPSBbYGFgLCBgYmAsIGBjYCwgYGRgXTsK
ICAgICAgICAgICAgIGZvciAobGV0IG0gb2YgWzIsIDMsIDRdKSB7CkBAIC01NjYsNyArNTY2LDcg
QEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBwcmludCgpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0
eXBlIG9mIFtgYm9vbGAsIGB1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0
YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIHByaW50KGBib29sIG9w
ZXJhdG9yPT0oJHt0eXBlfTIgYSwgJHt0eXBlfTIgYikge2ApOwogICAgICAgICAgICAgcHJpbnQo
YCAgICByZXR1cm4gYS54ID09IGIueCAmJiBhLnkgPT0gYi55O2ApOwpAQCAtNjgxLDcgKzY4MSw3
IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBwcmlu
dChgfWApOwogICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAg
IGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIGZvciAo
bGV0IG0gb2YgWzIsIDMsIDRdKSB7CiAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiBvZiBbMiwg
MywgNF0pIHsKQEAgLTY5MSw3ICs2OTEsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0gICAg
ICAgIAorCiAgICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAg
ICAgICAgICAgIGZvciAobGV0IGkgb2YgWzIsIDMsIDRdKSB7CiAgICAgICAgICAgICAgICAgZm9y
IChsZXQgaiBvZiBbMiwgMywgNF0pIHsKQEAgLTcwNyw3ICs3MDcsNyBAQCBsZXQgc3RhbmRhcmRM
aWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBmdW5jdGlvbiBjb21wdXRlU3dpenpsZShj
b21wb25lbnRzLCBtYXhWYWx1ZSwgbWF4TGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAoY29tcG9u
ZW50cy5sZW5ndGggPT0gbWF4TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFtjb21w
b25lbnRzXTsKQEAgLTcxOSw3ICs3MTksNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZnVuY3Rpb24gY29tcG9uZW50KHZhbHVlKSB7
CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAwOgpA
QCAtNzM0LDcgKzczNCw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICAKKwogICAgICAgICBmdW5jdGlvbiB1bmlxdWVMZW5ndGgoc3dpenpsZSkgewog
ICAgICAgICAgICAgbGV0IGhhczAgPSBmYWxzZTsKICAgICAgICAgICAgIGxldCBoYXMxID0gZmFs
c2U7CkBAIC03OTksMjggKzc5OSwyOCBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVuYXJ5IGZsb2F0aW5nLXBvaW50
IHNjYWxhciBmdW5jdGlvbnMsCiAgICAgICAgIC8vIHdoaWNoIGNhbiBhbHNvIGJlIGFwcGxpZWQg
dG8gdmVjdG9ycyBhbmQgbWF0cmljZXMgY29tcG9uZW50LXdpc2UuCiAgICAgICAgIChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgIGxldCBuYXRpdmVGdW5jdGlvbnMgPSBbYGNvc2AsIGBzaW5gLCBg
dGFuYCwgYGFjb3NgLCBgYXNpbmAsIGBhdGFuYCwgYGNvc2hgLCBgc2luaGAsIGB0YW5oYCwgYGNl
aWxgLCBgZXhwYCwgYGZsb29yYCwgYGxvZ2AsIGByb3VuZGAsIGB0cnVuY2BdOwogICAgICAgICAg
ICAgbGV0IG5hdGl2ZUZyYWdtZW50RnVuY3Rpb25zID0gW2BkZHhgLCBgZGR5YF07CiAgICAgICAg
ICAgICBsZXQgbm9uTmF0aXZlRnVuY3Rpb25zID0gW2BzcXJ0YCwgYGxvZzJgLCBgbG9nMTBgLCBg
ZnJhY2AsIGBleHAyYCwgYGRlZ3JlZXNgLCBgcmFkaWFuc2AsIGByY3BgLCBgcnNxcnRgLCBgc2F0
dXJhdGVgLCBgZGR4X2NvYXJzZWAsIGBkZHhfZmluZWAsIGBkZHlfY29hcnNlYCwgYGRkeV9maW5l
YCwgYGZ3aWR0aGBdOwotICAgICAgICAKKwogICAgICAgICAgICAgZm9yIChsZXQgbmF0aXZlRnVu
Y3Rpb24gb2YgbmF0aXZlRnVuY3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSBmbG9hdCAke25hdGl2ZUZ1bmN0aW9ufShmbG9hdCk7YCk7CiAgICAgICAgICAgICAgICAgcHJp
bnQoYGhhbGYgJHtuYXRpdmVGdW5jdGlvbn0oaGFsZiB4KSB7YCk7CiAgICAgICAgICAgICAgICAg
cHJpbnQoYCAgICByZXR1cm4gaGFsZigke25hdGl2ZUZ1bmN0aW9ufShmbG9hdCh4KSkpO2ApOwog
ICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgICAgICBmb3IgKGxldCBuYXRpdmVGdW5jdGlvbiBvZiBuYXRpdmVGcmFnbWVudEZ1bmN0
aW9ucykgewogICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgZnJhZ21lbnQgZmxvYXQgJHtu
YXRpdmVGdW5jdGlvbn0oZmxvYXQpO2ApOwogICAgICAgICAgICAgICAgIHByaW50KGBoYWxmICR7
bmF0aXZlRnVuY3Rpb259KGhhbGYgeCkge2ApOwogICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmV0dXJuIGhhbGYoJHtuYXRpdmVGdW5jdGlvbn0oZmxvYXQoeCkpKTtgKTsKICAgICAgICAgICAg
ICAgICBwcmludChgfWApOwogICAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAgICAg
Zm9yIChsZXQgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgewogICAgICAgICAgICAgICAgIHBy
aW50KGAke3R5cGV9IHNxcnQoJHt0eXBlfSB4KSB7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQo
YCAgICByZXR1cm4gcG93KHgsIDAuNSk7YCk7CkBAIC04NjcsNyArODY3LDcgQEAgbGV0IHN0YW5k
YXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBl
fSBmd2lkdGgoJHt0eXBlfSB4KSB7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1
cm4gYWJzKGRkeCh4KSkgKyBhYnMoZGR5KHgpKTtgKTsKICAgICAgICAgICAgICAgICBwcmludChg
fWApOwotICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAobGV0IG91dHB1dEZ1bmN0aW9u
IG9mIG5hdGl2ZUZ1bmN0aW9ucy5jb25jYXQobmF0aXZlRnJhZ21lbnRGdW5jdGlvbnMuY29uY2F0
KG5vbk5hdGl2ZUZ1bmN0aW9ucykpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNp
emUgb2YgWzIsIDMsIDRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBl
fSR7c2l6ZX0gJHtvdXRwdXRGdW5jdGlvbn0oJHt0eXBlfSR7c2l6ZX0geCkge2ApOwpAQCAtODk1
LDIyICs4OTUsMjIgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgICAgICBwcmludCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9KSgpOwotICAgICAg
ICAKKwogICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGJpbmFyeSBmbG9hdGluZy1wb2lu
dCBzY2FsYXIgZnVuY3Rpb25zLAogICAgICAgICAvLyB3aGljaCBjYW4gYWxzbyBiZSBhcHBsaWVk
IHRvIHZlY3RvcnMgYW5kIG1hdHJpY2VzIGNvbXBvbmVudC13aXNlLgogICAgICAgICAoZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICBsZXQgbmF0aXZlRnVuY3Rpb25zID0gW2Bwb3dgXTsKLSAgICAg
ICAgCisKICAgICAgICAgICAgIGZvciAobGV0IG5hdGl2ZUZ1bmN0aW9uIG9mIG5hdGl2ZUZ1bmN0
aW9ucykgewogICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgZmxvYXQgJHtuYXRpdmVGdW5j
dGlvbn0oZmxvYXQsIGZsb2F0KTtgKTsKICAgICAgICAgICAgICAgICBwcmludChgaGFsZiAke25h
dGl2ZUZ1bmN0aW9ufShoYWxmIHgsIGhhbGYgeSkge2ApOwogICAgICAgICAgICAgICAgIHByaW50
KGAgICAgcmV0dXJuIGhhbGYoJHtuYXRpdmVGdW5jdGlvbn0oZmxvYXQoeCksIGZsb2F0KHkpKSk7
YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
CisKICAgICAgICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAg
ICAgICAgICAgICAgICBsZXQgbm9uTmF0aXZlRnVuY3Rpb25zID0gW2BzdGVwYCwgYGxkZXhwYCwg
YGZtb2RgXTsKLSAgICAgICAgCisKICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBzdGVw
KCR7dHlwZX0geSwgJHt0eXBlfSB4KSB7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBy
ZXR1cm4geCA+PSB5ID8gMSA6IDA7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKQEAg
LTkyMiw3ICs5MjIsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSBtdWx0aXBsZSA9ICR7dHlwZX0od2hvbGUp
ICogeTtgKTsKICAgICAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4IC0gbXVsdGlwbGU7
YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKLSAgICAgICAgCisKICAgICAgICAgICAg
ICAgICBmb3IgKGxldCBvdXRwdXRGdW5jdGlvbiBvZiBuYXRpdmVGdW5jdGlvbnMuY29uY2F0KG5v
bk5hdGl2ZUZ1bmN0aW9ucykpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc2l6ZSBv
ZiBbMiwgMywgNF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtz
aXplfSAke291dHB1dEZ1bmN0aW9ufSgke3R5cGV9JHtzaXplfSB4LCAke3R5cGV9JHtzaXplfSB5
KSB7YCk7CkBAIC05NTAsMTIgKzk1MCwxMiBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgIHByaW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0pKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGVybmFy
eSBmbG9hdGluZy1wb2ludCBzY2FsYXIgZnVuY3Rpb25zLAogICAgICAgICAvLyB3aGljaCBjYW4g
YWxzbyBiZSBhcHBsaWVkIHRvIHZlY3RvcnMgYW5kIG1hdHJpY2VzIGNvbXBvbmVudC13aXNlLgog
ICAgICAgICBmb3IgKGxldCB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAg
ICBsZXQgbm9uTmF0aXZlRnVuY3Rpb25zID0gW2BzbW9vdGhzdGVwYCwgYGxlcnBgLCBgZm1hYCwg
YG1hZGBdOwotICAgICAgICAKKwogICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gc21vb3Roc3Rl
cCgke3R5cGV9IGVkZ2UwLCAke3R5cGV9IGVkZ2UxLCAke3R5cGV9IHgpIHtgKTsKICAgICAgICAg
ICAgIHByaW50KGAgICAgJHt0eXBlfSB0ID0gY2xhbXAoKHggLSBlZGdlMCkgLyAoZWRnZTEgLSBl
ZGdlMCksIDAsIDEpO2ApOwogICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdCAqIHQgKiAo
MyAtIDIgKiB0KTtgKTsKQEAgLTk2OSw3ICs5NjksNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0g
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gbWFkKCR7dHlwZX0geCwg
JHt0eXBlfSB5LCAke3R5cGV9IHopIHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJu
IHggKiB5ICsgejtgKTsKICAgICAgICAgICAgIHByaW50KGB9YCk7Ci0gICAgICAgIAorCiAgICAg
ICAgICAgICBmb3IgKGxldCBub25OYXRpdmVGdW5jdGlvbiBvZiBub25OYXRpdmVGdW5jdGlvbnMp
IHsKICAgICAgICAgICAgICAgICBmb3IgKGxldCBzaXplIG9mIFsyLCAzLCA0XSkgewogICAgICAg
ICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7c2l6ZX0gJHtub25OYXRpdmVGdW5jdGlvbn0o
JHt0eXBlfSR7c2l6ZX0geCwgJHt0eXBlfSR7c2l6ZX0geSwgJHt0eXBlfSR7c2l6ZX0geikge2Ap
OwpAQCAtOTk2LDcgKzk5Niw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmludCgpOwogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIHByaW50KGBuYXRpdmUgYm9vbCBpc25vcm1hbChoYWxmKTtgKTsKICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSBib29sIGlzbm9ybWFsKGZsb2F0KTtgKTsKICAgICAgICAgZm9yIChs
ZXQgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgewpAQCAtMTAxMSwxNyArMTAxMSwxNyBAQCBs
ZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcHJpbnQoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAoZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBsZXQgbmF0aXZlRnVuY3Rpb25zID0gW2Bpc2Zpbml0ZWAsIGBpc2lu
ZmAsIGBpc25hbmBdOwotICAgICAgICAKKwogICAgICAgICAgICAgZm9yIChsZXQgbmF0aXZlRnVu
Y3Rpb24gb2YgbmF0aXZlRnVuY3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSBib29sICR7bmF0aXZlRnVuY3Rpb259KGZsb2F0KTtgKTsKICAgICAgICAgICAgICAgICBwcmlu
dChgYm9vbCAke25hdGl2ZUZ1bmN0aW9ufShoYWxmIHgpIHtgKTsKICAgICAgICAgICAgICAgICBw
cmludChgICAgIHJldHVybiAke25hdGl2ZUZ1bmN0aW9ufShmbG9hdCh4KSk7YCk7CiAgICAgICAg
ICAgICAgICAgcHJpbnQoYH1gKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAg
ICAgIGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgICAg
ICBmb3IgKGxldCBuYXRpdmVGdW5jdGlvbiBvZiBuYXRpdmVGdW5jdGlvbnMpIHsKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBbMiwgMywgNF0pIHsKQEAgLTEwMzcsMTcgKzEw
MzcsMTcgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICBwcmludCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9KSgpCi0gICAgICAgIAorCiAg
ICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAg
IGxldCBub25OYXRpdmVGdW5jdGlvbnMgPSBbYGlzb3JkZXJlZGAsIGBpc3Vub3JkZXJlZGBdOwot
ICAgICAgICAKKwogICAgICAgICAgICAgcHJpbnQoYGJvb2wgaXNvcmRlcmVkKCR7dHlwZX0geCwg
JHt0eXBlfSB5KSB7YCk7CiAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiAoeCA9PSB4KSAm
JiAoeSA9PSB5KTtgKTsKICAgICAgICAgICAgIHByaW50KGB9YCk7CiAgICAgICAgICAgICBwcmlu
dChgYm9vbCBpc3Vub3JkZXJlZCgke3R5cGV9IHgsICR7dHlwZX0geSkge2ApOwogICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4gaXNuYW4oeCkgfHwgaXNuYW4oeSk7YCk7CiAgICAgICAgICAg
ICBwcmludChgfWApOwotICAgICAgICAKKwogICAgICAgICAgICAgZm9yIChsZXQgbm9uTmF0aXZl
RnVuY3Rpb24gb2Ygbm9uTmF0aXZlRnVuY3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgZm9yIChs
ZXQgc2l6ZSBvZiBbMiwgMywgNF0pIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYGJvb2wk
e3NpemV9ICR7bm9uTmF0aXZlRnVuY3Rpb259KCR7dHlwZX0ke3NpemV9IHgsICR7dHlwZX0ke3Np
emV9IHkpIHtgKTsKQEAgLTEwNjEsNyArMTA2MSw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAo
ZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmludCgpOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIHByaW50KGBuYXRpdmUgZmxvYXQgYXRhbjIoZmxvYXQs
IGZsb2F0KTtgKTsKICAgICAgICAgcHJpbnQoYGhhbGYgYXRhbjIoaGFsZiB4LCBoYWxmIHkpIHtg
KTsKICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gaGFsZihhdGFuMihmbG9hdCh4KSwgZmxvYXQo
eSkpKTtgKTsKQEAgLTEwOTEsNDkgKzEwOTEsNTMgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChm
dW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwcmludCgpOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgewot
ICAgICAgICAgICAgcHJpbnQoYHZvaWQgc2luY29zKCR7dHlwZX0geCwgdGhyZWFkICR7dHlwZX0q
IHksIHRocmVhZCAke3R5cGV9KiB6KSB7YCk7Ci0gICAgICAgICAgICBwcmludChgICAgIGlmICh5
ICE9IG51bGwpYCk7Ci0gICAgICAgICAgICBwcmludChgICAgICAgICAqeSA9IHNpbih4KTtgKTsK
LSAgICAgICAgICAgIHByaW50KGAgICAgaWYgKHogIT0gbnVsbClgKTsKLSAgICAgICAgICAgIHBy
aW50KGAgICAgICAgICp6ID0gY29zKHgpO2ApOwotICAgICAgICAgICAgcHJpbnQoYH1gKTsKLSAg
ICAgICAgICAgIGZvciAobGV0IHNpemUgb2YgWzIsIDMsIDRdKSB7Ci0gICAgICAgICAgICAgICAg
cHJpbnQoYHZvaWQgc2luY29zKCR7dHlwZX0ke3NpemV9IHgsIHRocmVhZCAke3R5cGV9JHtzaXpl
fSogeSwgdGhyZWFkICR7dHlwZX0ke3NpemV9KiB6KSB7YCk7Ci0gICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdGFrZSBhIHBvaW50ZXIgdG8gYSBtZW1iZXIgb2YgYSB2ZWN0b3IuCi0gICAgICAgICAg
ICAgICAgcHJpbnQoYCAgICAke3R5cGV9IHNpblJlc3VsdDtgKTsKLSAgICAgICAgICAgICAgICBw
cmludChgICAgICR7dHlwZX0gY29zUmVzdWx0O2ApOwotICAgICAgICAgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
c2luY29zKHhbJHtpfV0sICZzaW5SZXN1bHQsICZjb3NSZXN1bHQpO2ApOworCisgICAgICAgIGZv
ciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3Vw
YF0pIHsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTIgb2YgW2B0aHJlYWRgLCBg
ZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCB0eXBl
IG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB2b2lk
IHNpbmNvcygke3R5cGV9IHgsICR7YWRkcmVzc1NwYWNlMX0gJHt0eXBlfSogeSwgJHthZGRyZXNz
U3BhY2UyfSAke3R5cGV9KiB6KSB7YCk7CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
aWYgKHkgIT0gbnVsbClgKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgKCp5
KVske2l9XSA9IHNpblJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAg
ICAgKnkgPSBzaW4oeCk7YCk7CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgaWYgKHog
IT0gbnVsbClgKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgKCp6KVske2l9
XSA9IGNvc1Jlc3VsdDtgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJp
bnQoYH1gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAobGV0IGkgb2YgWzIsIDMs
IDRdKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChsZXQgaiBvZiBbMiwgMywgNF0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYHZvaWQgc2luY29zKCR7dHlwZX0ke2l9eCR7an0geCwgdGhy
ZWFkICR7dHlwZX0ke2l9eCR7an0qIHksIHRocmVhZCAke3R5cGV9JHtpfXgke2p9KiB6KSB7YCk7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIENhbid0IHRha2UgYSBwb2ludGVyIHRvIGEgbWVtYmVy
IG9mIGEgbWF0cml4LgotICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0gc2lu
UmVzdWx0O2ApOwotICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0gY29zUmVz
dWx0O2ApOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGk7ICsrbSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBqOyArK24pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHNpbmNvcyh4WyR7bX1dWyR7
bn1dLCAmc2luUmVzdWx0LCAmY29zUmVzdWx0KTtgKTsKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnQoYCAgICAgICAgKnogPSBjb3MoeCk7YCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGB9
YCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNpemUgb2YgWzIsIDMsIDRdKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludChgdm9pZCBzaW5jb3MoJHt0eXBlfSR7c2l6ZX0g
eCwgJHthZGRyZXNzU3BhY2UxfSAke3R5cGV9JHtzaXplfSogeSwgJHthZGRyZXNzU3BhY2UyfSAk
e3R5cGV9JHtzaXplfSogeikge2ApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3Qg
dGFrZSBhIHBvaW50ZXIgdG8gYSBtZW1iZXIgb2YgYSB2ZWN0b3IuCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludChgICAgICR7dHlwZX0gc2luUmVzdWx0O2ApOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9IGNvc1Jlc3VsdDtgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbnQoYCAgICBzaW5jb3MoeFske2l9XSwgJnNpblJlc3VsdCwgJmNv
c1Jlc3VsdCk7YCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBpZiAo
eSAhPSBudWxsKWApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgICAg
ICgqeSlbJHttfV1bJHtufV0gPSBzaW5SZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbnQoYCAgICAgICAgKCp5KVske2l9XSA9IHNpblJlc3VsdDtgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIGlmICh6ICE9IG51bGwpYCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgKCp6KVske219XVske259XSA9IGNv
c1Jlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICAgICAo
KnopWyR7aX1dID0gY29zUmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYH1gKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIG9mIFsyLCAzLCA0XSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChsZXQgaiBvZiBbMiwgMywgNF0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgdm9pZCBzaW5jb3MoJHt0eXBlfSR7aX14JHtqfSB4LCAke2Fk
ZHJlc3NTcGFjZTF9ICR7dHlwZX0ke2l9eCR7an0qIHksICR7YWRkcmVzc1NwYWNlMn0gJHt0eXBl
fSR7aX14JHtqfSogeikge2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbid0
IHRha2UgYSBwb2ludGVyIHRvIGEgbWVtYmVyIG9mIGEgbWF0cml4LgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaW50KGAgICAgJHt0eXBlfSBzaW5SZXN1bHQ7YCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9IGNvc1Jlc3VsdDtgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IGk7ICsrbSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGo7ICsrbikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICBzaW5jb3Mo
eFske219XVske259XSwgJnNpblJlc3VsdCwgJmNvc1Jlc3VsdCk7YCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIGlmICh5ICE9IG51bGwpYCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICAgICAoKnkpWyR7bX1d
WyR7bn1dID0gc2luUmVzdWx0O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYCAgICBpZiAoeiAhPSBudWxsKWApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgKCp6KVske219XVske259XSA9IGNvc1Jlc3VsdDtg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHByaW50KGB9YCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0
IGJpbmFyeUZ1bmN0aW9uIG9mIFtbYGFsbGAsIGB0cnVlYCwgYCYmYF0sIFtgYW55YCwgYGZhbHNl
YCwgYHx8YF1dKSB7CiAgICAgICAgICAgICBwcmludChgYm9vbCAke2JpbmFyeUZ1bmN0aW9uWzBd
fShib29sIHgpIHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHg7YCk7CkBAIC0x
MTc4LDcgKzExODIsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcHJpbnQoKTsKICAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICBmb3IgKGxldCB0eXBlIG9mIFtgdWNoYXJgLCBgdXNob3J0YCwgYHVpbnRgXSkgewog
ICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gYWJzKCR7dHlwZX0geCkge2ApOwogICAgICAgICAg
ICAgcHJpbnQoYCAgICByZXR1cm4geDtgKTsKQEAgLTEyMTgsNyArMTIyMiw3IEBAIGxldCBzdGFu
ZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgcHJpbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYHVj
aGFyYCwgYHVzaG9ydGAsIGB1aW50YF0pIHsKICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IHNp
Z24oJHt0eXBlfSB4KSB7YCk7CiAgICAgICAgICAgICBwcmludChgICAgIHJldHVybiB4ID09IDAg
PyAwIDogMTtgKTsKQEAgLTEyNjAsMTcgKzEyNjQsMTcgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9
IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwcmludCgp
OwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9mIFtgdWNoYXJgLCBgdXNob3J0
YCwgYHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7CiAg
ICAgICAgICAgICBsZXQgbm9uTmF0aXZlRnVuY3Rpb25zID0gW2BtaW5gLCBgbWF4YF07Ci0gICAg
ICAgIAorCiAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBtaW4oJHt0eXBlfSB4LCAke3R5cGV9
IHkpIHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIHggPiB5ID8geSA6IHg7YCk7
CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gbWF4
KCR7dHlwZX0geCwgJHt0eXBlfSB5KSB7YCk7CiAgICAgICAgICAgICBwcmludChgICAgIHJldHVy
biB4ID4geSA/IHggOiB5O2ApOwogICAgICAgICAgICAgcHJpbnQoYH1gKTsKLSAgICAgICAgCisK
ICAgICAgICAgICAgIGZvciAobGV0IG5vbk5hdGl2ZUZ1bmN0aW9uIG9mIG5vbk5hdGl2ZUZ1bmN0
aW9ucykgewogICAgICAgICAgICAgICAgIGZvciAobGV0IHNpemUgb2YgWzIsIDMsIDRdKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtzaXplfSAke25vbk5hdGl2ZUZ1bmN0
aW9ufSgke3R5cGV9JHtzaXplfSB4LCAke3R5cGV9JHtzaXplfSB5KSB7YCk7CkBAIC0xMjk5LDE0
ICsxMzAzLDE0IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBwcmludCgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIGZvciAobGV0IHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwg
YHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIGxldCBub25O
YXRpdmVGdW5jdGlvbnMgPSBbYGNsYW1wYF07Ci0gICAgICAgIAorCiAgICAgICAgICAgICBwcmlu
dChgJHt0eXBlfSBjbGFtcCgke3R5cGV9IHgsICR7dHlwZX0gbG93ZXIsICR7dHlwZX0gdXBwZXIp
IHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgcmV0dXJuIG1heChtaW4odXBwZXIsIHgpLCBs
b3dlcik7YCk7CiAgICAgICAgICAgICBwcmludChgfWApOwotICAgICAgICAKKwogICAgICAgICAg
ICAgZm9yIChsZXQgbm9uTmF0aXZlRnVuY3Rpb24gb2Ygbm9uTmF0aXZlRnVuY3Rpb25zKSB7CiAg
ICAgICAgICAgICAgICAgZm9yIChsZXQgc2l6ZSBvZiBbMiwgMywgNF0pIHsKICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9ICR7bm9uTmF0aXZlRnVuY3Rpb259KCR7dHlw
ZX0ke3NpemV9IHgsICR7dHlwZX0ke3NpemV9IHksICR7dHlwZX0ke3NpemV9IHopIHtgKTsKQEAg
LTEzMzUsNDggKzEzMzksNTAgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByaW50KCk7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKLSAgICAgICAg
ICAgIHByaW50KGAke3R5cGV9IG1vZGYoJHt0eXBlfSB4LCB0aHJlYWQgJHt0eXBlfSogaXApIHtg
KTsKLSAgICAgICAgICAgIHByaW50KGAgICAgdWludCByZXN1bHQgPSB1aW50KHgpO2ApOwotICAg
ICAgICAgICAgcHJpbnQoYCAgICBpZiAoaXAgIT0gbnVsbClgKTsKLSAgICAgICAgICAgIHByaW50
KGAgICAgICAgICppcCA9IHggLSAke3R5cGV9KHJlc3VsdCk7YCk7Ci0gICAgICAgICAgICBwcmlu
dChgICAgIHJldHVybiAke3R5cGV9KHJlc3VsdCk7YCk7Ci0gICAgICAgICAgICBwcmludChgfWAp
OwotICAgICAgICAKLSAgICAgICAgICAgIGZvciAobGV0IHNpemUgb2YgWzIsIDMsIDRdKSB7Ci0g
ICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9IG1vZGYoJHt0eXBlfSR7c2l6ZX0g
eCwgdGhyZWFkICR7dHlwZX0ke3NpemV9KiB5KSB7YCk7Ci0gICAgICAgICAgICAgICAgcHJpbnQo
YCAgICAke3R5cGV9JHtzaXplfSByZXN1bHQ7YCk7Ci0gICAgICAgICAgICAgICAgLy8gQ2FuJ3Qg
dGFrZSBhIHBvaW50ZXIgdG8gYSBtZW1iZXIgb2YgYSB2ZWN0b3IuCi0gICAgICAgICAgICAgICAg
cHJpbnQoYCAgICAke3R5cGV9IGJ1ZmZlcjtgKTsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIHJl
c3VsdFske2l9XSA9IG1vZGYoeFske2l9XSwgJmJ1ZmZlcik7YCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHByaW50KGAgICAgaWYgKHkgIT0gbnVsbClgKTsKLSAgICAgICAgICAgICAgICAgICAgcHJp
bnQoYCAgICAgICAgKCp5KVske2l9XSA9IGJ1ZmZlcjtgKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gcmVzdWx0O2ApOworCisgICAgICAgIGZv
ciAobGV0IGFkZHJlc3NTcGFjZSBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBg
XSkgeworICAgICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkgewor
ICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG1vZGYoJHt0eXBlfSB4LCAke2FkZHJlc3NT
cGFjZX0gJHt0eXBlfSogaXApIHtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIHVpbnQg
cmVzdWx0ID0gdWludCh4KTtgKTsKKyAgICAgICAgICAgICAgICBwcmludChgICAgIGlmIChpcCAh
PSBudWxsKWApOworICAgICAgICAgICAgICAgIHByaW50KGAgICAgICAgICppcCA9IHggLSAke3R5
cGV9KHJlc3VsdCk7YCk7CisgICAgICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gJHt0eXBl
fShyZXN1bHQpO2ApOwogICAgICAgICAgICAgICAgIHByaW50KGB9YCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBmb3IgKGxldCBpIG9mIFsyLCAzLCA0XSkgewotICAgICAgICAgICAgICAg
IGZvciAobGV0IGogb2YgWzIsIDMsIDRdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KGAk
e3R5cGV9JHtpfXgke2p9IG1vZGYoJHt0eXBlfSR7aX14JHtqfSB4LCB0aHJlYWQgJHt0eXBlfSR7
aX14JHtqfSogeSkge2ApOwotICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0k
e2l9eCR7an0gcmVzdWx0O2ApOwotICAgICAgICAgICAgICAgICAgICAvLyBDYW4ndCB0YWtlIGEg
cG9pbnRlciB0byBhIG1lbWJlciBvZiBhIG1hdHJpeC4KKworICAgICAgICAgICAgICAgIGZvciAo
bGV0IHNpemUgb2YgWzIsIDMsIDRdKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50KGAke3R5
cGV9JHtzaXplfSBtb2RmKCR7dHlwZX0ke3NpemV9IHgsICR7YWRkcmVzc1NwYWNlfSAke3R5cGV9
JHtzaXplfSogeSkge2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0k
e3NpemV9IHJlc3VsdDtgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdGFrZSBhIHBv
aW50ZXIgdG8gYSBtZW1iZXIgb2YgYSB2ZWN0b3IuCiAgICAgICAgICAgICAgICAgICAgIHByaW50
KGAgICAgJHt0eXBlfSBidWZmZXI7YCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG0g
PSAwOyBtIDwgaTsgKyttKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0g
MDsgbiA8IGo7ICsrbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAg
cmVzdWx0WyR7bX1dWyR7bn1dID0gbW9kZih4WyR7bX1dWyR7bn1dLCAmYnVmZmVyKTtgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgIGlmICh5ICE9IG51bGwpYCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAgICAgKCp5KVske219XVske259
XSA9IGJ1ZmZlcjtgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50KGAgICAgcmVzdWx0WyR7aX1dID0gbW9kZih4WyR7aX1dLCAmYnVmZmVyKTtg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgaWYgKHkgIT0gbnVsbClgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgICAgICgqeSlbJHtpfV0gPSBidWZm
ZXI7YCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcHJpbnQo
YCAgICByZXR1cm4gcmVzdWx0O2ApOwogICAgICAgICAgICAgICAgICAgICBwcmludChgfWApOwog
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpIG9mIFsyLCAzLCA0
XSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqIG9mIFsyLCAzLCA0XSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke2l9eCR7an0gbW9kZigke3R5cGV9
JHtpfXgke2p9IHgsICR7YWRkcmVzc1NwYWNlfSAke3R5cGV9JHtpfXgke2p9KiB5KSB7YCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAgICR7dHlwZX0ke2l9eCR7an0gcmVzdWx0
O2ApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdGFrZSBhIHBvaW50ZXIgdG8g
YSBtZW1iZXIgb2YgYSBtYXRyaXguCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgICAg
ICR7dHlwZX0gYnVmZmVyO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9
IDA7IG0gPCBpOyArK20pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBu
ID0gMDsgbiA8IGo7ICsrbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dChgICAgIHJlc3VsdFske219XVske259XSA9IG1vZGYoeFske219XVske259XSwgJmJ1ZmZlcik7
YCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGAgICAgaWYgKHkgIT0g
bnVsbClgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYCAgICAgICAg
KCp5KVske219XVske259XSA9IGJ1ZmZlcjtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBw
cmludChgICAgIHJldHVybiByZXN1bHQ7YCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dChgfWApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHByaW50KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludCgpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHByaW50KGB1Y2hhciBjb3VudF9iaXRzKHVj
aGFyIHgpIHtgKTsKICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gdWNoYXIoKCh4IHwgdWNoYXIo
MSA8PCAwKSkgPT0gMCA/IDAgOiAxKSArYCk7CiAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwg
NzsgKytpKSB7CkBAIC0xNDQ1LDcgKzE0NTEsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0g
ICAgICAgIAorCiAgICAgICAgIHByaW50KGB1aW50IGZpcnN0Yml0aGlnaCh1Y2hhciB4KSB7YCk7
CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDc7ICsraSkgewogICAgICAgICAgICAgcHJp
bnQoYCAgICBpZiAoKHggJiB1Y2hhcigxIDw8ICR7NyAtIGl9KSkgIT0gMClgKTsKQEAgLTE1MjAs
NyArMTUyNiw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gUm93LW1ham9yLCBzbyB0aGUgZmlyc3QgaW5kZXggc2VsZWN0cyB3aGljaCByb3csIGFuZCB0
aGUgc2Vjb25kIGluZGV4IHNlbGVjdHMgd2hpY2ggY29sdW1uCiAgICAgICAgIGZvciAobGV0IHR5
cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IGRl
dGVybWluYW50KCR7dHlwZX0geCkge2ApOwpAQCAtMTU4NCw3ICsxNTkwLDcgQEAgbGV0IHN0YW5k
YXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIHByaW50KGB9YCk7CiAgICAg
ICAgIH0KICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlw
ZSBvZiBbYHVjaGFyNGAsIGB1c2hvcnQ0YCwgYHVpbnQ0YCwgYGNoYXI0YCwgYHNob3J0NGAsIGBp
bnQ0YCwgYGhhbGY0YCwgYGZsb2F0NGBdKSB7CiAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBk
c3QoJHt0eXBlfSBzcmMwLCAke3R5cGV9IHNyYzEpIHtgKTsKICAgICAgICAgICAgIHByaW50KGAg
ICAgJHt0eXBlfSByZXN1bHQ7YCk7CkBAIC0xNTk2LDcgKzE2MDIsNyBAQCBsZXQgc3RhbmRhcmRM
aWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgcHJpbnQoYH1gKTsKICAgICAgICAg
fQogICAgICAgICBwcmludCgpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9m
IFtgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBkaXN0YW5j
ZSgke3R5cGV9IHgsICR7dHlwZX0geSkge2ApOwogICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1
cm4gbGVuZ3RoKHggLSB5KTtgKTsKQEAgLTE2MDgsNyArMTYxNCw3IEBAIGxldCBzdGFuZGFyZExp
YnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
cHJpbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGhhbGYzYCwg
YGZsb2F0M2BdKSB7CiAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBjcm9zcygke3R5cGV9IHUs
ICR7dHlwZX0gdikge2ApOwogICAgICAgICAgICAgcHJpbnQoYCAgICAke3R5cGV9IHJlc3VsdDtg
KTsKQEAgLTE2MTksNyArMTYyNSw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24o
KSB7CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICB9CiAgICAgICAgIHByaW50KCk7
Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0IHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRg
LCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKICAg
ICAgICAgICAgIHByaW50KGAke3R5cGV9IGRvdCgke3R5cGV9IGEsICR7dHlwZX0gYikge2ApOwog
ICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4gYSAqIGI7YCk7CkBAIC0xNjM1LDcgKzE2NDEs
NyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0
IHR5cGUgb2YgW2BoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIGZvciAobGV0IHNpemUg
b2YgW2BgLCBgMmAsIGAzYCwgYDRgXSkgewogICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9
JHtzaXplfSBmYWNlZm9yd2FyZCgke3R5cGV9JHtzaXplfSBuLCAke3R5cGV9JHtzaXplfSBpLCAk
e3R5cGV9JHtzaXplfSBuZykge2ApOwpAQCAtMTY0NCw3ICsxNjUwLDcgQEAgbGV0IHN0YW5kYXJk
TGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBwcmludCgpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9mIFtgaGFsZmAs
IGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBmb3IgKGxldCBzaXplIG9mIFtgYCwgYDJgLCBgM2As
IGA0YF0pIHsKICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSBsZW5ndGgoJHt0eXBlfSR7
c2l6ZX0geCkge2ApOwpAQCAtMTY1Myw3ICsxNjU5LDcgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9
IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwcmludCgp
OwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBd
KSB7CiAgICAgICAgICAgICBwcmludChgJHt0eXBlfTQgbGl0KCR7dHlwZX0gbl9kb3RfbCwgJHt0
eXBlfSBuX2RvdF9oLCAke3R5cGV9IG0pIHtgKTsKICAgICAgICAgICAgIHByaW50KGAgICAgJHt0
eXBlfSBhbWJpZW50ID0gMTtgKTsKQEAgLTE2NjgsNyArMTY3NCw3IEBAIGxldCBzdGFuZGFyZExp
YnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICB9
CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0IHR5cGUgb2Yg
W2BoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIGZvciAobGV0IHNpemUgb2YgW2BgLCBg
MmAsIGAzYCwgYDRgXSkgewogICAgICAgICAgICAgICAgIHByaW50KGAke3R5cGV9JHtzaXplfSBu
b3JtYWxpemUoJHt0eXBlfSR7c2l6ZX0geCkge2ApOwpAQCAtMTY3Nyw3ICsxNjgzLDcgQEAgbGV0
IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBwcmludCgpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9m
IFtgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBmb3IgKGxldCBzaXplIG9mIFtgYCwg
YDJgLCBgM2AsIGA0YF0pIHsKICAgICAgICAgICAgICAgICBwcmludChgJHt0eXBlfSR7c2l6ZX0g
cmVmbGVjdCgke3R5cGV9JHtzaXplfSBpLCAke3R5cGV9JHtzaXplfSBuKSB7YCk7CkBAIC0xNjg2
LDcgKzE2OTIsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIE9wZW5HTCBFUyB2My4zMCBzZWN0aW9uIDguNAogICAgICAgICBmb3IgKGxldCB0eXBlIG9m
IFtgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBmb3IgKGxldCBzaXplIG9mIFtgYCwg
YDJgLCBgM2AsIGA0YF0pIHsKQEAgLTE3MDAsNyArMTcwNiw3IEBAIGxldCBzdGFuZGFyZExpYnJh
cnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcHJp
bnQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGhhbGZgLCBgZmxv
YXRgXSkgewogICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0gdHJhbnNwb3NlKCR7dHlwZX0geCkg
e2ApOwogICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geDtgKTsKQEAgLTE3MjAsNyArMTcy
Niw3IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChs
ZXQgcmVzdWx0VHlwZSBvZiBbYGludGAsIGB1aW50YCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAg
IGZvciAobGV0IHR5cGUgb2YgW2BpbnRgLCBgdWludGAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gcmVzdWx0VHlwZSkgewpAQCAtMTc3Myw3ICsxNzc5LDcgQEAgbGV0
IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBwcmludCgpOwotICAgICAgICAKKwogICAgICAgICBwcmludChgbmF0aXZlIGZs
b2F0IGYxNnRvZjMyKHVpbnQpO2ApOwogICAgICAgICBwcmludChgbmF0aXZlIHVpbnQgZjMydG9m
MTYoZmxvYXQpO2ApOwogICAgICAgICBmb3IgKGxldCBzaXplIG9mIFsyLCAzLCA0XSkgewpAQCAt
MTc5MywxOCArMTc5OSwxOCBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgcHJpbnQoYH1gKTsKICAgICAgICAgfQogICAgICAgICBwcmludCgpOwotICAg
ICAgICAKKwogICAgICAgICBwcmludChgbmF0aXZlIGNvbXB1dGUgdm9pZCBBbGxNZW1vcnlCYXJy
aWVyV2l0aEdyb3VwU3luYygpO2ApOwogICAgICAgICBwcmludChgbmF0aXZlIGNvbXB1dGUgdm9p
ZCBEZXZpY2VNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYygpO2ApOwogICAgICAgICBwcmludChg
bmF0aXZlIGNvbXB1dGUgdm9pZCBHcm91cE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jKCk7YCk7
CiAgICAgICAgIHByaW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAobGV0IHR5cGUgb2Yg
W2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNob3J0YCwgYGludGAsIGBoYWxm
YCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIHByaW50KGAke3R5cGV9IG11bCgke3R5cGV9IHgs
ICR7dHlwZX0geSkge2ApOwogICAgICAgICAgICAgcHJpbnQoYCAgICByZXR1cm4geCAqIHk7YCk7
CiAgICAgICAgICAgICBwcmludChgfWApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IGZvciAobGV0IHR5cGUgb2YgW2B1Y2hhcmAsIGB1c2hvcnRgLCBgdWludGAsIGBjaGFyYCwgYHNo
b3J0YCwgYGludGAsIGBoYWxmYCwgYGZsb2F0YF0pIHsKICAgICAgICAgICAgIGZvciAobGV0IHNp
emUgb2YgWzIsIDMsIDRdKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQoYCR7dHlwZX0ke3NpemV9
IG11bCgke3R5cGV9IHgsICR7dHlwZX0ke3NpemV9IHkpIHtgKTsKQEAgLTE4MjMsNyArMTgyOSw3
IEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAg
cHJpbnQoYH1gKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAg
ICBmb3IgKGxldCB0eXBlIG9mIFtgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAgICAgICAgICBmb3Ig
KGxldCBpIG9mIFsyLCAzLCA0XSkgewogICAgICAgICAgICAgICAgIGZvciAobGV0IGogb2YgWzIs
IDMsIDRdKSB7CkBAIC0xODQ4LDcgKzE4NTQsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICAKKwogICAgICAgICBmb3IgKGxldCB0eXBlIG9mIFtgdWNoYXJgLCBgdXNob3J0YCwg
YHVpbnRgLCBgY2hhcmAsIGBzaG9ydGAsIGBpbnRgLCBgaGFsZmAsIGBmbG9hdGBdKSB7CiAgICAg
ICAgICAgICBmb3IgKGxldCBzaXplIG9mIFsyLCAzLCA0XSkgewogICAgICAgICAgICAgICAgIHBy
aW50KGAke3R5cGV9IG11bCgke3R5cGV9JHtzaXplfSB4LCAke3R5cGV9JHtzaXplfSB5KSB7YCk7
CkBAIC0xODU2LDcgKzE4NjIsNyBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkg
ewogICAgICAgICAgICAgICAgIHByaW50KGB9YCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYGhhbGZgLCBgZmxvYXRgXSkg
ewogICAgICAgICAgICAgZm9yIChsZXQgaSBvZiBbMiwgMywgNF0pIHsKICAgICAgICAgICAgICAg
ICBmb3IgKGxldCBqIG9mIFsyLCAzLCA0XSkgewpAQCAtMTg4Myw3ICsxODg5LDcgQEAgbGV0IHN0
YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBb
YGhhbGZgLCBgZmxvYXRgXSkgewogICAgICAgICAgICAgZm9yIChsZXQgaSBvZiBbMiwgMywgNF0p
IHsKICAgICAgICAgICAgICAgICBmb3IgKGxldCBqIG9mIFsyLCAzLCA0XSkgewpAQCAtMTkwNiwx
NSArMTkxMiwxNCBAQCBsZXQgc3RhbmRhcmRMaWJyYXJ5ID0gKGZ1bmN0aW9uKCkgewogICAgICAg
ICB9CiAgICAgICAgIHByaW50KCk7CiAKLSAgICAgICAgZm9yIChsZXQgdHlwZSBvZiBbYHVpbnRg
LCBgaW50YF0pIHsKLSAgICAgICAgICAgIGZvciAobGV0IGZ1bmN0aW9uTmFtZSBvZiBbYEFkZGAs
IGBBbmRgLCBgRXhjaGFuZ2VgLCBgTWF4YCwgYE1pbmAsIGBPcmAsIGBYb3JgXSkgewotICAgICAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZCR7ZnVuY3Rpb25OYW1lfSh0
aHJlYWQgYXRvbWljXyR7dHlwZX0qLCAke3R5cGV9LCB0aHJlYWQgJHt0eXBlfSopO2ApOwotICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tlZCR7ZnVuY3Rpb25OYW1l
fSh0aHJlYWRncm91cCBhdG9taWNfJHt0eXBlfSosICR7dHlwZX0sIHRocmVhZCAke3R5cGV9Kik7
YCk7Ci0gICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEludGVybG9ja2VkJHtmdW5j
dGlvbk5hbWV9KGRldmljZSBhdG9taWNfJHt0eXBlfSosICR7dHlwZX0sIHRocmVhZCAke3R5cGV9
Kik7YCk7CisgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgW2B0aHJlYWRgLCBgZGV2
aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFj
ZTIgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGxldCB0eXBlIG9mIFtgdWludGAsIGBpbnRgXSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKGxldCBmdW5jdGlvbk5hbWUgb2YgW2BBZGRgLCBgQW5kYCwgYEV4Y2hhbmdlYCwg
YE1heGAsIGBNaW5gLCBgT3JgLCBgWG9yYF0pCisgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dChgbmF0aXZlIHZvaWQgSW50ZXJsb2NrZWQke2Z1bmN0aW9uTmFtZX0oJHthZGRyZXNzU3BhY2Ux
fSBhdG9taWNfJHt0eXBlfSosICR7dHlwZX0sICR7YWRkcmVzc1NwYWNlMn0gJHt0eXBlfSopO2Ap
OworICAgICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgSW50ZXJsb2NrZWRDb21w
YXJlRXhjaGFuZ2UoJHthZGRyZXNzU3BhY2UxfSBhdG9taWNfJHt0eXBlfSosICR7dHlwZX0sICR7
dHlwZX0sICR7YWRkcmVzc1NwYWNlMn0gJHt0eXBlfSopO2ApOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBJbnRlcmxvY2tl
ZENvbXBhcmVFeGNoYW5nZSh0aHJlYWQgYXRvbWljXyR7dHlwZX0qLCAke3R5cGV9LCAke3R5cGV9
LCB0aHJlYWQgJHt0eXBlfSopO2ApOwotICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIElu
dGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKHRocmVhZGdyb3VwIGF0b21pY18ke3R5cGV9KiwgJHt0
eXBlfSwgJHt0eXBlfSwgdGhyZWFkICR7dHlwZX0qKTtgKTsKLSAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgdm9pZCBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShkZXZpY2UgYXRvbWljXyR7dHlw
ZX0qLCAke3R5cGV9LCAke3R5cGV9LCB0aHJlYWQgJHt0eXBlfSopO2ApOwogICAgICAgICB9CiAg
ICAgICAgIHByaW50KCk7CiAKQEAgLTE5MjYsMTMgKzE5MzEsMjEgQEAgbGV0IHN0YW5kYXJkTGli
cmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlw
ZX0ke2xlbmd0aH0gU2FtcGxlKFRleHR1cmUxRDwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwg
ZmxvYXQgbG9jYXRpb24sIGludCBvZmZzZXQpO2ApOwogICAgICAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUxRDwke3R5cGV9JHtsZW5ndGh9Piwg
aW50MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9
JHtsZW5ndGh9IExvYWQoVGV4dHVyZTFEPCR7dHlwZX0ke2xlbmd0aH0+LCBpbnQyIGxvY2F0aW9u
LCBpbnQgb2Zmc2V0KTtgKTsKLSAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0
RGltZW5zaW9ucyhUZXh0dXJlMUQ8JHt0eXBlfSR7bGVuZ3RofT4sIHVpbnQgTWlwTGV2ZWwsIHRo
cmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIE51bWJlck9mTGV2ZWxzKTtgKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UxIG9mIFtgdGhyZWFkYCwgYGRldmljZWAs
IGB0aHJlYWRncm91cGBdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NT
cGFjZTIgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pCisgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlMUQ8
JHt0eXBlfSR7bGVuZ3RofT4sIHVpbnQgTWlwTGV2ZWwsICR7YWRkcmVzc1NwYWNlMX0gdWludCog
V2lkdGgsICR7YWRkcmVzc1NwYWNlMn0gdWludCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcmludCgpOwogICAgICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBTYW1wbGUoVGV4dHVyZTFEQXJyYXk8JHt0eXBl
fSR7bGVuZ3RofT4sIHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlMURBcnJheTwk
e3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9uLCBpbnQgb2Zmc2V0KTtg
KTsKICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChU
ZXh0dXJlMURBcnJheTwke3R5cGV9JHtsZW5ndGh9PiwgaW50MyBsb2NhdGlvbik7YCk7CiAgICAg
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTFE
QXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIGludDMgbG9jYXRpb24sIGludCBvZmZzZXQpO2ApOwot
ICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmUx
REFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lk
dGgsIHRocmVhZCB1aW50KiBFbGVtZW50cywgdGhyZWFkIHVpbnQqIE51bWJlck9mTGV2ZWxzKTtg
KTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UxIG9mIFtgdGhyZWFkYCwg
YGRldmljZWAsIGB0aHJlYWRncm91cGBdKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0
IGFkZHJlc3NTcGFjZTIgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTMgb2YgW2B0aHJl
YWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTFEQXJyYXk8JHt0eXBl
fSR7bGVuZ3RofT4sIHVpbnQgTWlwTGV2ZWwsICR7YWRkcmVzc1NwYWNlMX0gdWludCogV2lkdGgs
ICR7YWRkcmVzc1NwYWNlMn0gdWludCogRWxlbWVudHMsICR7YWRkcmVzc1NwYWNlM30gdWludCog
TnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHByaW50KCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4s
IHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4s
IHNhbXBsZXIsIGZsb2F0MiBsb2NhdGlvbiwgaW50MiBvZmZzZXQpO2ApOwpAQCAtMTk2MCw3ICsx
OTczLDEyIEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBM
b2FkKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9PiwgaW50MyBsb2NhdGlvbik7YCk7CiAgICAg
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTJE
PCR7dHlwZX0ke2xlbmd0aH0+LCBpbnQzIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7Ci0gICAg
ICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTJEPCR7
dHlwZX0ke2xlbmd0aH0+LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVh
ZCB1aW50KiBIZWlnaHQsIHRocmVhZCB1aW50KiBOdW1iZXJPZkxldmVscyk7YCk7CisgICAgICAg
ICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBg
dGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3Bh
Y2UyIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbYHRocmVhZGAsIGBkZXZpY2Vg
LCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9PiwgdWlu
dCBNaXBMZXZlbCwgJHthZGRyZXNzU3BhY2UxfSB1aW50KiBXaWR0aCwgJHthZGRyZXNzU3BhY2Uy
fSB1aW50KiBIZWlnaHQsICR7YWRkcmVzc1NwYWNlM30gdWludCogTnVtYmVyT2ZMZXZlbHMpO2Ap
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHByaW50KCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5n
dGh9IFNhbXBsZShUZXh0dXJlMkRBcnJheTwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxv
YXQzIGxvY2F0aW9uKTtgKTsKICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0k
e2xlbmd0aH0gU2FtcGxlKFRleHR1cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LCBzYW1wbGVy
LCBmbG9hdDMgbG9jYXRpb24sIGludDIgb2Zmc2V0KTtgKTsKQEAgLTE5ODgsMTMgKzIwMDYsMjcg
QEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4
dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIGludDQgbG9jYXRpb24pO2ApOwogICAgICAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFRleHR1cmUyREFy
cmF5PCR7dHlwZX0ke2xlbmd0aH0+LCBpbnQ0IGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7Ci0g
ICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoVGV4dHVyZTJE
QXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sIHVpbnQgTWlwTGV2ZWwsIHRocmVhZCB1aW50KiBXaWR0
aCwgdGhyZWFkIHVpbnQqIEhlaWdodCwgdGhyZWFkIHVpbnQqIEVsZW1lbnRzLCB0aHJlYWQgdWlu
dCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NT
cGFjZTEgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMiBvZiBbYHRocmVhZGAsIGBkZXZpY2Vg
LCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRk
cmVzc1NwYWNlMyBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTQgb2YgW2B0aHJl
YWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmUyREFycmF5PCR7
dHlwZX0ke2xlbmd0aH0+LCB1aW50IE1pcExldmVsLCAke2FkZHJlc3NTcGFjZTF9IHVpbnQqIFdp
ZHRoLCAke2FkZHJlc3NTcGFjZTJ9IHVpbnQqIEhlaWdodCwgJHthZGRyZXNzU3BhY2UzfSB1aW50
KiBFbGVtZW50cywgJHthZGRyZXNzU3BhY2U0fSB1aW50KiBOdW1iZXJPZkxldmVscyk7YCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJpbnQoKTsKICAgICAgICAgICAgICAgICBwcmlu
dChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlKFRleHR1cmUzRDwke3R5cGV9JHtsZW5n
dGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsKICAgICAgICAgICAgICAgICBwcmlu
dChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxlKFRleHR1cmUzRDwke3R5cGV9JHtsZW5n
dGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBpbnQzIG9mZnNldCk7YCk7CiAgICAgICAg
ICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoVGV4dHVyZTNEPCR7
dHlwZX0ke2xlbmd0aH0+LCBpbnQ0IGxvY2F0aW9uKTtgKTsKICAgICAgICAgICAgICAgICBwcmlu
dChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3Ro
fT4sIGludDQgbG9jYXRpb24sIGludDMgb2Zmc2V0KTtgKTsKLSAgICAgICAgICAgICAgICBwcmlu
dChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlM0Q8JHt0eXBlfSR7bGVuZ3RofT4s
IHVpbnQgTWlwTGV2ZWwsIHRocmVhZCB1aW50KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEhlaWdodCwg
dGhyZWFkIHVpbnQqIERlcHRoLCB0aHJlYWQgdWludCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAg
ICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgW2B0aHJlYWRgLCBgZGV2aWNl
YCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVz
c1NwYWNlMiBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBvZiBbYHRocmVhZGAsIGBk
ZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAobGV0IGFkZHJlc3NTcGFjZTQgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3Vw
YF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBH
ZXREaW1lbnNpb25zKFRleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PiwgdWludCBNaXBMZXZlbCwg
JHthZGRyZXNzU3BhY2UxfSB1aW50KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSB1aW50KiBIZWln
aHQsICR7YWRkcmVzc1NwYWNlM30gdWludCogRGVwdGgsICR7YWRkcmVzc1NwYWNlNH0gdWludCog
TnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHByaW50KCk7
CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IFNhbXBsZShU
ZXh0dXJlQ3ViZTwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtg
KTsKICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0ke2xlbmd0aH0gU2FtcGxl
QmlhcyhUZXh0dXJlQ3ViZTwke3R5cGV9JHtsZW5ndGh9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0
aW9uLCBmbG9hdCBCaWFzKTtgKTsKQEAgLTIwMTAsMzAgKzIwNDIsNTcgQEAgbGV0IHN0YW5kYXJk
TGlicmFyeSA9IChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dChgbmF0aXZlICR7dHlwZX00IEdhdGhlckFscGhhKFRleHR1cmVDdWJlPCR7dHlwZX0ke2xlbmd0
aH0+LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBH
ZXREaW1lbnNpb25zKFRleHR1cmVDdWJlPCR7dHlwZX0ke2xlbmd0aH0+LCB1aW50IE1pcExldmVs
LCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50KiBIZWlnaHQsIHRocmVhZCB1aW50KiBO
dW1iZXJPZkxldmVscyk7YCk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNl
MSBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UyIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0
aHJlYWRncm91cGBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNz
U3BhY2UzIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBdKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1
cmVDdWJlPCR7dHlwZX0ke2xlbmd0aH0+LCB1aW50IE1pcExldmVsLCAke2FkZHJlc3NTcGFjZTF9
IHVpbnQqIFdpZHRoLCAke2FkZHJlc3NTcGFjZTJ9IHVpbnQqIEhlaWdodCwgJHthZGRyZXNzU3Bh
Y2UzfSB1aW50KiBOdW1iZXJPZkxldmVscyk7YCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgICAgICAg
ICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUxRDwke3R5cGV9JHts
ZW5ndGh9PiwgdGhyZWFkIHVpbnQqIFdpZHRoKTtgKTsKLSAgICAgICAgICAgICAgICBwcmludChg
bmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUxRDwke3R5cGV9JHtsZW5ndGh9Piwg
dGhyZWFkIGZsb2F0KiBXaWR0aCk7YCk7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVz
c1NwYWNlIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBdKSB7CisgICAgICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTFE
PCR7dHlwZX0ke2xlbmd0aH0+LCAke2FkZHJlc3NTcGFjZX0gdWludCogV2lkdGgpO2ApOworICAg
ICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1
cmUxRDwke3R5cGV9JHtsZW5ndGh9PiwgJHthZGRyZXNzU3BhY2V9IGZsb2F0KiBXaWR0aCk7YCk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBl
fSR7bGVuZ3RofSBMb2FkKFJXVGV4dHVyZTFEPCR7dHlwZX0ke2xlbmd0aH0+LCBpbnQgbG9jYXRp
b24pO2ApOwogICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBTdG9yZShSV1RleHR1
cmUxRDwke3R5cGV9JHtsZW5ndGh9PiwgJHt0eXBlfSR7bGVuZ3RofSwgdWludCBsb2NhdGlvbik7
YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgICAgICAgICBwcmludChgbmF0
aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUxREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+
LCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50KiBFbGVtZW50cyk7YCk7Ci0gICAgICAg
ICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMURBcnJh
eTwke3R5cGV9JHtsZW5ndGh9PiwgdGhyZWFkIGZsb2F0KiBXaWR0aCwgdGhyZWFkIHVpbnQqIEVs
ZW1lbnRzKTtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2UxIG9mIFtg
dGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBdKSB7CisgICAgICAgICAgICAgICAgICAg
IGZvciAobGV0IGFkZHJlc3NTcGFjZTIgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdy
b3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXRE
aW1lbnNpb25zKFJXVGV4dHVyZTFEQXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sICR7YWRkcmVzc1Nw
YWNlMX0gdWludCogV2lkdGgsICR7YWRkcmVzc1NwYWNlMn0gdWludCogRWxlbWVudHMpO2ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMo
UldUZXh0dXJlMURBcnJheTwke3R5cGV9JHtsZW5ndGh9PiwgJHthZGRyZXNzU3BhY2UxfSBmbG9h
dCogV2lkdGgsICR7YWRkcmVzc1NwYWNlMn0gdWludCogRWxlbWVudHMpO2ApOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgJHt0eXBlfSR7bGVuZ3RofSBMb2FkKFJXVGV4dHVyZTFEQXJyYXk8JHt0eXBlfSR7bGVu
Z3RofT4sIGludDIgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
dm9pZCBTdG9yZShSV1RleHR1cmUxREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LCAke3R5cGV9JHts
ZW5ndGh9LCB1aW50MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoKTsKLSAg
ICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUy
RDwke3R5cGV9JHtsZW5ndGh9PiwgdGhyZWFkIHVpbnQqIFdpZHRoLCB0aHJlYWQgdWludCogSGVp
Z2h0KTtgKTsKLSAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9u
cyhSV1RleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9PiwgdGhyZWFkIGZsb2F0KiBXaWR0aCwgdGhy
ZWFkIGZsb2F0KiBIZWlnaHQpO2ApOworICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NT
cGFjZTEgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMiBvZiBbYHRocmVhZGAsIGBkZXZpY2Vg
LCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMkQ8JHt0eXBlfSR7bGVuZ3RofT4sICR7YWRk
cmVzc1NwYWNlMX0gdWludCogV2lkdGgsICR7YWRkcmVzc1NwYWNlMn0gdWludCogSGVpZ2h0KTtg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNp
b25zKFJXVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCAke2FkZHJlc3NTcGFjZTF9IGZsb2F0
KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSBmbG9hdCogSGVpZ2h0KTtgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcmludChgbmF0
aXZlICR7dHlwZX0ke2xlbmd0aH0gTG9hZChSV1RleHR1cmUyRDwke3R5cGV9JHtsZW5ndGh9Piwg
aW50MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIFN0
b3JlKFJXVGV4dHVyZTJEPCR7dHlwZX0ke2xlbmd0aH0+LCAke3R5cGV9JHtsZW5ndGh9LCB1aW50
MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAgICAgcHJpbnQoKTsKLSAgICAgICAgICAgICAg
ICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmUyREFycmF5PCR7dHlw
ZX0ke2xlbmd0aH0+LCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50KiBIZWlnaHQsIHRo
cmVhZCB1aW50KiBFbGVtZW50cyk7YCk7Ci0gICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2
b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlMkRBcnJheTwke3R5cGV9JHtsZW5ndGh9PiwgdGhy
ZWFkIGZsb2F0KiBXaWR0aCwgdGhyZWFkIGZsb2F0KiBIZWlnaHQsIHRocmVhZCBmbG9hdCogRWxl
bWVudHMpO2ApOworICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgW2B0
aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChsZXQgYWRkcmVzc1NwYWNlMiBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3Jv
dXBgXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMyBv
ZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTJE
QXJyYXk8JHt0eXBlfSR7bGVuZ3RofT4sICR7YWRkcmVzc1NwYWNlMX0gdWludCogV2lkdGgsICR7
YWRkcmVzc1NwYWNlMn0gdWludCogSGVpZ2h0LCAke2FkZHJlc3NTcGFjZTN9IHVpbnQqIEVsZW1l
bnRzKTtgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQg
R2V0RGltZW5zaW9ucyhSV1RleHR1cmUyREFycmF5PCR7dHlwZX0ke2xlbmd0aH0+LCAke2FkZHJl
c3NTcGFjZTF9IGZsb2F0KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSBmbG9hdCogSGVpZ2h0LCAk
e2FkZHJlc3NTcGFjZTN9IGZsb2F0KiBFbGVtZW50cyk7YCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoUldUZXh0dXJlMkRB
cnJheTwke3R5cGV9JHtsZW5ndGh9PiwgaW50MyBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICAg
ICAgcHJpbnQoYG5hdGl2ZSB2b2lkIFN0b3JlKFJXVGV4dHVyZTJEQXJyYXk8JHt0eXBlfSR7bGVu
Z3RofT4sICR7dHlwZX0ke2xlbmd0aH0sIHVpbnQzIGxvY2F0aW9uKTtgKTsKICAgICAgICAgICAg
ICAgICBwcmludCgpOwotICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1l
bnNpb25zKFJXVGV4dHVyZTNEPCR7dHlwZX0ke2xlbmd0aH0+LCB0aHJlYWQgdWludCogV2lkdGgs
IHRocmVhZCB1aW50KiBIZWlnaHQsIHRocmVhZCB1aW50KiBEZXB0aCk7YCk7Ci0gICAgICAgICAg
ICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlM0Q8JHt0eXBl
fSR7bGVuZ3RofT4sIHRocmVhZCBmbG9hdCogV2lkdGgsIHRocmVhZCBmbG9hdCogSGVpZ2h0LCB0
aHJlYWQgZmxvYXQqIERlcHRoKTtgKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRyZXNz
U3BhY2UxIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBdKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTIgb2YgW2B0aHJlYWRgLCBgZGV2aWNl
YCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFk
ZHJlc3NTcGFjZTMgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9u
cyhSV1RleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PiwgJHthZGRyZXNzU3BhY2UxfSB1aW50KiBX
aWR0aCwgJHthZGRyZXNzU3BhY2UyfSB1aW50KiBIZWlnaHQsICR7YWRkcmVzc1NwYWNlM30gdWlu
dCogRGVwdGgpO2ApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
dm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZTNEPCR7dHlwZX0ke2xlbmd0aH0+LCAke2FkZHJl
c3NTcGFjZTF9IGZsb2F0KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSBmbG9hdCogSGVpZ2h0LCAk
e2FkZHJlc3NTcGFjZTN9IGZsb2F0KiBEZXB0aCk7YCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgcHJpbnQoYG5hdGl2ZSAke3R5cGV9JHtsZW5ndGh9IExvYWQoUldUZXh0dXJlM0Q8JHt0
eXBlfSR7bGVuZ3RofT4sIGludDMgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgICAgIHByaW50
KGBuYXRpdmUgdm9pZCBTdG9yZShSV1RleHR1cmUzRDwke3R5cGV9JHtsZW5ndGh9PiwgJHt0eXBl
fSR7bGVuZ3RofSwgdWludDMgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgICAgIHByaW50KCk7
CkBAIC0yMDYzLDcgKzIxMjIsMTIgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlvbigp
IHsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQ21wUmVkKFRleHR1
cmVEZXB0aDJEPCR7dHlwZX0+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24sIGZsb2F0IGNvbXBh
cmVfdmFsdWUsIGludDIgb2Zmc2V0KTtgKTsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0
eXBlfSBMb2FkKFRleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBpbnQzIGxvY2F0aW9uKTtgKTsKICAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBMb2FkKFRleHR1cmVEZXB0aDJEPCR7dHlw
ZX0+LCBpbnQzIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7Ci0gICAgICAgICAgICBwcmludChg
bmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlRGVwdGgyRDwke3R5cGV9PiwgdWludCBN
aXBMZXZlbCwgdGhyZWFkIHVpbnQqIFdpZHRoLCB0aHJlYWQgdWludCogSGVpZ2h0LCB0aHJlYWQg
dWludCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1Nw
YWNlMSBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAg
ICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTIgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRo
cmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNl
MyBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFRleHR1cmVEZXB0aDJE
PCR7dHlwZX0+LCB1aW50IE1pcExldmVsLCAke2FkZHJlc3NTcGFjZTF9IHVpbnQqIFdpZHRoLCAk
e2FkZHJlc3NTcGFjZTJ9IHVpbnQqIEhlaWdodCwgJHthZGRyZXNzU3BhY2UzfSB1aW50KiBOdW1i
ZXJPZkxldmVscyk7YCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcHJpbnQoKTsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGUo
VGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtg
KTsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGUoVGV4dHVyZURlcHRo
MkRBcnJheTwke3R5cGV9Piwgc2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7
YCk7CkBAIC0yMDg3LDcgKzIxNTEsMTQgQEAgbGV0IHN0YW5kYXJkTGlicmFyeSA9IChmdW5jdGlv
bigpIHsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQ21wUmVkKFRl
eHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgZmxv
YXQgY29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQpO2ApOwogICAgICAgICAgICAgcHJpbnQoYG5h
dGl2ZSAke3R5cGV9IExvYWQoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9PiwgaW50NCBsb2Nh
dGlvbik7YCk7CiAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gTG9hZChUZXh0dXJl
RGVwdGgyREFycmF5PCR7dHlwZX0+LCBpbnQ0IGxvY2F0aW9uLCBpbnQyIG9mZnNldCk7YCk7Ci0g
ICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlRGVwdGgy
REFycmF5PCR7dHlwZX0+LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVh
ZCB1aW50KiBIZWlnaHQsIHRocmVhZCB1aW50KiBFbGVtZW50cywgdGhyZWFkIHVpbnQqIE51bWJl
ck9mTGV2ZWxzKTtgKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgW2B0
aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KGxldCBhZGRyZXNzU3BhY2UyIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBd
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTMgb2YgW2B0aHJl
YWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAobGV0IGFkZHJlc3NTcGFjZTQgb2YgW2B0aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdy
b3VwYF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdl
dERpbWVuc2lvbnMoVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9PiwgdWludCBNaXBMZXZlbCwg
JHthZGRyZXNzU3BhY2UxfSB1aW50KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSB1aW50KiBIZWln
aHQsICR7YWRkcmVzc1NwYWNlM30gdWludCogRWxlbWVudHMsICR7YWRkcmVzc1NwYWNlNH0gdWlu
dCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgcHJpbnQoKTsKICAgICAgICAgICAg
IHByaW50KGBuYXRpdmUgJHt0eXBlfSBTYW1wbGUoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9Piwg
c2FtcGxlciwgZmxvYXQzIGxvY2F0aW9uKTtgKTsKICAgICAgICAgICAgIHByaW50KGBuYXRpdmUg
JHt0eXBlfSBTYW1wbGVDbXAoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9Piwgc2FtcGxlciwgZmxv
YXQzIGxvY2F0aW9uLCAke3R5cGV9IENvbXBhcmVWYWx1ZSk7YCk7CkBAIC0yMDk5LDE1ICsyMTcw
LDMwIEBAIGxldCBzdGFuZGFyZExpYnJhcnkgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICBw
cmludChgbmF0aXZlICR7dHlwZX00IEdhdGhlclJlZChUZXh0dXJlRGVwdGhDdWJlPCR7dHlwZX0+
LCBzYW1wbGVyLCBmbG9hdDMgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgcHJpbnQoYG5hdGl2
ZSAke3R5cGV9NCBHYXRoZXJDbXAoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9Piwgc2FtcGxlciwg
ZmxvYXQzIGxvY2F0aW9uLCBmbG9hdCBjb21wYXJlX3ZhbHVlKTtgKTsKICAgICAgICAgICAgIHBy
aW50KGBuYXRpdmUgJHt0eXBlfTQgR2F0aGVyQ21wUmVkKFRleHR1cmVEZXB0aEN1YmU8JHt0eXBl
fT4sIHNhbXBsZXIsIGZsb2F0MyBsb2NhdGlvbiwgZmxvYXQgY29tcGFyZV92YWx1ZSk7YCk7Ci0g
ICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhUZXh0dXJlRGVwdGhD
dWJlPCR7dHlwZX0+LCB1aW50IE1pcExldmVsLCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1
aW50KiBIZWlnaHQsIHRocmVhZCB1aW50KiBOdW1iZXJPZkxldmVscyk7YCk7CisgICAgICAgICAg
ICBmb3IgKGxldCBhZGRyZXNzU3BhY2UxIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRn
cm91cGBdKSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMiBvZiBbYHRo
cmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFkZ3JvdXBgXSkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKGxldCBhZGRyZXNzU3BhY2UzIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91
cGBdKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVu
c2lvbnMoVGV4dHVyZURlcHRoQ3ViZTwke3R5cGV9PiwgdWludCBNaXBMZXZlbCwgJHthZGRyZXNz
U3BhY2UxfSB1aW50KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSB1aW50KiBIZWlnaHQsICR7YWRk
cmVzc1NwYWNlM30gdWludCogTnVtYmVyT2ZMZXZlbHMpO2ApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByaW50KCk7Ci0gICAgICAgICAgICBwcmludChg
bmF0aXZlIHZvaWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCB0aHJl
YWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50KiBIZWlnaHQpO2ApOwotICAgICAgICAgICAgcHJp
bnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgyRDwke3R5cGV9Piwg
dGhyZWFkIGZsb2F0KiBXaWR0aCwgdGhyZWFkIGZsb2F0KiBIZWlnaHQpO2ApOworICAgICAgICAg
ICAgZm9yIChsZXQgYWRkcmVzc1NwYWNlMSBvZiBbYHRocmVhZGAsIGBkZXZpY2VgLCBgdGhyZWFk
Z3JvdXBgXSkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTIgb2YgW2B0
aHJlYWRgLCBgZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
cHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgyRDwke3R5cGV9
PiwgJHthZGRyZXNzU3BhY2UxfSB1aW50KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSB1aW50KiBI
ZWlnaHQpO2ApOworICAgICAgICAgICAgICAgICAgICBwcmludChgbmF0aXZlIHZvaWQgR2V0RGlt
ZW5zaW9ucyhSV1RleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCAke2FkZHJlc3NTcGFjZTF9IGZsb2F0
KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSBmbG9hdCogSGVpZ2h0KTtgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0g
TG9hZChSV1RleHR1cmVEZXB0aDJEPCR7dHlwZX0+LCBpbnQyIGxvY2F0aW9uKTtgKTsKICAgICAg
ICAgICAgIHByaW50KGBuYXRpdmUgdm9pZCBTdG9yZShSV1RleHR1cmVEZXB0aDJEPCR7dHlwZX0+
LCAke3R5cGV9LCB1aW50MiBsb2NhdGlvbik7YCk7CiAgICAgICAgICAgICBwcmludCgpOwotICAg
ICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgy
REFycmF5PCR7dHlwZX0+LCB0aHJlYWQgdWludCogV2lkdGgsIHRocmVhZCB1aW50KiBIZWlnaHQs
IHRocmVhZCB1aW50KiBFbGVtZW50cyk7YCk7Ci0gICAgICAgICAgICBwcmludChgbmF0aXZlIHZv
aWQgR2V0RGltZW5zaW9ucyhSV1RleHR1cmVEZXB0aDJEQXJyYXk8JHt0eXBlfT4sIHRocmVhZCBm
bG9hdCogV2lkdGgsIHRocmVhZCBmbG9hdCogSGVpZ2h0LCB0aHJlYWQgZmxvYXQqIEVsZW1lbnRz
KTtgKTsKKyAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTEgb2YgW2B0aHJlYWRgLCBg
ZGV2aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBhZGRy
ZXNzU3BhY2UyIG9mIFtgdGhyZWFkYCwgYGRldmljZWAsIGB0aHJlYWRncm91cGBdKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFjZTMgb2YgW2B0aHJlYWRgLCBgZGV2
aWNlYCwgYHRocmVhZGdyb3VwYF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGBu
YXRpdmUgdm9pZCBHZXREaW1lbnNpb25zKFJXVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9Piwg
JHthZGRyZXNzU3BhY2UxfSB1aW50KiBXaWR0aCwgJHthZGRyZXNzU3BhY2UyfSB1aW50KiBIZWln
aHQsICR7YWRkcmVzc1NwYWNlM30gdWludCogRWxlbWVudHMpO2ApOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQoYG5hdGl2ZSB2b2lkIEdldERpbWVuc2lvbnMoUldUZXh0dXJlRGVwdGgy
REFycmF5PCR7dHlwZX0+LCAke2FkZHJlc3NTcGFjZTF9IGZsb2F0KiBXaWR0aCwgJHthZGRyZXNz
U3BhY2UyfSBmbG9hdCogSGVpZ2h0LCAke2FkZHJlc3NTcGFjZTN9IGZsb2F0KiBFbGVtZW50cyk7
YCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBwcmludChgbmF0aXZlICR7dHlwZX0gTG9hZChSV1RleHR1cmVEZXB0
aDJEQXJyYXk8JHt0eXBlfT4sIGludDMgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgcHJpbnQo
YG5hdGl2ZSB2b2lkIFN0b3JlKFJXVGV4dHVyZURlcHRoMkRBcnJheTwke3R5cGV9PiwgJHt0eXBl
fSwgdWludDMgbG9jYXRpb24pO2ApOwogICAgICAgICAgICAgcHJpbnQoKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCmluZGV4IDY1OWI0MzI5Yzg4MjhkMjc2NWFiYzBjNjM4OWJj
YjM2NWUyMzdlY2QuLjAwMTBiMmE1MWVhMDdmMGQxYjk5YTE1ZjllMmU4NGU4MDdkZjFlMzQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwpAQCAtNjQ2LDcgKzY0Niw3IEBAIHRl
c3RzLnNpbXBsZU1ha2VQdHIgPSBmdW5jdGlvbigpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
RXhwZWN0ZWQgNDIgYnV0IGdvdDogIiArIHZhbHVlKTsKIH0KIAotdGVzdHMudGhyZWFkQXJyYXlM
b2FkID0gZnVuY3Rpb24oKQordGVzdHMudGhyZWFkQXJyYXlSZWZMb2FkID0gZnVuY3Rpb24oKQog
ewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKICAgICAgICAgdGVzdCBpbnQgZm9vKHRocmVh
ZCBpbnRbXSBhcnJheSkKQEAgLTY2MCw3ICs2NjAsNyBAQCB0ZXN0cy50aHJlYWRBcnJheUxvYWQg
PSBmdW5jdGlvbigpCiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7CiB9CiAKLXRl
c3RzLnRocmVhZEFycmF5TG9hZEludExpdGVyYWwgPSBmdW5jdGlvbigpCit0ZXN0cy50aHJlYWRB
cnJheVJlZkxvYWRJbnRMaXRlcmFsID0gZnVuY3Rpb24oKQogewogICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKICAgICAgICAgdGVzdCBpbnQgZm9vKHRocmVhZCBpbnRbXSBhcnJheSkKQEAgLTY3
NCw3ICs2NzQsNyBAQCB0ZXN0cy50aHJlYWRBcnJheUxvYWRJbnRMaXRlcmFsID0gZnVuY3Rpb24o
KQogICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkpOwogfQogCi10ZXN0cy5kZXZpY2VB
cnJheUxvYWQgPSBmdW5jdGlvbigpCit0ZXN0cy5kZXZpY2VBcnJheVJlZkxvYWQgPSBmdW5jdGlv
bigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAgICAgICB0ZXN0IGludCBmb28o
ZGV2aWNlIGludFtdIGFycmF5KQpAQCAtNjg4LDcgKzY4OCw3IEBAIHRlc3RzLmRldmljZUFycmF5
TG9hZCA9IGZ1bmN0aW9uKCkKICAgICBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIDg5KTsKIH0K
IAotdGVzdHMudGhyZWFkQXJyYXlTdG9yZSA9IGZ1bmN0aW9uKCkKK3Rlc3RzLnRocmVhZEFycmF5
UmVmU3RvcmUgPSBmdW5jdGlvbigpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAg
ICAgICB0ZXN0IHZvaWQgZm9vKHRocmVhZCBpbnRbXSBhcnJheSwgaW50IHZhbHVlKQpAQCAtNzA5
LDcgKzcwOSw3IEBAIHRlc3RzLnRocmVhZEFycmF5U3RvcmUgPSBmdW5jdGlvbigpCiAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQg
LTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKIH0KIAotdGVzdHMuZGV2aWNlQXJyYXlTdG9yZSA9
IGZ1bmN0aW9uKCkKK3Rlc3RzLmRldmljZUFycmF5UmVmU3RvcmUgPSBmdW5jdGlvbigpCiB7CiAg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAogICAgICAgICB0ZXN0IHZvaWQgZm9vKGRldmljZSBp
bnRbXSBhcnJheSwgaW50IHZhbHVlKQpAQCAtNzMwLDcgKzczMCw3IEBAIHRlc3RzLmRldmljZUFy
cmF5U3RvcmUgPSBmdW5jdGlvbigpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVl
IHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgLTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsK
IH0KIAotdGVzdHMuZGV2aWNlQXJyYXlTdG9yZUludExpdGVyYWwgPSBmdW5jdGlvbigpCit0ZXN0
cy5kZXZpY2VBcnJheVJlZlN0b3JlSW50TGl0ZXJhbCA9IGZ1bmN0aW9uKCkKIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCiAgICAgICAgIHRlc3Qgdm9pZCBmb28oZGV2aWNlIGludFtdIGFy
cmF5LCBpbnQgdmFsdWUpCkBAIC03NTEsNiArNzUxLDEwMiBAQCB0ZXN0cy5kZXZpY2VBcnJheVN0
b3JlSW50TGl0ZXJhbCA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
dmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQo
MCkpOwogfQogCit0ZXN0cy50aHJlYWRQb2ludGVyTG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHRlc3QgaW50IGZvbyh0aHJlYWQgaW50KiBw
dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAgICB9CisgICAg
YCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOworICAgIGJ1ZmZlci5zZXQoMCwg
ODkpOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtUeXBl
ZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwgInRocmVhZCIsIHByb2dyYW0u
aW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZmZXIsIDApKV0pOworICAgIGNoZWNrSW50KHBy
b2dyYW0sIHJlc3VsdCwgODkpOworfQorCit0ZXN0cy50aHJlYWRQb2ludGVyU3RvcmUgPSBmdW5j
dGlvbigpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0IHZvaWQg
Zm9vKHRocmVhZCBpbnQqIHB0ciwgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICAq
cHRyID0gdmFsdWU7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgYnVmZmVyID0gbmV3IEVC
dWZmZXIoMSk7CisgICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAgbGV0IHBvaW50ZXIgPSBUeXBl
ZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwgInRocmVhZCIsIHByb2dyYW0u
aW50cmluc2ljcy5pbnQpLCBuZXcgRVB0cihidWZmZXIsIDApKTsKKyAgICBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtwb2ludGVyLCBtYWtlSW50KHByb2dyYW0sIDEyMyldKTsKKyAgICBp
ZiAoYnVmZmVyLmdldCgwKSAhPSAxMjMpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZh
bHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgMTIzKTogIiArIGJ1ZmZlci5nZXQoMCkp
OworICAgIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW3BvaW50ZXIsIG1ha2VJbnQocHJv
Z3JhbSwgMzIxKV0pOworICAgIGlmIChidWZmZXIuZ2V0KDApICE9IDMyMSkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAzMjEp
OiAiICsgYnVmZmVyLmdldCgwKSk7Cit9CisKK3Rlc3RzLmRldmljZVBvaW50ZXJMb2FkID0gZnVu
Y3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdGVzdCBpbnQg
Zm9vKGRldmljZSBpbnQqIHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpwdHI7
CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMSk7Cisg
ICAgYnVmZmVyLnNldCgwLCA4OSk7CisgICAgbGV0IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW1R5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBlKGV4dGVybmFsT3JpZ2luLCAi
ZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBFUHRyKGJ1ZmZlciwgMCkpXSk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7Cit9CisKK3Rlc3RzLmRldmljZVBv
aW50ZXJTdG9yZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHRlc3Qgdm9pZCBmb28oZGV2aWNlIGludCogcHRyLCBpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpwdHIgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgIGApOworICAgIGxl
dCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigxKTsKKyAgICBidWZmZXIuc2V0KDAsIDg5KTsKKyAgICBs
ZXQgcG9pbnRlciA9IFR5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBlKGV4dGVybmFsT3JpZ2luLCAi
ZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludCksIG5ldyBFUHRyKGJ1ZmZlciwgMCkpOwor
ICAgIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW3BvaW50ZXIsIG1ha2VJbnQocHJvZ3Jh
bSwgMTIzKV0pOworICAgIGlmIChidWZmZXIuZ2V0KDApICE9IDEyMykKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAxMjMpOiAi
ICsgYnVmZmVyLmdldCgwKSk7CisgICAgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbcG9p
bnRlciwgbWFrZUludChwcm9ncmFtLCAzMjEpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0g
MzIxKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBidWZm
ZXIgKGV4cGVjdGVkIDMyMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKK30KKwordGVzdHMuYXJyYXlM
b2FkID0gZnVuY3Rpb24oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
dHlwZWRlZiBJbnRBcnJheSA9IGludFszXTsKKyAgICAgICAgdGVzdCBpbnQgZm9vKEludEFycmF5
IGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhWzBdOworICAgICAgICB9CisgICAg
ICAgIHRlc3QgaW50IGJhcihJbnRBcnJheSBhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYVsxXTsKKyAgICAgICAgfQorICAgICAgICB0ZXN0IGludCBiYXooSW50QXJyYXkgYSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFbMl07CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMyk7CisgICAgYnVmZmVyLnNldCgwLCA4OSk7Cisg
ICAgYnVmZmVyLnNldCgxLCA5MSk7CisgICAgYnVmZmVyLnNldCgyLCAxMDMpOworICAgIGxldCBh
cnJheSA9IG5ldyBUeXBlZFZhbHVlKHByb2dyYW0udHlwZXMuZ2V0KCJJbnRBcnJheSIpLnR5cGUs
IG5ldyBFUHRyKGJ1ZmZlciwgMCkpOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFthcnJheV0pOworICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkp
OworICAgIHJlc3VsdCA9IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW2FycmF5XSk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA5MSk7CisgICAgcmVzdWx0ID0gY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJiYXoiLCBbYXJyYXldKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCByZXN1
bHQsIDEwMyk7Cit9CisKIHRlc3RzLnR5cGVNaXNtYXRjaFJldHVybiA9IGZ1bmN0aW9uKCkKIHsK
ICAgICBjaGVja0ZhaWwoCkBAIC05MDg4LDYgKzkxODQsMTg1IEBAIHRlc3RzLnRleHR1cmVHYXRo
ZXIgPSBmdW5jdGlvbigpIHsKICAgICAvLyBGSVhNRTogR2F0aGVyIG90aGVyIGNvbXBvbmVudHMK
IH0KIAordGVzdHMuY29uc3RhbnRBZGRyZXNzU3BhY2UgPSBmdW5jdGlvbigpIHsKKyAgICBjaGVj
a0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICB2b2lkIGZvbyhjb25z
dGFudCBpbnQqIGJhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYmFyID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiY29uc3RhbnQgYWRkcmVzcyBzcGFjZSIp
ICE9PSAtMSk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAg
ICAgICAgdm9pZCBmb28oY29uc3RhbnQgaW50W10gYmFyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJhclswXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAg
ICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoImNv
bnN0YW50IGFkZHJlc3Mgc3BhY2UiKSAhPT0gLTEpOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAg
KCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHR5cGVkZWYgQ29uc3RhbnRJbnRBcnJheVJlZiA9
IGNvbnN0YW50IGludFtdOworICAgICAgICAgICAgdm9pZCBmb28oQ29uc3RhbnRJbnRBcnJheVJl
ZlszXSBiYXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFyWzBdWzBdID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2Yg
V1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiY29uc3RhbnQgYWRkcmVzcyBzcGFjZSIp
ICE9PSAtMSk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAg
ICAgICAgdHlwZWRlZiBJbnRBcnJheSA9IGludFszXTsKKyAgICAgICAgICAgIHZvaWQgZm9vKGNv
bnN0YW50IEludEFycmF5W10gYmFyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJh
clswXVswXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4g
ZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoImNvbnN0YW50IGFk
ZHJlc3Mgc3BhY2UiKSAhPT0gLTEpOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9Q
cmVwKGAKKyAgICAgICAgICAgIHR5cGVkZWYgSW50QXJyYXkgPSBpbnRbM107CisgICAgICAgICAg
ICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgICAgICBJbnRBcnJheSBiYXo7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2b2lkIGZvbyhjb25zdGFudCBCYXJbXSBiYXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYmFyWzBdLmJhelswXSA9IDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5t
ZXNzYWdlLmluZGV4T2YoImNvbnN0YW50IGFkZHJlc3Mgc3BhY2UiKSAhPT0gLTEpOworICAgIGNo
ZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHN0cnVjdCBCYXIg
eworICAgICAgICAgICAgICAgIGludCBiYXo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
eXBlZGVmIEJhckFycmF5ID0gQmFyWzNdOworICAgICAgICAgICAgdm9pZCBmb28oY29uc3RhbnQg
QmFyQXJyYXlbXSBiYXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmFyWzBdWzBd
LmJheiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICAoZSkgPT4gZSBp
bnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoImNvbnN0YW50IGFkZHJl
c3Mgc3BhY2UiKSAhPT0gLTEpOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVw
KGAKKyAgICAgICAgICAgIHR5cGVkZWYgSW50QXJyYXkgPSBpbnRbM107CisgICAgICAgICAgICBz
dHJ1Y3QgQmFyIHsKKyAgICAgICAgICAgICAgICBjb25zdGFudCBJbnRBcnJheVtdIGJhejsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgZm9vKEJhciBiYXIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgYmFyLmJhelswXVswXSA9IDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIGApLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNz
YWdlLmluZGV4T2YoImNvbnN0YW50IGFkZHJlc3Mgc3BhY2UiKSAhPT0gLTEpOworICAgIGNoZWNr
RmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIHR5cGVkZWYgQ29uc3Rh
bnRJbnRBcnJheVJlZiA9IGNvbnN0YW50IGludFtdOworICAgICAgICAgICAgc3RydWN0IEJhciB7
CisgICAgICAgICAgICAgICAgQ29uc3RhbnRJbnRBcnJheVJlZlszXSBiYXo7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2b2lkIGZvbyhCYXIgYmFyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGJhci5iYXpbMF1bMF0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICBgKSwK
KyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRl
eE9mKCJjb25zdGFudCBhZGRyZXNzIHNwYWNlIikgIT09IC0xKTsKKyAgICBjaGVja0ZhaWwoCisg
ICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBzdHJ1Y3QgQmFyIHsKKyAgICAgICAg
ICAgICAgICBpbnQgYmF6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHlwZWRlZiBDb25z
dGFudEJhckFycmF5UmVmID0gY29uc3RhbnQgQmFyW107CisgICAgICAgICAgICB2b2lkIGZvbyhD
b25zdGFudEJhckFycmF5UmVmWzNdIGJhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBiYXJbMF1bMF0uYmF6ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAg
IChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiY29u
c3RhbnQgYWRkcmVzcyBzcGFjZSIpICE9PSAtMSk7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAo
KSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgc3RydWN0IEJhciB7CisgICAgICAgICAgICAgICAg
Y29uc3RhbnQgaW50W10gYmF6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBmb28o
QmFyWzNdIGJhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXJbMF0uYmF6WzBd
ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIChlKSA9PiBlIGluc3Rh
bmNlb2YgV1R5cGVFcnJvciAmJiBlLm1lc3NhZ2UuaW5kZXhPZigiY29uc3RhbnQgYWRkcmVzcyBz
cGFjZSIpICE9PSAtMSk7Cit9CisKK3Rlc3RzLnN0YW5kYXJkTGlicmFyeURldmljZVBvaW50ZXJz
ID0gZnVuY3Rpb24oKSB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB0ZXN0
IGZsb2F0IGZvbzEoKSB7CisgICAgICAgICAgICBmbG9hdCBzOworICAgICAgICAgICAgZmxvYXQg
YzsKKyAgICAgICAgICAgIHNpbmNvcygwLCAmcywgJmMpOworICAgICAgICAgICAgcmV0dXJuIGM7
CisgICAgICAgIH0KKyAgICAgICAgdGVzdCBmbG9hdCBmb28yKCkgeworICAgICAgICAgICAgZmxv
YXQgczsKKyAgICAgICAgICAgIGZsb2F0IGM7CisgICAgICAgICAgICBzaW5jb3MoMCwgJnMsICZj
KTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisgICAgICAgIHRlc3QgZmxvYXQg
Zm9vMygpIHsKKyAgICAgICAgICAgIHRocmVhZCBmbG9hdCogcyA9IG51bGw7CisgICAgICAgICAg
ICBmbG9hdCBjOworICAgICAgICAgICAgc2luY29zKDAsIHMsICZjKTsKKyAgICAgICAgICAgIHJl
dHVybiBjOworICAgICAgICB9CisgICAgICAgIHRlc3QgZmxvYXQgZm9vNCgpIHsKKyAgICAgICAg
ICAgIGZsb2F0IHM7CisgICAgICAgICAgICB0aHJlYWQgZmxvYXQqIGMgPSBudWxsOworICAgICAg
ICAgICAgc2luY29zKDAsICZzLCBjKTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9
CisgICAgICAgIHRlc3Qgdm9pZCBmb281KGRldmljZSBmbG9hdCogcykgeworICAgICAgICAgICAg
dGhyZWFkIGZsb2F0KiBjID0gbnVsbDsKKyAgICAgICAgICAgIHNpbmNvcygwLCBzLCBjKTsKKyAg
ICAgICAgfQorICAgICAgICB0ZXN0IHZvaWQgZm9vNihkZXZpY2UgZmxvYXQqIGMpIHsKKyAgICAg
ICAgICAgIHRocmVhZCBmbG9hdCogcyA9IG51bGw7CisgICAgICAgICAgICBzaW5jb3MoMCwgcywg
Yyk7CisgICAgICAgIH0KKyAgICAgICAgdGVzdCB2b2lkIGZvbzcoZGV2aWNlIGZsb2F0KiBzLCBk
ZXZpY2UgZmxvYXQqIGMpIHsKKyAgICAgICAgICAgIHNpbmNvcygwLCBzLCBjKTsKKyAgICAgICAg
fQorICAgICAgICB0ZXN0IHZvaWQgZm9vOChkZXZpY2UgZmxvYXRbXSByZXN1bHQpIHsKKyAgICAg
ICAgICAgIHNpbmNvcygwLCAmcmVzdWx0WzBdLCAmcmVzdWx0WzFdKTsKKyAgICAgICAgfQorICAg
IGApOworICAgIGNoZWNrRmxvYXQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28x
IiwgW10pLCAxKTsKKyAgICBjaGVja0Zsb2F0KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vMiIsIFtdKSwgMCk7CisgICAgY2hlY2tGbG9hdChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbzMiLCBbXSksIDEpOworICAgIGNoZWNrRmxvYXQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJmb280IiwgW10pLCAwKTsKKworICAgIGxldCBidWZmZXIgPSBuZXcg
RUJ1ZmZlcigyKTsKKyAgICBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbzUiLCBbVHlwZWRWYWx1
ZS5ib3gobmV3IFB0clR5cGUoZXh0ZXJuYWxPcmlnaW4sICJkZXZpY2UiLCBwcm9ncmFtLmludHJp
bnNpY3MuZmxvYXQpLCBuZXcgRVB0cihidWZmZXIsIDApKV0pOworICAgIGlmIChidWZmZXIuZ2V0
KDApICE9IDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRv
IGJ1ZmZlciAoZXhwZWN0ZWQgMCk6ICIgKyBidWZmZXIuZ2V0KDApKTsKKworICAgIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vNiIsIFtUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5h
bE9yaWdpbiwgImRldmljZSIsIHByb2dyYW0uaW50cmluc2ljcy5mbG9hdCksIG5ldyBFUHRyKGJ1
ZmZlciwgMCkpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0gMSkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAxKTogIiAr
IGJ1ZmZlci5nZXQoMCkpOworICAgIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vNyIsIFtUeXBl
ZFZhbHVlLmJveChuZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwgImRldmljZSIsIHByb2dyYW0u
aW50cmluc2ljcy5mbG9hdCksIG5ldyBFUHRyKGJ1ZmZlciwgMCkpLCBUeXBlZFZhbHVlLmJveChu
ZXcgUHRyVHlwZShleHRlcm5hbE9yaWdpbiwgImRldmljZSIsIHByb2dyYW0uaW50cmluc2ljcy5m
bG9hdCksIG5ldyBFUHRyKGJ1ZmZlciwgMSkpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0g
MCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVkIGludG8gYnVmZmVy
IChleHBlY3RlZCAwKTogIiArIGJ1ZmZlci5nZXQoMCkpOworICAgIGlmIChidWZmZXIuZ2V0KDEp
ICE9IDEpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1
ZmZlciAoZXhwZWN0ZWQgMSk6ICIgKyBidWZmZXIuZ2V0KDEpKTsKKworICAgIGJ1ZmZlci5zZXQo
MCwgMCk7CisgICAgYnVmZmVyLnNldCgxLCAwKTsKKyAgICBsZXQgYXJyYXlSZWYgPSBUeXBlZFZh
bHVlLmJveCgKKyAgICAgICAgbmV3IEFycmF5UmVmVHlwZShleHRlcm5hbE9yaWdpbiwgImRldmlj
ZSIsIHByb2dyYW0uaW50cmluc2ljcy5mbG9hdCksCisgICAgICAgIG5ldyBFQXJyYXlSZWYobmV3
IEVQdHIoYnVmZmVyLCAwKSwgMikpOworICAgIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vOCIs
IFthcnJheVJlZl0pOworICAgIGlmIChidWZmZXIuZ2V0KDApICE9IDApCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgMCk6ICIg
KyBidWZmZXIuZ2V0KDApKTsKKyAgICBpZiAoYnVmZmVyLmdldCgxKSAhPSAxKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1ZSBzdG9yZWQgaW50byBidWZmZXIgKGV4cGVjdGVkIDEp
OiAiICsgYnVmZmVyLmdldCgxKSk7Cit9CiAKIHRlc3RzLmNvbW1lbnRQYXJzaW5nID0gZnVuY3Rp
b24oKSB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>