<?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>176978</bug_id>
          
          <creation_ts>2017-09-14 21:32:47 -0700</creation_ts>
          <short_desc>WSL should support switch</short_desc>
          <delta_ts>2018-10-13 16:38:58 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>keith_miller</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349175</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 21:32:47 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350349</commentid>
    <comment_count>1</comment_count>
      <attachid>321204</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-19 09:37:11 -0700</bug_when>
    <thetext>Created attachment 321204
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350439</commentid>
    <comment_count>2</comment_count>
      <attachid>321226</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-19 11:50:58 -0700</bug_when>
    <thetext>Created attachment 321226
maybe it might work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351098</commentid>
    <comment_count>3</comment_count>
      <attachid>321399</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-20 18:55:32 -0700</bug_when>
    <thetext>Created attachment 321399
seems to work

I still need to write more tests, like tests for the interaction between enum and switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351128</commentid>
    <comment_count>4</comment_count>
      <attachid>321409</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-20 21:46:59 -0700</bug_when>
    <thetext>Created attachment 321409
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351256</commentid>
    <comment_count>5</comment_count>
      <attachid>321409</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-09-21 10:39:40 -0700</bug_when>
    <thetext>Comment on attachment 321409
the patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351263</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 10:51:24 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222330/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353401</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:27:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693320&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468931</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:38:58 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/132</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321204</attachid>
            <date>2017-09-19 09:37:11 -0700</date>
            <delta_ts>2017-09-19 11:50:58 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>10359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24g
MjIyMjA4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29y
a2luZyBjb3B5KQpAQCAtNDU0LDYgKzQ1NCw0NyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgICAgICBub2RlLmluY3JlbWVudC52aXNpdCh0aGlzKTsKICAgICAgICAg
bm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KKworICAgIHZpc2l0U3dpdGNoU3RhdGVtZW50
KG5vZGUpCisgICAgeworICAgICAgICBsZXQgdHlwZSA9IG5vZGUudmFsdWUudmlzaXQodGhpcyku
Y29tbWl0KCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXR5cGUudW5pZnlOb2RlLmlzSW50ICYm
ICEodHlwZS51bmlmeU5vZGUgaW5zdGFuY2VvZiBFbnVtVHlwZSkpCisgICAgICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3Qgc3dpdGNo
IG9uIG5vbi1pbnRlZ2VyL25vbi1lbnVtIHR5cGU6ICIgKyB0eXBlKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAobGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykgeworICAgICAgICAg
ICAgaWYgKHN3aXRjaENhc2UuaXNEZWZhdWx0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXN3aXRjaENhc2UudmFsdWUuaXNDb25zdGV4
cHIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc3dpdGNoQ2FzZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiU3dpdGNoIGNhc2Ugbm90IGNvbnN0ZXhwcjogIiArIHN3aXRjaENh
c2UudmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsZXQgY2FzZVR5cGUgPSBzd2l0
Y2hDYXNlLnZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICAgICAgaWYgKCF0eXBlLmVxdWFsc1dp
dGhDb21taXQoY2FzZVR5cGUpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KHN3aXRjaENhc2Uub3JpZ2luLm9yaWdpblN0cmluZywgIlN3aXRjaCBjYXNlIHR5cGUgZG9lcyBu
b3QgbWF0Y2ggc3dpdGNoIHZhbHVlIHR5cGUgKGNhc2UgdHlwZSBpcyAiICsgY2FzZVR5cGUgKyAi
IGJ1dCBzd2l0Y2ggdmFsdWUgdHlwZSBpcyAiICsgdHlwZSArICIpIik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaENhc2UuYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnN3aXRjaENhc2VzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBsZXQgZmlyc3RDYXNlID0gbm9kZS5zd2l0Y2hDYXNlc1tp
XTsKKyAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGUuc3dpdGNoQ2FzZXMu
bGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICBsZXQgc2Vjb25kQ2FzZSA9IG5vZGUuc3dp
dGNoQ2FzZXNbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0
Q2FzZS5pc0RlZmF1bHQgIT0gc2Vjb25kQ2FzZS5pc0RlZmF1bHQpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChmaXJz
dENhc2UuaXNEZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihzZWNvbmRDYXNlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJEdXBsaWNhdGUgZGVmYXVsdCBjYXNl
IGluIHN3aXRjaCBzdGF0ZW1lbnQiKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBsZXQgdmFsdWVzRXF1YWwgPSB0eXBlLnVuaWZ5Tm9kZS52YWx1ZXNFcXVhbCgKKyAgICAgICAg
ICAgICAgICAgICAgZmlyc3RDYXNlLnZhbHVlLnVuaWZ5Tm9kZS52YWx1ZUZvclNlbGVjdGVkVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVG
b3JTZWxlY3RlZFR5cGUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNFcXVhbCkKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc2Vjb25kQ2FzZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiRHVwbGljYXRlIGNhc2UgaW4gc3dpdGNoIHN0YXRlbWVudCBmb3IgdmFsdWUg
IiArIGZpcnN0Q2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIAogICAgIHZpc2l0Q29tbWFFeHByZXNz
aW9uKG5vZGUpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9k
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpz
CShyZXZpc2lvbiAyMjIyMDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2Rl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDE3IEBAIGNsYXNzIE5vZGUgewogICAg
ICAgICByZXR1cm4gdW5pZmljYXRpb25Db250ZXh0OwogICAgIH0KICAgICAKKyAgICBjb21taXQo
KQorICAgIHsKKyAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5ldyBVbmlmaWNhdGlv
bkNvbnRleHQoKTsKKyAgICAgICAgdW5pZmljYXRpb25Db250ZXh0LmFkZEV4dHJhTm9kZSh0aGlz
KTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHVuaWZpY2F0aW9uQ29udGV4dC52ZXJpZnkoKTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQucmVzdWx0KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdFcnJvcihu
b2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDb3VsZCBub3QgaW5mZXIgdHlwZTogIiArIHJlc3Vs
dC5yZWFzb24pOworICAgICAgICB1bmlmaWNhdGlvbkNvbnRleHQuY29tbWl0KCk7CisgICAgICAg
IHJldHVybiB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKKyAgICB9CisgICAgCiAgICAg
c3Vic3RpdHV0ZShwYXJhbWV0ZXJzLCBhcmd1bWVudExpc3QpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy52aXNpdChuZXcgU3Vic3RpdHV0aW9uKHBhcmFtZXRlcnMsIGFyZ3VtZW50TGlzdCkp
OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlz
aW9uIDIyMjIwOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0zODksNiArMzg5LDIwIEBAIGNsYXNzIFJld3JpdGVyIHsKICAg
ICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAorICAgIHZpc2l0
U3dpdGNoU3RhdGVtZW50KG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN3
aXRjaFN0YXRlbWVudChub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0aGlzKSk7
CisgICAgICAgIGZvciAobGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykKKyAgICAg
ICAgICAgIHJlc3VsdC5hZGQoc3dpdGNoQ2FzZS52aXNpdCh0aGlzKSk7CisgICAgICAgIHJlc3Vs
dC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdFN3aXRjaENhc2Uobm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgU3dpdGNoQ2FzZShub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZh
bHVlLCB0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKKyAgICB9CisgICAgCiAgICAgdmlz
aXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5l
dyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBlLnZpc2l0KHRoaXMpKTsK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaENhc2UuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoQ2FzZS5qcwkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hDYXNlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3dpdGNoQ2FzZSBl
eHRlbmRzIE5vZGUgeworICAgIC8vIE51bGwgdmFsdWUgbWVhbnMgZGVmYXVsdC4KKyAgICBjb25z
dHJ1Y3RvcihvcmlnaW4sIHZhbHVlLCBib2R5KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAg
ICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVl
OworICAgICAgICB0aGlzLl9ib2R5ID0gYm9keTsKKyAgICB9CisgICAgCisgICAgZ2V0IG9yaWdp
bigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBpc0RlZmF1bHQoKSB7IHJldHVy
biAhdGhpcy5fdmFsdWU7IH0KKyAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1ZTsg
fQorICAgIGdldCBib2R5KCkgeyByZXR1cm4gdGhpcy5fYm9keTsgfQorICAgIAorICAgIHRvU3Ry
aW5nKCkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAgICAgaWYgKHRoaXMu
aXNEZWZhdWx0KQorICAgICAgICAgICAgcmVzdWx0ICs9ICJkZWZhdWx0IjsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVzdWx0ICs9ICJjYXN0ICIgKyB0aGlzLnZhbHVlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0ICsgIjogIiArIHRoaXMuYm9keTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaFN0YXRlbWVudC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hTdGF0ZW1lbnQuanMJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoU3RhdGVtZW50
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3dpdGNoU3Rh
dGVtZW50IGV4dGVuZHMgTm9kZSB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAg
ICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fc3dpdGNoQ2FzZXMgPSBb
XTsKKyAgICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsg
fQorICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9CisgICAgCisgICAgYWRk
KHN3aXRjaENhc2UpCisgICAgeworICAgICAgICB0aGlzLl9zd2l0Y2hDYXNlcy5hcHBlbmQoc3dp
dGNoQ2FzZSk7CisgICAgfQorICAgIAorICAgIGdldCBzd2l0Y2hDYXNlcygpIHsgcmV0dXJuIHRo
aXMuX3N3aXRjaENhc2VzOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAg
bGV0IHJlc3VsdCA9ICJzd2l0Y2ggKCIgKyB0aGlzLnZhbHVlICsgIikgeyAiOworICAgICAgICBp
ZiAodGhpcy5zd2l0Y2hDYXNlcy5sZW5ndGgpCisgICAgICAgICAgICByZXN1bHQgKz0gdGhpcy5z
d2l0Y2hDYXNlcy5qb2luKCI7ICIpOyArICI7ICI7CisgICAgICAgIHJldHVybiByZXN1bHQgKyAi
fSI7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Vbmlm
aWNhdGlvbkNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzCShyZXZpc2lvbiAyMjIyMDgpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VbmlmaWNhdGlvbkNvbnRleHQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAgY2xhc3MgVW5pZmljYXRpb25Db250ZXh0IHsKICAgICB7CiAg
ICAgICAgIHRoaXMuX3R5cGVQYXJhbWV0ZXJzID0gbmV3IFNldCh0eXBlUGFyYW1ldGVycyk7CiAg
ICAgICAgIHRoaXMuX25leHRNYXAgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMuX2V4dHJhTm9k
ZXMgPSBuZXcgU2V0KCk7CiAgICAgfQogICAgIAogICAgIHVuaW9uKGEsIGIpCkBAIC02Nyw2ICs2
OCwxMSBAQCBjbGFzcyBVbmlmaWNhdGlvbkNvbnRleHQgewogICAgICAgICByZXR1cm4gY3VycmVu
dE5vZGU7CiAgICAgfQogICAgIAorICAgIGFkZEV4dHJhTm9kZShub2RlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fZXh0cmFOb2Rlcy5hZGQobm9kZSk7CisgICAgfQorICAgIAogICAgIGdldCBub2Rl
cygpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNldCgpOwpAQCAtNzQsNiArODAs
OCBAQCBjbGFzcyBVbmlmaWNhdGlvbkNvbnRleHQgewogICAgICAgICAgICAgcmVzdWx0LmFkZChr
ZXkpOwogICAgICAgICAgICAgcmVzdWx0LmFkZCh2YWx1ZSk7CiAgICAgICAgIH0KKyAgICAgICAg
Zm9yIChsZXQgbm9kZSBvZiB0aGlzLl9leHRyYU5vZGVzKQorICAgICAgICAgICAgcmVzdWx0LmFk
ZChub2RlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIyMjIwOCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMJKHdvcmtpbmcgY29weSkK
QEAgLTI3OSw2ICsyNzksMTkgQEAgY2xhc3MgVmlzaXRvciB7CiAgICAgICAgIE5vZGUudmlzaXQo
bm9kZS5pbmNyZW1lbnQsIHRoaXMpOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAg
ICAgfQorICAgIAorICAgIHZpc2l0U3dpdGNoU3RhdGVtZW50KG5vZGUpCisgICAgeworICAgICAg
ICBub2RlLnZhbHVlLnZpc2l0KHRoaXMpOworICAgICAgICBmb3IgKGxldCBzd2l0Y2hDYXNlIG9m
IG5vZGUuc3dpdGNoQ2FzZXMpCisgICAgICAgICAgICBzd2l0Y2hDYXNlLnZpc2l0KHRoaXMpOwor
ICAgIH0KKyAgICAKKyAgICB2aXNpdFN3aXRjaENhc2Uobm9kZSkKKyAgICB7CisgICAgICAgIE5v
ZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcyk7CisgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlz
KTsKKyAgICB9CiAKICAgICB2aXNpdFJldHVybihub2RlKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321226</attachid>
            <date>2017-09-19 11:50:58 -0700</date>
            <delta_ts>2017-09-20 18:55:32 -0700</delta_ts>
            <desc>maybe it might work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19642</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkocmV2aXNpb24g
MjIyMjA4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qcwkod29y
a2luZyBjb3B5KQpAQCAtNDU0LDYgKzQ1NCw2MiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgICAgICBub2RlLmluY3JlbWVudC52aXNpdCh0aGlzKTsKICAgICAgICAg
bm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KKworICAgIHZpc2l0U3dpdGNoU3RhdGVtZW50
KG5vZGUpCisgICAgeworICAgICAgICBsZXQgdHlwZSA9IG5vZGUudmFsdWUudmlzaXQodGhpcyku
Y29tbWl0KCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXR5cGUudW5pZnlOb2RlLmlzSW50ICYm
ICEodHlwZS51bmlmeU5vZGUgaW5zdGFuY2VvZiBFbnVtVHlwZSkpCisgICAgICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDYW5ub3Qgc3dpdGNo
IG9uIG5vbi1pbnRlZ2VyL25vbi1lbnVtIHR5cGU6ICIgKyB0eXBlKTsKKyAgICAgICAgCisgICAg
ICAgIGxldCBoYXNEZWZhdWx0ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCBz
d2l0Y2hDYXNlIG9mIG5vZGUuc3dpdGNoQ2FzZXMpIHsKKyAgICAgICAgICAgIGlmIChzd2l0Y2hD
YXNlLmlzRGVmYXVsdCkgeworICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIXN3aXRjaENhc2UudmFsdWUuaXNDb25zdGV4cHIpCisgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc3dpdGNoQ2FzZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
U3dpdGNoIGNhc2Ugbm90IGNvbnN0ZXhwcjogIiArIHN3aXRjaENhc2UudmFsdWUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBsZXQgY2FzZVR5cGUgPSBzd2l0Y2hDYXNlLnZhbHVlLnZpc2l0
KHRoaXMpOworICAgICAgICAgICAgaWYgKCF0eXBlLmVxdWFsc1dpdGhDb21taXQoY2FzZVR5cGUp
KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHN3aXRjaENhc2Uub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlN3aXRjaCBjYXNlIHR5cGUgZG9lcyBub3QgbWF0Y2ggc3dpdGNoIHZh
bHVlIHR5cGUgKGNhc2UgdHlwZSBpcyAiICsgY2FzZVR5cGUgKyAiIGJ1dCBzd2l0Y2ggdmFsdWUg
dHlwZSBpcyAiICsgdHlwZSArICIpIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRj
aENhc2UuYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBub2RlLnN3aXRjaENhc2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBsZXQgZmlyc3RDYXNlID0gbm9kZS5zd2l0Y2hDYXNlc1tpXTsKKyAgICAgICAgICAgIGZv
ciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGUuc3dpdGNoQ2FzZXMubGVuZ3RoOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBsZXQgc2Vjb25kQ2FzZSA9IG5vZGUuc3dpdGNoQ2FzZXNbal07CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2FzZS5pc0RlZmF1bHQgIT0g
c2Vjb25kQ2FzZS5pc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChmaXJzdENhc2UuaXNEZWZhdWx0KQor
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihzZWNvbmRDYXNlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJEdXBsaWNhdGUgZGVmYXVsdCBjYXNlIGluIHN3aXRjaCBzdGF0ZW1l
bnQiKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBsZXQgdmFsdWVzRXF1YWwg
PSB0eXBlLnVuaWZ5Tm9kZS52YWx1ZXNFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RD
YXNlLnZhbHVlLnVuaWZ5Tm9kZS52YWx1ZUZvclNlbGVjdGVkVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgc2Vjb25kQ2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOwor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNFcXVhbCkKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Ioc2Vjb25kQ2FzZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVwbGlj
YXRlIGNhc2UgaW4gc3dpdGNoIHN0YXRlbWVudCBmb3IgdmFsdWUgIiArIGZpcnN0Q2FzZS52YWx1
ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWhhc0RlZmF1bHQpIHsKKyAgICAgICAgICAgIGxl
dCBpbmNsdWRlZFZhbHVlcyA9IG5ldyBTZXQoKTsKKyAgICAgICAgICAgIGZvciAobGV0IHN3aXRj
aENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykKKyAgICAgICAgICAgICAgICBpbmNsdWRlZFZhbHVl
cy5hZGQoc3dpdGNoQ2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGxldCB7dmFsdWUsIG5hbWV9IG9mIHR5cGUu
dW5pZnlOb2RlLmFsbFZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlZFZh
bHVlcy5oYXModmFsdWUpKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJWYWx1ZSBub3QgaGFuZGxlZCBieSBzd2l0Y2gg
c3RhdGVtZW50OiAiICsgbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAg
ICAgCiAgICAgdmlzaXRDb21tYUV4cHJlc3Npb24obm9kZSkKICAgICB7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtVHlwZS5qcwkocmV2aXNpb24gMjIyMjA4KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDEyIEBAIGNsYXNzIEVudW1UeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgCiAg
ICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAorICAgICphbGxWYWx1
ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChsZXQgbWVtYmVyIG9mIHRoaXMubWVtYmVycykKKyAg
ICAgICAgICAgIHlpZWxkIHt2YWx1ZTogbWVtYmVyLnZhbHVlLnVuaWZ5Tm9kZS52YWx1ZUZvclNl
bGVjdGVkVHlwZSwgbmFtZTogbWVtYmVyLm5hbWV9OworICAgIH0KKyAgICAKICAgICBwb3B1bGF0
ZURlZmF1bHRWYWx1ZShidWZmZXIsIG9mZnNldCkKICAgICB7CiAgICAgICAgIHRoaXMuYmFzZVR5
cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUoYnVmZmVyLCBvZmZzZXQpOwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMjA4KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDMsNiArMjQzLDM4IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3Igewog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHZpc2l0U3dpdGNoU3Rh
dGVtZW50KG5vZGUpCisgICAgeworICAgICAgICBsZXQgZmluZEFuZFJ1bkNhc3QgPSBwcmVkaWNh
dGUgPT4geworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnN3aXRjaENhc2Vz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbGV0IHN3aXRjaENhc2UgPSBub2RlLnN3
aXRjaENhc2VzW2ldOworICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoc3dpdGNoQ2FzZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAobGV0IGogPSBpOyBqIDwgbm9kZS5zd2l0Y2hDYXNlcy5sZW5ndGg7ICsraikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLnN3aXRjaENhc2VzW2pdLnZpc2l0KHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZSAhPSBCcmVha0V4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGxldCB2YWx1ZSA9IG5vZGUu
dmFsdWUudmlzaXQodGhpcykubG9hZFZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBsZXQgZm91
bmQgPSBmaW5kQW5kUnVuQ2FzdCgKKyAgICAgICAgICAgIHN3aXRjaENhc2UgPT4gc3dpdGNoQ2Fz
ZS52YWx1ZS51bmlmeU5vZGUudHlwZS50eXBlLnVuaWZ5Tm9kZS52YWx1ZXNFcXVhbCgKKyAgICAg
ICAgICAgICAgICB2YWx1ZSwgc3dpdGNoQ2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxl
Y3RlZFR5cGUpKTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgZm91bmQgPSBmaW5kQW5kUnVuQ2FzdChzd2l0Y2hDYXNlID0+IHN3aXRj
aENhc2UuaXNEZWZhdWx0KTsKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiU3dpdGNoIHN0YXRlbWVudCBkaWQgbm90IGZpbmQgY2FzZSIpOworICAgIH0K
IAogICAgIHZpc2l0QnJlYWsobm9kZSkKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0lubGluZXIuanMJKHJldmlzaW9uIDIyMjIwOCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCw1
IEBAIGNsYXNzIElubGluZXIgZXh0ZW5kcyBSZXdyaXRlciB7CiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0aW5nQmxvY2s7CiAgICAgICAgIH0pOwogICAgIH0KLQotICAgIHZpc2l0Q2FzdEV4cHJl
c3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnZpc2l0Q2FsbEV4cHJlc3Np
b24obm9kZSk7Ci0gICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbnRyaW5zaWNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0ludHJpbnNpY3MuanMJKHJldmlzaW9uIDIyMjIwOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEy
IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZh
dWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKICAg
ICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbUludExpdGVyYWwgPSB2YWx1ZSA9PiB2
YWx1ZSB8IDA7CiAgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21VaW50TGl0ZXJh
bCA9IHZhbHVlID0+IHZhbHVlIHwgMDsKKyAgICAgICAgICAgICAgICB0eXBlLmFsbFZhbHVlcyA9
IGZ1bmN0aW9uKigpIHsgCisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9
IDB4ZmZmZmZmZmY7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0g
aSB8IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB7dmFsdWU6IHZhbHVlLCBuYW1l
OiB2YWx1ZX07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OwogICAg
ICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKQEAgLTk0LDYgKzEwMCwxMCBA
QCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVs
dFZhbHVlID0gKGJ1ZmZlciwgb2Zmc2V0KSA9PiBidWZmZXIuc2V0KG9mZnNldCwgMCk7CiAgICAg
ICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21JbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFs
dWUgPj4+IDA7CiAgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21VaW50TGl0ZXJh
bCA9IHZhbHVlID0+IHZhbHVlID4+PiAwOworICAgICAgICAgICAgICAgIHR5cGUuYWxsVmFsdWVz
ID0gZnVuY3Rpb24qKCkgeyAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkg
PD0gMHhmZmZmZmZmZjsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQge3ZhbHVl
OiBpLCBuYW1lOiBpfTsKKyAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgfSk7CiAKICAg
ICAgICAgdGhpcy5fbWFwLnNldCgKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L05vZGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9k
ZS5qcwkocmV2aXNpb24gMjIyMjA4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
Tm9kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCwxNyBAQCBjbGFzcyBOb2RlIHsK
ICAgICAgICAgcmV0dXJuIHVuaWZpY2F0aW9uQ29udGV4dDsKICAgICB9CiAgICAgCisgICAgY29t
bWl0KCkKKyAgICB7CisgICAgICAgIGxldCB1bmlmaWNhdGlvbkNvbnRleHQgPSBuZXcgVW5pZmlj
YXRpb25Db250ZXh0KCk7CisgICAgICAgIHVuaWZpY2F0aW9uQ29udGV4dC5hZGRFeHRyYU5vZGUo
dGhpcyk7CisgICAgICAgIGxldCByZXN1bHQgPSB1bmlmaWNhdGlvbkNvbnRleHQudmVyaWZ5KCk7
CisgICAgICAgIGlmICghcmVzdWx0LnJlc3VsdCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGluZmVyIHR5cGU6ICIgKyBy
ZXN1bHQucmVhc29uKTsKKyAgICAgICAgdW5pZmljYXRpb25Db250ZXh0LmNvbW1pdCgpOworICAg
ICAgICByZXR1cm4gdW5pZmljYXRpb25Db250ZXh0LmZpbmQodGhpcyk7CisgICAgfQorICAgIAog
ICAgIHN1YnN0aXR1dGUocGFyYW1ldGVycywgYXJndW1lbnRMaXN0KQogICAgIHsKICAgICAgICAg
cmV0dXJuIHRoaXMudmlzaXQobmV3IFN1YnN0aXR1dGlvbihwYXJhbWV0ZXJzLCBhcmd1bWVudExp
c3QpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2
aXNpb24gMjIyMjA4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBsZXQgcHJlcGFyZSA9ICgoKSA9PiB7
CiAgICAgICAgIHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7
CiAgICAgICAgIHJlc29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSk7CiAgICAgICAgIHJlc29s
dmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0pOwotICAgICAgICAvLyBGSVhNRTogTmVlZCB0
byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUgbm90IGN5Y2xpYy4KKyAgICAgICAgLy8gRklYTUU6
IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cyBhcmUgbm90IGN5Y2xpYy4KICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzA0NAogICAgICAgICBz
eW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pOwogICAgICAgICBzeW50aGVzaXplRW51
bUZ1bmN0aW9ucyhwcm9ncmFtKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1JldHVybkNoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMjA4KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsMjUgQEAgY2xhc3MgUmV0dXJuQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAg
ICB9OwogICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKICAgICB9CisgICAgCisgICAg
X21lcmdlUmV0dXJuU3R5bGUoYSwgYikKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAg
ICAgIHJldHVybiBiOworICAgICAgICBpZiAoIWIpCisgICAgICAgICAgICByZXR1cm4gYTsKKyAg
ICAgICAgc3dpdGNoIChhKSB7CisgICAgICAgIGNhc2UgdGhpcy5yZXR1cm5TdHlsZS5EZWZpbml0
ZWx5UmV0dXJuczoKKyAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkRlZmluaXRlbHlEb2Vz
bnRSZXR1cm46CisgICAgICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgICAgIHJldHVy
biBhOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuU3R5bGUuSGFzbnRSZXR1cm5lZFll
dDsKKyAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkhhc250UmV0dXJuZWRZZXQ6CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5TdHlsZS5IYXNudFJldHVybmVkWWV0OworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmV0dXJuIHN0eWxl
OiAiICsgYSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB2aXNpdEZ1bmNEZWYobm9kZSkKICAg
ICB7CkBAIC02NiwxMCArODUsNyBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIGlmIChub2RlLmVsc2VCb2R5KSB7CiAgICAgICAgICAgICBsZXQgYm9keVZh
bHVlID0gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICAgICAgbGV0IGVsc2VWYWx1ZSA9
IG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgICAgICBpZiAoYm9keVZhbHVlID09
IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnMgJiYgZWxzZVZhbHVlID09IHRoaXMu
cmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnM7Ci0gICAgICAgICAgICBpZiAoYm9keVZh
bHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseURvZXNudFJldHVybiAmJiBlbHNlVmFs
dWUgPT0gdGhpcy5yZXR1cm5TdHlsZS5EZWZpbml0ZWx5RG9lc250UmV0dXJuKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnJldHVyblN0eWxlLkRlZmluaXRlbHlEb2VzbnRSZXR1cm47Cisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVyZ2VSZXR1cm5TdHl1bGUoYm9keVZhbHVlLCBlbHNl
VmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0aGlzLnJldHVyblN0eWxlLkhhc250
UmV0dXJuZWRZZXQ7CiAgICAgfQpAQCAtODEsNyArOTcsNiBAQCBjbGFzcyBSZXR1cm5DaGVja2Vy
IGV4dGVuZHMgVmlzaXRvciB7CiAKICAgICB2aXNpdFdoaWxlTG9vcChub2RlKQogICAgIHsKLSAg
ICAgICAgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlzKTsKICAgICAgICAgbGV0IGJvZHlSZXR1
cm4gPSBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIGlmIChub2RlLmNvbmRpdGlvbmFs
IGluc3RhbmNlb2YgQ2FsbEV4cHJlc3Npb24gJiYgdGhpcy5faXNCb29sQ2FzdEZyb21MaXRlcmFs
VHJ1ZShub2RlLmNvbmRpdGlvbmFsKSkgewogICAgICAgICAgICAgc3dpdGNoIChib2R5UmV0dXJu
KSB7CkBAIC0xMDUsMTggKzEyMCwxMSBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVuZHMgVmlz
aXRvciB7CiAgICAgICAgIGNhc2UgdGhpcy5yZXR1cm5TdHlsZS5IYXNudFJldHVybmVkWWV0Ogog
ICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5yZXR1cm5TdHlsZS5IYXNudFJldHVybmVkWWV0Owog
ICAgICAgICB9Ci0gICAgICAgIG5vZGUuY29uZGl0aW9uYWwudmlzaXQodGhpcyk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdmlzaXRGb3JMb29wKG5vZGUpCiAgICAgewot
ICAgICAgICBpZiAobm9kZS5pbml0aWFsaXphdGlvbikKLSAgICAgICAgICAgIG5vZGUuaW5pdGlh
bGl6YXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLmNvbmRpdGlvbikKLSAgICAg
ICAgICAgIG5vZGUuY29uZGl0aW9uLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAobm9kZS5pbmNy
ZW1lbnQpCi0gICAgICAgICAgICBub2RlLmluY3JlbWVudC52aXNpdCh0aGlzKTsKICAgICAgICAg
bGV0IGJvZHlSZXR1cm4gPSBub2RlLmJvZHkudmlzaXQodGhpcyk7CiAgICAgICAgIGlmIChub2Rl
LmNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX2lzQm9vbENhc3RGcm9tTGl0ZXJhbFRy
dWUobm9kZS5jb25kaXRpb24pKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJvZHlSZXR1cm4pIHsK
QEAgLTEyOSw2ICsxMzcsMjcgQEAgY2xhc3MgUmV0dXJuQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHZpc2l0U3dpdGNoU3RhdGVtZW50KG5vZGUp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIGl0J3MgbWlzc2luZyB0
aGluZ3MuIEZvciBleGFtcGxlLCB3ZSBuZWVkIHRvIGJlIHNtYXJ0IGFib3V0IHRoaXM6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIGZvciAoOzspIHsKKyAgICAgICAgLy8gICAgIHN3aXRjaCAoLi4u
KSB7CisgICAgICAgIC8vICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBjb250aW51ZTsgLy8g
VGhpcyBjb250aW51ZXMgdGhlIGZvciBsb29wCisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8v
IH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSSdtIG5vdCBzdXJlIHdoYXQgdGhhdCBtZWFucyBm
b3IgdGhpcyBhbmFseXNpcy4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIHRoYXQgdGhlIHJpZ2h0IHdh
eSB0bworICAgICAgICAvLyBidWlsZCB0aGlzIGFuYWx5c2lzIGlzIHRvIHJ1biBhIHZpc2l0b3Ig
dGhhdCBidWlsZHMgYSBDRkcgYW5kIHRoZW4gYW5hbHl6ZSB0aGUgQ0ZHLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MTcyCisgICAgICAgIAor
ICAgICAgICBsZXQgcmV0dXJuU3R5bGUgPSBudWxsOworICAgICAgICBmb3IgKGxldCBzd2l0Y2hD
YXNlIG9mIG5vZGUuc3dpdGNoQ2FzZXMpCisgICAgICAgICAgICByZXR1cm5TdHlsZSA9IHRoaXMu
X21lcmdlUmV0dXJuU3R5bGUocmV0dXJuU3R5bGUsIHN3aXRjaENhc2UuYm9keS52aXNpdCh0aGlz
KSk7CisgICAgICAgIHJldHVybiByZXR1cm5TdHlsZTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRS
ZXR1cm4obm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLnJldHVyblN0eWxlLkRlZmlu
aXRlbHlSZXR1cm5zOwpAQCAtMTQxLDYgKzE3MCwxMiBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4
dGVuZHMgVmlzaXRvciB7CiAKICAgICB2aXNpdENvbnRpbnVlKG5vZGUpCiAgICAgeworICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZy4gQ29uc2lkZXIgYSBsb29wIGxpa2U6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIGludCBmb28oKSB7IGZvciAoOzspIHsgY29udGludWU7IH0gfQor
ICAgICAgICAvLworICAgICAgICAvLyBUaGlzIHByb2dyYW0gc2hvdWxkbid0IGNsYWltIHRoYXQg
dGhlIHByb2JsZW0gaXMgdGhhdCBpdCBkb2Vzbid0IHJldHVybi4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzE3MgogICAgICAgICByZXR1cm4g
dGhpcy5yZXR1cm5TdHlsZS5EZWZpbml0ZWx5RG9lc250UmV0dXJuOwogICAgIH0KIH0KSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjIy
MDgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSwyMCBAQCBjbGFzcyBSZXdyaXRlciB7CiAgICAgICAgICAg
ICBub2RlLmJvZHkudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKKyAgICB2aXNpdFN3aXRjaFN0
YXRlbWVudChub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTd2l0Y2hTdGF0
ZW1lbnQobm9kZS5vcmlnaW4sIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcykpOworICAgICAg
ICBmb3IgKGxldCBzd2l0Y2hDYXNlIG9mIG5vZGUuc3dpdGNoQ2FzZXMpCisgICAgICAgICAgICBy
ZXN1bHQuYWRkKHN3aXRjaENhc2UudmlzaXQodGhpcykpOworICAgICAgICByZXN1bHQudHlwZSA9
IE5vZGUudmlzaXQobm9kZS50eXBlLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgdmlzaXRTd2l0Y2hDYXNlKG5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IFN3aXRjaENhc2Uobm9kZS5vcmlnaW4sIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhp
cyksIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CisgICAgfQorICAgIAogICAgIHZpc2l0QW5vbnlt
b3VzVmFyaWFibGUobm9kZSkKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQW5vbnlt
b3VzVmFyaWFibGUobm9kZS5vcmlnaW4sIG5vZGUudHlwZS52aXNpdCh0aGlzKSk7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hDYXNlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaENhc2UuanMJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoQ2FzZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFN3aXRjaENhc2UgZXh0ZW5kcyBO
b2RlIHsKKyAgICAvLyBOdWxsIHZhbHVlIG1lYW5zIGRlZmF1bHQuCisgICAgY29uc3RydWN0b3Io
b3JpZ2luLCB2YWx1ZSwgYm9keSkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRo
aXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAg
ICAgdGhpcy5fYm9keSA9IGJvZHk7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4oKSB7IHJl
dHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBnZXQgaXNEZWZhdWx0KCkgeyByZXR1cm4gIXRoaXMu
X3ZhbHVlOyB9CisgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KKyAgICBn
ZXQgYm9keSgpIHsgcmV0dXJuIHRoaXMuX2JvZHk7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisg
ICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gIiI7CisgICAgICAgIGlmICh0aGlzLmlzRGVmYXVs
dCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAiZGVmYXVsdCI7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlc3VsdCArPSAiY2FzdCAiICsgdGhpcy52YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdCArICI6ICIgKyB0aGlzLmJvZHk7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hTdGF0ZW1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoU3RhdGVtZW50LmpzCShub25leGlzdGVudCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaFN0YXRlbWVudC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIFN3aXRjaFN0YXRlbWVudCBl
eHRlbmRzIE5vZGUgeworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdmFsdWUpCisgICAgeworICAg
ICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAgICAgIHRo
aXMuX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHRoaXMuX3N3aXRjaENhc2VzID0gW107CisgICAg
fQorICAgIAorICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBn
ZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1ZTsgfQorICAgIAorICAgIGFkZChzd2l0Y2hD
YXNlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3dpdGNoQ2FzZXMuYXBwZW5kKHN3aXRjaENhc2Up
OworICAgIH0KKyAgICAKKyAgICBnZXQgc3dpdGNoQ2FzZXMoKSB7IHJldHVybiB0aGlzLl9zd2l0
Y2hDYXNlczsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGxldCByZXN1
bHQgPSAic3dpdGNoICgiICsgdGhpcy52YWx1ZSArICIpIHsgIjsKKyAgICAgICAgaWYgKHRoaXMu
c3dpdGNoQ2FzZXMubGVuZ3RoKQorICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuc3dpdGNoQ2Fz
ZXMuam9pbigiOyAiKTsgKyAiOyAiOworICAgICAgICByZXR1cm4gcmVzdWx0ICsgIn0iOworICAg
IH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25D
b250ZXh0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Vu
aWZpY2F0aW9uQ29udGV4dC5qcwkocmV2aXNpb24gMjIyMjA4KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBAIGNsYXNzIFVuaWZpY2F0aW9uQ29udGV4dCB7CiAgICAgewogICAgICAgICB0
aGlzLl90eXBlUGFyYW1ldGVycyA9IG5ldyBTZXQodHlwZVBhcmFtZXRlcnMpOwogICAgICAgICB0
aGlzLl9uZXh0TWFwID0gbmV3IE1hcCgpOworICAgICAgICB0aGlzLl9leHRyYU5vZGVzID0gbmV3
IFNldCgpOwogICAgIH0KICAgICAKICAgICB1bmlvbihhLCBiKQpAQCAtNjcsNiArNjgsMTEgQEAg
Y2xhc3MgVW5pZmljYXRpb25Db250ZXh0IHsKICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOwog
ICAgIH0KICAgICAKKyAgICBhZGRFeHRyYU5vZGUobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMu
X2V4dHJhTm9kZXMuYWRkKG5vZGUpOworICAgIH0KKyAgICAKICAgICBnZXQgbm9kZXMoKQogICAg
IHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXQoKTsKQEAgLTc0LDYgKzgwLDggQEAgY2xh
c3MgVW5pZmljYXRpb25Db250ZXh0IHsKICAgICAgICAgICAgIHJlc3VsdC5hZGQoa2V5KTsKICAg
ICAgICAgICAgIHJlc3VsdC5hZGQodmFsdWUpOwogICAgICAgICB9CisgICAgICAgIGZvciAobGV0
IG5vZGUgb2YgdGhpcy5fZXh0cmFOb2RlcykKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIyMDgpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNzks
NiArMjc5LDE5IEBAIGNsYXNzIFZpc2l0b3IgewogICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5j
cmVtZW50LCB0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KKyAg
ICAKKyAgICB2aXNpdFN3aXRjaFN0YXRlbWVudChub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52
YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgZm9yIChsZXQgc3dpdGNoQ2FzZSBvZiBub2RlLnN3
aXRjaENhc2VzKQorICAgICAgICAgICAgc3dpdGNoQ2FzZS52aXNpdCh0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgdmlzaXRTd2l0Y2hDYXNlKG5vZGUpCisgICAgeworICAgICAgICBOb2RlLnZpc2l0
KG5vZGUudmFsdWUsIHRoaXMpOworICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAg
fQogCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321399</attachid>
            <date>2017-09-20 18:55:32 -0700</date>
            <delta_ts>2017-09-20 21:46:59 -0700</delta_ts>
            <desc>seems to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23440</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjMwNykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDYgKzE0Myw4IEBAIGxvYWQoIlN0YXRlbWVudENsb25lci5qcyIpOwogbG9hZCgiU3Ry
dWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vi
c3RpdHV0aW9uLmpzIik7Citsb2FkKCJTd2l0Y2hDYXNlLmpzIik7Citsb2FkKCJTd2l0Y2hTdGF0
ZW1lbnQuanMiKTsKIGxvYWQoIlN5bnRoZXNpemVFbnVtRnVuY3Rpb25zLmpzIik7CiBsb2FkKCJT
eW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIik7CiBsb2FkKCJUcmFwU3RhdGVtZW50LmpzIik7
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9u
IDIyMjMwNykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTUxNCw2ICs1MTQsNjIgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAg
IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAgICB9CisKKyAgICB2aXNpdFN3aXRjaFN0YXRlbWVu
dChub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHR5cGUgPSBub2RlLnZhbHVlLnZpc2l0KHRoaXMp
LmNvbW1pdCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0eXBlLnVuaWZ5Tm9kZS5pc0ludCAm
JiAhKHR5cGUudW5pZnlOb2RlIGluc3RhbmNlb2YgRW51bVR5cGUpKQorICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IHN3aXRj
aCBvbiBub24taW50ZWdlci9ub24tZW51bSB0eXBlOiAiICsgdHlwZSk7CisgICAgICAgIAorICAg
ICAgICBsZXQgaGFzRGVmYXVsdCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChsZXQg
c3dpdGNoQ2FzZSBvZiBub2RlLnN3aXRjaENhc2VzKSB7CisgICAgICAgICAgICBzd2l0Y2hDYXNl
LmJvZHkudmlzaXQodGhpcyk7CisKKyAgICAgICAgICAgIGlmIChzd2l0Y2hDYXNlLmlzRGVmYXVs
dCkgeworICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
IXN3aXRjaENhc2UudmFsdWUuaXNDb25zdGV4cHIpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Ioc3dpdGNoQ2FzZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiU3dpdGNoIGNhc2Ug
bm90IGNvbnN0ZXhwcjogIiArIHN3aXRjaENhc2UudmFsdWUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBsZXQgY2FzZVR5cGUgPSBzd2l0Y2hDYXNlLnZhbHVlLnZpc2l0KHRoaXMpOworICAg
ICAgICAgICAgaWYgKCF0eXBlLmVxdWFsc1dpdGhDb21taXQoY2FzZVR5cGUpKQorICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHN3aXRjaENhc2Uub3JpZ2luLm9yaWdpblN0cmlu
ZywgIlN3aXRjaCBjYXNlIHR5cGUgZG9lcyBub3QgbWF0Y2ggc3dpdGNoIHZhbHVlIHR5cGUgKGNh
c2UgdHlwZSBpcyAiICsgY2FzZVR5cGUgKyAiIGJ1dCBzd2l0Y2ggdmFsdWUgdHlwZSBpcyAiICsg
dHlwZSArICIpIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbm9kZS5zd2l0Y2hDYXNlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGZp
cnN0Q2FzZSA9IG5vZGUuc3dpdGNoQ2FzZXNbaV07CisgICAgICAgICAgICBmb3IgKGxldCBqID0g
aSArIDE7IGogPCBub2RlLnN3aXRjaENhc2VzLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAg
ICAgbGV0IHNlY29uZENhc2UgPSBub2RlLnN3aXRjaENhc2VzW2pdOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChmaXJzdENhc2UuaXNEZWZhdWx0ICE9IHNlY29uZENhc2Uu
aXNEZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RDYXNlLmlzRGVmYXVsdCkKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc2Vjb25kQ2FzZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiRHVwbGljYXRlIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2ggc3RhdGVtZW50Iik7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGV0IHZhbHVlc0VxdWFsID0gdHlwZS51bmlm
eU5vZGUudmFsdWVzRXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2FzZS52YWx1ZS51
bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUsCisgICAgICAgICAgICAgICAgICAgIHNlY29u
ZENhc2UudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKTsKKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWVzRXF1YWwpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKHNlY29uZENhc2Uub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxpY2F0ZSBjYXNlIGlu
IHN3aXRjaCBzdGF0ZW1lbnQgZm9yIHZhbHVlICIgKyBmaXJzdENhc2UudmFsdWUudW5pZnlOb2Rl
LnZhbHVlRm9yU2VsZWN0ZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKCFoYXNEZWZhdWx0KSB7CisgICAgICAgICAgICBsZXQgaW5jbHVkZWRW
YWx1ZXMgPSBuZXcgU2V0KCk7CisgICAgICAgICAgICBmb3IgKGxldCBzd2l0Y2hDYXNlIG9mIG5v
ZGUuc3dpdGNoQ2FzZXMpCisgICAgICAgICAgICAgICAgaW5jbHVkZWRWYWx1ZXMuYWRkKHN3aXRj
aENhc2UudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yIChsZXQge3ZhbHVlLCBuYW1lfSBvZiB0eXBlLnVuaWZ5Tm9kZS5h
bGxWYWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZWRWYWx1ZXMuaGFzKHZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiVmFsdWUgbm90IGhhbmRsZWQgYnkgc3dpdGNoIHN0YXRlbWVudDog
IiArIG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIAogICAgIHZp
c2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRW51bVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvRW51bVR5cGUuanMJKHJldmlzaW9uIDIyMjMwNykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0VudW1UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
MywxMiBAQCBjbGFzcyBFbnVtVHlwZSBleHRlbmRzIFR5cGUgewogICAgIAogICAgIGdldCBpc1By
aW1pdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKKyAgICAqYWxsVmFsdWVzKCkKKyAgICB7
CisgICAgICAgIGZvciAobGV0IG1lbWJlciBvZiB0aGlzLm1lbWJlcnMpCisgICAgICAgICAgICB5
aWVsZCB7dmFsdWU6IG1lbWJlci52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUs
IG5hbWU6IG1lbWJlci5uYW1lfTsKKyAgICB9CisgICAgCiAgICAgcG9wdWxhdGVEZWZhdWx0VmFs
dWUoYnVmZmVyLCBvZmZzZXQpCiAgICAgewogICAgICAgICB0aGlzLmJhc2VUeXBlLnBvcHVsYXRl
RGVmYXVsdFZhbHVlKGJ1ZmZlciwgb2Zmc2V0KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjMwNykKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQzLDYg
KzI0Myw0MSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICB2aXNpdFN3aXRjaFN0YXRlbWVudChub2Rl
KQorICAgIHsKKyAgICAgICAgbGV0IGZpbmRBbmRSdW5DYXN0ID0gcHJlZGljYXRlID0+IHsKKyAg
ICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5zd2l0Y2hDYXNlcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgIGxldCBzd2l0Y2hDYXNlID0gbm9kZS5zd2l0Y2hDYXNlc1tp
XTsKKyAgICAgICAgICAgICAgICBpZiAocHJlZGljYXRlKHN3aXRjaENhc2UpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0g
aTsgaiA8IG5vZGUuc3dpdGNoQ2FzZXMubGVuZ3RoOyArK2opCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5zd2l0Y2hDYXNlc1tqXS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgIT0gQnJl
YWtFeGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH07CisgICAgICAgIAorICAgICAgICBsZXQgdmFsdWUgPSBub2RlLnZhbHVlLnZpc2l0
KHRoaXMpLmxvYWRWYWx1ZSgpOworICAgICAgICAKKyAgICAgICAgbGV0IGZvdW5kID0gZmluZEFu
ZFJ1bkNhc3Qoc3dpdGNoQ2FzZSA9PiB7CisgICAgICAgICAgICBpZiAoc3dpdGNoQ2FzZS5pc0Rl
ZmF1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IHN3aXRjaENhc2UudmFsdWUudW5pZnlOb2RlLnR5cGUudHlwZS51bmlmeU5vZGUudmFsdWVzRXF1
YWwoCisgICAgICAgICAgICAgICAgdmFsdWUsIHN3aXRjaENhc2UudmFsdWUudW5pZnlOb2RlLnZh
bHVlRm9yU2VsZWN0ZWRUeXBlKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChmb3VuZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGZvdW5kID0gZmluZEFuZFJ1bkNh
c3Qoc3dpdGNoQ2FzZSA9PiBzd2l0Y2hDYXNlLmlzRGVmYXVsdCk7CisgICAgICAgIGlmICghZm91
bmQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN3aXRjaCBzdGF0ZW1lbnQgZGlkIG5v
dCBmaW5kIGNhc2UiKTsKKyAgICB9CiAKICAgICB2aXNpdEJyZWFrKG5vZGUpCiAgICAgewpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCShyZXZpc2lvbiAyMjIz
MDcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00OCwxMCArNDgsNSBAQCBjbGFzcyBJbmxpbmVyIGV4dGVuZHMgUmV3cml0ZXIg
ewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0Jsb2NrOwogICAgICAgICB9KTsKICAgICB9
Ci0KLSAgICB2aXNpdENhc3RFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOwotICAgIH0KIH0KIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIzMDcp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC03Niw2ICs3NiwxMiBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAg
ICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlID0gKGJ1ZmZlciwgb2Zmc2V0KSA9PiBidWZm
ZXIuc2V0KG9mZnNldCwgMCk7CiAgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21J
bnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWUgfCAwOwogICAgICAgICAgICAgICAgIHR5cGUuZm9y
bWF0VmFsdWVGcm9tVWludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZSB8IDA7CisgICAgICAgICAg
ICAgICAgdHlwZS5hbGxWYWx1ZXMgPSBmdW5jdGlvbiooKSB7IAorICAgICAgICAgICAgICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8PSAweGZmZmZmZmZmOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxldCB2YWx1ZSA9IGkgfCAwOworICAgICAgICAgICAgICAgICAgICAgICAgeWll
bGQge3ZhbHVlOiB2YWx1ZSwgbmFtZTogdmFsdWV9OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5z
ZXQoCkBAIC05NCw2ICsxMDAsMTAgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAg
ICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSA9IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVy
LnNldChvZmZzZXQsIDApOwogICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tSW50
TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlID4+PiAwOwogICAgICAgICAgICAgICAgIHR5cGUuZm9y
bWF0VmFsdWVGcm9tVWludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZSA+Pj4gMDsKKyAgICAgICAg
ICAgICAgICB0eXBlLmFsbFZhbHVlcyA9IGZ1bmN0aW9uKigpIHsgCisgICAgICAgICAgICAgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDB4ZmZmZmZmZmY7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHlpZWxkIHt2YWx1ZTogaSwgbmFtZTogaX07CisgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHJldmlzaW9uIDIyMjMwNykKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsx
MDgsMTcgQEAgY2xhc3MgTm9kZSB7CiAgICAgICAgIHJldHVybiB1bmlmaWNhdGlvbkNvbnRleHQ7
CiAgICAgfQogICAgIAorICAgIGNvbW1pdCgpCisgICAgeworICAgICAgICBsZXQgdW5pZmljYXRp
b25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dCgpOworICAgICAgICB1bmlmaWNhdGlv
bkNvbnRleHQuYWRkRXh0cmFOb2RlKHRoaXMpOworICAgICAgICBsZXQgcmVzdWx0ID0gdW5pZmlj
YXRpb25Db250ZXh0LnZlcmlmeSgpOworICAgICAgICBpZiAoIXJlc3VsdC5yZXN1bHQpCisgICAg
ICAgICAgICB0aHJvdyBuZXcgV0Vycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNvdWxk
IG5vdCBpbmZlciB0eXBlOiAiICsgcmVzdWx0LnJlYXNvbik7CisgICAgICAgIHVuaWZpY2F0aW9u
Q29udGV4dC5jb21taXQoKTsKKyAgICAgICAgcmV0dXJuIHVuaWZpY2F0aW9uQ29udGV4dC5maW5k
KHRoaXMpOworICAgIH0KKyAgICAKICAgICBzdWJzdGl0dXRlKHBhcmFtZXRlcnMsIGFyZ3VtZW50
TGlzdCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG5ldyBTdWJzdGl0dXRpb24o
cGFyYW1ldGVycywgYXJndW1lbnRMaXN0KSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9QYXJzZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9QYXJzZS5qcwkocmV2aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTczMSw2ICs3MzEsMzAgQEAgZnVu
Y3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICByZXR1cm4gbmV3
IENvbW1hRXhwcmVzc2lvbih0eXBlLm9yaWdpbiwgbGlzdCk7CiAgICAgfQogICAgIAorICAgIGZ1
bmN0aW9uIHBhcnNlU3dpdGNoQ2FzZSgpCisgICAgeworICAgICAgICBsZXQgdG9rZW4gPSBjb25z
dW1lKCJkZWZhdWx0IiwgImNhc2UiKTsKKyAgICAgICAgbGV0IHZhbHVlOworICAgICAgICBpZiAo
dG9rZW4udGV4dCA9PSAiY2FzZSIpCisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQ29uc3RleHBy
KCk7CisgICAgICAgIGNvbnN1bWUoIjoiKTsKKyAgICAgICAgbGV0IGJvZHkgPSBwYXJzZUJsb2Nr
Qm9keSgifSIsICJkZWZhdWx0IiwgImNhc2UiKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTd2l0Y2hD
YXNlKHRva2VuLCB2YWx1ZSwgYm9keSk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHBhcnNl
U3dpdGNoU3RhdGVtZW50KCkKKyAgICB7CisgICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJz
d2l0Y2giKTsKKyAgICAgICAgY29uc3VtZSgiKCIpOworICAgICAgICBsZXQgdmFsdWUgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgY29uc3VtZSgiKSIpOworICAgICAgICBjb25zdW1lKCJ7
Iik7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3dpdGNoU3RhdGVtZW50KG9yaWdpbiwgdmFs
dWUpOworICAgICAgICB3aGlsZSAoIXRyeUNvbnN1bWUoIn0iKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hZGQocGFyc2VTd2l0Y2hDYXNlKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKICAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpCiAgICAgewogICAgICAgICBsZXQg
dG9rZW4gPSBsZXhlci5wZWVrKCk7CkBAIC03NTIsNiArNzc2LDggQEAgZnVuY3Rpb24gcGFyc2Uo
cHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlRm9yKCk7
CiAgICAgICAgIGlmICh0b2tlbi50ZXh0ID09ICJpZiIpCiAgICAgICAgICAgICByZXR1cm4gcGFy
c2VJZlN0YXRlbWVudCgpOworICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAic3dpdGNoIikKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpOwogICAgICAgICBpZiAodG9r
ZW4udGV4dCA9PSAidHJhcCIpIHsKICAgICAgICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJ0
cmFwIik7CiAgICAgICAgICAgICBjb25zdW1lKCI7Iik7CkBAIC03NjUsMTUgKzc5MSwyMSBAQCBm
dW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIHJldHVybiBw
YXJzZUVmZmVjdGZ1bFN0YXRlbWVudCgpOwogICAgIH0KICAgICAKLSAgICBmdW5jdGlvbiBwYXJz
ZUJsb2NrKCkKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrQm9keSguLi50ZXJtaW5hdG9ycykKICAg
ICB7Ci0gICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJ7Iik7CiAgICAgICAgIGxldCBibG9j
ayA9IG5ldyBCbG9jayhvcmlnaW4pOwotICAgICAgICB3aGlsZSAoIXRlc3QoIn0iKSkgeworICAg
ICAgICB3aGlsZSAoIXRlc3QoLi4udGVybWluYXRvcnMpKSB7CiAgICAgICAgICAgICBsZXQgc3Rh
dGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQpCiAg
ICAgICAgICAgICAgICAgYmxvY2suYWRkKHN0YXRlbWVudCk7CiAgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGJsb2NrOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkKKyAg
ICB7CisgICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJ7Iik7CisgICAgICAgIGxldCBibG9j
ayA9IHBhcnNlQmxvY2tCb2R5KCJ9Iik7CiAgICAgICAgIGNvbnN1bWUoIn0iKTsKICAgICAgICAg
cmV0dXJuIGJsb2NrOwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJlcGFyZS5qcwkocmV2aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBsZXQgcHJl
cGFyZSA9ICgoKSA9PiB7CiAgICAgICAgIHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0s
IG5hbWVSZXNvbHZlcik7CiAgICAgICAgIHJlc29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSk7
CiAgICAgICAgIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0pOwotICAgICAgICAv
LyBGSVhNRTogTmVlZCB0byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUgbm90IGN5Y2xpYy4KKyAg
ICAgICAgLy8gRklYTUU6IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cyBhcmUgbm90IGN5Y2xp
Yy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzA0NAogICAgICAgICBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pOwogICAgICAg
ICBzeW50aGVzaXplRW51bUZ1bmN0aW9ucyhwcm9ncmFtKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMzA3KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsMjUgQEAgY2xhc3MgUmV0dXJuQ2hlY2tlciBleHRlbmRzIFZp
c2l0b3IgewogICAgICAgICB9OwogICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKICAg
ICB9CisgICAgCisgICAgX21lcmdlUmV0dXJuU3R5bGUoYSwgYikKKyAgICB7CisgICAgICAgIGlm
ICghYSkKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICBpZiAoIWIpCisgICAgICAgICAg
ICByZXR1cm4gYTsKKyAgICAgICAgc3dpdGNoIChhKSB7CisgICAgICAgIGNhc2UgdGhpcy5yZXR1
cm5TdHlsZS5EZWZpbml0ZWx5UmV0dXJuczoKKyAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxl
LkRlZmluaXRlbHlEb2VzbnRSZXR1cm46CisgICAgICAgICAgICBpZiAoYSA9PSBiKQorICAgICAg
ICAgICAgICAgIHJldHVybiBhOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuU3R5bGUu
SGFzbnRSZXR1cm5lZFlldDsKKyAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkhhc250UmV0
dXJuZWRZZXQ6CisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5TdHlsZS5IYXNudFJldHVy
bmVkWWV0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQgcmV0dXJuIHN0eWxlOiAiICsgYSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB2aXNpdEZ1
bmNEZWYobm9kZSkKICAgICB7CkBAIC02NiwxMCArODUsNyBAQCBjbGFzcyBSZXR1cm5DaGVja2Vy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIGlmIChub2RlLmVsc2VCb2R5KSB7CiAgICAgICAg
ICAgICBsZXQgYm9keVZhbHVlID0gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICAgICAg
bGV0IGVsc2VWYWx1ZSA9IG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgICAgICBp
ZiAoYm9keVZhbHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnMgJiYgZWxz
ZVZhbHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnM7Ci0gICAgICAg
ICAgICBpZiAoYm9keVZhbHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseURvZXNudFJl
dHVybiAmJiBlbHNlVmFsdWUgPT0gdGhpcy5yZXR1cm5TdHlsZS5EZWZpbml0ZWx5RG9lc250UmV0
dXJuKQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVyblN0eWxlLkRlZmluaXRlbHlE
b2VzbnRSZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVyZ2VSZXR1cm5TdHlsZShi
b2R5VmFsdWUsIGVsc2VWYWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMucmV0
dXJuU3R5bGUuSGFzbnRSZXR1cm5lZFlldDsKICAgICB9CkBAIC04MSw3ICs5Nyw2IEBAIGNsYXNz
IFJldHVybkNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKIAogICAgIHZpc2l0V2hpbGVMb29wKG5v
ZGUpCiAgICAgewotICAgICAgICBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpOwogICAgICAg
ICBsZXQgYm9keVJldHVybiA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAgICAgICAgaWYgKG5v
ZGUuY29uZGl0aW9uYWwgaW5zdGFuY2VvZiBDYWxsRXhwcmVzc2lvbiAmJiB0aGlzLl9pc0Jvb2xD
YXN0RnJvbUxpdGVyYWxUcnVlKG5vZGUuY29uZGl0aW9uYWwpKSB7CiAgICAgICAgICAgICBzd2l0
Y2ggKGJvZHlSZXR1cm4pIHsKQEAgLTEwNSwxOCArMTIwLDExIEBAIGNsYXNzIFJldHVybkNoZWNr
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkhhc250
UmV0dXJuZWRZZXQ6CiAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnJldHVyblN0eWxlLkhhc250
UmV0dXJuZWRZZXQ7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0
aGlzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2aXNpdEZvckxvb3Ao
bm9kZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemF0aW9uKQotICAgICAgICAg
ICAgbm9kZS5pbml0aWFsaXphdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuY29u
ZGl0aW9uKQotICAgICAgICAgICAgbm9kZS5jb25kaXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAg
IGlmIChub2RlLmluY3JlbWVudCkKLSAgICAgICAgICAgIG5vZGUuaW5jcmVtZW50LnZpc2l0KHRo
aXMpOwogICAgICAgICBsZXQgYm9keVJldHVybiA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAg
ICAgICAgaWYgKG5vZGUuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5faXNCb29sQ2Fz
dEZyb21MaXRlcmFsVHJ1ZShub2RlLmNvbmRpdGlvbikpIHsKICAgICAgICAgICAgIHN3aXRjaCAo
Ym9keVJldHVybikgewpAQCAtMTI5LDYgKzEzNywyNyBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdmlzaXRTd2l0Y2hT
dGF0ZW1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2Ug
aXQncyBtaXNzaW5nIHRoaW5ncy4gRm9yIGV4YW1wbGUsIHdlIG5lZWQgdG8gYmUgc21hcnQgYWJv
dXQgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZm9yICg7OykgeworICAgICAgICAvLyAg
ICAgc3dpdGNoICguLi4pIHsKKyAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAvLyAgICAgICAg
IGNvbnRpbnVlOyAvLyBUaGlzIGNvbnRpbnVlcyB0aGUgZm9yIGxvb3AKKyAgICAgICAgLy8gICAg
IH0KKyAgICAgICAgLy8gfQorICAgICAgICAvLworICAgICAgICAvLyBJJ20gbm90IHN1cmUgd2hh
dCB0aGF0IG1lYW5zIGZvciB0aGlzIGFuYWx5c2lzLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhh
dCB0aGUgcmlnaHQgd2F5IHRvCisgICAgICAgIC8vIGJ1aWxkIHRoaXMgYW5hbHlzaXMgaXMgdG8g
cnVuIGEgdmlzaXRvciB0aGF0IGJ1aWxkcyBhIENGRyBhbmQgdGhlbiBhbmFseXplIHRoZSBDRkcu
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcx
NzIKKyAgICAgICAgCisgICAgICAgIGxldCByZXR1cm5TdHlsZSA9IG51bGw7CisgICAgICAgIGZv
ciAobGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykKKyAgICAgICAgICAgIHJldHVy
blN0eWxlID0gdGhpcy5fbWVyZ2VSZXR1cm5TdHlsZShyZXR1cm5TdHlsZSwgc3dpdGNoQ2FzZS5i
b2R5LnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblN0eWxlOworICAgIH0KKyAg
ICAKICAgICB2aXNpdFJldHVybihub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMucmV0
dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnM7CkBAIC0xNDYsNiArMTc1LDEyIEBAIGNsYXNzIFJl
dHVybkNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKIAogICAgIHZpc2l0Q29udGludWUobm9kZSkK
ICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBDb25zaWRlciBhIGxv
b3AgbGlrZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaW50IGZvbygpIHsgZm9yICg7OykgeyBj
b250aW51ZTsgfSB9CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgcHJvZ3JhbSBzaG91bGRu
J3QgY2xhaW0gdGhhdCB0aGUgcHJvYmxlbSBpcyB0aGF0IGl0IGRvZXNuJ3QgcmV0dXJuLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MTcyCiAg
ICAgICAgIHJldHVybiB0aGlzLnJldHVyblN0eWxlLkRlZmluaXRlbHlEb2VzbnRSZXR1cm47CiAg
ICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJ
KHJldmlzaW9uIDIyMjMwNykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3Jp
dGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDIwIEBAIGNsYXNzIFJld3JpdGVy
IHsKICAgICAgICAgICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKSk7CiAgICAgfQogICAgIAorICAg
IHZpc2l0U3dpdGNoU3RhdGVtZW50KG5vZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0g
bmV3IFN3aXRjaFN0YXRlbWVudChub2RlLm9yaWdpbiwgTm9kZS52aXNpdChub2RlLnZhbHVlLCB0
aGlzKSk7CisgICAgICAgIGZvciAobGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykK
KyAgICAgICAgICAgIHJlc3VsdC5hZGQoc3dpdGNoQ2FzZS52aXNpdCh0aGlzKSk7CisgICAgICAg
IHJlc3VsdC50eXBlID0gTm9kZS52aXNpdChub2RlLnR5cGUsIHRoaXMpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdFN3aXRjaENhc2Uobm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgU3dpdGNoQ2FzZShub2RlLm9yaWdpbiwgTm9kZS52aXNpdChu
b2RlLnZhbHVlLCB0aGlzKSwgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKKyAgICB9CisgICAgCiAg
ICAgdmlzaXRBbm9ueW1vdXNWYXJpYWJsZShub2RlKQogICAgIHsKICAgICAgICAgbGV0IHJlc3Vs
dCA9IG5ldyBBbm9ueW1vdXNWYXJpYWJsZShub2RlLm9yaWdpbiwgbm9kZS50eXBlLnZpc2l0KHRo
aXMpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaENhc2UuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoQ2FzZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hD
YXNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3dpdGNo
Q2FzZSBleHRlbmRzIE5vZGUgeworICAgIC8vIE51bGwgdmFsdWUgbWVhbnMgZGVmYXVsdC4KKyAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHZhbHVlLCBib2R5KQorICAgIHsKKyAgICAgICAgc3VwZXIo
KTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl92YWx1ZSA9
IHZhbHVlOworICAgICAgICB0aGlzLl9ib2R5ID0gYm9keTsKKyAgICB9CisgICAgCisgICAgZ2V0
IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBpc0RlZmF1bHQoKSB7
IHJldHVybiAhdGhpcy5fdmFsdWU7IH0KKyAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92
YWx1ZTsgfQorICAgIGdldCBib2R5KCkgeyByZXR1cm4gdGhpcy5fYm9keTsgfQorICAgIAorICAg
IHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAgICAgaWYg
KHRoaXMuaXNEZWZhdWx0KQorICAgICAgICAgICAgcmVzdWx0ICs9ICJkZWZhdWx0IjsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9ICJjYXN0ICIgKyB0aGlzLnZhbHVlOworICAg
ICAgICByZXR1cm4gcmVzdWx0ICsgIjogIiArIHRoaXMuYm9keTsKKyAgICB9Cit9CisKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaFN0YXRlbWVudC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hTdGF0ZW1lbnQuanMJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoU3Rh
dGVtZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3dp
dGNoU3RhdGVtZW50IGV4dGVuZHMgTm9kZSB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdp
bjsKKyAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fc3dpdGNoQ2Fz
ZXMgPSBbXTsKKyAgICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29y
aWdpbjsgfQorICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9CisgICAgCisg
ICAgYWRkKHN3aXRjaENhc2UpCisgICAgeworICAgICAgICB0aGlzLl9zd2l0Y2hDYXNlcy5wdXNo
KHN3aXRjaENhc2UpOworICAgIH0KKyAgICAKKyAgICBnZXQgc3dpdGNoQ2FzZXMoKSB7IHJldHVy
biB0aGlzLl9zd2l0Y2hDYXNlczsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAg
ICAgIGxldCByZXN1bHQgPSAic3dpdGNoICgiICsgdGhpcy52YWx1ZSArICIpIHsgIjsKKyAgICAg
ICAgaWYgKHRoaXMuc3dpdGNoQ2FzZXMubGVuZ3RoKQorICAgICAgICAgICAgcmVzdWx0ICs9IHRo
aXMuc3dpdGNoQ2FzZXMuam9pbigiOyAiKTsgKyAiOyAiOworICAgICAgICByZXR1cm4gcmVzdWx0
ICsgIn0iOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
LmpzCShyZXZpc2lvbiAyMjIzMDcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9U
ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Mzg3LDYgKzQzODcsMjYgQEAgZnVuY3Rpb24gVEVT
VF9zd2l6emxlKCkKICAgICBjaGVja0Zsb2F0KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vMyIsIFtdLCBbXSksIDQpOwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBsZVN3aXRjaCgp
Cit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBpbnQgZm9vKGludCB4KQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNhc2UgNzY3
OgorICAgICAgICAgICAgICAgIHJldHVybiAyNzsKKyAgICAgICAgICAgIGNhc2UgNjk6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIDc2MjQ7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiA0OTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGApOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
SW50KHByb2dyYW0sIDc2NyldKSwgMjcpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDY5KV0pLCA3NjI0KTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZUludChwcm9ncmFtLCAwKV0pLCA0OSk7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiovOyAvLyBy
dW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsKICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwko
cmV2aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmlj
YXRpb25Db250ZXh0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIFVu
aWZpY2F0aW9uQ29udGV4dCB7CiAgICAgewogICAgICAgICB0aGlzLl90eXBlUGFyYW1ldGVycyA9
IG5ldyBTZXQodHlwZVBhcmFtZXRlcnMpOwogICAgICAgICB0aGlzLl9uZXh0TWFwID0gbmV3IE1h
cCgpOworICAgICAgICB0aGlzLl9leHRyYU5vZGVzID0gbmV3IFNldCgpOwogICAgIH0KICAgICAK
ICAgICB1bmlvbihhLCBiKQpAQCAtNjcsNiArNjgsMTEgQEAgY2xhc3MgVW5pZmljYXRpb25Db250
ZXh0IHsKICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOwogICAgIH0KICAgICAKKyAgICBhZGRF
eHRyYU5vZGUobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2V4dHJhTm9kZXMuYWRkKG5vZGUp
OworICAgIH0KKyAgICAKICAgICBnZXQgbm9kZXMoKQogICAgIHsKICAgICAgICAgbGV0IHJlc3Vs
dCA9IG5ldyBTZXQoKTsKQEAgLTc0LDYgKzgwLDggQEAgY2xhc3MgVW5pZmljYXRpb25Db250ZXh0
IHsKICAgICAgICAgICAgIHJlc3VsdC5hZGQoa2V5KTsKICAgICAgICAgICAgIHJlc3VsdC5hZGQo
dmFsdWUpOwogICAgICAgICB9CisgICAgICAgIGZvciAobGV0IG5vZGUgb2YgdGhpcy5fZXh0cmFO
b2RlcykKKyAgICAgICAgICAgIHJlc3VsdC5hZGQobm9kZSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlz
aXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCShyZXZpc2lvbiAyMjIzMDcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDE5IEBAIGNsYXNzIFZp
c2l0b3IgewogICAgICAgICBOb2RlLnZpc2l0KG5vZGUuaW5jcmVtZW50LCB0aGlzKTsKICAgICAg
ICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgIH0KKyAgICAKKyAgICB2aXNpdFN3aXRjaFN0
YXRlbWVudChub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52YWx1ZS52aXNpdCh0aGlzKTsKKyAg
ICAgICAgZm9yIChsZXQgc3dpdGNoQ2FzZSBvZiBub2RlLnN3aXRjaENhc2VzKQorICAgICAgICAg
ICAgc3dpdGNoQ2FzZS52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRTd2l0Y2hD
YXNlKG5vZGUpCisgICAgeworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpOwor
ICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7CisgICAgfQogCiAgICAgdmlzaXRSZXR1cm4o
bm9kZSkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321409</attachid>
            <date>2017-09-20 21:46:59 -0700</date>
            <delta_ts>2017-09-21 10:39:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67747</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjMxMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDExOSBAQAorMjAxNy0wOS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBzaG91bGQgc3VwcG9ydCBzd2l0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njk3OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGZhaXJseSBjb21w
bGV0ZSBzdXBwb3J0IGZvciBzd2l0Y2ggc3RhdGVtZW50cy4gVGhpcyBpbmNsdWRlcyB0aGluZ3Mg
bGlrZSB2ZXJpZnlpbmcKKyAgICAgICAgd2hldGhlciBvciBub3QgYSBkZWZhdWx0IHN0YXRlbWVu
dCBpcyBuZWVkZWQuIFRoaXMgZXZlbiB3b3JrcyB3aGVuIHRoZSBwcm9ncmFtbWVyIGxpc3RzIGFs
bCBvZgorICAgICAgICB0aGUgdmFsdWVzIG9mIGFuIGludGVnZXIgdHlwZS4KKyAgICAgICAgCisg
ICAgICAgIFRvIHRlc3QgdGhhdCBsYXN0IHBhcnQsIHRoaXMgcGF0Y2ggYWRkcyB1aW50OCBzdXBw
b3J0LiBJdCdzIGVhc3kgYWRkIGl0LCBidXQgb2YgY291cnNlIGl0CisgICAgICAgIG1lYW50IGFk
ZGluZyBhIGxvdCBvZiB0ZXN0cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBmaXhlcyBl
bnVtIGJ1Z3MsIHNpbmNlIHN3aXRjaCBkb2VzIHRoaW5ncyB0byBlbnVtcyB0aGF0IHdlIHByZXZp
b3VzbHkgZGlkbid0IHRlc3QuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9B
bGwuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tlci5qczoKKyAg
ICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0U3dpdGNoU3RhdGVtZW50KToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtTGl0ZXJhbC5qczoKKyAgICAgICAgKEVudW1M
aXRlcmFsLnByb3RvdHlwZS5nZXQgdmFsdWVGb3JTZWxlY3RlZFR5cGUpOgorICAgICAgICAqIFdl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1UeXBlLmpzOgorICAgICAgICAoRW51bVR5cGUucHJv
dG90eXBlLmFsbFZhbHVlcyk6CisgICAgICAgIChFbnVtVHlwZS5wcm90b3R5cGUudmFsdWVzRXF1
YWwpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qczoKKyAg
ICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAg
ICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanM6CisgICAgICAgIChJbmxpbmVy
LnByb3RvdHlwZS52aXNpdENhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKElubGluZXIpOgorICAg
ICAgICAoSW5saW5lci5wcm90b3R5cGUudmlzaXRDYXN0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qczoKKyAgICAgICAg
KEludHJpbnNpY3MuKToKKyAgICAgICAgKEludHJpbnNpY3MpOgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0xvb3BDaGVja2VyLmpzOgorICAgICAgICAoTG9vcENoZWNrZXIpOgor
ICAgICAgICAoTG9vcENoZWNrZXIucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAgICAgIChM
b29wQ2hlY2tlci5wcm90b3R5cGUudmlzaXRXaGlsZUxvb3ApOgorICAgICAgICAoTG9vcENoZWNr
ZXIucHJvdG90eXBlLnZpc2l0RG9XaGlsZUxvb3ApOgorICAgICAgICAoTG9vcENoZWNrZXIucHJv
dG90eXBlLnZpc2l0Rm9yTG9vcCk6CisgICAgICAgIChMb29wQ2hlY2tlci5wcm90b3R5cGUudmlz
aXRTd2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoTG9vcENoZWNrZXIucHJvdG90eXBlLnZpc2l0
QnJlYWspOgorICAgICAgICAoTG9vcENoZWNrZXIucHJvdG90eXBlLnZpc2l0Q29udGludWUpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05vZGUuanM6CisgICAgICAgIChOb2Rl
LnByb3RvdHlwZS5jb21taXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Bh
cnNlLmpzOgorICAgICAgICAocGFyc2VTd2l0Y2hDYXNlKToKKyAgICAgICAgKHBhcnNlU3dpdGNo
U3RhdGVtZW50KToKKyAgICAgICAgKHBhcnNlU3RhdGVtZW50KToKKyAgICAgICAgKHBhcnNlQmxv
Y2tCb2R5KToKKyAgICAgICAgKHBhcnNlQmxvY2spOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChsZXQucHJlcGFyZSk6CisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qczoKKyAgICAgICAgKFJldHVy
bkNoZWNrZXIucHJvdG90eXBlLl9tZXJnZVJldHVyblN0eWxlKToKKyAgICAgICAgKFJldHVybkNo
ZWNrZXIucHJvdG90eXBlLnZpc2l0SWZTdGF0ZW1lbnQpOgorICAgICAgICAoUmV0dXJuQ2hlY2tl
ci5wcm90b3R5cGUudmlzaXRXaGlsZUxvb3ApOgorICAgICAgICAoUmV0dXJuQ2hlY2tlci5wcm90
b3R5cGUudmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChSZXR1cm5DaGVja2VyLnByb3RvdHlw
ZS52aXNpdEZvckxvb3ApOgorICAgICAgICAoUmV0dXJuQ2hlY2tlci5wcm90b3R5cGUudmlzaXRT
d2l0Y2hTdGF0ZW1lbnQpOgorICAgICAgICAoUmV0dXJuQ2hlY2tlci5wcm90b3R5cGUudmlzaXRD
b250aW51ZSk6CisgICAgICAgIChSZXR1cm5DaGVja2VyKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52
aXNpdFN3aXRjaFN0YXRlbWVudCk6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRT
d2l0Y2hDYXNlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExp
YnJhcnkuanM6CisgICAgICAgICh1aW50OC5vcGVyYXRvcik6CisgICAgICAgIChib29sLm9wZXJh
dG9yKToKKyAgICAgICAgKF9nZW5lcmF0ZVN3aXp6bGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N3aXRjaENhc2UuanM6IEFkZGVkLgorICAgICAgICAoU3dpdGNoQ2FzZSk6
CisgICAgICAgIChTd2l0Y2hDYXNlLnByb3RvdHlwZS5nZXQgb3JpZ2luKToKKyAgICAgICAgKFN3
aXRjaENhc2UucHJvdG90eXBlLmdldCBpc0RlZmF1bHQpOgorICAgICAgICAoU3dpdGNoQ2FzZS5w
cm90b3R5cGUuZ2V0IHZhbHVlKToKKyAgICAgICAgKFN3aXRjaENhc2UucHJvdG90eXBlLmdldCBi
b2R5KToKKyAgICAgICAgKFN3aXRjaENhc2UucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hTdGF0ZW1lbnQuanM6IEFkZGVkLgorICAg
ICAgICAoU3dpdGNoU3RhdGVtZW50KToKKyAgICAgICAgKFN3aXRjaFN0YXRlbWVudC5wcm90b3R5
cGUuZ2V0IG9yaWdpbik6CisgICAgICAgIChTd2l0Y2hTdGF0ZW1lbnQucHJvdG90eXBlLmdldCB2
YWx1ZSk6CisgICAgICAgIChTd2l0Y2hTdGF0ZW1lbnQucHJvdG90eXBlLmFkZCk6CisgICAgICAg
IChTd2l0Y2hTdGF0ZW1lbnQucHJvdG90eXBlLmdldCBzd2l0Y2hDYXNlcyk6CisgICAgICAgIChT
d2l0Y2hTdGF0ZW1lbnQucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWw6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVGVzdC5qczoKKyAgICAgICAgKG1ha2VVaW50OCk6CisgICAgICAgIChtYWtlRW51bSk6Cisg
ICAgICAgIChjaGVja1VpbnQ4KToKKyAgICAgICAgKFRFU1RfdWludDhTaW1wbGVNYXRoKToKKyAg
ICAgICAgKFRFU1RfZXF1YWxpdHkpOgorICAgICAgICAoVEVTVF9ub3RFcXVhbGl0eSk6CisgICAg
ICAgIChURVNUX3VpbnQ4Qml0QW5kKToKKyAgICAgICAgKFRFU1RfdWludDhCaXRPcik6CisgICAg
ICAgIChURVNUX3VpbnQ4Qml0WG9yKToKKyAgICAgICAgKFRFU1RfdWludDhCaXROb3QpOgorICAg
ICAgICAoVEVTVF91aW50OExTaGlmdCk6CisgICAgICAgIChURVNUX3VpbnQ4UlNoaWZ0KToKKyAg
ICAgICAgKFRFU1RfZW51bVdpdGhFeHBsaWNpdEludEJhc2UpOgorICAgICAgICAoVEVTVF9lbnVt
V2l0aFVpbnRCYXNlKToKKyAgICAgICAgKFRFU1RfZW51bUZsb2F0QmFzZSk6CisgICAgICAgIChU
RVNUX2VudW1TdHJ1Y3RCYXNlKToKKyAgICAgICAgKFRFU1Rfc2ltcGxlU3dpdGNoKToKKyAgICAg
ICAgKFRFU1RfZXhoYXVzdGl2ZVVpbnQ4U3dpdGNoKToKKyAgICAgICAgKFRFU1Rfbm90UXVpdGVF
eGhhdXN0aXZlVWludDhTd2l0Y2gpOgorICAgICAgICAoVEVTVF9zd2l0Y2hGYWxsVGhyb3VnaCk6
CisgICAgICAgIChURVNUX3N3aXRjaEJyZWFrKToKKyAgICAgICAgKFRFU1RfZW51bVN3aXRjaEJy
ZWFrRXhoYXVzdGl2ZSk6CisgICAgICAgIChURVNUX2VudW1Td2l0Y2hCcmVha05vdFF1aXRlRXho
YXVzdGl2ZSk6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qczoKKyAgICAgICAgKFVuaWZpY2F0aW9uQ29udGV4
dCk6CisgICAgICAgIChVbmlmaWNhdGlvbkNvbnRleHQucHJvdG90eXBlLmFkZEV4dHJhTm9kZSk6
CisgICAgICAgIChVbmlmaWNhdGlvbkNvbnRleHQucHJvdG90eXBlLmdldCBub2Rlcyk6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qczoKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9pbmRleC5odG1sOgorCiAyMDE3LTA5LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHRlc3QyNjIgdGVzdHMKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjMwNykKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQz
LDYgKzE0Myw4IEBAIGxvYWQoIlN0YXRlbWVudENsb25lci5qcyIpOwogbG9hZCgiU3RydWN0TGF5
b3V0QnVpbGRlci5qcyIpOwogbG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0
aW9uLmpzIik7Citsb2FkKCJTd2l0Y2hDYXNlLmpzIik7Citsb2FkKCJTd2l0Y2hTdGF0ZW1lbnQu
anMiKTsKIGxvYWQoIlN5bnRoZXNpemVFbnVtRnVuY3Rpb25zLmpzIik7CiBsb2FkKCJTeW50aGVz
aXplU3RydWN0QWNjZXNzb3JzLmpzIik7CiBsb2FkKCJUcmFwU3RhdGVtZW50LmpzIik7CkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMjMw
NykKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTUxNCw2ICs1MTQsNjQgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgICAgICAgICAgbm9kZS5pbmNyZW1lbnQudmlzaXQodGhpcyk7CiAgICAgICAgIG5vZGUu
Ym9keS52aXNpdCh0aGlzKTsKICAgICB9CisKKyAgICB2aXNpdFN3aXRjaFN0YXRlbWVudChub2Rl
KQorICAgIHsKKyAgICAgICAgbGV0IHR5cGUgPSBub2RlLnZhbHVlLnZpc2l0KHRoaXMpLmNvbW1p
dCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCF0eXBlLnVuaWZ5Tm9kZS5pc0ludCAmJiAhKHR5
cGUudW5pZnlOb2RlIGluc3RhbmNlb2YgRW51bVR5cGUpKQorICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ2Fubm90IHN3aXRjaCBvbiBu
b24taW50ZWdlci9ub24tZW51bSB0eXBlOiAiICsgdHlwZSk7CisKKyAgICAgICAgbm9kZS50eXBl
ID0gdHlwZTsKKyAgICAgICAgCisgICAgICAgIGxldCBoYXNEZWZhdWx0ID0gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBmb3IgKGxldCBzd2l0Y2hDYXNlIG9mIG5vZGUuc3dpdGNoQ2FzZXMpIHsK
KyAgICAgICAgICAgIHN3aXRjaENhc2UuYm9keS52aXNpdCh0aGlzKTsKKworICAgICAgICAgICAg
aWYgKHN3aXRjaENhc2UuaXNEZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgaGFzRGVmYXVsdCA9
IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghc3dpdGNoQ2FzZS52YWx1ZS5pc0NvbnN0ZXhwcikKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihzd2l0Y2hDYXNlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJTd2l0Y2ggY2FzZSBub3QgY29uc3RleHByOiAiICsgc3dpdGNoQ2FzZS52YWx1
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCBjYXNlVHlwZSA9IHN3aXRjaENhc2Uu
dmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgICAgICBpZiAoIXR5cGUuZXF1YWxzV2l0aENvbW1p
dChjYXNlVHlwZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc3dpdGNo
Q2FzZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiU3dpdGNoIGNhc2UgdHlwZSBkb2VzIG5vdCBtYXRj
aCBzd2l0Y2ggdmFsdWUgdHlwZSAoY2FzZSB0eXBlIGlzICIgKyBjYXNlVHlwZSArICIgYnV0IHN3
aXRjaCB2YWx1ZSB0eXBlIGlzICIgKyB0eXBlICsgIikiKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLnN3aXRjaENhc2VzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBsZXQgZmlyc3RDYXNlID0gbm9kZS5zd2l0Y2hDYXNlc1tpXTsKKyAg
ICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGUuc3dpdGNoQ2FzZXMubGVuZ3Ro
OyArK2opIHsKKyAgICAgICAgICAgICAgICBsZXQgc2Vjb25kQ2FzZSA9IG5vZGUuc3dpdGNoQ2Fz
ZXNbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2FzZS5p
c0RlZmF1bHQgIT0gc2Vjb25kQ2FzZS5pc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChmaXJzdENhc2Uu
aXNEZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihzZWNv
bmRDYXNlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJEdXBsaWNhdGUgZGVmYXVsdCBjYXNlIGluIHN3
aXRjaCBzdGF0ZW1lbnQiKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBsZXQg
dmFsdWVzRXF1YWwgPSB0eXBlLnVuaWZ5Tm9kZS52YWx1ZXNFcXVhbCgKKyAgICAgICAgICAgICAg
ICAgICAgZmlyc3RDYXNlLnZhbHVlLnVuaWZ5Tm9kZS52YWx1ZUZvclNlbGVjdGVkVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxl
Y3RlZFR5cGUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNFcXVhbCkKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Ioc2Vjb25kQ2FzZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiRHVwbGljYXRlIGNhc2UgaW4gc3dpdGNoIHN0YXRlbWVudCBmb3IgdmFsdWUgIiArIGZp
cnN0Q2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWhhc0RlZmF1bHQpIHsKKyAg
ICAgICAgICAgIGxldCBpbmNsdWRlZFZhbHVlcyA9IG5ldyBTZXQoKTsKKyAgICAgICAgICAgIGZv
ciAobGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykKKyAgICAgICAgICAgICAgICBp
bmNsdWRlZFZhbHVlcy5hZGQoc3dpdGNoQ2FzZS52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxl
Y3RlZFR5cGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGxldCB7dmFsdWUsIG5h
bWV9IG9mIHR5cGUudW5pZnlOb2RlLmFsbFZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFpbmNsdWRlZFZhbHVlcy5oYXModmFsdWUpKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJWYWx1ZSBub3QgaGFuZGxl
ZCBieSBzd2l0Y2ggc3RhdGVtZW50OiAiICsgbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CiAgICAgCiAgICAgdmlzaXRDb21tYUV4cHJlc3Npb24obm9kZSkKICAgICB7Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtTGl0ZXJhbC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtTGl0ZXJhbC5qcwkocmV2
aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bUxpdGVy
YWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDExIEBAIGNsYXNzIEVudW1MaXRlcmFs
IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJldHVybiB0aGlzLm1lbWJlciA9PSBvdGhlci5tZW1iZXI7CiAgICAgfQorICAgIAorICAgIGdl
dCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5tZW1i
ZXIudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2VsZWN0ZWRUeXBlOworICAgIH0KICAgICAgICAg
CiAgICAgdG9TdHJpbmcoKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0VudW1UeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0VudW1UeXBlLmpzCShyZXZpc2lvbiAyMjIzMDcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9FbnVtVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTcgQEAg
Y2xhc3MgRW51bVR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAKICAgICBnZXQgaXNQcmltaXRpdmUo
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgCisgICAgKmFsbFZhbHVlcygpCisgICAgeworICAgICAg
ICBmb3IgKGxldCBtZW1iZXIgb2YgdGhpcy5tZW1iZXJzKQorICAgICAgICAgICAgeWllbGQge3Zh
bHVlOiBtZW1iZXIudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2VsZWN0ZWRUeXBlLCBuYW1lOiBt
ZW1iZXIubmFtZX07CisgICAgfQorICAgIAorICAgIHZhbHVlc0VxdWFsKGEsIGIpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5iYXNlVHlwZS51bmlmeU5vZGUudmFsdWVzRXF1YWwoYSwgYik7
CisgICAgfQorICAgIAogICAgIHBvcHVsYXRlRGVmYXVsdFZhbHVlKGJ1ZmZlciwgb2Zmc2V0KQog
ICAgIHsKICAgICAgICAgdGhpcy5iYXNlVHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZShidWZmZXIs
IG9mZnNldCk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3Iu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9y
LmpzCShyZXZpc2lvbiAyMjIzMDcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9F
dmFsdWF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsNDEgQEAgY2xhc3MgRXZh
bHVhdG9yIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CisgICAgCisgICAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIGxl
dCBmaW5kQW5kUnVuQ2FzdCA9IHByZWRpY2F0ZSA9PiB7CisgICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IG5vZGUuc3dpdGNoQ2FzZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBsZXQgc3dpdGNoQ2FzZSA9IG5vZGUuc3dpdGNoQ2FzZXNbaV07CisgICAgICAgICAgICAgICAg
aWYgKHByZWRpY2F0ZShzd2l0Y2hDYXNlKSkgeworICAgICAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBub2RlLnN3aXRjaENh
c2VzLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc3dpdGNo
Q2FzZXNbal0udmlzaXQodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICE9IEJyZWFrRXhjZXB0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9OworICAgICAgICAK
KyAgICAgICAgbGV0IHZhbHVlID0gbm9kZS52YWx1ZS52aXNpdCh0aGlzKS5sb2FkVmFsdWUoKTsK
KyAgICAgICAgCisgICAgICAgIGxldCBmb3VuZCA9IGZpbmRBbmRSdW5DYXN0KHN3aXRjaENhc2Ug
PT4geworICAgICAgICAgICAgaWYgKHN3aXRjaENhc2UuaXNEZWZhdWx0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUudW5pZnlOb2Rl
LnZhbHVlc0VxdWFsKAorICAgICAgICAgICAgICAgIHZhbHVlLCBzd2l0Y2hDYXNlLnZhbHVlLnVu
aWZ5Tm9kZS52YWx1ZUZvclNlbGVjdGVkVHlwZSk7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
Zm91bmQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmb3VuZCA9IGZp
bmRBbmRSdW5DYXN0KHN3aXRjaENhc2UgPT4gc3dpdGNoQ2FzZS5pc0RlZmF1bHQpOworICAgICAg
ICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTd2l0Y2ggc3RhdGVt
ZW50IGRpZCBub3QgZmluZCBjYXNlIik7CisgICAgfQogCiAgICAgdmlzaXRCcmVhayhub2RlKQog
ICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5qcwkocmV2
aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5lci5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDUgQEAgY2xhc3MgSW5saW5lciBleHRlbmRz
IFJld3JpdGVyIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHRpbmdCbG9jazsKICAgICAgICAg
fSk7CiAgICAgfQotCi0gICAgdmlzaXRDYXN0RXhwcmVzc2lvbihub2RlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMudmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKTsKLSAgICB9CiB9CiAKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkocmV2aXNp
b24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5q
cwkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTIgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAg
ICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSA9IChidWZmZXIsIG9mZnNl
dCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOwogICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0
VmFsdWVGcm9tSW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlIHwgMDsKICAgICAgICAgICAgICAg
ICB0eXBlLmZvcm1hdFZhbHVlRnJvbVVpbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWUgfCAwOwor
ICAgICAgICAgICAgICAgIHR5cGUuYWxsVmFsdWVzID0gZnVuY3Rpb24qKCkgeyAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZmZmZmZmZjsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBpIHwgMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIHt2YWx1ZTogdmFsdWUsIG5hbWU6IHZhbHVlfTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICB0
aGlzLl9tYXAuc2V0KApAQCAtOTQsNiArMTAwLDMyIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAg
ICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQp
ID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKICAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZh
bHVlRnJvbUludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZSA+Pj4gMDsKICAgICAgICAgICAgICAg
ICB0eXBlLmZvcm1hdFZhbHVlRnJvbVVpbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWUgPj4+IDA7
CisgICAgICAgICAgICAgICAgdHlwZS5hbGxWYWx1ZXMgPSBmdW5jdGlvbiooKSB7IAorICAgICAg
ICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAweGZmZmZmZmZmOyArK2kpCisgICAg
ICAgICAgICAgICAgICAgICAgICB5aWVsZCB7dmFsdWU6IGksIG5hbWU6IGl9OworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl9tYXAuc2V0KAorICAg
ICAgICAgICAgIm5hdGl2ZSBQcmltaXRpdmUgdHlwZSB1aW50ODw+IiwKKyAgICAgICAgICAgIHR5
cGUgPT4geworICAgICAgICAgICAgICAgIHRoaXMudWludDggPSB0eXBlOworICAgICAgICAgICAg
ICAgIHR5cGUuaXNJbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIgPSB0
cnVlOworICAgICAgICAgICAgICAgIHR5cGUuaXNTaWduZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVxdWl2YWxlbnQodmFs
dWUgJiAweGZmLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgdHlwZS5zaXplID0gMTsKKyAgICAg
ICAgICAgICAgICB0eXBlLmRlZmF1bHRWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgdHlwZS5j
cmVhdGVMaXRlcmFsID0gKG9yaWdpbiwgdmFsdWUpID0+IEludExpdGVyYWwud2l0aFR5cGUob3Jp
Z2luLCB2YWx1ZSAmIDB4ZmYsIHR5cGUpOworICAgICAgICAgICAgICAgIHR5cGUuc3VjY2Vzc29y
VmFsdWUgPSB2YWx1ZSA9PiAodmFsdWUgKyAxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgdHlw
ZS52YWx1ZXNFcXVhbCA9IChhLCBiKSA9PiBhID09PSBiOworICAgICAgICAgICAgICAgIHR5cGUu
cG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZlci5zZXQob2Zm
c2V0LCAwKTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbUludExpdGVyYWwg
PSB2YWx1ZSA9PiB2YWx1ZSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1
ZUZyb21VaW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlICYgMHhmZjsKKyAgICAgICAgICAgICAg
ICB0eXBlLmFsbFZhbHVlcyA9IGZ1bmN0aW9uKigpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPD0gMHhmZjsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgeWll
bGQge3ZhbHVlOiBpLCBuYW1lOiBpfTsKKyAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
fSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKQEAgLTE0MSwxMiArMTczLDM2IEBAIGNsYXNz
IEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICB0aGlzLl9t
YXAuc2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBvcGVyYXRvciBpbnQzMjw+KHVpbnQ4KSIsCisg
ICAgICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9u
ID0gKFt2YWx1ZV0pID0+IEVQdHIuYm94KHZhbHVlLmxvYWRWYWx1ZSgpIHwgMCk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAi
bmF0aXZlIG9wZXJhdG9yIHVpbnQzMjw+KGludDMyKSIsCiAgICAgICAgICAgICBmdW5jID0+IHsK
ICAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIu
Ym94KHZhbHVlLmxvYWRWYWx1ZSgpID4+PiAwKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAK
ICAgICAgICAgdGhpcy5fbWFwLnNldCgKKyAgICAgICAgICAgICJuYXRpdmUgb3BlcmF0b3IgdWlu
dDMyPD4odWludDgpIiwKKyAgICAgICAgICAgIGZ1bmMgPT4geworICAgICAgICAgICAgICAgIGZ1
bmMuaW1wbGVtZW50YXRpb24gPSAoW3ZhbHVlXSkgPT4gRVB0ci5ib3godmFsdWUubG9hZFZhbHVl
KCkgPj4+IDApOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB0aGlzLl9tYXAu
c2V0KAorICAgICAgICAgICAgIm5hdGl2ZSBvcGVyYXRvciB1aW50ODw+KGludDMyKSIsCisgICAg
ICAgICAgICBmdW5jID0+IHsKKyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0g
KFt2YWx1ZV0pID0+IEVQdHIuYm94KHZhbHVlLmxvYWRWYWx1ZSgpICYgMHhmZik7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX21hcC5zZXQoCisgICAgICAgICAgICAi
bmF0aXZlIG9wZXJhdG9yIHVpbnQ4PD4odWludDMyKSIsCisgICAgICAgICAgICBmdW5jID0+IHsK
KyAgICAgICAgICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIu
Ym94KHZhbHVlLmxvYWRWYWx1ZSgpICYgMHhmZik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIHRoaXMuX21hcC5zZXQoCiAgICAgICAgICAgICAibmF0aXZlIG9wZXJhdG9yIGZs
b2F0PD4oZG91YmxlKSIsCiAgICAgICAgICAgICBmdW5jID0+IHsKICAgICAgICAgICAgICAgICBm
dW5jLmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IEVQdHIuYm94KE1hdGguZnJvdW5kKHZh
bHVlLmxvYWRWYWx1ZSgpKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9M
b29wQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Mb29wQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTG9vcENoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwx
MyBAQCBjbGFzcyBMb29wQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAg
c3VwZXIoKTsKICAgICAgICAgdGhpcy5fbG9vcERlcHRoID0gMDsKKyAgICAgICAgdGhpcy5fc3dp
dGNoRGVwdGggPSAwOwogICAgIH0KIAogICAgIHZpc2l0RnVuY0RlZihub2RlKQogICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX2xvb3BEZXB0aCAhPSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkxvb3BDaGVja2VyIGRvZXMgbm90IHVuZGVyc3RhbmQgbmVzdGVkIGZ1bmN0aW9ucy4i
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fbG9vcERlcHRoICE9IDApCisgICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJMb29w
Q2hlY2tlciBkb2VzIG5vdCB1bmRlcnN0YW5kIG5lc3RlZCBmdW5jdGlvbnMuIik7CiAgICAgICAg
IHN1cGVyLnZpc2l0RnVuY0RlZihub2RlKTsKICAgICB9CiAKQEAgLTQ0LDkgKzQ0LDggQEAgY2xh
c3MgTG9vcENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgbm9kZS5jb25kaXRpb25h
bC52aXNpdCh0aGlzKTsKICAgICAgICAgKyt0aGlzLl9sb29wRGVwdGg7CiAgICAgICAgIG5vZGUu
Ym9keS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKHRoaXMuX2xvb3BEZXB0aCA9PSAwKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBudW1iZXIgb2YgbmVzdGVkIGxvb3BzIGlz
IG5lZ2F0aXZlISIpOwotICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9sb29wRGVwdGggPT0g
MCkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIlRoZSBudW1iZXIgb2YgbmVzdGVkIGxvb3BzIGlzIG5lZ2F0aXZlISIpOwogICAgICAg
ICAtLXRoaXMuX2xvb3BEZXB0aDsKICAgICB9CiAKQEAgLTU0LDkgKzUzLDggQEAgY2xhc3MgTG9v
cENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICB7CiAgICAgICAgICsrdGhpcy5fbG9vcERl
cHRoOwogICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgIGlmICh0aGlzLl9s
b29wRGVwdGggPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGUgbnVtYmVy
IG9mIG5lc3RlZCBsb29wcyBpcyBuZWdhdGl2ZSEiKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fbG9vcERlcHRoID09IDApCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihu
b2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUaGUgbnVtYmVyIG9mIG5lc3RlZCBsb29wcyBpcyBu
ZWdhdGl2ZSEiKTsKICAgICAgICAgLS10aGlzLl9sb29wRGVwdGg7CiAgICAgICAgIG5vZGUuY29u
ZGl0aW9uYWwudmlzaXQodGhpcyk7CiAgICAgfQpAQCAtNzEsMjUgKzY5LDMxIEBAIGNsYXNzIExv
b3BDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICBub2RlLmluY3JlbWVudC52
aXNpdCh0aGlzKTsKICAgICAgICAgKyt0aGlzLl9sb29wRGVwdGg7CiAgICAgICAgIG5vZGUuYm9k
eS52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKHRoaXMuX2xvb3BEZXB0aCA9PSAwKSB7Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBudW1iZXIgb2YgbmVzdGVkIGxvb3BzIGlzIG5l
Z2F0aXZlISIpOwotICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9sb29wRGVwdGggPT0gMCkK
KyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZywgIlRoZSBudW1iZXIgb2YgbmVzdGVkIGxvb3BzIGlzIG5lZ2F0aXZlISIpOwogICAgICAgICAt
LXRoaXMuX2xvb3BEZXB0aDsKICAgICB9CiAgICAgCisgICAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQo
bm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUudmFsdWUudmlzaXQodGhpcyk7CisgICAgICAgIHRo
aXMuX3N3aXRjaERlcHRoKys7CisgICAgICAgIGZvciAobGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5z
d2l0Y2hDYXNlcykKKyAgICAgICAgICAgIHN3aXRjaENhc2UudmlzaXQodGhpcyk7CisgICAgICAg
IHRoaXMuX3N3aXRjaERlcHRoLS07CisgICAgfQorICAgIAogICAgIHZpc2l0QnJlYWsobm9kZSkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9sb29wRGVwdGggPT0gMCkgewotICAgICAgICAgICAg
dGhyb3cgbmV3IFdFcnJvcigiQnJlYWsgc3RhdGVtZW50IHdpdGhvdXQgZW5jbG9zaW5nIGxvb3Ah
Iik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX2xvb3BEZXB0aCA9PSAwICYmIHRoaXMu
X3N3aXRjaERlcHRoID09IDApCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJCcmVhayBzdGF0ZW1lbnQgd2l0aG91dCBlbmNsb3Npbmcg
bG9vcCBvciBzd2l0Y2ghIik7CiAgICAgICAgIHN1cGVyLnZpc2l0QnJlYWsobm9kZSk7CiAgICAg
fQogICAgIAogICAgIHZpc2l0Q29udGludWUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9sb29wRGVwdGggPT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFdFcnJvcigiQ29udGlu
dWUgc3RhdGVtZW50IHdpdGhvdXQgZW5jbG9zaW5nIGxvb3AhIik7Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMuX2xvb3BEZXB0aCA9PSAwKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ29udGludWUgc3RhdGVtZW50IHdpdGhv
dXQgZW5jbG9zaW5nIGxvb3AhIik7CiAgICAgICAgIHN1cGVyLnZpc2l0Q29udGludWUobm9kZSk7
CiAgICAgfQogfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTm9kZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCShyZXZp
c2lvbiAyMjIzMDcpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Ob2RlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDE3IEBAIGNsYXNzIE5vZGUgewogICAgICAgICBy
ZXR1cm4gdW5pZmljYXRpb25Db250ZXh0OwogICAgIH0KICAgICAKKyAgICBjb21taXQoKQorICAg
IHsKKyAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5ldyBVbmlmaWNhdGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgdW5pZmljYXRpb25Db250ZXh0LmFkZEV4dHJhTm9kZSh0aGlzKTsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IHVuaWZpY2F0aW9uQ29udGV4dC52ZXJpZnkoKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQucmVzdWx0KQorICAgICAgICAgICAgdGhyb3cgbmV3IFdFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJDb3VsZCBub3QgaW5mZXIgdHlwZTogIiArIHJlc3VsdC5yZWFz
b24pOworICAgICAgICB1bmlmaWNhdGlvbkNvbnRleHQuY29tbWl0KCk7CisgICAgICAgIHJldHVy
biB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKKyAgICB9CisgICAgCiAgICAgc3Vic3Rp
dHV0ZShwYXJhbWV0ZXJzLCBhcmd1bWVudExpc3QpCiAgICAgewogICAgICAgICByZXR1cm4gdGhp
cy52aXNpdChuZXcgU3Vic3RpdHV0aW9uKHBhcmFtZXRlcnMsIGFyZ3VtZW50TGlzdCkpOwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjMwNykK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC03MzEsNiArNzMxLDMwIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3Jp
Z2luS2kKICAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Npb24odHlwZS5vcmlnaW4sIGxp
c3QpOwogICAgIH0KICAgICAKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKQorICAgIHsK
KyAgICAgICAgbGV0IHRva2VuID0gY29uc3VtZSgiZGVmYXVsdCIsICJjYXNlIik7CisgICAgICAg
IGxldCB2YWx1ZTsKKyAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gImNhc2UiKQorICAgICAgICAg
ICAgdmFsdWUgPSBwYXJzZUNvbnN0ZXhwcigpOworICAgICAgICBjb25zdW1lKCI6Iik7CisgICAg
ICAgIGxldCBib2R5ID0gcGFyc2VCbG9ja0JvZHkoIn0iLCAiZGVmYXVsdCIsICJjYXNlIik7Cisg
ICAgICAgIHJldHVybiBuZXcgU3dpdGNoQ2FzZSh0b2tlbiwgdmFsdWUsIGJvZHkpOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpCisgICAgeworICAgICAg
ICBsZXQgb3JpZ2luID0gY29uc3VtZSgic3dpdGNoIik7CisgICAgICAgIGNvbnN1bWUoIigiKTsK
KyAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIGNvbnN1bWUo
IikiKTsKKyAgICAgICAgY29uc3VtZSgieyIpOworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN3
aXRjaFN0YXRlbWVudChvcmlnaW4sIHZhbHVlKTsKKyAgICAgICAgd2hpbGUgKCF0cnlDb25zdW1l
KCJ9IikpCisgICAgICAgICAgICByZXN1bHQuYWRkKHBhcnNlU3dpdGNoQ2FzZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1l
bnQoKQogICAgIHsKICAgICAgICAgbGV0IHRva2VuID0gbGV4ZXIucGVlaygpOwpAQCAtNzUyLDYg
Kzc3Niw4IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUZvcigpOwogICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiaWYi
KQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlSWZTdGF0ZW1lbnQoKTsKKyAgICAgICAgaWYgKHRv
a2VuLnRleHQgPT0gInN3aXRjaCIpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VTd2l0Y2hTdGF0
ZW1lbnQoKTsKICAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gInRyYXAiKSB7CiAgICAgICAgICAg
ICBsZXQgb3JpZ2luID0gY29uc3VtZSgidHJhcCIpOwogICAgICAgICAgICAgY29uc3VtZSgiOyIp
OwpAQCAtNzY1LDE1ICs3OTEsMjEgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBv
cmlnaW5LaQogICAgICAgICByZXR1cm4gcGFyc2VFZmZlY3RmdWxTdGF0ZW1lbnQoKTsKICAgICB9
CiAgICAgCi0gICAgZnVuY3Rpb24gcGFyc2VCbG9jaygpCisgICAgZnVuY3Rpb24gcGFyc2VCbG9j
a0JvZHkoLi4udGVybWluYXRvcnMpCiAgICAgewotICAgICAgICBsZXQgb3JpZ2luID0gY29uc3Vt
ZSgieyIpOwogICAgICAgICBsZXQgYmxvY2sgPSBuZXcgQmxvY2sob3JpZ2luKTsKLSAgICAgICAg
d2hpbGUgKCF0ZXN0KCJ9IikpIHsKKyAgICAgICAgd2hpbGUgKCF0ZXN0KC4uLnRlcm1pbmF0b3Jz
KSkgewogICAgICAgICAgICAgbGV0IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICAg
ICAgICAgICBpZiAoc3RhdGVtZW50KQogICAgICAgICAgICAgICAgIGJsb2NrLmFkZChzdGF0ZW1l
bnQpOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBibG9jazsKKyAgICB9CisgICAgCisgICAg
ZnVuY3Rpb24gcGFyc2VCbG9jaygpCisgICAgeworICAgICAgICBsZXQgb3JpZ2luID0gY29uc3Vt
ZSgieyIpOworICAgICAgICBsZXQgYmxvY2sgPSBwYXJzZUJsb2NrQm9keSgifSIpOwogICAgICAg
ICBjb25zdW1lKCJ9Iik7CiAgICAgICAgIHJldHVybiBibG9jazsKICAgICB9CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJKHJldmlzaW9uIDIyMjMwNykKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDExICszMiw5IEBAIGxldCBwcmVwYXJlID0gKCgpID0+IHsKICAgICAgICAgICAgIHBh
cnNlKHN0YW5kYXJkUHJvZ3JhbSwgIi9pbnRlcm5hbC9zdGRsaWIiLCAibmF0aXZlIiwgNzIsIHN0
YW5kYXJkTGlicmFyeSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCiAgICAgICAgIGxldCBw
cm9ncmFtID0gY2xvbmVQcm9ncmFtKHN0YW5kYXJkUHJvZ3JhbSk7Ci0gICAgICAgIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgInVzZXIiLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKKyAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGgpCisgICAgICAgICAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4s
ICJ1c2VyIiwgbGluZU51bWJlck9mZnNldCwgdGV4dCk7CiAgICAgICAgIHByb2dyYW0gPSBwcm9n
cmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3ZlZChwcm9ncmFtKTsKICAgICAgICAgCiAgICAg
ICAgIGZvbGRDb25zdGV4cHJzKHByb2dyYW0pOwpAQCAtNDUsNyArNDMsNyBAQCBsZXQgcHJlcGFy
ZSA9ICgoKSA9PiB7CiAgICAgICAgIHJlc29sdmVOYW1lc0luUHJvdG9jb2xzKHByb2dyYW0sIG5h
bWVSZXNvbHZlcik7CiAgICAgICAgIHJlc29sdmVUeXBlRGVmc0luVHlwZXMocHJvZ3JhbSk7CiAg
ICAgICAgIHJlc29sdmVUeXBlRGVmc0luUHJvdG9jb2xzKHByb2dyYW0pOwotICAgICAgICAvLyBG
SVhNRTogTmVlZCB0byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUgbm90IGN5Y2xpYy4KKyAgICAg
ICAgLy8gRklYTUU6IE5lZWQgdG8gdmVyaWZ5IHRoYXQgc3RydWN0cyBhcmUgbm90IGN5Y2xpYy4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzA0
NAogICAgICAgICBzeW50aGVzaXplU3RydWN0QWNjZXNzb3JzKHByb2dyYW0pOwogICAgICAgICBz
eW50aGVzaXplRW51bUZ1bmN0aW9ucyhwcm9ncmFtKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1JldHVybkNoZWNrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkocmV2aXNpb24gMjIyMzA3KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV0dXJuQ2hlY2tlci5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsMjUgQEAgY2xhc3MgUmV0dXJuQ2hlY2tlciBleHRlbmRzIFZpc2l0
b3IgewogICAgICAgICB9OwogICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKICAgICB9
CisgICAgCisgICAgX21lcmdlUmV0dXJuU3R5bGUoYSwgYikKKyAgICB7CisgICAgICAgIGlmICgh
YSkKKyAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICBpZiAoIWIpCisgICAgICAgICAgICBy
ZXR1cm4gYTsKKyAgICAgICAgc3dpdGNoIChhKSB7CisgICAgICAgIGNhc2UgdGhpcy5yZXR1cm5T
dHlsZS5EZWZpbml0ZWx5UmV0dXJuczoKKyAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkRl
ZmluaXRlbHlEb2VzbnRSZXR1cm46CisgICAgICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhOworICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuU3R5bGUuSGFz
bnRSZXR1cm5lZFlldDsKKyAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkhhc250UmV0dXJu
ZWRZZXQ6CisgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5TdHlsZS5IYXNudFJldHVybmVk
WWV0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
cmV0dXJuIHN0eWxlOiAiICsgYSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB2aXNpdEZ1bmNE
ZWYobm9kZSkKICAgICB7CkBAIC02NiwxMCArODUsNyBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIGlmIChub2RlLmVsc2VCb2R5KSB7CiAgICAgICAgICAg
ICBsZXQgYm9keVZhbHVlID0gbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAgICAgICAgICAgbGV0
IGVsc2VWYWx1ZSA9IG5vZGUuZWxzZUJvZHkudmlzaXQodGhpcyk7Ci0gICAgICAgICAgICBpZiAo
Ym9keVZhbHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnMgJiYgZWxzZVZh
bHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnMpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseVJldHVybnM7Ci0gICAgICAgICAg
ICBpZiAoYm9keVZhbHVlID09IHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseURvZXNudFJldHVy
biAmJiBlbHNlVmFsdWUgPT0gdGhpcy5yZXR1cm5TdHlsZS5EZWZpbml0ZWx5RG9lc250UmV0dXJu
KQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJldHVyblN0eWxlLkRlZmluaXRlbHlEb2Vz
bnRSZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVyZ2VSZXR1cm5TdHlsZShib2R5
VmFsdWUsIGVsc2VWYWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJu
U3R5bGUuSGFzbnRSZXR1cm5lZFlldDsKICAgICB9CkBAIC04MSw3ICs5Nyw2IEBAIGNsYXNzIFJl
dHVybkNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKIAogICAgIHZpc2l0V2hpbGVMb29wKG5vZGUp
CiAgICAgewotICAgICAgICBub2RlLmNvbmRpdGlvbmFsLnZpc2l0KHRoaXMpOwogICAgICAgICBs
ZXQgYm9keVJldHVybiA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAgICAgICAgaWYgKG5vZGUu
Y29uZGl0aW9uYWwgaW5zdGFuY2VvZiBDYWxsRXhwcmVzc2lvbiAmJiB0aGlzLl9pc0Jvb2xDYXN0
RnJvbUxpdGVyYWxUcnVlKG5vZGUuY29uZGl0aW9uYWwpKSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KGJvZHlSZXR1cm4pIHsKQEAgLTEwNSwxOCArMTIwLDExIEBAIGNsYXNzIFJldHVybkNoZWNrZXIg
ZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgY2FzZSB0aGlzLnJldHVyblN0eWxlLkhhc250UmV0
dXJuZWRZZXQ6CiAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLnJldHVyblN0eWxlLkhhc250UmV0
dXJuZWRZZXQ7CiAgICAgICAgIH0KLSAgICAgICAgbm9kZS5jb25kaXRpb25hbC52aXNpdCh0aGlz
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2aXNpdEZvckxvb3Aobm9k
ZSkKICAgICB7Ci0gICAgICAgIGlmIChub2RlLmluaXRpYWxpemF0aW9uKQotICAgICAgICAgICAg
bm9kZS5pbml0aWFsaXphdGlvbi52aXNpdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUuY29uZGl0
aW9uKQotICAgICAgICAgICAgbm9kZS5jb25kaXRpb24udmlzaXQodGhpcyk7Ci0gICAgICAgIGlm
IChub2RlLmluY3JlbWVudCkKLSAgICAgICAgICAgIG5vZGUuaW5jcmVtZW50LnZpc2l0KHRoaXMp
OwogICAgICAgICBsZXQgYm9keVJldHVybiA9IG5vZGUuYm9keS52aXNpdCh0aGlzKTsKICAgICAg
ICAgaWYgKG5vZGUuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5faXNCb29sQ2FzdEZy
b21MaXRlcmFsVHJ1ZShub2RlLmNvbmRpdGlvbikpIHsKICAgICAgICAgICAgIHN3aXRjaCAoYm9k
eVJldHVybikgewpAQCAtMTI5LDYgKzEzNywzMiBAQCBjbGFzcyBSZXR1cm5DaGVja2VyIGV4dGVu
ZHMgVmlzaXRvciB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdmlzaXRTd2l0Y2hTdGF0
ZW1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2UgaXQn
cyBtaXNzaW5nIHRoaW5ncy4gRm9yIGV4YW1wbGUsIHdlIG5lZWQgdG8gYmUgc21hcnQgYWJvdXQg
dGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZm9yICg7OykgeworICAgICAgICAvLyAgICAg
c3dpdGNoICguLi4pIHsKKyAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGNv
bnRpbnVlOyAvLyBUaGlzIGNvbnRpbnVlcyB0aGUgZm9yIGxvb3AKKyAgICAgICAgLy8gICAgIH0K
KyAgICAgICAgLy8gfQorICAgICAgICAvLworICAgICAgICAvLyBJJ20gbm90IHN1cmUgd2hhdCB0
aGF0IG1lYW5zIGZvciB0aGlzIGFuYWx5c2lzLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhhdCB0
aGUgcmlnaHQgd2F5IHRvCisgICAgICAgIC8vIGJ1aWxkIHRoaXMgYW5hbHlzaXMgaXMgdG8gcnVu
IGEgdmlzaXRvciB0aGF0IGJ1aWxkcyBhIENGRyBhbmQgdGhlbiBhbmFseXplIHRoZSBDRkcuCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcxNzIK
KyAgICAgICAgCisgICAgICAgIGxldCByZXR1cm5TdHlsZSA9IG51bGw7CisgICAgICAgIGZvciAo
bGV0IHN3aXRjaENhc2Ugb2Ygbm9kZS5zd2l0Y2hDYXNlcykgeworICAgICAgICAgICAgbGV0IGJv
ZHlTdHlsZSA9IHN3aXRjaENhc2UuYm9keS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGUgZmFjdCB0aGF0IHdlIG5lZWQgdGhpcyBkZW1vbnN0cmF0ZXMgdGhlIG5lZWQgZm9y
IENGRyBhbmFseXNpcy4KKyAgICAgICAgICAgIGlmIChib2R5U3R5bGUgPT0gdGhpcy5yZXR1cm5T
dHlsZS5EZWZpbml0ZWx5RG9lc250UmV0dXJuKQorICAgICAgICAgICAgICAgIGJvZHlTdHlsZSA9
IHRoaXMucmV0dXJuU3R5bGUuSGFzbnRSZXR1cm5lZFlldDsKKyAgICAgICAgICAgIHJldHVyblN0
eWxlID0gdGhpcy5fbWVyZ2VSZXR1cm5TdHlsZShyZXR1cm5TdHlsZSwgYm9keVN0eWxlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmV0dXJuU3R5bGU7CisgICAgfQorICAgIAogICAgIHZp
c2l0UmV0dXJuKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5TdHlsZS5E
ZWZpbml0ZWx5UmV0dXJuczsKQEAgLTE0Niw2ICsxODAsMTIgQEAgY2xhc3MgUmV0dXJuQ2hlY2tl
ciBleHRlbmRzIFZpc2l0b3IgewogCiAgICAgdmlzaXRDb250aW51ZShub2RlKQogICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgd3JvbmcuIENvbnNpZGVyIGEgbG9vcCBsaWtlOgor
ICAgICAgICAvLworICAgICAgICAvLyBpbnQgZm9vKCkgeyBmb3IgKDs7KSB7IGNvbnRpbnVlOyB9
IH0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBwcm9ncmFtIHNob3VsZG4ndCBjbGFpbSB0
aGF0IHRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgZG9lc24ndCByZXR1cm4uCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcxNzIKICAgICAgICAgcmV0
dXJuIHRoaXMucmV0dXJuU3R5bGUuRGVmaW5pdGVseURvZXNudFJldHVybjsKICAgICB9CiB9Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNpb24g
MjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTM5NCw2ICszOTQsMjAgQEAgY2xhc3MgUmV3cml0ZXIgewogICAgICAg
ICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCisgICAgdmlzaXRTd2l0
Y2hTdGF0ZW1lbnQobm9kZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3dpdGNo
U3RhdGVtZW50KG5vZGUub3JpZ2luLCBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpKTsKKyAg
ICAgICAgZm9yIChsZXQgc3dpdGNoQ2FzZSBvZiBub2RlLnN3aXRjaENhc2VzKQorICAgICAgICAg
ICAgcmVzdWx0LmFkZChzd2l0Y2hDYXNlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAgcmVzdWx0LnR5
cGUgPSBOb2RlLnZpc2l0KG5vZGUudHlwZSwgdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHZpc2l0U3dpdGNoQ2FzZShub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBTd2l0Y2hDYXNlKG5vZGUub3JpZ2luLCBOb2RlLnZpc2l0KG5vZGUudmFsdWUs
IHRoaXMpLCBub2RlLmJvZHkudmlzaXQodGhpcykpOworICAgIH0KKyAgICAKICAgICB2aXNpdEFu
b255bW91c1ZhcmlhYmxlKG5vZGUpCiAgICAgewogICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFu
b255bW91c1ZhcmlhYmxlKG5vZGUub3JpZ2luLCBub2RlLnR5cGUudmlzaXQodGhpcykpOwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5q
cwkocmV2aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Rh
bmRhcmRMaWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00MCwzNiArNDAsOCBAQCBmdW5jdGlv
biBpbnRUb1N0cmluZyh4KQogICAgIH0KIH0KIAotLy8gVGhlcmUgYXJlIDQ4MSBzd2l6emxlIG9w
ZXJhdG9ycy4gTGV0J3Mgbm90IGxpc3QgdGhlbSBleHBsaWNpdGx5LgotZnVuY3Rpb24gX2dlbmVy
YXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMsIGFycmF5KQotewotICAgIGlmICghYXJyYXkp
Ci0gICAgICAgIGFycmF5ID0gW107Ci0gICAgaWYgKGFycmF5Lmxlbmd0aCA9PSBtYXhEZXB0aCkg
ewotICAgICAgICBsZXQgcmVzdWx0ID0gYHZlYyR7YXJyYXkubGVuZ3RofTxUPiBvcGVyYXRvci4k
e2FycmF5LmpvaW4oIiIpfTxUPih2ZWMke21heEl0ZW1zfTxUPiB2KQotewotICAgIHZlYyR7YXJy
YXkubGVuZ3RofTxUPiByZXN1bHQ7Ci1gOwotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gYCAgICByZXN1bHQuJHtp
bnRUb1N0cmluZyhpKX0gPSB2LiR7YXJyYXlbaV19OwotYDsKLSAgICAgICAgfQotICAgICAgICBy
ZXN1bHQgKz0gYCAgICByZXR1cm4gcmVzdWx0OwotfQotYDsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgbGV0IHJlc3VsdCA9ICIiOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
bWF4SXRlbXM7ICsraSkgewotICAgICAgICBhcnJheS5wdXNoKGludFRvU3RyaW5nKGkpKTsKLSAg
ICAgICAgcmVzdWx0ICs9IF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1heEl0ZW1zLCBhcnJh
eSk7Ci0gICAgICAgIGFycmF5LnBvcCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
CiAvLyBOT1RFOiBUaGUgbmV4dCBsaW5lIGlzIGxpbmUgNzIsIGFuZCB3ZSByZWx5IG9uIHRoaXMg
aW4gUHJlcGFyZS5qcy4KLWNvbnN0IHN0YW5kYXJkTGlicmFyeSA9IGAKK2xldCBzdGFuZGFyZExp
YnJhcnkgPSBgCiAvLyBUaGlzIGlzIHRoZSBXU0wgc3RhbmRhcmQgbGlicmFyeS4gSW1wbGVtZW50
YXRpb25zIG9mIGFsbCBvZiB0aGVzZSB0aGluZ3MgYXJlIGluCiAvLyBJbnRyaW5zaWNzLmpzLiBU
aGUgb25seSB0aGluZyB0aGF0IGdldHMgZGVmaW5lZCBiZWZvcmUgd2UgZ2V0IGhlcmUgaXMgdGhl
IFByaW1pdGl2ZQogLy8gcHJvdG9jb2wuCkBAIC03Nyw2ICs0OSw3IEBAIGNvbnN0IHN0YW5kYXJk
TGlicmFyeSA9IGAKIC8vIE5lZWQgdG8gYm9vdHN0cmFwIHZvaWQgZmlyc3QuCiBuYXRpdmUgUHJp
bWl0aXZlIHR5cGVkZWYgdm9pZDsKIAorbmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVmIHVpbnQ4Owog
bmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVmIGludDMyOwogbmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVm
IHVpbnQzMjsKIG5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBib29sOwpAQCAtODcsMjggKzYwLDM4
IEBAIG5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBmbG9hdDsKIG5hdGl2ZSBQcmltaXRpdmUgdHlw
ZWRlZiBkb3VibGU7CiAKIG5hdGl2ZSBvcGVyYXRvciBpbnQzMih1aW50MzIpOworbmF0aXZlIG9w
ZXJhdG9yIGludDMyKHVpbnQ4KTsKIG5hdGl2ZSBvcGVyYXRvciB1aW50MzIoaW50MzIpOworbmF0
aXZlIG9wZXJhdG9yIHVpbnQzMih1aW50OCk7CituYXRpdmUgb3BlcmF0b3IgdWludDgoaW50MzIp
OworbmF0aXZlIG9wZXJhdG9yIHVpbnQ4KHVpbnQzMik7CiBuYXRpdmUgb3BlcmF0b3IgZmxvYXQo
ZG91YmxlKTsKIG5hdGl2ZSBvcGVyYXRvciBkb3VibGUoZmxvYXQpOwogCiBuYXRpdmUgaW50IG9w
ZXJhdG9yKyhpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7Cit1
aW50OCBvcGVyYXRvcisodWludDggYSwgdWludDggYikgeyByZXR1cm4gdWludDgodWludChhKSAr
IHVpbnQoYikpOyB9CiBuYXRpdmUgZmxvYXQgb3BlcmF0b3IrKGZsb2F0LCBmbG9hdCk7CiBuYXRp
dmUgZG91YmxlIG9wZXJhdG9yKyhkb3VibGUsIGRvdWJsZSk7CiBpbnQgb3BlcmF0b3IrKyhpbnQg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlICsgMTsgfQogdWludCBvcGVyYXRvcisrKHVpbnQgdmFsdWUp
IHsgcmV0dXJuIHZhbHVlICsgMTsgfQordWludDggb3BlcmF0b3IrKyh1aW50OCB2YWx1ZSkgeyBy
ZXR1cm4gdmFsdWUgKyAxOyB9CiBuYXRpdmUgaW50IG9wZXJhdG9yLShpbnQsIGludCk7CiBuYXRp
dmUgdWludCBvcGVyYXRvci0odWludCwgdWludCk7Cit1aW50OCBvcGVyYXRvci0odWludDggYSwg
dWludDggYikgeyByZXR1cm4gdWludDgodWludChhKSAtIHVpbnQoYikpOyB9CiBuYXRpdmUgZmxv
YXQgb3BlcmF0b3ItKGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgZG91YmxlIG9wZXJhdG9yLShkb3Vi
bGUsIGRvdWJsZSk7CiBpbnQgb3BlcmF0b3ItLShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIC0g
MTsgfQogdWludCBvcGVyYXRvci0tKHVpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlIC0gMTsgfQor
dWludDggb3BlcmF0b3ItLSh1aW50OCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgLSAxOyB9CiBuYXRp
dmUgaW50IG9wZXJhdG9yKihpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvcioodWludCwg
dWludCk7Cit1aW50OCBvcGVyYXRvcioodWludDggYSwgdWludDggYikgeyByZXR1cm4gdWludDgo
dWludChhKSAqIHVpbnQoYikpOyB9CiBuYXRpdmUgZmxvYXQgb3BlcmF0b3IqKGZsb2F0LCBmbG9h
dCk7CiBuYXRpdmUgZG91YmxlIG9wZXJhdG9yKihkb3VibGUsIGRvdWJsZSk7CiBuYXRpdmUgaW50
IG9wZXJhdG9yLyhpbnQsIGludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvci8odWludCwgdWludCk7
Cit1aW50OCBvcGVyYXRvci8odWludDggYSwgdWludDggYikgeyByZXR1cm4gdWludDgodWludChh
KSAvIHVpbnQoYikpOyB9CiBuYXRpdmUgaW50IG9wZXJhdG9yJihpbnQsIGludCk7CiBuYXRpdmUg
aW50IG9wZXJhdG9yfChpbnQsIGludCk7CiBuYXRpdmUgaW50IG9wZXJhdG9yXihpbnQsIGludCk7
CkBAIC0xMjEsMjcgKzEwNCwzOCBAQCBuYXRpdmUgdWludCBvcGVyYXRvcl4odWludCwgdWludCk7
CiBuYXRpdmUgdWludCBvcGVyYXRvcn4odWludCk7CiBuYXRpdmUgdWludCBvcGVyYXRvcjw8KHVp
bnQsIHVpbnQpOwogbmF0aXZlIHVpbnQgb3BlcmF0b3I+Pih1aW50LCB1aW50KTsKK3VpbnQ4IG9w
ZXJhdG9yJih1aW50OCBhLCB1aW50OCBiKSB7IHJldHVybiB1aW50OCh1aW50KGEpICYgdWludChi
KSk7IH0KK3VpbnQ4IG9wZXJhdG9yfCh1aW50OCBhLCB1aW50OCBiKSB7IHJldHVybiB1aW50OCh1
aW50KGEpIHwgdWludChiKSk7IH0KK3VpbnQ4IG9wZXJhdG9yXih1aW50OCBhLCB1aW50OCBiKSB7
IHJldHVybiB1aW50OCh1aW50KGEpIF4gdWludChiKSk7IH0KK3VpbnQ4IG9wZXJhdG9yfih1aW50
OCB2YWx1ZSkgeyByZXR1cm4gdWludDgofnVpbnQodmFsdWUpKTsgfQordWludDggb3BlcmF0b3I8
PCh1aW50OCBhLCB1aW50IGIpIHsgcmV0dXJuIHVpbnQ4KHVpbnQoYSkgPDwgKGIgJiA3KSk7IH0K
K3VpbnQ4IG9wZXJhdG9yPj4odWludDggYSwgdWludCBiKSB7IHJldHVybiB1aW50OCh1aW50KGEp
ID4+IChiICYgNykpOyB9CiBuYXRpdmUgZmxvYXQgb3BlcmF0b3IvKGZsb2F0LCBmbG9hdCk7CiBu
YXRpdmUgZG91YmxlIG9wZXJhdG9yLyhkb3VibGUsIGRvdWJsZSk7CiBuYXRpdmUgYm9vbCBvcGVy
YXRvcj09KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPT0odWludCwgdWludCk7Citi
b29sIG9wZXJhdG9yPT0odWludDggYSwgdWludDggYikgeyByZXR1cm4gdWludChhKSA9PSB1aW50
KGIpOyB9CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj09KGJvb2wsIGJvb2wpOwogbmF0aXZlIGJvb2wg
b3BlcmF0b3I9PShmbG9hdCwgZmxvYXQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShkb3VibGUs
IGRvdWJsZSk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcjwoaW50LCBpbnQpOwogbmF0aXZlIGJvb2wg
b3BlcmF0b3I8KHVpbnQsIHVpbnQpOworYm9vbCBvcGVyYXRvcjwodWludDggYSwgdWludDggYikg
eyByZXR1cm4gdWludChhKSA8IHVpbnQoYik7IH0KIG5hdGl2ZSBib29sIG9wZXJhdG9yPChmbG9h
dCwgZmxvYXQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8KGRvdWJsZSwgZG91YmxlKTsKIG5hdGl2
ZSBib29sIG9wZXJhdG9yPD0oaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8PSh1aW50
LCB1aW50KTsKK2Jvb2wgb3BlcmF0b3I8PSh1aW50OCBhLCB1aW50OCBiKSB7IHJldHVybiB1aW50
KGEpIDw9IHVpbnQoYik7IH0KIG5hdGl2ZSBib29sIG9wZXJhdG9yPD0oZmxvYXQsIGZsb2F0KTsK
IG5hdGl2ZSBib29sIG9wZXJhdG9yPD0oZG91YmxlLCBkb3VibGUpOwogbmF0aXZlIGJvb2wgb3Bl
cmF0b3I+KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPih1aW50LCB1aW50KTsKK2Jv
b2wgb3BlcmF0b3I+KHVpbnQ4IGEsIHVpbnQ4IGIpIHsgcmV0dXJuIHVpbnQoYSkgPiB1aW50KGIp
OyB9CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj4oZmxvYXQsIGZsb2F0KTsKIG5hdGl2ZSBib29sIG9w
ZXJhdG9yPihkb3VibGUsIGRvdWJsZSk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj49KGludCwgaW50
KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPj0odWludCwgdWludCk7Citib29sIG9wZXJhdG9yPj0o
dWludDggYSwgdWludDggYikgeyByZXR1cm4gdWludChhKSA+PSB1aW50KGIpOyB9CiBuYXRpdmUg
Ym9vbCBvcGVyYXRvcj49KGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcj49KGRv
dWJsZSwgZG91YmxlKTsKIApAQCAtMzk3LDE0ICszOTEsMzcgQEAgdWludCBvcGVyYXRvci5sZW5n
dGg8VCwgdWludCBsZW5ndGg+KFRbbAogewogICAgIHJldHVybiBsZW5ndGg7CiB9CitgOwogCi0k
e19nZW5lcmF0ZVN3aXp6bGUoMiwgMil9Ci0ke19nZW5lcmF0ZVN3aXp6bGUoMywgMil9Ci0ke19n
ZW5lcmF0ZVN3aXp6bGUoNCwgMil9Ci0ke19nZW5lcmF0ZVN3aXp6bGUoMiwgMyl9Ci0ke19nZW5l
cmF0ZVN3aXp6bGUoMywgMyl9Ci0ke19nZW5lcmF0ZVN3aXp6bGUoNCwgMyl9Ci0ke19nZW5lcmF0
ZVN3aXp6bGUoMiwgNCl9Ci0ke19nZW5lcmF0ZVN3aXp6bGUoMywgNCl9Ci0ke19nZW5lcmF0ZVN3
aXp6bGUoNCwgNCl9CisvLyBUaGVyZSBhcmUgNDgxIHN3aXp6bGUgb3BlcmF0b3JzLiBMZXQncyBu
b3QgbGlzdCB0aGVtIGV4cGxpY2l0bHkuCitmdW5jdGlvbiBfZ2VuZXJhdGVTd2l6emxlKG1heERl
cHRoLCBtYXhJdGVtcywgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgYXJyYXkg
PSBbXTsKKyAgICBpZiAoYXJyYXkubGVuZ3RoID09IG1heERlcHRoKSB7CisgICAgICAgIGxldCBy
ZXN1bHQgPSBgdmVjJHthcnJheS5sZW5ndGh9PFQ+IG9wZXJhdG9yLiR7YXJyYXkuam9pbigiIil9
PFQ+KHZlYyR7bWF4SXRlbXN9PFQ+IHYpCit7CisgICAgdmVjJHthcnJheS5sZW5ndGh9PFQ+IHJl
c3VsdDsKK2A7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBgICAgIHJlc3VsdC4ke2ludFRvU3RyaW5nKGkpfSA9
IHYuJHthcnJheVtpXX07CitgOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBgICAgIHJl
dHVybiByZXN1bHQ7Cit9CiBgOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBs
ZXQgcmVzdWx0ID0gIiI7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhJdGVtczsgKytpKSB7
CisgICAgICAgIGFycmF5LnB1c2goaW50VG9TdHJpbmcoaSkpOworICAgICAgICByZXN1bHQgKz0g
X2dlbmVyYXRlU3dpenpsZShtYXhEZXB0aCwgbWF4SXRlbXMsIGFycmF5KTsKKyAgICAgICAgYXJy
YXkucG9wKCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZvciAobGV0IG1heERl
cHRoID0gMjsgbWF4RGVwdGggPD0gNDsgbWF4RGVwdGgrKykgeworICAgIGZvciAobGV0IG1heEl0
ZW1zID0gMjsgbWF4SXRlbXMgPD0gNDsgbWF4SXRlbXMrKykKKyAgICAgICAgc3RhbmRhcmRMaWJy
YXJ5ICs9IF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1heEl0ZW1zKTsKK30KSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N3aXRjaENhc2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoQ2FzZS5qcwkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hDYXNlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3dpdGNoQ2FzZSBleHRlbmRzIE5v
ZGUgeworICAgIC8vIE51bGwgdmFsdWUgbWVhbnMgZGVmYXVsdC4KKyAgICBjb25zdHJ1Y3Rvcihv
cmlnaW4sIHZhbHVlLCBib2R5KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhp
cy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOworICAgICAg
ICB0aGlzLl9ib2R5ID0gYm9keTsKKyAgICB9CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0
dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBpc0RlZmF1bHQoKSB7IHJldHVybiAhdGhpcy5f
dmFsdWU7IH0KKyAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1ZTsgfQorICAgIGdl
dCBib2R5KCkgeyByZXR1cm4gdGhpcy5fYm9keTsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAg
ICB7CisgICAgICAgIGxldCByZXN1bHQgPSAiIjsKKyAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0
KQorICAgICAgICAgICAgcmVzdWx0ICs9ICJkZWZhdWx0IjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVzdWx0ICs9ICJjYXN0ICIgKyB0aGlzLnZhbHVlOworICAgICAgICByZXR1cm4gcmVz
dWx0ICsgIjogIiArIHRoaXMuYm9keTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1N3aXRjaFN0YXRlbWVudC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Td2l0Y2hTdGF0ZW1lbnQuanMJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3dpdGNoU3RhdGVtZW50LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgU3dpdGNoU3RhdGVtZW50IGV4
dGVuZHMgTm9kZSB7CisgICAgY29uc3RydWN0b3Iob3JpZ2luLCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKKyAgICAgICAgdGhp
cy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fc3dpdGNoQ2FzZXMgPSBbXTsKKyAgICB9
CisgICAgCisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdl
dCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9CisgICAgCisgICAgYWRkKHN3aXRjaENh
c2UpCisgICAgeworICAgICAgICB0aGlzLl9zd2l0Y2hDYXNlcy5wdXNoKHN3aXRjaENhc2UpOwor
ICAgIH0KKyAgICAKKyAgICBnZXQgc3dpdGNoQ2FzZXMoKSB7IHJldHVybiB0aGlzLl9zd2l0Y2hD
YXNlczsgfQorICAgIAorICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQg
PSAic3dpdGNoICgiICsgdGhpcy52YWx1ZSArICIpIHsgIjsKKyAgICAgICAgaWYgKHRoaXMuc3dp
dGNoQ2FzZXMubGVuZ3RoKQorICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuc3dpdGNoQ2FzZXMu
am9pbigiOyAiKTsgKyAiOyAiOworICAgICAgICByZXR1cm4gcmVzdWx0ICsgIn0iOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkocmV2aXNp
b24gMjIyMzA3KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAKIDxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlv
dXRCdWlsZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJTdWJzdGl0dXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IlN3aXRjaENhc2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IlN3aXRjaFN0YXRlbWVu
dC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3ludGhlc2l6ZUVudW1GdW5jdGlvbnMuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlRyYXBTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjIzMDcpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw2ICs3MSwxMSBAQCBmdW5jdGlvbiBtYWtlVWludChwcm9ncmFtLCB2YWx1ZSkKICAgICByZXR1
cm4gVHlwZWRWYWx1ZS5ib3gocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMiwgdmFsdWUpOwogfQog
CitmdW5jdGlvbiBtYWtlVWludDgocHJvZ3JhbSwgdmFsdWUpCit7CisgICAgcmV0dXJuIFR5cGVk
VmFsdWUuYm94KHByb2dyYW0uaW50cmluc2ljcy51aW50OCwgdmFsdWUpOworfQorCiBmdW5jdGlv
biBtYWtlQm9vbChwcm9ncmFtLCB2YWx1ZSkKIHsKICAgICByZXR1cm4gVHlwZWRWYWx1ZS5ib3go
cHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wsIHZhbHVlKTsKQEAgLTg2LDYgKzkxLDE3IEBAIGZ1bmN0
aW9uIG1ha2VEb3VibGUocHJvZ3JhbSwgdmFsdWUpCiAgICAgcmV0dXJuIFR5cGVkVmFsdWUuYm94
KHByb2dyYW0uaW50cmluc2ljcy5kb3VibGUsIHZhbHVlKTsKIH0KIAorZnVuY3Rpb24gbWFrZUVu
dW0ocHJvZ3JhbSwgZW51bU5hbWUsIHZhbHVlKQoreworICAgIGxldCBlbnVtVHlwZSA9IHByb2dy
YW0udHlwZXMuZ2V0KGVudW1OYW1lKTsKKyAgICBpZiAoIWVudW1UeXBlKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIk5vIHR5cGUgbmFtZWQgIiArIGVudW1OYW1lKTsKKyAgICBsZXQgZW51bU1l
bWJlciA9IGVudW1UeXBlLm1lbWJlckJ5TmFtZSh2YWx1ZSk7CisgICAgaWYgKCFlbnVtTWVtYmVy
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIG1lbWJlciBuYW1lZCAiICsgZW51bU1lbWJl
ciArICIgaW4gIiArIGVudW1UeXBlKTsKKyAgICByZXR1cm4gVHlwZWRWYWx1ZS5ib3goZW51bVR5
cGUsIGVudW1NZW1iZXIudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKTsKK30K
KwogZnVuY3Rpb24gY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKIHsKICAg
ICBpZiAoIXJlc3VsdC50eXBlLnVuaWZ5Tm9kZS5pc051bWJlcikKQEAgLTExNyw2ICsxMzMsMTQg
QEAgZnVuY3Rpb24gY2hlY2tVaW50KHByb2dyYW0sIHJlc3VsdCwgZXhwZQogICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiArIHJlc3VsdC52YWx1ZSArICIgKGV4cGVjdGVk
ICIgKyBleHBlY3RlZCArICIpIik7CiB9CiAKK2Z1bmN0aW9uIGNoZWNrVWludDgocHJvZ3JhbSwg
cmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoIXJlc3VsdC50eXBlLmVxdWFscyhwcm9ncmFt
LmludHJpbnNpY3MudWludDgpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3Vs
dCB0eXBlOiAiICsgcmVzdWx0LnR5cGUpOworICAgIGlmIChyZXN1bHQudmFsdWUgIT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0LnZh
bHVlICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKK30KKwogZnVuY3Rpb24gY2hl
Y2tCb29sKHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpCiB7CiAgICAgaWYgKCFyZXN1bHQudHlw
ZS5lcXVhbHMocHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wpKQpAQCAtMjAyLDEwICsyMjYsMjUgQEAg
ZnVuY3Rpb24gVEVTVF91aW50U2ltcGxlTWF0aCgpIHsKICAgICBjaGVja1VpbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDcpLCBt
YWtlVWludChwcm9ncmFtLCAyKV0pLCAzKTsKIH0KIAorZnVuY3Rpb24gVEVTVF91aW50OFNpbXBs
ZU1hdGgoKSB7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoInVpbnQ4IGZvbyh1aW50OCB4LCB1
aW50OCB5KSB7IHJldHVybiB4ICsgeTsgfSIpOworICAgIGNoZWNrVWludDgocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCA3KSwgbWFr
ZVVpbnQ4KHByb2dyYW0sIDUpXSksIDEyKTsKKyAgICBwcm9ncmFtID0gZG9QcmVwKCJ1aW50OCBm
b28odWludDggeCwgdWludDggeSkgeyByZXR1cm4geCAtIHk7IH0iKTsKKyAgICBjaGVja1VpbnQ4
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgocHJv
Z3JhbSwgNyksIG1ha2VVaW50OChwcm9ncmFtLCA1KV0pLCAyKTsKKyAgICBjaGVja1VpbnQ4KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgocHJvZ3Jh
bSwgNSksIG1ha2VVaW50OChwcm9ncmFtLCA3KV0pLCAyNTQpOworICAgIHByb2dyYW0gPSBkb1By
ZXAoInVpbnQ4IGZvbyh1aW50OCB4LCB1aW50OCB5KSB7IHJldHVybiB4ICogeTsgfSIpOworICAg
IGNoZWNrVWludDgocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VVaW50OChwcm9ncmFtLCA3KSwgbWFrZVVpbnQ4KHByb2dyYW0sIDUpXSksIDM1KTsKKyAgICBw
cm9ncmFtID0gZG9QcmVwKCJ1aW50OCBmb28odWludDggeCwgdWludDggeSkgeyByZXR1cm4geCAv
IHk7IH0iKTsKKyAgICBjaGVja1VpbnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
Zm9vIiwgW10sIFttYWtlVWludDgocHJvZ3JhbSwgNyksIG1ha2VVaW50OChwcm9ncmFtLCAyKV0p
LCAzKTsKK30KKwogZnVuY3Rpb24gVEVTVF9lcXVhbGl0eSgpIHsKICAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcCgiYm9vbCBmb28odWludCB4LCB1aW50IHkpIHsgcmV0dXJuIHggPT0geTsgfSIpOwog
ICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHByb2dyYW0sIDUpXSksIGZhbHNlKTsKICAg
ICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VVaW50KHByb2dyYW0sIDcpLCBtYWtlVWludChwcm9ncmFtLCA3KV0pLCB0cnVlKTsKKyAgICBw
cm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyh1aW50OCB4LCB1aW50OCB5KSB7IHJldHVybiB4ID09
IHk7IH0iKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCA3KSwgbWFrZVVpbnQ4KHByb2dyYW0sIDUpXSks
IGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCA3KSwgbWFrZVVpbnQ4KHByb2dyYW0sIDcpXSks
IHRydWUpOwogICAgIHByb2dyYW0gPSBkb1ByZXAoImJvb2wgZm9vKGludCB4LCBpbnQgeSkgeyBy
ZXR1cm4geCA9PSB5OyB9Iik7CiAgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDcpLCBtYWtlSW50KHByb2dyYW0s
IDUpXSksIGZhbHNlKTsKICAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNyksIG1ha2VJbnQocHJvZ3JhbSwgNyld
KSwgdHJ1ZSk7CkBAIC0yMjcsNiArMjY2LDkgQEAgZnVuY3Rpb24gVEVTVF9ub3RFcXVhbGl0eSgp
IHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcCgiYm9vbCBmb28odWludCB4LCB1aW50IHkpIHsg
cmV0dXJuIHggIT0geTsgfSIpOwogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHByb2dy
YW0sIDUpXSksIHRydWUpOwogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQocHJvZ3JhbSwgNyksIG1ha2VVaW50KHByb2dyYW0s
IDcpXSksIGZhbHNlKTsKKyAgICBwcm9ncmFtID0gZG9QcmVwKCJib29sIGZvbyh1aW50OCB4LCB1
aW50OCB5KSB7IHJldHVybiB4ICE9IHk7IH0iKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCA3KSwgbWFr
ZVVpbnQ4KHByb2dyYW0sIDUpXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDcpLCBtYWtl
VWludDgocHJvZ3JhbSwgNyldKSwgZmFsc2UpOwogICAgIHByb2dyYW0gPSBkb1ByZXAoImJvb2wg
Zm9vKGludCB4LCBpbnQgeSkgeyByZXR1cm4geCAhPSB5OyB9Iik7CiAgICAgY2hlY2tCb29sKHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0s
IDcpLCBtYWtlSW50KHByb2dyYW0sIDUpXSksIHRydWUpOwogICAgIGNoZWNrQm9vbChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA3KSwg
bWFrZUludChwcm9ncmFtLCA3KV0pLCBmYWxzZSk7CkBAIC0zNDM1LDYgKzM0NzcsOTAgQEAgZnVu
Y3Rpb24gVEVTVF91aW50UlNoaWZ0KCkKICAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50KHByb2dyYW0sIDApLCBtYWtlVWludChw
cm9ncmFtLCAzKV0pLCAwKTsKIH0KIAorZnVuY3Rpb24gVEVTVF91aW50OEJpdEFuZCgpCit7Cisg
ICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICB1aW50OCBmb28odWludDggYSwgdWlu
dDggYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgJiBiOworICAgICAgICB9Cisg
ICAgYCk7CisgICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDEpLCBtYWtlVWludDgocHJvZ3JhbSwgNyldKSwg
MSk7CisgICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQ4KHByb2dyYW0sIDQyKV0p
LCA0Mik7CisgICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZv
byIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQ4KHByb2dyYW0sIC03KV0p
LCAyNDkpOworICAgIGNoZWNrVWludDgocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJm
b28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCAwKSwgbWFrZVVpbnQ4KHByb2dyYW0sIDg1NzMy
KV0pLCAwKTsKK30KKworZnVuY3Rpb24gVEVTVF91aW50OEJpdE9yKCkKK3sKKyAgICBsZXQgcHJv
Z3JhbSA9IGRvUHJlcChgCisgICAgICAgIHVpbnQ4IGZvbyh1aW50OCBhLCB1aW50OCBiKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSB8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBjaGVja1VpbnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtt
YWtlVWludDgocHJvZ3JhbSwgMSksIG1ha2VVaW50OChwcm9ncmFtLCA3KV0pLCA3KTsKKyAgICBj
aGVja1VpbnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
VWludDgocHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludDgocHJvZ3JhbSwgNDIpXSksIDI1NSk7Cisg
ICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBb
bWFrZVVpbnQ4KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQ4KHByb2dyYW0sIC03KV0pLCAyNTUpOwor
ICAgIGNoZWNrVWludDgocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W21ha2VVaW50OChwcm9ncmFtLCAwKSwgbWFrZVVpbnQ4KHByb2dyYW0sIDg1NzMyKV0pLCAyMjgp
OworfQorCitmdW5jdGlvbiBURVNUX3VpbnQ4Qml0WG9yKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9
IGRvUHJlcChgCisgICAgICAgIHVpbnQ4IGZvbyh1aW50OCBhLCB1aW50OCBiKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYSBeIGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVj
a1VpbnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWlu
dDgocHJvZ3JhbSwgMSksIG1ha2VVaW50OChwcm9ncmFtLCA3KV0pLCA2KTsKKyAgICBjaGVja1Vp
bnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgo
cHJvZ3JhbSwgNjU1MzUpLCBtYWtlVWludDgocHJvZ3JhbSwgNDIpXSksIDIxMyk7CisgICAgY2hl
Y2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVp
bnQ4KHByb2dyYW0sIC0xKSwgbWFrZVVpbnQ4KHByb2dyYW0sIC03KV0pLCA2KTsKKyAgICBjaGVj
a1VpbnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWlu
dDgocHJvZ3JhbSwgMCksIG1ha2VVaW50OChwcm9ncmFtLCA4NTczMildKSwgMjI4KTsKK30KKwor
ZnVuY3Rpb24gVEVTVF91aW50OEJpdE5vdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICB1aW50OCBmb28odWludDggYSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIH5hOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDEpXSksIDI1
NCk7CisgICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDY1NTM1KV0pLCAwKTsKKyAgICBjaGVja1VpbnQ4KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgocHJvZ3Jh
bSwgLTEpXSksIDApOworICAgIGNoZWNrVWludDgocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCAwKV0pLCAyNTUpOworfQorCitmdW5j
dGlvbiBURVNUX3VpbnQ4TFNoaWZ0KCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisg
ICAgICAgIHVpbnQ4IGZvbyh1aW50OCBhLCB1aW50IGIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhIDw8IGI7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja1VpbnQ4KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgocHJvZ3JhbSwg
MSksIG1ha2VVaW50KHByb2dyYW0sIDcpXSksIDEyOCk7CisgICAgY2hlY2tVaW50OChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDY1
NTM1KSwgbWFrZVVpbnQocHJvZ3JhbSwgMildKSwgMjUyKTsKKyAgICBjaGVja1VpbnQ4KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgocHJvZ3JhbSwg
LTEpLCBtYWtlVWludChwcm9ncmFtLCA1KV0pLCAyMjQpOworICAgIGNoZWNrVWludDgocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCAw
KSwgbWFrZVVpbnQocHJvZ3JhbSwgMyldKSwgMCk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfdWludDhS
U2hpZnQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgdWludDggZm9v
KHVpbnQ4IGEsIHVpbnQgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPj4gYjsK
KyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrVWludDgocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCAxKSwgbWFrZVVpbnQocHJv
Z3JhbSwgNyldKSwgMCk7CisgICAgY2hlY2tVaW50OChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIDY1NTM1KSwgbWFrZVVpbnQocHJv
Z3JhbSwgMildKSwgMjU1KTsKKyAgICBjaGVja1VpbnQ4KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZm9vIiwgW10sIFttYWtlVWludDgocHJvZ3JhbSwgLTEpLCBtYWtlVWludChwcm9n
cmFtLCA1KV0pLCAyNTUpOworICAgIGNoZWNrVWludDgocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCAwKSwgbWFrZVVpbnQocHJvZ3Jh
bSwgMyldKSwgMCk7Cit9CisKIGZ1bmN0aW9uIFRFU1RfZmxvYXRNYXRoKCkKIHsKICAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCkBAIC00Mzg3LDYgKzQ1MTMsNTc3IEBAIGZ1bmN0aW9uIFRFU1Rf
c3dpenpsZSgpCiAgICAgY2hlY2tGbG9hdChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImZvbzMiLCBbXSwgW10pLCA0KTsKIH0KIAorZnVuY3Rpb24gVEVTVF9lbnVtV2l0aEV4cGxpY2l0
SW50QmFzZSgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBlbnVtIEZv
byA6IGludCB7CisgICAgICAgICAgICBXYXIsCisgICAgICAgICAgICBGYW1pbmUsCisgICAgICAg
ICAgICBQZXN0aWxlbmNlLAorICAgICAgICAgICAgRGVhdGgKKyAgICAgICAgfQorICAgICAgICBG
b28gd2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5XYXI7CisgICAgICAg
IH0KKyAgICAgICAgRm9vIGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBG
b28uRmFtaW5lOworICAgICAgICB9CisgICAgICAgIEZvbyBwZXN0aWxlbmNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEZvby5QZXN0aWxlbmNlOworICAgICAgICB9CisgICAgICAg
IEZvbyBkZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRGVhdGg7Cisg
ICAgICAgIH0KKyAgICAgICAgYm9vbCBlcXVhbHMoRm9vIGEsIEZvbyBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9CisgICAgICAgIGJvb2wgbm90RXF1
YWxzKEZvbyBhLCBGb28gYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgIT0gYjsK
KyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RTaW1wbGVFcXVhbCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcXVhbHMoRm9vLldhciwgRm9vLldhcik7CisgICAgICAgIH0KKyAg
ICAgICAgYm9vbCB0ZXN0QW5vdGhlckVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGVxdWFscyhGb28uUGVzdGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOworICAgICAgICB9Cisg
ICAgICAgIGJvb2wgdGVzdE5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGVxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOworICAgICAgICB9CisgICAgICAgIGJvb2wg
dGVzdFNpbXBsZU5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5vdEVx
dWFscyhGb28uV2FyLCBGb28uV2FyKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RBbm90
aGVyTm90RXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm90RXF1YWxzKEZv
by5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB0
ZXN0Tm90Tm90RXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm90RXF1YWxz
KEZvby5GYW1pbmUsIEZvby5EZWF0aCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGludFdhcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQod2FyKCkpOworICAgICAgICB9Cisg
ICAgICAgIGludCBpbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50
KGZhbWluZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaW50UGVzdGlsZW5jZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQocGVzdGlsZW5jZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgaW50RGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50
KGRlYXRoKCkpOworICAgICAgICB9CisgICAgICAgIGludCB3YXJWYWx1ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB3YXIoKS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
ZmFtaW5lVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFtaW5lKCkudmFs
dWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHBlc3RpbGVuY2VWYWx1ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwZXN0aWxlbmNlKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgaW50IGRlYXRoVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZGVhdGgo
KS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgd2FyVmFsdWVMaXRlcmFsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5XYXIudmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgaW50IGZhbWluZVZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBGb28uRmFtaW5lLnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBwZXN0aWxlbmNlVmFs
dWVMaXRlcmFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5QZXN0aWxlbmNl
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBkZWF0aFZhbHVlTGl0ZXJhbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRGVhdGgudmFsdWU7CisgICAgICAgIH0KKyAg
ICAgICAgRm9vIGludFdhckJhY2t3YXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBGb28oaW50V2FyKCkpOworICAgICAgICB9CisgICAgICAgIEZvbyBpbnRGYW1pbmVCYWNrd2Fy
ZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKGludEZhbWluZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBGb28gaW50UGVzdGlsZW5jZUJhY2t3YXJkcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBGb28oaW50UGVzdGlsZW5jZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICBGb28gaW50RGVhdGhCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRm9vKGludERlYXRoKCkpOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tFbnVtKHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAid2FyIiwgW10sIFtdKSwgMCk7CisgICAgY2hl
Y2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10sIFtdKSwg
MSk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAicGVzdGls
ZW5jZSIsIFtdLCBbXSksIDIpOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgImRlYXRoIiwgW10sIFtdKSwgMyk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNh
bGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNpbXBsZUVxdWFsIiwgW10sIFtdKSwgdHJ1ZSk7Cisg
ICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEFub3RoZXJF
cXVhbCIsIFtdLCBbXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgInRlc3ROb3RFcXVhbCIsIFtdLCBbXSksIGZhbHNlKTsKKyAgICBjaGVja0Jv
b2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0U2ltcGxlTm90RXF1YWwiLCBb
XSwgW10pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAidGVzdEFub3RoZXJOb3RFcXVhbCIsIFtdLCBbXSksIGZhbHNlKTsKKyAgICBjaGVja0Jv
b2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0Tm90Tm90RXF1YWwiLCBbXSwg
W10pLCB0cnVlKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImludFdhciIsIFtdLCBbXSksIDApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiaW50RmFtaW5lIiwgW10sIFtdKSwgMSk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRQZXN0aWxlbmNlIiwgW10sIFtdKSwgMik7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnREZWF0aCIsIFtd
LCBbXSksIDMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
d2FyVmFsdWUiLCBbXSwgW10pLCAwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgImZhbWluZVZhbHVlIiwgW10sIFtdKSwgMSk7CisgICAgY2hlY2tJbnQocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlVmFsdWUiLCBbXSwgW10pLCAy
KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImRlYXRoVmFs
dWUiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgIndhclZhbHVlTGl0ZXJhbCIsIFtdLCBbXSksIDApOworICAgIGNoZWNrSW50KHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lVmFsdWVMaXRlcmFsIiwgW10sIFtdKSwg
MSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxl
bmNlVmFsdWVMaXRlcmFsIiwgW10sIFtdKSwgMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aFZhbHVlTGl0ZXJhbCIsIFtdLCBbXSksIDMpOworICAg
IGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImludFdhckJhY2t3YXJk
cyIsIFtdLCBbXSksIDApOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImludEZhbWluZUJhY2t3YXJkcyIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrRW51bShw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImludFBlc3RpbGVuY2VCYWNrd2FyZHMiLCBb
XSwgW10pLCAyKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJpbnREZWF0aEJhY2t3YXJkcyIsIFtdLCBbXSksIDMpOworfQorCitmdW5jdGlvbiBURVNUX2Vu
dW1XaXRoVWludEJhc2UoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAg
ZW51bSBGb28gOiB1aW50IHsKKyAgICAgICAgICAgIFdhciwKKyAgICAgICAgICAgIEZhbWluZSwK
KyAgICAgICAgICAgIFBlc3RpbGVuY2UsCisgICAgICAgICAgICBEZWF0aAorICAgICAgICB9Cisg
ICAgICAgIEZvbyB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLldhcjsK
KyAgICAgICAgfQorICAgICAgICBGb28gZmFtaW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEZvby5GYW1pbmU7CisgICAgICAgIH0KKyAgICAgICAgRm9vIHBlc3RpbGVuY2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2U7CisgICAgICAgIH0K
KyAgICAgICAgRm9vIGRlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5E
ZWF0aDsKKyAgICAgICAgfQorICAgICAgICBib29sIGVxdWFscyhGb28gYSwgRm9vIGIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCBub3RFcXVhbHMoRm9vIGEsIEZvbyBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YSAhPSBiOworICAgICAgICB9CisgICAgICAgIGJvb2wgdGVzdFNpbXBsZUVxdWFsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGVxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKKyAgICAg
ICAgfQorICAgICAgICBib29sIHRlc3RBbm90aGVyRXF1YWwoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAg
ICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0Tm90RXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXF1YWxzKEZvby5GYW1pbmUsIEZvby5EZWF0aCk7CisgICAgICAgIH0KKyAgICAg
ICAgYm9vbCB0ZXN0U2ltcGxlTm90RXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbm90RXF1YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICB9CisgICAgICAgIGJvb2wg
dGVzdEFub3RoZXJOb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub3RF
cXVhbHMoRm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgfQorICAgICAg
ICBib29sIHRlc3ROb3ROb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
b3RFcXVhbHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsKKyAgICAgICAgfQorICAgICAgICB1aW50
IHVpbnRXYXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdWludCh3YXIoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgdWludCB1aW50RmFtaW5lKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHVpbnQoZmFtaW5lKCkpOworICAgICAgICB9CisgICAgICAgIHVpbnQgdWludFBl
c3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdWludChwZXN0aWxlbmNl
KCkpOworICAgICAgICB9CisgICAgICAgIHVpbnQgdWludERlYXRoKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHVpbnQoZGVhdGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgdWludCB3
YXJWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB3YXIoKS52YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICB1aW50IGZhbWluZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGZhbWluZSgpLnZhbHVlOworICAgICAgICB9CisgICAgICAgIHVpbnQgcGVzdGls
ZW5jZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBlc3RpbGVuY2UoKS52
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB1aW50IGRlYXRoVmFsdWUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZGVhdGgoKS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB1aW50
IHdhclZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2Fy
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIHVpbnQgZmFtaW5lVmFsdWVMaXRlcmFsKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1pbmUudmFsdWU7CisgICAgICAgIH0K
KyAgICAgICAgdWludCBwZXN0aWxlbmNlVmFsdWVMaXRlcmFsKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEZvby5QZXN0aWxlbmNlLnZhbHVlOworICAgICAgICB9CisgICAgICAgIHVp
bnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9v
LkRlYXRoLnZhbHVlOworICAgICAgICB9CisgICAgICAgIEZvbyB1aW50V2FyQmFja3dhcmRzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyh1aW50V2FyKCkpOworICAgICAgICB9
CisgICAgICAgIEZvbyB1aW50RmFtaW5lQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEZvbyh1aW50RmFtaW5lKCkpOworICAgICAgICB9CisgICAgICAgIEZvbyB1aW50
UGVzdGlsZW5jZUJhY2t3YXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28o
dWludFBlc3RpbGVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgRm9vIHVpbnREZWF0aEJhY2t3
YXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28odWludERlYXRoKCkpOwor
ICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAid2FyIiwgW10sIFtdKSwgMCk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10sIFtdKSwgMSk7CisgICAgY2hlY2tFbnVtKHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAicGVzdGlsZW5jZSIsIFtdLCBbXSksIDIpOwor
ICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImRlYXRoIiwgW10s
IFtdKSwgMyk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
dGVzdFNpbXBsZUVxdWFsIiwgW10sIFtdKSwgdHJ1ZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEFub3RoZXJFcXVhbCIsIFtdLCBbXSksIHRydWUp
OworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3ROb3RF
cXVhbCIsIFtdLCBbXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJ0ZXN0U2ltcGxlTm90RXF1YWwiLCBbXSwgW10pLCBmYWxzZSk7CisgICAg
Y2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdEFub3RoZXJOb3RF
cXVhbCIsIFtdLCBbXSksIGZhbHNlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0
aW9uKHByb2dyYW0sICJ0ZXN0Tm90Tm90RXF1YWwiLCBbXSwgW10pLCB0cnVlKTsKKyAgICBjaGVj
a1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50V2FyIiwgW10sIFtdKSwg
MCk7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidWludEZh
bWluZSIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgInVpbnRQZXN0aWxlbmNlIiwgW10sIFtdKSwgMik7CisgICAgY2hlY2tVaW50KHBy
b2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidWludERlYXRoIiwgW10sIFtdKSwgMyk7Cisg
ICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAid2FyVmFsdWUiLCBb
XSwgW10pLCAwKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmYW1pbmVWYWx1ZSIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrVWludChwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZSIsIFtdLCBbXSksIDIpOworICAgIGNo
ZWNrVWludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImRlYXRoVmFsdWUiLCBbXSwg
W10pLCAzKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ3
YXJWYWx1ZUxpdGVyYWwiLCBbXSwgW10pLCAwKTsKKyAgICBjaGVja1VpbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZUxpdGVyYWwiLCBbXSwgW10pLCAxKTsKKyAg
ICBjaGVja1VpbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlVmFs
dWVMaXRlcmFsIiwgW10sIFtdKSwgMik7CisgICAgY2hlY2tVaW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZUxpdGVyYWwiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVj
a0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50V2FyQmFja3dhcmRzIiwg
W10sIFtdKSwgMCk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAidWludEZhbWluZUJhY2t3YXJkcyIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrRW51bShwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInVpbnRQZXN0aWxlbmNlQmFja3dhcmRzIiwgW10s
IFtdKSwgMik7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAi
dWludERlYXRoQmFja3dhcmRzIiwgW10sIFtdKSwgMyk7Cit9CisKK2Z1bmN0aW9uIFRFU1RfZW51
bUZsb2F0QmFzZSgpCit7CisgICAgY2hlY2tGYWlsKAorICAgICAgICAoKSA9PiBkb1ByZXAoYAor
ICAgICAgICAgICAgZW51bSBGb28gOiBmbG9hdCB7CisgICAgICAgICAgICAgICAgQmFyCisgICAg
ICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICBlID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVy
cm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtUHRyQmFzZSgpCit7CisgICAgY2hlY2tGYWls
KAorICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgZW51bSBGb28gOiB0aHJlYWQg
aW50XiB7CisgICAgICAgICAgICAgICAgQmFyCisgICAgICAgICAgICB9CisgICAgICAgIGApLAor
ICAgICAgICBlID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVT
VF9lbnVtQXJyYXlSZWZCYXNlKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRv
UHJlcChgCisgICAgICAgICAgICBlbnVtIEZvbyA6IHRocmVhZCBpbnRbXSB7CisgICAgICAgICAg
ICAgICAgQmFyCisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICBlID0+IGUgaW5z
dGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbXB0eVN0cnVjdCgpCit7
CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBzdHJ1Y3QgVGhpbmd5IHsgfQor
ICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgVGhpbmd5IHRoaW5neTsK
KyAgICAgICAgICAgIHJldHVybiA0NjsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFtdKSwgNDYpOworfQor
CitmdW5jdGlvbiBURVNUX2VudW1TdHJ1Y3RCYXNlKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAg
ICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBzdHJ1Y3QgVGhpbmd5IHsgfQorICAgICAg
ICAgICAgZW51bSBGb28gOiBUaGluZ3kgeworICAgICAgICAgICAgICAgIEJhcgorICAgICAgICAg
ICAgfQorICAgICAgICBgKSwKKyAgICAgICAgZSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7
Cit9CisKK2Z1bmN0aW9uIFRFU1RfZW51bU5vTWVtYmVycygpCit7CisgICAgY2hlY2tGYWlsKAor
ICAgICAgICAoKSA9PiBkb1ByZXAoYAorICAgICAgICAgICAgZW51bSBGb28geyB9CisgICAgICAg
IGApLAorICAgICAgICBlID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rp
b24gVEVTVF9zaW1wbGVTd2l0Y2goKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAg
ICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh4KSB7
CisgICAgICAgICAgICBjYXNlIDc2NzoKKyAgICAgICAgICAgICAgICByZXR1cm4gMjc7CisgICAg
ICAgICAgICBjYXNlIDY5OgorICAgICAgICAgICAgICAgIHJldHVybiA3NjI0OworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCA3NjcpXSksIDI3KTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChw
cm9ncmFtLCA2OSldKSwgNzYyNCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCldKSwgNDkpOworfQorCitm
dW5jdGlvbiBURVNUX3NpbXBsZVN3aXRjaCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHgpIHsKKyAgICAgICAgICAgIGNhc2UgNzY3OgorICAgICAgICAgICAgICAgIHJldHVybiAyNzsK
KyAgICAgICAgICAgIGNhc2UgNjk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDc2MjQ7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiA0OTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDc2NyldKSwgMjcpOworICAg
IGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtl
SW50KHByb2dyYW0sIDY5KV0pLCA3NjI0KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZUludChwcm9ncmFtLCAwKV0pLCA0OSk7Cit9
CisKK2Z1bmN0aW9uIFRFU1RfZXhoYXVzdGl2ZVVpbnQ4U3dpdGNoKCkKK3sKKyAgICBsZXQgdGV4
dCA9ICJkb3VibGUgZm9vKHVpbnQ4IHgpIHsgc3dpdGNoICh1aW50OCh4KSkgeyIKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8PSAweGZmOyArK2kpCisgICAgICAgIHRleHQgKz0gImNhc2UgIiArIGkg
KyAiOiByZXR1cm4gIiArIGkgKiAxLjUgKyAiOyI7CisgICAgdGV4dCArPSAifSB9IjsKKyAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcCh0ZXh0KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDB4ZmY7
ICsraSkKKyAgICAgICAgY2hlY2tEb3VibGUocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW21ha2VVaW50OChwcm9ncmFtLCBpKV0pLCBpICogMS41KTsKK30KKworZnVu
Y3Rpb24gVEVTVF9ub3RRdWl0ZUV4aGF1c3RpdmVVaW50OFN3aXRjaCgpCit7CisgICAgbGV0IHRl
eHQgPSAiZG91YmxlIGZvbyh1aW50OCB4KSB7IHN3aXRjaCAodWludDgoeCkpIHsiCisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPD0gMHhmZTsgKytpKQorICAgICAgICB0ZXh0ICs9ICJjYXNlICIgKyBp
ICsgIjogcmV0dXJuICIgKyBpICogMS41ICsgIjsiOworICAgIHRleHQgKz0gIn0gfSI7CisgICAg
Y2hlY2tGYWlsKCgpID0+IGRvUHJlcCh0ZXh0KSwgZSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJv
cik7Cit9CisKK2Z1bmN0aW9uIFRFU1Rfbm90UXVpdGVFeGhhdXN0aXZlVWludDhTd2l0Y2hXaXRo
RGVmYXVsdCgpCit7CisgICAgbGV0IHRleHQgPSAiZG91YmxlIGZvbyh1aW50OCB4KSB7IHN3aXRj
aCAodWludDgoeCkpIHsiCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZTsgKytpKQorICAg
ICAgICB0ZXh0ICs9ICJjYXNlICIgKyBpICsgIjogcmV0dXJuICIgKyBpICogMS41ICsgIjsiOwor
ICAgIHRleHQgKz0gImRlZmF1bHQ6IHJldHVybiAiICsgMHhmZiAqIDEuNSArICI7IjsKKyAgICB0
ZXh0ICs9ICJ9IH0iOworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKHRleHQpOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMHhmZjsgKytpKQorICAgICAgICBjaGVja0RvdWJsZShwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbbWFrZVVpbnQ4KHByb2dyYW0sIGkpXSks
IGkgKiAxLjUpOworfQorCitmdW5jdGlvbiBURVNUX3N3aXRjaEZhbGxUaHJvdWdoKCkKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBtaWdodCBiZWNvbWUgYW4gZXJyb3IgaW4gZnV0dXJlIHZlcnNpb25z
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcxNzIK
KyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oaW50IHgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAgICAgc3dpdGNoICh4
KSB7CisgICAgICAgICAgICBjYXNlIDc2NzoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gMjc7
CisgICAgICAgICAgICBjYXNlIDY5OgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSA3NjI0Owor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gNDk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYCk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwg
W21ha2VJbnQocHJvZ3JhbSwgNzY3KV0pLCAyNyArIDc2MjQgKyA0OSk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3Jh
bSwgNjkpXSksIDc2MjQgKyA0OSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgMCldKSwgNDkpOworfQorCitm
dW5jdGlvbiBURVNUX3N3aXRjaEJyZWFrKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChg
CisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXN1
bHQgPSAwOworICAgICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICBjYXNlIDc2NzoK
KyAgICAgICAgICAgICAgICByZXN1bHQgKz0gMjc7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIDY5OgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSA3NjI0OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gNDk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJv
Z3JhbSwgNzY3KV0pLCAyNyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHBy
b2dyYW0sICJmb28iLCBbXSwgW21ha2VJbnQocHJvZ3JhbSwgNjkpXSksIDc2MjQpOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlSW50
KHByb2dyYW0sIDApXSksIDQ5KTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtU3dpdGNoQnJlYWtF
eGhhdXN0aXZlKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGVudW0g
Rm9vIHsKKyAgICAgICAgICAgIEEsIEIsIEMKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKEZv
byB4KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAg
IHN3aXRjaCAoeCkgeworICAgICAgICAgICAgY2FzZSBGb28uQToKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gMjc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZv
by5COgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSA3NjI0OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBGb28uQzoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0g
NDk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VFbnVtKHByb2dyYW0sICJGb28i
LCAiQSIpXSksIDI3KTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvbyIsIFtdLCBbbWFrZUVudW0ocHJvZ3JhbSwgIkZvbyIsICJCIildKSwgNzYyNCk7Cisg
ICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21h
a2VFbnVtKHByb2dyYW0sICJGb28iLCAiQyIpXSksIDQ5KTsKK30KKworZnVuY3Rpb24gVEVTVF9l
bnVtU3dpdGNoQnJlYWtOb3RRdWl0ZUV4aGF1c3RpdmUoKQoreworICAgIGNoZWNrRmFpbCgKKyAg
ICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIGVudW0gRm9vIHsKKyAgICAgICAgICAg
ICAgICBBLCBCLCBDLCBECisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZm9vKEZvbyB4
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICAgIGNhc2UgRm9vLkE6CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSAyNzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBGb28uQjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IDc2MjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgRm9vLkM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSA0OTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICBlID0+IGUgaW5z
dGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtU3dpdGNoQnJlYWtO
b3RRdWl0ZUV4aGF1c3RpdmVXaXRoRGVmYXVsdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoYAorICAgICAgICBlbnVtIEZvbyB7CisgICAgICAgICAgICBBLCBCLCBDCisgICAgICAgIH0K
KyAgICAgICAgaW50IGZvbyhGb28geCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJlc3Vs
dCA9IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNhc2UgRm9vLkE6
CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDI3OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGb28uQjoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gNzYyNDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IDQ5OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFttYWtlRW51
bShwcm9ncmFtLCAiRm9vIiwgIkEiKV0pLCAyNyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW21ha2VFbnVtKHByb2dyYW0sICJGb28iLCAi
QiIpXSksIDc2MjQpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFttYWtlRW51bShwcm9ncmFtLCAiRm9vIiwgIkMiKV0pLCA0OSk7Cit9CisK
IGxldCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CiBpZiAodGhp
c1siYXJndW1lbnRzIl0pIHsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5n
dGg7IGkrKykgewpAQCAtNDQwOSw3ICs1MTA2LDExIEBAIGZ1bmN0aW9uKiBkb1Rlc3Qob2JqZWN0
KQogICAgIHByZXBhcmUoKTsKICAgICBwcmludCgiICAgIE9LISIpOwogCi0gICAgZm9yIChsZXQg
cyBpbiBvYmplY3QpIHsKKyAgICBsZXQgbmFtZXMgPSBbXTsKKyAgICBmb3IgKGxldCBzIGluIG9i
amVjdCkKKyAgICAgICAgbmFtZXMucHVzaChzKTsKKyAgICBuYW1lcy5zb3J0KCk7CisgICAgZm9y
IChsZXQgcyBvZiBuYW1lcykgewogICAgICAgICBpZiAocy5zdGFydHNXaXRoKCJURVNUXyIpICYm
IHMubWF0Y2goZmlsdGVyKSkgewogICAgICAgICAgICAgcHJpbnQocyArICIuLi4iKTsKICAgICAg
ICAgICAgIHlpZWxkOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmlj
YXRpb25Db250ZXh0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwkocmV2aXNpb24gMjIyMzA3KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVW5pZmljYXRpb25Db250ZXh0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBAIGNsYXNzIFVuaWZpY2F0aW9uQ29udGV4dCB7CiAgICAgewogICAg
ICAgICB0aGlzLl90eXBlUGFyYW1ldGVycyA9IG5ldyBTZXQodHlwZVBhcmFtZXRlcnMpOwogICAg
ICAgICB0aGlzLl9uZXh0TWFwID0gbmV3IE1hcCgpOworICAgICAgICB0aGlzLl9leHRyYU5vZGVz
ID0gbmV3IFNldCgpOwogICAgIH0KICAgICAKICAgICB1bmlvbihhLCBiKQpAQCAtNjcsNiArNjgs
MTEgQEAgY2xhc3MgVW5pZmljYXRpb25Db250ZXh0IHsKICAgICAgICAgcmV0dXJuIGN1cnJlbnRO
b2RlOwogICAgIH0KICAgICAKKyAgICBhZGRFeHRyYU5vZGUobm9kZSkKKyAgICB7CisgICAgICAg
IHRoaXMuX2V4dHJhTm9kZXMuYWRkKG5vZGUpOworICAgIH0KKyAgICAKICAgICBnZXQgbm9kZXMo
KQogICAgIHsKICAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXQoKTsKQEAgLTc0LDYgKzgwLDgg
QEAgY2xhc3MgVW5pZmljYXRpb25Db250ZXh0IHsKICAgICAgICAgICAgIHJlc3VsdC5hZGQoa2V5
KTsKICAgICAgICAgICAgIHJlc3VsdC5hZGQodmFsdWUpOwogICAgICAgICB9CisgICAgICAgIGZv
ciAobGV0IG5vZGUgb2YgdGhpcy5fZXh0cmFOb2RlcykKKyAgICAgICAgICAgIHJlc3VsdC5hZGQo
bm9kZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCShyZXZpc2lvbiAyMjIzMDcpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzksNiArMjc5LDE5IEBAIGNsYXNzIFZpc2l0b3IgewogICAgICAgICBOb2RlLnZpc2l0KG5v
ZGUuaW5jcmVtZW50LCB0aGlzKTsKICAgICAgICAgbm9kZS5ib2R5LnZpc2l0KHRoaXMpOwogICAg
IH0KKyAgICAKKyAgICB2aXNpdFN3aXRjaFN0YXRlbWVudChub2RlKQorICAgIHsKKyAgICAgICAg
bm9kZS52YWx1ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgZm9yIChsZXQgc3dpdGNoQ2FzZSBvZiBu
b2RlLnN3aXRjaENhc2VzKQorICAgICAgICAgICAgc3dpdGNoQ2FzZS52aXNpdCh0aGlzKTsKKyAg
ICB9CisgICAgCisgICAgdmlzaXRTd2l0Y2hDYXNlKG5vZGUpCisgICAgeworICAgICAgICBOb2Rl
LnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpOworICAgICAgICBub2RlLmJvZHkudmlzaXQodGhpcyk7
CisgICAgfQogCiAgICAgdmlzaXRSZXR1cm4obm9kZSkKICAgICB7CkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwJKHJldmlzaW9uIDIyMjMwNykKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEy
MCw2ICsxMjAsOCBAQAogPHNjcmlwdCBzcmM9IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9IlN0cnVjdFR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3dpdGNoQ2FzZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3dpdGNoU3RhdGVtZW50LmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJTeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iVHJhcFN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="341400"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>